क्या बाहरी निगरानी से जुड़े होने पर आपकी खिड़कियों को हिलने से रोकने का कोई तरीका है?


9

इसलिए, मैं अपने लैपटॉप पर Ubuntu 14.10 का उपयोग कर रहा हूं और कभी-कभी इसे दूसरी स्क्रीन के लिए अपने टीवी में प्लग करता हूं। मेरा टीवी मेरे डेस्क के बाईं ओर है। जब मैं इसे अपने लैपटॉप स्क्रीन के बाईं ओर बाहरी मॉनिटर के रूप में सक्षम करता हूं, तो मेरे लैपटॉप स्क्रीन के सभी विंडो टीवी स्क्रीन पर चले जाते हैं। मैं उन्हें वापस ले जा सकता हूं, लेकिन हर बार ऐसा करना वास्तव में कष्टप्रद है, खासकर जब कई खिड़कियां खुली हों।

लेफ्ट पर टी.वी.

हालांकि, खिड़कियां नहीं चलती हैं, अगर मैं अपनी टीवी स्क्रीन को अपने लैपटॉप स्क्रीन (वस्तुतः) के दाईं ओर स्थापित करता हूं। लेकिन यह समझदारी से उपयोग करने के लिए भ्रमित है क्योंकि यह भौतिक सेटअप के विपरीत है। इसके अलावा, मैं अपनी डेस्क को स्थानांतरित नहीं करना चाहता।

टीवी राइट पर

ऐसा लगता है कि उबंटू या डिस्प्ले सर्वर बस मान लेता है कि सबसे बाईं ओर का मॉनिटर मुख्य है और जहां सभी विंडो होनी चाहिए। क्या इस व्यवहार को अक्षम करने का कोई तरीका है?

मैं इन मंचों की जाँच कर रहा हूँ, लेकिन वास्तव में इस बारे में किसी को भी पोस्ट नहीं देखा है। निकटतम धागा जो मुझे मिला, वह यह था, हालांकि यह एक ही मुद्दा नहीं है।

कई मॉनिटरों में से किसी एक को बंद करने पर उबंटू को खिसकाएं नहीं

क्या किसी के भी पास कोई सुझाव है? कृपया मुझे बताएं अगर आप करते हैं। धन्यवाद!

जवाबों:


2

मुझे व्यवहार को बदलने के लिए एक "गुप्त" सेटिंग नहीं मिली, जैसा कि लगता है, डिज़ाइन किया गया व्यवहार। यह वास्तव में ऐसा लगता है जैसे कि बाईं स्क्रीन को "आधार" स्क्रीन माना जाता है।

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

दो संस्करण

आप अपनी व्यवस्थित विंडो को दो तरीकों से पुनर्स्थापित कर सकते हैं:

  • कभी-कभी, दूसरी स्क्रीन कनेक्ट होने के बाद चलने के लिए एक शॉर्टकट कुंजी के साथ।
  • स्वचालित रूप से, स्क्रिप्ट को पृष्ठभूमि में चलाना, आपकी स्क्रीन के कनेक्ट होने की प्रतीक्षा करना।

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

तैयारी

  • इंस्टॉल wmctrl

    sudo apt-get install wmctrl

  • अपने दो स्क्रीन के नामों को देखें जिनकी मदद से स्क्रीन के नाम xrandr"कनेक्टेड" शब्द से ठीक पहले होंगे।

  • नीचे दी गई किसी भी स्क्रिप्ट को हेड सेक्शन में कॉपी करें, इन दो लाइनों को स्क्रीन नामों को सही लोगों द्वारा बदलें:

    screen_1 = "LVDS1"     # your main screen (laptop)
    screen_2 = "VGA1"      # secundary screen (on the left)
    

    स्क्रिप्ट को इस रूप में सहेजें move_windows.py

  • सुनिश्चित करें कि प्रदर्शन सेटिंग आपकी द्वितीयक स्क्रीन बाईं ओर है। दो स्क्रीनों की शीर्ष पंक्तियों को लाइन में होना चाहिए (जैसे आपके प्रश्न की पहली छवि में)।

स्क्रिप्ट को चलाएं
- यदि आप कभी-कभार चलने के लिए उपयोग करते हैं, तो अपनी दूसरी स्क्रीन कनेक्ट होने के बाद इसे चलाएं।

    python3 /path/to/move_windows.py

