क्या मुझे किसी अन्य कार्यक्षेत्र का छोटा लाइव पूर्वावलोकन दिखाने वाली विंडो मिल सकती है?


29

क्या किसी एक कार्यक्षेत्र के लाइव सेक्शन को मिरर करना संभव है ताकि यह वर्तमान कार्यक्षेत्र में एक खिड़की के रूप में दिखाई दे, जिसे चारों ओर ले जाया जा सके?

दूसरे दिन मेरे पास एक विंडोज़ 10 वीएम था जो मेरे उबंटू 16.04 होस्ट पर चल रहा था जिसे अपडेट करने में वास्तव में लंबा समय लगा। मैं उबंटू पर एक्सपो ( Super+ S) के माध्यम से इसकी प्रगति की जाँच करता रहा । मुझे यह सोचकर मिला कि यह समस्या पहले से ही हल हो गई है क्योंकि स्क्रीन के सिर्फ एक हिस्से को रिकॉर्ड करने के लिए सिमस्क्रीनस्क्रीनकॉर्डर जैसे उपकरण कॉन्फ़िगर किए जा सकते हैं। हालाँकि, मैं अपनी Google खोज के लिए उपयोग करने के लिए उचित शब्दावली नहीं जानता।

मैं 300x150 स्क्रीनशॉट नीचे फ्लोटिंग विंडो (लाइव अपडेट के साथ) के रूप में देखना चाहता हूं जो भी कार्यक्षेत्र के शीर्ष दाएं कोने में होता है।

यहां छवि विवरण दर्ज करें


1
@serg यहाँ आप के लिए एक नई परियोजना
Rinzwind

@Rinzwind आपको सर्ग से घृणा करनी चाहिए ... हम (दोनों) पहले कुछ इस तरह से देख रहे थे, सफल नहीं हुए।
याकूब Vlijm

1
मैंने इस बार भी इस पर एक इनाम रखा: =) इसे @JacobVlijm
Rinzwind

एक अच्छी सुविधा होगी :) यह वीएम मामले में मदद नहीं करेगा, लेकिन टर्मिनल अनुप्रयोगों के लिए एक समाधान है: कॉनसोल का उपयोग करना। इसके दो उपयोगी विकल्प हैं: "गतिविधि पर सूचित करें" और "मौन पर सूचित करें"। पहले एक आपको एक अधिसूचना भेजेगा जब टर्मिनल में एक नई लाइन दिखाई जाएगी ( tail -F file | grep patternकुछ घटनाओं से सावधान रहने के लिए लॉग का उपयोग करते समय उपयोगी ), दूसरा एक आपको अधिसूचना भेजेगा जब अंतिम लिखित लाइन के बाद से कुछ समय हो (उपयोगी के लिए) जानिए कि एक निर्माण कब समाप्त हुआ है)।
किक

@Rinzwind पवित्र बकवास, यह काम करने जा रहा है ...
याकूब Vlijm

जवाबों:


26

संपादित करें

(नया जवाब)

किया हुआ।
नीचे दिए गए जवाब अब एक पॉलिश के रूप में उपलब्ध है, एक संकेतक के रूप में, ट्रस्टी, ज़ेनियल, यकक्ती और ज़ेस्ट के लिए एक ppa के रूप में:

sudo apt-add-repository ppa:vlijm/windowspy
sudo apt-get update
sudo apt-get install windowspy

थ इंडिकेटर (पूर्वावलोकन विंडो सहित) अब रस पर अच्छी तरह से कम है। विकल्पों में एक सेटिंग विंडो, विंडो बॉर्डर आकार / रंग, विंडो आकार सेट करना शामिल है।

यहां छवि विवरण दर्ज करें

इस बीच, मुझे एयू खिड़की पर नज़र रखना उपयोगी लगा; देखें कि क्या कोई संदेश हैं :)


पुराने ANSWER

( पहली दूसरी कठिन अवधारणा)

किसी अन्य कार्यक्षेत्र पर एक विंडो का न्यूनतम प्रतिनिधित्व करें

मेरे अपने (बड़े) आश्चर्य के लिए, इसे प्रभावी ढंग से किया जा सकता है, यह छल और कपट के साथ हो; किसी अन्य कार्यक्षेत्र पर एक विंडो का अद्यतन प्रतिनिधित्व है। एक फिल्म देखने के लिए फिट नहीं है, निश्चित रूप से एक खिड़की पर नज़र रखने के लिए काफी अच्छा है (उदाहरण: मेरा टीवी-कार्ड विंडो):

