এর আচরণের পরিবর্তনের জন্য আমি কোনও "গোপনীয়" সেটিংস পাইনি, যেমন মনে হয়, নকশাকৃত আচরণ। দেখে মনে হচ্ছে বাম স্ক্রিনটিকে "বেস" স্ক্রিন বলে মনে করা হচ্ছে।
মূলত একই ফলাফল সহ একটি কার্যনির্বাহীকরণ তৈরি করা তবে খুব ভাল। আপনি একটি স্ক্রিপ্ট তৈরি করতে পারেন যা দ্বিতীয় স্ক্রিন সংযোগের উপলক্ষে সমস্ত উইন্ডো তালিকাভুক্ত করে। এরপরে, সমস্ত উইন্ডো যা প্রাথমিকভাবে বাম স্ক্রিনে স্থানান্তরিত হয়, একটি বা দ্বিতীয়টির মধ্যে ডানদিকে পর্দায় ফিরে স্থানান্তরিত হয়। সমস্ত উইন্ডোর আকার সংরক্ষণ করা হবে।
এটি নীচের স্ক্রিপ্টটি করে।
দুটি সংস্করণ
আপনি আপনার সাজানো উইন্ডোজ দুটি উপায়ে পুনরুদ্ধার করতে পারেন:
- কখনও কখনও, দ্বিতীয় স্ক্রিন সংযুক্ত হওয়ার পরে চালানোর জন্য একটি শর্টকাট কী দিয়ে।
- স্বয়ংক্রিয়ভাবে, স্ক্রিনটি পটভূমিতে চলছে, আপনার স্ক্রিনটি সংযুক্ত হওয়ার অপেক্ষা করছে।
ব্যবহারবিধি
উদ্যতি
ইনস্টল করুন wmctrl
sudo অ্যাপ্লিকেশন 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
এটি যদি আপনি যেমন ইচ্ছা তেমন কাজ করে তবে এটি আপনার প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে যুক্ত করুন: ড্যাশ> স্টার্টআপ অ্যাপ্লিকেশন> যুক্ত করুন
আমি আমার ল্যাপটপটি (ডানদিকে) এবং দুটি পৃথক স্ক্রিন (বাম দিকে) দিয়ে স্ক্রিপ্টটি পরীক্ষা করেছি। ফলাফল একই ছিল।
ল্যাপটপ স্ক্রিন
স্ক্রিপ্ট ছাড়াই সংযোগ করা হচ্ছে
স্ক্রিপ্ট চলমান সঙ্গে সংযোগ
স্ক্রিপ্টটি কাজ করার পরে, উইন্ডোজগুলি "একা থাকবে" (অবশ্যই), এবং আপনি আপনার উইন্ডোজটিকে নিজের মতো করে সাজিয়ে নিতে পারেন।
স্ক্রিপ্ট (গুলি)
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