आप इसे कीबोर्ड शॉर्टकट में जोड़ना चाहते हैं यदि आपको लगता है कि यह वही करता है जो इसे करना चाहिए, तो चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:

  • यदि आप पृष्ठभूमि में चलाने के लिए एक का उपयोग करते हैं, तो इसे कमांड द्वारा भी चलाएं:

    python3 /path/to/move_windows.py
    

    यदि यह आपके इच्छानुसार कार्य करता है, तो इसे अपने स्टार्ट-अप एप्लिकेशन में जोड़ें: डैश> स्टार्टअप एप्लीकेशन> ऐड

मैंने अपने लैपटॉप (दाईं ओर) और दो अलग-अलग स्क्रीन (बाईं ओर) के साथ स्क्रिप्ट का परीक्षण किया। नतीजा वही हुआ।

लैपटॉप स्क्रीन

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

बिना स्क्रिप्ट के जुड़ना

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

स्क्रिप्ट के साथ चल रहा है

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

स्क्रिप्ट ने अपना काम करने के बाद, विंडोज़ को "अकेला छोड़ दिया" होगा (बेशक), और आप अपनी खिड़कियों को अपने तरीके से व्यवस्थित कर सकते हैं।

स्क्रिप्ट (s)

1. "मैनुअल" संस्करण, स्क्रीन कनेक्ट होने के बाद चलाने के लिए

#!/usr/bin/env python3
import subprocess
import time

#--
screen_2 = "LVDS1"       # replace with your internal screen (right)
screen_2 = "VGA1"        # replace with your external screen (left)
#--

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shift(xr_output):
    lines = [l for l in xr_output.splitlines() if " connected" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows(shift):
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    relevant = []
    for w in w_data:
        props = get("xprop -id "+w[0])
        if (int(w[2]) < shift, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), w[3], w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])

shift_windows(get_shift(get("xrandr")))

2. स्वचालित संस्करण, पृष्ठभूमि में चलाने के लिए

#!/usr/bin/env python3
import subprocess
import time

#--
screen_2 = "LVDS1"       # replace with your internal screen (right)
screen_2 = "VGA1"        # replace with your external screen (left)
#--

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shift(xr_output):
    lines = [l for l in xr_output.splitlines() if " connected" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows(shift):
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    relevant = []
    for w in w_data:
        props = get("xprop -id "+w[0])
        if (int(w[2]) < shift, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), w[3], w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])

while True:
    try:
        screen_info1 = get("xrandr")
        time.sleep(5)
        screen_info2 = get("xrandr")
        check = screen_2+" connected"
        if (check in screen_info1, check in screen_info2) == (False, True):
            time.sleep(5)
            shift_windows(get_shift(screen_info2))
    except:
        pass

गंभीर रूप से बीमार कौशल, जैकब!
don.joey

@ K0j0 क्या आपने प्रबंधित किया?
जैकब व्लिजम

@JacobVlijm सुनिश्चित नहीं है कि हर 5 सेकंड में मतदान सबसे अच्छा समाधान है (क्या कोई घटना-संचालित संभावना नहीं है?)। वैसे भी, यदि आप इस स्क्रिप्ट को एकता सूचक ( जैसे यहाँ ) में बदलने में रुचि रखते हैं, तो कृपया संपर्क करें।
पीटरिनो

@Peterino यदि कोई इवेंट-संचालित सिग्नल मौजूद है, तो यह मेरी पहली पसंद होगी। एक ही समय में: यदि एक पृष्ठभूमि स्क्रिप्ट अच्छी तरह से लिखी गई है, तो इसका अतिरिक्त बोझ (और) व्यावहारिक रूप से कोई भी नहीं होना चाहिए, और मैं हमेशा अपनी स्क्रिप्ट का विशेष रूप से परीक्षण करता हूं। मैं स्वयं पृष्ठभूमि स्क्रिप्ट की एक बदलती संख्या चलाता हूं। यहां तक ​​कि सभी को एक साथ कोई ध्यान देने योग्य प्रभाव नहीं है। याद रखें कि आपके सिस्टम पर कई लूप परिभाषा के आधार पर चल रहे हैं। एकता सूचक सुझाव के बारे में: मैं निश्चित रूप से यह जानने के लिए इच्छुक हूं कि एक संकेतक कैसे बनाया जाए, या तो इस या किसी अन्य स्थिति के लिए :)।
जैकब व्लिजम

खिड़कियों की स्वचालित प्लेसमेंट की तरह लग रहा है @JacobVlijm स्वचालित रूप से Ubuntu के अगले विज्ञप्ति में से एक ( "प्रगति में काम") के साथ शुरू होता है, के अनुसार विहित में एक स्रोत । वर्तमान में शेष बचे कुछ महीनों में निवेश करना संभव नहीं है। मैं हालांकि IRC # ubuntu-mir @ freenode पर मीर डेवलपर्स के साथ दोबारा जांच करूंगा।
पीटरिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.