ফোকাসযুক্ত স্ক্রিনটি হাইলাইট করুন (বা ফোকাস পরিবর্তনে গা dim় ফ্ল্যাশ, আরও নীচে EDIT দেখুন)
পাশাপাশি-দ্বৈত মনিটর সেটআপে (বাম-ডান), নীচের স্ক্রিপ্টটি ফোকাসযুক্ত উইন্ডোটি দিয়ে মনিটরের উজ্জ্বলতাটিকে "স্বাভাবিক" (100%) তে সেট করবে, অন্য একটিটি 60০% করে দেওয়া হবে।
যদি ফোকাস পরিবর্তন হয় তবে উজ্জ্বলতা ফোকাসটি অনুসরণ করবে:
ডান স্ক্রিনে (একটি উইন্ডো) ফোকাস করুন
বাম স্ক্রিনে (একটি উইন্ডো) ফোকাস করুন
এই পান্ডুলিপি
#!/usr/bin/env python3
"""
In a side-by-side dual monitor setup (left-right), the script below will set
the brightness of the monitor with the focussed window to "normal" (100%),
while other one is dimmed to 60%. If the focus changes, the brightness will
follow the focus
"""
import subprocess
import time
def get_wposition():
# get the position of the currently frontmost window
try:
w_data = subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()
frontmost = subprocess.check_output(["xprop", "-root", "_NET_ACTIVE_WINDOW"]).decode("utf-8").split()[-1].strip()
z = 10-len(frontmost); frontmost = frontmost[:2]+z*"0"+frontmost[2:]
return [int(l.split()[2]) for l in w_data if frontmost in l][0]
except subprocess.CalledProcessError:
pass
def get_onscreen():
# get the size of the desktop, the names of both screens and the x-resolution of the left screen
resdata = subprocess.check_output(["xrandr"]).decode("utf-8")
if resdata.count(" connected") == 2:
resdata = resdata.splitlines()
r = resdata[0].split(); span = int(r[r.index("current")+1])
screens = [l for l in resdata if " connected" in l]
lr = [[(l.split()[0], int([s.split("x")[0] for s in l.split() if "+0+0" in s][0])) for l in screens if "+0+0" in l][0],
[l.split()[0] for l in screens if not "+0+0" in l][0]]
return [span, lr]
else:
print("no second screen seems to be connected")
def scr_position(span, limit, pos):
# determine if the frontmost window is on the left- or right screen
if limit < pos < span:
return [right_scr, left_scr]
else:
return [left_scr, right_scr]
def highlight(scr1, scr2):
# highlight the "active" window, dim the other one
action1 = "xrandr", "--output", scr1, "--brightness", "1.0"
action2 = "xrandr", "--output", scr2, "--brightness", "0.6"
for action in [action1, action2]:
subprocess.Popen(action)
# determine the screen setup
screendata = get_onscreen()
left_scr = screendata[1][0][0]; right_scr = screendata[1][1]
limit = screendata[1][0][1]; span = screendata[0]
# set initial highlight
oncurrent1 = scr_position(span, limit, get_wposition())
highlight(oncurrent1[0], oncurrent1[1])
while True:
time.sleep(0.5)
pos = get_wposition()
# bypass possible incidental failures of the wmctrl command
if pos != None:
oncurrent2 = scr_position(span, limit, pos)
# only set highlight if there is a change in active window
if oncurrent2 != oncurrent1:
highlight(oncurrent1[1], oncurrent1[0])
oncurrent1 = oncurrent2
কিভাবে ব্যবহার করে
স্ক্রিপ্টটির প্রয়োজন wmctrl
:
sudo apt-get install wmctrl
একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এটি সংরক্ষণ করুন highlight_focus.py
কমান্ড দ্বারা এটি পরীক্ষা করুন:
python3 /path/to/highlight_focus.py
দ্বিতীয় মনিটর সংযুক্ত হওয়ার সাথে সাথে , স্ক্রিপ্টটি প্রত্যাশার মতো কাজ করে কিনা পরীক্ষা করুন।
যদি সমস্ত ঠিকঠাক কাজ করে তবে এটি স্টার্টআপ অ্যাপ্লিকেশনগুলিতে যুক্ত করুন: ড্যাশ> স্টার্টআপ অ্যাপ্লিকেশন> কমান্ডটি যুক্ত করুন:
/bin/bash -c "sleep 15 && python3 /path/to/highlight_focus.py"
মন্তব্য
সম্পদের উপর স্ক্রিপ্টটি অত্যন্ত কম। "জ্বালানী বাঁচাতে", স্ক্রিন সেটআপ; রেজোলিউশন, স্প্যান সাইজ ইত্যাদি স্ক্রিপ্ট শুরুর সময় একবারই পঠিত হয় (লুপের অন্তর্ভুক্ত নয়)। এর থেকে বোঝা যায় যে আপনি দ্বিতীয় মনিটরের সাথে সংযোগ / সংযোগ বিচ্ছিন্ন হলে আপনাকে স্ক্রিপ্টটি পুনরায় চালু করতে হবে।
আপনি যদি এটি স্টার্টআপ অ্যাপ্লিকেশনগুলিতে যুক্ত করেন তবে এর অর্থ মনিটর কনফিগারেশনের পরিবর্তনের পরে আপনাকে লগ আউট / আউট করতে হবে।
যদি আপনি ডিমেড স্ক্রিনের জন্য আরও একটি উজ্জ্বলতা শতাংশ পছন্দ করেন তবে লাইনের মানটি পরিবর্তন করুন:
action2 = "xrandr", "--output", scr2, "--brightness", "0.6"
মানটি 0,0
(কালো পর্দা) এবং 1.0
(100%) এর মধ্যে হতে পারে ।
ব্যাখ্যা
স্ক্রিপ্ট শুরু করার সময় এটি নির্ধারণ করে:
- উভয় পর্দার বিস্তৃত রেজোলিউশন
- বাম পর্দার এক্স-রেজোলিউশন
- উভয় পর্দার নাম
তারপরে, একটি লুপে (একবারে প্রতি সেকেন্ডে), এটি:
যদি উইন্ডোটির (x-) অবস্থানটি বেশি হয় তবে বাম স্ক্রিনের এক্স-রেজোলিউশন, উইন্ডোটি দৃশ্যত ডান স্ক্রিনে থাকবে, যদি না এটি বড় হয় তবে দুটি স্ক্রিনের প্রশস্ত আকার (তারপরে এটি ওয়ার্কস্পেসে থাকবে) অধিকার). অতএব:
if limit < pos < span:
উইন্ডোটি ডান স্ক্রিনে রয়েছে কিনা তা নির্ধারণ করে (যেখানে limit
বাম স্ক্রিনের এক্স-রেজো রয়েছে, pos
এটি উইন্ডোর এক্স-অবস্থান এবং span
উভয় পর্দার সম্মিলিত এক্স-রেস)।
তাহলে সেখানে (বাম পর্দা বা ডান পর্দায়) frontmost উইন্ডোর অবস্থান পরিবর্তন হয়, স্ক্রিপ্টের সাথে উভয় পর্দা উজ্জ্বলতা সেট করে xrandr
কমান্ড প্রয়োগ করুন:
xrandr --output <screen_name> --brightness <value>
সম্পাদনা
স্থায়ী ম্লান "অপ্রকাশিত" স্ক্রিনের পরিবর্তে ফোকাসযুক্ত স্ক্রিনটি ধীরে ধীরে ফ্ল্যাশ করুন
একটি মন্তব্যে এবং আড্ডায় অনুরোধ করা হয়েছে, স্ক্রিপ্টের এমন একটি সংস্করণের নীচে যা পরিবর্তে নতুন ফোকাস করা স্ক্রিনটিতে একটি স্বল্প আবছা ফ্ল্যাশ দেয়:
#!/usr/bin/env python3
"""
In a side-by-side dual monitor setup (left-right), the script below will give
a short dim- flash on the newly focussed screen if the focussed screen changes
"""
import subprocess
import time
def get_wposition():
# get the position of the currently frontmost window
try:
w_data = subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()
frontmost = subprocess.check_output(["xprop", "-root", "_NET_ACTIVE_WINDOW"]).decode("utf-8").split()[-1].strip()
z = 10-len(frontmost); frontmost = frontmost[:2]+z*"0"+frontmost[2:]
return [int(l.split()[2]) for l in w_data if frontmost in l][0]
except subprocess.CalledProcessError:
pass
def get_onscreen():
# get the size of the desktop, the names of both screens and the x-resolution of the left screen
resdata = subprocess.check_output(["xrandr"]).decode("utf-8")
if resdata.count(" connected") == 2:
resdata = resdata.splitlines()
r = resdata[0].split(); span = int(r[r.index("current")+1])
screens = [l for l in resdata if " connected" in l]
lr = [[(l.split()[0], int([s.split("x")[0] for s in l.split() if "+0+0" in s][0])) for l in screens if "+0+0" in l][0],
[l.split()[0] for l in screens if not "+0+0" in l][0]]
return [span, lr]
else:
print("no second screen seems to be connected")
def scr_position(span, limit, pos):
# determine if the frontmost window is on the left- or right screen
if limit < pos < span:
return [right_scr, left_scr]
else:
return [left_scr, right_scr]
def highlight(scr1):
# highlight the "active" window, dim the other one
subprocess.Popen([ "xrandr", "--output", scr1, "--brightness", "0.3"])
time.sleep(0.1)
subprocess.Popen([ "xrandr", "--output", scr1, "--brightness", "1.0"])
# determine the screen setup
screendata = get_onscreen()
left_scr = screendata[1][0][0]; right_scr = screendata[1][1]
limit = screendata[1][0][1]; span = screendata[0]
# set initial highlight
oncurrent1 = []
while True:
time.sleep(0.5)
pos = get_wposition()
# bypass possible incidental failures of the wmctrl command
if pos != None:
oncurrent2 = scr_position(span, limit, pos)
# only set highlight if there is a change in active window
if oncurrent2 != oncurrent1:
highlight(oncurrent2[0])
oncurrent1 = oncurrent2