संपादित करें
(नया जवाब)
किया हुआ।
नीचे दिए गए जवाब अब एक पॉलिश के रूप में उपलब्ध है, एक संकेतक के रूप में, ट्रस्टी, ज़ेनियल, यकक्ती और ज़ेस्ट के लिए एक ppa के रूप में:
sudo apt-add-repository ppa:vlijm/windowspy
sudo apt-get update
sudo apt-get install windowspy
थ इंडिकेटर (पूर्वावलोकन विंडो सहित) अब रस पर अच्छी तरह से कम है। विकल्पों में एक सेटिंग विंडो, विंडो बॉर्डर आकार / रंग, विंडो आकार सेट करना शामिल है।
इस बीच, मुझे एयू खिड़की पर नज़र रखना उपयोगी लगा; देखें कि क्या कोई संदेश हैं :)
पुराने ANSWER
( पहली दूसरी कठिन अवधारणा)
किसी अन्य कार्यक्षेत्र पर एक विंडो का न्यूनतम प्रतिनिधित्व करें
मेरे अपने (बड़े) आश्चर्य के लिए, इसे प्रभावी ढंग से किया जा सकता है, यह छल और कपट के साथ हो; किसी अन्य कार्यक्षेत्र पर एक विंडो का अद्यतन प्रतिनिधित्व है। एक फिल्म देखने के लिए फिट नहीं है, निश्चित रूप से एक खिड़की पर नज़र रखने के लिए काफी अच्छा है (उदाहरण: मेरा टीवी-कार्ड विंडो):
यह व्यवहार में कैसे काम करता है
सामने की खिड़की के साथ, एक शॉर्टकट कुंजी दबाएं:
(विंडो कम हो जाएगी)
किसी अन्य कार्यस्थान पर जाएं, शॉर्टकट कुंजी को फिर से दबाएं, विंडो का एक छोटा प्रतिनिधित्व दिखाई देगा, हर 4 सेकंड में अपडेट किया जाएगा:
विंडो हमेशा अन्य विंडो के ऊपर दिखाई देती है। जैसा कि है, खिड़की 300px (चौड़ाई) है, लेकिन इसे किसी भी आकार में सेट किया जा सकता है।
इसे समाप्त करने के लिए, शॉर्टकट कुंजी दबाएं (फिर से)। छोटी खिड़की बंद हो जाएगी, आप मूल विंडो के व्यूपोर्ट में चले जाएंगे, जो फिर से दिखाई देगा, निर्विवाद रूप से।
स्क्रिप्ट
नियंत्रण स्क्रिप्ट
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
# paths
imagepath = os.path.join(os.environ["HOME"], ".showcase")
wfile = os.path.join(imagepath, "currentwindow")
vpfile = os.path.join(imagepath, "last_vp")
# setup path
if not os.path.exists(imagepath):
os.mkdir(imagepath)
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
def get_vp():
open(vpfile, "wt").write(get(["wmctrl", "-d"]).split()[5])
def run(command):
subprocess.Popen(command)
def convert_tohex(widxd):
return widxd[:2]+((10-len(widxd))*"0")+widxd[2:]
def check_windowtype(wid):
check = get(["xprop", "-id", wid])
return not any([s in check for s in [
"_NET_WM_WINDOW_TYPE_DOCK",
"_NET_WM_WINDOW_TYPE_DESKTOP"]])
def edit_winprops(wid, convert=True):
run(["xdotool", "windowminimize", wid])
if convert:
widxd = convert_tohex(hex(int(wid)))
else:
widxd = wid
run(["wmctrl", "-i", "-r", widxd, "-b", "add,sticky"])
get_vp()
open(os.path.join(imagepath, "currentwindow"), "wt").write(widxd)
def initiate_min():
# if not, minmize window, write the file
wid = get(["xdotool", "getactivewindow"])
if check_windowtype(wid):
edit_winprops(wid)
else:
pidinfo = [l.split() for l in wlist.splitlines()]
match = [l for l in pidinfo if all([
get(["ps", "-p", l[2], "-o", "comm="]) == "VirtualBox",
not "Manager" in l])]
if match:
edit_winprops(match[0][0], convert=False)
# windowlist
wlist = get(["wmctrl", "-lp"])
if "Window preview" in wlist:
# kill the miniwindow
pid = get(["pgrep", "-f", "showmin"])
run(["kill", pid])
window = open(wfile).read().strip()
viewport = open(vpfile).read().strip()
run(["wmctrl", "-o", viewport])
time.sleep(0.3)
run(["wmctrl", "-i", "-r", window, "-b", "remove,sticky"])
run(["wmctrl", "-ia", window])
os.remove(wfile)
else:
# check if windowfile exists
wfileexists = os.path.exists(wfile)
if wfileexists:
# if file exists, try to run miniwindow
window = open(wfile).read().strip()
if window in wlist:
# if the window exists, run!
run(["showmin", window])
else:
# if not, minmize window, write the file
initiate_min()
else:
# if not, minmize window, write the file
initiate_min()
खिड़की प्रतिनिधित्व करती है
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
from PIL import Image
import os
import subprocess
import time
from threading import Thread
import sys
wid = sys.argv[1]
xsize = 300
imagepath = os.path.join(os.environ["HOME"], ".showcase")
if not os.path.exists(imagepath):
os.mkdir(imagepath)
img_in = os.path.join(imagepath, "image.png")
resized = os.path.join(imagepath, "resized.png")
def get_img():
subprocess.Popen([
"import", "-window", wid, "-resize", str(xsize), resized
])
get_img()
class Splash(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Window preview")
maingrid = Gtk.Grid()
self.add(maingrid)
self.image = Gtk.Image()
# set the path to the image below
self.resized = resized
self.image.set_from_file(self.resized)
maingrid.attach(self.image, 0, 0, 1, 1)
maingrid.set_border_width(3)
self.update = Thread(target=self.update_preview)
self.update.setDaemon(True)
self.update.start()
def update_preview(self):
while True:
get_img()
time.sleep(3)
GObject.idle_add(
self.image.set_from_file, self.resized,
priority=GObject.PRIORITY_DEFAULT
)
def miniwindow():
window = Splash()
window.set_decorated(False)
window.set_resizable(False)
window.set_keep_above(True)
window.set_wmclass("ShowCase", "showcase")
window.connect("destroy", Gtk.main_quit)
GObject.threads_init()
window.show_all()
window.move(70, 50)
Gtk.main()
miniwindow()
कैसे इस्तेमाल करे
स्थापित करें python3-pil
, xdotool
औरwmctrl
sudo apt-get install xdotool wmctrl python3-pil
बनाएँ, अगर यह अभी तक मौजूद नहीं है, तो निर्देशिका ~/bin
।
- स्क्रिप्ट 1 को कॉपी करें, वह स्क्रिप्ट को, (बिल्कुल)
showcase_control
(कोई विस्तार नहीं ) के रूप में नियंत्रित करता है ~/bin
, और इसे निष्पादन योग्य बनाता है ।
- स्क्रिप्ट 2 कॉपी करें, मिनी-विंडो स्क्रिप्ट, (बिल्कुल)
showmin
(कोई एक्सटेंशन नहीं) ~/bin
, और इसे निष्पादन योग्य बनाएं ।
लॉग आउट करें और वापस अपनी पसंद के शॉर्टकट में निम्न कमांड जोड़ें:
showcase_control
चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:
showcase_control
और यह काम करना चाहिए!
- वर्तमान विंडो को हथियाने के लिए एक बार कुंजी दबाएं
- दूसरे कार्यस्थान पर जाएँ जहाँ आप मिनी-विंडो चाहते हैं
- मिनीविंडो दिखाने के लिए फिर से दबाएं
- मूल कार्यस्थान पर वापस जाने के लिए फिर से दबाएं, (स्वचालित रूप से) मूल विंडो को अन-मिनिमाइज़ करें और मिनी -ऑन को बंद करें।
Downsides?
सेटअप, जैसा कि वर्तमान में है, आपके प्रोसेसर के लिए कुछ काम जोड़ता है। मेरे (बहुत) पुराने सिस्टम पर, यह जोड़ता है (औसतन) एपीआर। 4-5% मुझे लगता है, जिसे मैंने किसी भी तरह से नोटिस नहीं किया ।
अपडेट: यह पता चला है कि विंडो इमेज लाने के import
साथ, एक चरण में छवि को आकार दे सकते हैं। इसका मतलब प्रोसेसर लोड में काफी कमी है। उसी समय ताज़ा समय कम होता है (अभी 3 सेकंड), फिर भी कम "लागत" पर।
व्याख्या
- मेरा शुरुआती बिंदु ओपी का उल्लेख था जिस तरह से वह किसी अन्य कार्यक्षेत्र पर एक खिड़की पर नज़र रखने के विकल्प का उपयोग करना चाहता था, या तो कुछ खत्म होने की प्रतीक्षा कर रहा था।
- जबकि सचमुच होने एक सटीक (मिनी) एक खिड़की का एक और कार्यक्षेत्र पर नकल असंभव लगता है, हम कर सकते हैं के साथ एक मौजूदा विंडो की एक छवि बनाने
import
एक बार हम खिड़की आईडी होना -command,। हालांकि यह दोनों बिना किसी फोकस के कम से कम खिड़कियों या खिड़कियों पर काम करता है, लेकिन फिर भी एक मुद्दा है: खिड़की को वर्तमान कार्यक्षेत्र पर होना चाहिए ।
- चाल तो अस्थायी रूप से है (जबकि मिनी- विंडो का उपयोग किया जाता है) खिड़की को "चिपचिपा" (लगभग सभी कार्यक्षेत्रों पर उपलब्ध हो) बनाएं
wmctrl
, लेकिन एक ही समय में कम से कम।
- चूंकि सभी स्वचालित रूप से किया जाता है, प्रभावी रूप से अंतर कोई भी नहीं है, क्योंकि प्रारंभिक व्यूपोर्ट में भी लौट रहा है, "संयुक्त राष्ट्र" मूल विंडो को चिपचिपा करता है और इसे कम से कम करके स्वचालित रूप से किया जाता है।
संक्षेप में:
- शॉर्टकट को एक बार दबाने पर: लक्षित विंडो को चिपचिपा बना दिया जाता है, लेकिन इसे छोटा कर दिया जाता है
- इसे फिर से दबाकर (संभवतः किसी अन्य कार्यक्षेत्र पर): खिड़की का एक छोटा मिनी संस्करण ऊपरी बाएं कोने में दिखाई देता है, जिसे एक बार प्रति चार सेकंड में अपडेट किया जाता है।
- इसे फिर से दबाकर: मिनी-विंडो बंद है, डेस्कटॉप विंडो के प्रारंभिक कार्यक्षेत्र में जाता है, विंडो को अन-स्टिकी और अन-मिनिमाइज़ किया जाता है।
विशेष रूप से VirtualBox के लिए
जब VBox विंडो सामने होती है, तो यह पता चलता है कि उबंटू शॉर्टकट कुंजियाँ अक्षम हैं (!), इसलिए नियंत्रण स्क्रिप्ट को दूसरे तरीके से लॉन्च करने की आवश्यकता है। कुछ संक्षिप्त के नीचे।
विकल्प 1
मैंने नियंत्रण स्क्रिप्ट संपादित की। अब केवल VirtualBox के मामले में:
डेस्कटॉप पर कहीं भी क्लिक करें , फिर अपनी शॉर्टकट कुंजी दबाएं। उसके बाद, बस खिड़की और बाहर निकलने के लिए शॉर्टकट कुंजी का उपयोग करें।
स्पष्टीकरण: नियंत्रण स्क्रिप्ट बाहर निकलने के लिए बनाई गई थी यदि खिड़की "डेस्कटॉप" प्रकार की थी, क्योंकि आप डेस्कटॉप को कम से कम नहीं करना चाहते थे। यदि वर्तमान में सक्रिय विंडो डेस्कटॉप है, तो लक्ष्य के लिए स्क्रिप्ट पहले मौजूदा वर्चुअलबॉक्स विंडोज़ को खोजती है।
विकल्प 2
नीचे दिए गए आइकन को कॉपी करें (दाएं क्लिक करें -> इस रूप में सहेजें), इसे इस रूप में सहेजें minwinicon.png
एक खाली फ़ाइल में नीचे की पंक्तियों को कॉपी करें, इसे इस रूप minwin.desktop
में सहेजें ~/.local/share/applications
:
[Desktop Entry]
Type=Application
Name=Window Spy
Exec=showcase_control
Icon=/path/to/minwinicon.png
StartupNotify=false
आपको लॉन्चर को स्थानीय ~/bin
पथ "खोज" करने के लिए लॉग आउट और वापस करने की आवश्यकता होगी !
लॉन्चर पर आइकन का उपयोग करने के लिए उसे खींचें।
दूसरे समाधान में एक महत्वपूर्ण नकारात्मक पहलू है: इसे लांचर से उपयोग करने के बाद, यह कुछ सेकंड के लिए पलक झपकते रखेगा, एक खिड़की के प्रकट होने की प्रतीक्षा कर रहा है। उस दौरान, फिर से क्लिक करने से कोई प्रभाव नहीं पड़ेगा। यह हल किया जा सकता है, जैसा कि यहां वर्णित है , लेकिन इस जवाब में यह वास्तव में बहुत लंबा बना देगा। यदि आप विकल्प दो का उपयोग करना चाहते हैं, तो कृपया लिंक देखें।