একটি প্রধান সুবিধাগুলি আপগ্রেড হ'ল একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট ব্যবহার করা হবে, স্বয়ংক্রিয়ভাবে প্রতিটি অ্যাপ্লিকেশন অনুসারে রেজোলিউশন সেট করা হবে এবং আপনি একই সাথে বিভিন্ন (একাধিক) অ্যাপ্লিকেশনগুলির জন্য পৃথক রেজোলিউশন সেট করতে পারেন।
নীচের স্ক্রিপ্টটি ঠিক তাই করে।
এর ডিফল্ট রেজোলিউশনের একটি উদাহরণ 1680x1050
:
চলমান gedit
, স্বয়ংক্রিয়ভাবে এতে পরিবর্তন হচ্ছে 640x480
:
চলমান gnome-terminal
, স্বয়ংক্রিয়ভাবে এতে পরিবর্তন হচ্ছে 1280x1024
:
অ্যাপ্লিকেশনটি বন্ধ হয়ে গেলে রেজোলিউশনটি স্বয়ংক্রিয়ভাবে এতে ফিরে আসে 1680x1050
ব্যবহারবিধি
- নীচের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন
set_resolution.py
স্ক্রিপ্টের শিরোনামে, আপনার ডিফল্ট রেজোলিউশনটি লাইনে সেট করুন:
#--- set the default resolution below
default = "1680x1050"
#---
ইন খুব একই ডিরেক্টরির (ফোল্ডার), একটি টেক্সট ফাইলে, তৈরি ঠিক নামে: procsdata.txt
। এই টেক্সটফাইলে কাঙ্ক্ষিত অ্যাপ্লিকেশন বা প্রক্রিয়া সেট করুন, তারপরে একটি স্থান এবং তারপরে পছন্দসই রেজোলিউশনটি সেট করুন। প্রতি লাইনে একটি অ্যাপ্লিকেশন বা স্ক্রিপ্ট, এর মতো দেখতে:
gedit 640x480
gnome-terminal 1280x1024
java 1280x1024
কমান্ড দ্বারা স্ক্রিপ্ট চালান:
python3 /path/to/set_resolution.py
বিঃদ্রঃ
স্ক্রিপ্ট ব্যবহার pgrep -f <process>
, যা স্ক্রিপ্ট সহ সমস্ত ম্যাচ ক্যাচ করে। সম্ভাব্য খারাপ দিকটি হ'ল প্রক্রিয়া হিসাবে একই নামের সাথে কোনও ফাইল খোলার সময় এটি নাম সংঘর্ষের কারণ হতে পারে।
আপনি যদি এই জাতীয় সমস্যাগুলি চালিয়ে যান তবে পরিবর্তন করুন:
matches.append([p, subprocess.check_output(["pgrep", "-f", p]).decode("utf-8")])
মধ্যে:
matches.append([p, subprocess.check_output(["pgrep", p]).decode("utf-8")])
এই পান্ডুলিপি
#!/usr/bin/env python3
import subprocess
import os
import time
#--- set the default resolution below
default = "1680x1050"
#---
# read the datafile
curr_dir = os.path.dirname(os.path.abspath(__file__))
datafile = curr_dir+"/procsdata.txt"
procs_data = [l.split() for l in open(datafile).read().splitlines() if not l == "\n"]
procs = [pdata[0] for pdata in procs_data]
def check_matches():
# function to find possible running (listed) applications
matches = []
for p in procs:
try:
matches.append([p, subprocess.check_output(["pgrep", "-f", p]).decode("utf-8")])
except subprocess.CalledProcessError:
pass
match = matches[-1][0] if len(matches) != 0 else None
return match
matches1 = check_matches()
while True:
time.sleep(2)
matches2 = check_matches()
if matches2 == matches1:
pass
else:
if matches2 != None:
# a listed application started up since two seconds ago
resdata = [("x").join(item[1].split("x")) for item in \
procs_data if item[0] == matches2][0]
elif matches2 == None:
# none of the listed applications is running any more
resdata = default
subprocess.Popen(["xrandr", "-s", resdata])
matches1 = matches2
time.sleep(1)
ব্যাখ্যা
স্ক্রিপ্টটি শুরু হয়ে গেলে, এটি সেই ফাইলটি পড়ে যা আপনি নিজের অ্যাপ্লিকেশনগুলি এবং তাদের পছন্দসই স্ক্রিন রেজোলিউশন সংজ্ঞায়িত করেছেন।
এটি তখন চলমান প্রক্রিয়াগুলিতে নজর রাখে ( pgrep -f <process>
অ্যাপ্লিকেশনগুলির প্রত্যেকের জন্য চলমান ) এবং অ্যাপ্লিকেশন শুরু হলে রেজোলিউশন সেট করে।
pgrep -f <process>
তালিকাভুক্ত অ্যাপ্লিকেশনগুলির জন্য কখন আউটপুট উত্পাদন করে না, এটি রেজোলিউশনটিকে "ডিফল্ট" হিসাবে সেট করে।
সম্পাদনা:
"ডায়নামিক" সংস্করণ (অনুরোধ হিসাবে)
উপরের সংস্করণটি একাধিক তালিকাভুক্ত অ্যাপ্লিকেশনগুলির সাথে কাজ করে, এটি একবারে কেবলমাত্র একটি অ্যাপ্লিকেশনের রেজোলিউশন সেট করে ।
নীচের সংস্করণটি একই সাথে চলমান, পৃথক (প্রয়োজনীয়) রেজোলিউশনের সাহায্যে বিভিন্ন অ্যাপ্লিকেশন পরিচালনা করতে পারে। ব্যাকগ্রাউন্ড স্ক্রিপ্টটি সবচেয়ে সর্বাধিক অ্যাপ্লিকেশন কী তা ট্র্যাক করবে এবং সেই অনুযায়ী রেজুলিউশন সেট করবে set এটি Alt+ এর সাথেও দুর্দান্ত কাজ করে Tab।
মনে রাখবেন যে আপনি যদি ডেস্কটপ এবং তালিকাভুক্ত অ্যাপ্লিকেশনগুলির মধ্যে অনেকগুলি পরিবর্তন করেন তবে এই আচরণটি বিরক্তিকর হতে পারে; ঘন ঘন রেজোলিউশন স্যুইচ খুব বেশি হতে পারে।
কিভাবে সেটআপ করতে পার্থক্য
সেটআপটি বেশ একইরকম, এটি ব্যবহার করে wmctrl
এবং xdotool
:
sudo apt-get install wmctrl
sudo apt-get install xdotool
এই পান্ডুলিপি
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
#--- set default resolution below
resolution = "1680x1050"
#---
curr_dir = os.path.dirname(os.path.abspath(__file__))
datafile = curr_dir+"/procsdata.txt"
applist = [l.split() for l in open(datafile).read().splitlines()]
apps = [item[0] for item in applist]
def get(cmd):
try:
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
except subprocess.CalledProcessError:
pass
def get_pids():
# returns pids of listed applications; seems ok
runs = []
for item in apps:
pid = get("pgrep -f "+item)
if pid != None:
runs.append((item, pid.strip()))
return runs
def check_frontmost():
# returns data on the frontmost window; seems ok
frontmost = str(hex(int(get("xdotool getwindowfocus").strip())))
frontmost = frontmost[:2]+"0"+frontmost[2:]
try:
wlist = get("wmctrl -lpG").splitlines()
return [l for l in wlist if frontmost in l]
except subprocess.CalledProcessError:
pass
def front_pid():
# returns the frontmost pid, seems ok
return check_frontmost()[0].split()[2]
def matching():
# nakijken
running = get_pids(); frontmost = check_frontmost()
if all([frontmost != None, len(running) != 0]):
matches = [item[0] for item in running if item[1] == frontmost[0].split()[2]]
if len(matches) != 0:
return matches[0]
else:
pass
trigger1 = matching()
while True:
time.sleep(1)
trigger2 = matching()
if trigger2 != trigger1:
if trigger2 == None:
command = "xrandr -s "+resolution
else:
command = "xrandr -s "+[it[1] for it in applist if it[0] == trigger2][0]
subprocess.Popen(["/bin/bash", "-c", command])
print(trigger2, command)
trigger1 = trigger2
নোট
- যদিও আমি এখন এটি কোনও ত্রুটি ছাড়াই বেশ কয়েক ঘন্টা ধরে চলছে, দয়া করে এটি পুরোপুরি পরীক্ষা করুন। যদি কোনও ত্রুটি হতে পারে তবে দয়া করে একটি মন্তব্য দিন।
- স্ক্রিপ্টটি এটি- একক মনিটর সেটআপে কাজ করে।