यह व्यवहार में कैसे काम करता है

  1. सामने की खिड़की के साथ, एक शॉर्टकट कुंजी दबाएं:

    यहां छवि विवरण दर्ज करें

    (विंडो कम हो जाएगी)

  2. किसी अन्य कार्यस्थान पर जाएं, शॉर्टकट कुंजी को फिर से दबाएं, विंडो का एक छोटा प्रतिनिधित्व दिखाई देगा, हर 4 सेकंड में अपडेट किया जाएगा:

    यहां छवि विवरण दर्ज करें

    विंडो हमेशा अन्य विंडो के ऊपर दिखाई देती है। जैसा कि है, खिड़की 300px (चौड़ाई) है, लेकिन इसे किसी भी आकार में सेट किया जा सकता है।

  3. इसे समाप्त करने के लिए, शॉर्टकट कुंजी दबाएं (फिर से)। छोटी खिड़की बंद हो जाएगी, आप मूल विंडो के व्यूपोर्ट में चले जाएंगे, जो फिर से दिखाई देगा, निर्विवाद रूप से।

स्क्रिप्ट

  1. नियंत्रण स्क्रिप्ट

    #!/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()
  2. खिड़की प्रतिनिधित्व करती है

    #!/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()

कैसे इस्तेमाल करे

  1. स्थापित करें python3-pil, xdotoolऔरwmctrl

    sudo apt-get install xdotool wmctrl python3-pil
    
  2. बनाएँ, अगर यह अभी तक मौजूद नहीं है, तो निर्देशिका ~/bin

  3. स्क्रिप्ट 1 को कॉपी करें, वह स्क्रिप्ट को, (बिल्कुल) showcase_control(कोई विस्तार नहीं ) के रूप में नियंत्रित करता है ~/bin, और इसे निष्पादन योग्य बनाता है
  4. स्क्रिप्ट 2 कॉपी करें, मिनी-विंडो स्क्रिप्ट, (बिल्कुल) showmin(कोई एक्सटेंशन नहीं) ~/bin, और इसे निष्पादन योग्य बनाएं
  5. लॉग आउट करें और वापस अपनी पसंद के शॉर्टकट में निम्न कमांड जोड़ें:

    showcase_control
    

    चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:

    showcase_control
    

    और यह काम करना चाहिए!

    • वर्तमान विंडो को हथियाने के लिए एक बार कुंजी दबाएं
    • दूसरे कार्यस्थान पर जाएँ जहाँ आप मिनी-विंडो चाहते हैं
    • मिनीविंडो दिखाने के लिए फिर से दबाएं
    • मूल कार्यस्थान पर वापस जाने के लिए फिर से दबाएं, (स्वचालित रूप से) मूल विंडो को अन-मिनिमाइज़ करें और मिनी -ऑन को बंद करें।

Downsides?

  • सेटअप, जैसा कि वर्तमान में है, आपके प्रोसेसर के लिए कुछ काम जोड़ता है। मेरे (बहुत) पुराने सिस्टम पर, यह जोड़ता है (औसतन) एपीआर। 4-5% मुझे लगता है, जिसे मैंने किसी भी तरह से नोटिस नहीं किया ।

    अपडेट: यह पता चला है कि विंडो इमेज लाने के importसाथ, एक चरण में छवि को आकार दे सकते हैं। इसका मतलब प्रोसेसर लोड में काफी कमी है। उसी समय ताज़ा समय कम होता है (अभी 3 सेकंड), फिर भी कम "लागत" पर।

व्याख्या

  • मेरा शुरुआती बिंदु ओपी का उल्लेख था जिस तरह से वह किसी अन्य कार्यक्षेत्र पर एक खिड़की पर नज़र रखने के विकल्प का उपयोग करना चाहता था, या तो कुछ खत्म होने की प्रतीक्षा कर रहा था।
  • जबकि सचमुच होने एक सटीक (मिनी) एक खिड़की का एक और कार्यक्षेत्र पर नकल असंभव लगता है, हम कर सकते हैं के साथ एक मौजूदा विंडो की एक छवि बनाने importएक बार हम खिड़की आईडी होना -command,। हालांकि यह दोनों बिना किसी फोकस के कम से कम खिड़कियों या खिड़कियों पर काम करता है, लेकिन फिर भी एक मुद्दा है: खिड़की को वर्तमान कार्यक्षेत्र पर होना चाहिए ।
  • चाल तो अस्थायी रूप से है (जबकि मिनी- विंडो का उपयोग किया जाता है) खिड़की को "चिपचिपा" (लगभग सभी कार्यक्षेत्रों पर उपलब्ध हो) बनाएं wmctrl, लेकिन एक ही समय में कम से कम।
  • चूंकि सभी स्वचालित रूप से किया जाता है, प्रभावी रूप से अंतर कोई भी नहीं है, क्योंकि प्रारंभिक व्यूपोर्ट में भी लौट रहा है, "संयुक्त राष्ट्र" मूल विंडो को चिपचिपा करता है और इसे कम से कम करके स्वचालित रूप से किया जाता है।

