मुझे व्यवहार को बदलने के लिए एक "गुप्त" सेटिंग नहीं मिली, जैसा कि लगता है, डिज़ाइन किया गया व्यवहार। यह वास्तव में ऐसा लगता है जैसे कि बाईं स्क्रीन को "आधार" स्क्रीन माना जाता है।
हालांकि यह अनिवार्य रूप से समान परिणाम के साथ, वर्कअराउंड बनाना बहुत संभव है। आप एक स्क्रिप्ट बना सकते हैं, जो दूसरी स्क्रीन को जोड़ने के अवसर पर, सभी विंडो को सूचीबद्ध करता है। इसके बाद, सभी विंडो जो शुरू में बाईं स्क्रीन पर स्थानांतरित की जाती हैं, उन्हें एक या दो सेकंड के भीतर वापस दाईं ओर स्क्रीन पर स्थानांतरित कर दिया जाता है। सभी खिड़कियों के आकार को संरक्षित किया जाएगा।
यही स्क्रिप्ट नीचे दी गई है।
दो संस्करण
आप अपनी व्यवस्थित विंडो को दो तरीकों से पुनर्स्थापित कर सकते हैं:
- कभी-कभी, दूसरी स्क्रीन कनेक्ट होने के बाद चलने के लिए एक शॉर्टकट कुंजी के साथ।
- स्वचालित रूप से, स्क्रिप्ट को पृष्ठभूमि में चलाना, आपकी स्क्रीन के कनेक्ट होने की प्रतीक्षा करना।
कैसे इस्तेमाल करे
तैयारी
इंस्टॉल 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