संक्षेप में:

  1. शॉर्टकट को एक बार दबाने पर: लक्षित विंडो को चिपचिपा बना दिया जाता है, लेकिन इसे छोटा कर दिया जाता है
  2. इसे फिर से दबाकर (संभवतः किसी अन्य कार्यक्षेत्र पर): खिड़की का एक छोटा मिनी संस्करण ऊपरी बाएं कोने में दिखाई देता है, जिसे एक बार प्रति चार सेकंड में अपडेट किया जाता है।
  3. इसे फिर से दबाकर: मिनी-विंडो बंद है, डेस्कटॉप विंडो के प्रारंभिक कार्यक्षेत्र में जाता है, विंडो को अन-स्टिकी और अन-मिनिमाइज़ किया जाता है।

विशेष रूप से 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पथ "खोज" करने के लिए लॉग आउट और वापस करने की आवश्यकता होगी !
    लॉन्चर पर आइकन का उपयोग करने के लिए उसे खींचें।

दूसरे समाधान में एक महत्वपूर्ण नकारात्मक पहलू है: इसे लांचर से उपयोग करने के बाद, यह कुछ सेकंड के लिए पलक झपकते रखेगा, एक खिड़की के प्रकट होने की प्रतीक्षा कर रहा है। उस दौरान, फिर से क्लिक करने से कोई प्रभाव नहीं पड़ेगा। यह हल किया जा सकता है, जैसा कि यहां वर्णित है , लेकिन इस जवाब में यह वास्तव में बहुत लंबा बना देगा। यदि आप विकल्प दो का उपयोग करना चाहते हैं, तो कृपया लिंक देखें।


तो, अच्छा पुराना importयह कर सकता है, जबकि सूक्ति स्क्रीनशॉट नहीं कर सकता। बहुत, बहुत दिलचस्प। मुझे लग रहा है कि वास्तव में उनके काम करने के तरीके में क्या अंतर है
सर्गी कोलोडियाज़नी

@ हाँ, मैं वास्तव में हैरान था, सोचा कि यह सिर्फ रसोई के उपकरण के साथ नहीं किया जा सकता है :)
याकूब Vlijm

1
@ThatGuy उस पर काम कर रहा है :)
याकूब Vlijm

1
@jymbob टिप्पणी के लिए धन्यवाद! उन्हें सिस्टम में कोई संदेह नहीं है, लेकिन सवाल यह है कि क्या वे बाहर से उपलब्ध हैं । यदि डेवलपर्स किसी भी तरह से एक cli विकल्प या API प्रदान नहीं करते हैं, तो कोड को तोड़ना एक पूरी तरह से अलग आदेश का काम होगा। मैं हालांकि विकल्प के लिए प्यार करता हूँ।
याकूब Vlijm

1
@ जेकॉब्लिजम फेयर पॉइंट। संभवतः अधिक जानकारी यहाँ stackoverflow.com/questions/18595951/… लेकिन मेरे काबिलियत स्तर से ऊपर है!
जंबो नोव

1

कुछ ऐसा जो ओवरकिल जैसा लगता है लेकिन इस उद्देश्य के लिए पूरी तरह से काम करता है ओपन ब्रॉडकास्टर । "स्रोत" सूची बॉक्स में, प्लस पर क्लिक करें, "विंडो कैप्चर" का चयन करें, फिर आप जिस विंडो में रुचि रखते हैं उसका चयन करने के लिए संकेतों का पालन करें। रिकॉर्ड से टकराने का कोई मतलब नहीं है; बस पूर्वावलोकन का उपयोग करें। यह उबंटू के निर्देश के साथ बहुत ही किसी भी ओएस के लिए उपलब्ध है , जिसे मैंने नीचे कॉपी किया है।

sudo apt-get install ffmpeg
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update
sudo apt-get install obs-studio

यदि आपको ऐसा लगता है, तो आप "दृश्य" मेनू में जा सकते हैं और सभी UI तत्वों को छिपा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.