আপনি যা চেয়েছিলেন তা আক্ষরিকভাবে নয় , তবে একটি স্ক্রিপ্টের নীচে স্ক্রিপ্টটি নিচে রাখার জন্য একটি (কার্যকরভাবে) তুলনীয় সমাধান হ'ল।
এর মানে কি
শর্টকাট কী ব্যবহার করা হয়:
তারপর:
- ব্যবহারকারী চাপলে Enter, সিস্টেমটি বন্ধ হয়ে যায়
- যদি ব্যবহারকারী কিছু না করে, সিস্টেমটি 30 সেকেন্ডের জন্য অপেক্ষা করে (বা আপনি সেট করতে চান এমন কোনও সময়কাল) এবং বন্ধ হয়ে যায়।
- যদি ব্যবহারকারী 30 সেকেন্ডের মধ্যে মাউসটি সরান, পদ্ধতিটি বন্ধ হয়ে যায়
এই পান্ডুলিপি
#!/usr/bin/env python3
import subprocess
import time
#--- set the location of the close button x, y
q_loc = [1050, 525]
#--- set the time to wait before shutdown
countdown = 30
subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])
coords1 = q_loc
t = 0
while True:
time.sleep(1)
cmd = "xdotool", "getmouselocation"
currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
coords2 = [int(n.split(":")[1]) for n in currloc]
if coords2 != coords1:
break
else:
if t >= countdown:
subprocess.Popen(["xdotool", "key", "KP_Enter"])
break
t += 1
কিভাবে ব্যবহার করে
আমি নিশ্চিত যে আপনি এটি কীভাবে ব্যবহার করতে পারবেন তা নিশ্চিত, তবে এখানে আমরা অভ্যাসগত কারণে চলেছি:
স্ক্রিপ্ট ব্যবহার করে xdotool
sudo apt-get install xdotool
একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এটি সংরক্ষণ করুন run_close.py
প্রধান বিভাগে ক্লোজ উইন্ডোতে শাট ডাউন বোতামটির পর্দার অবস্থান নির্ধারণ করুন (আমার প্রথম অনুমানটি ঠিক ছিল):
#--- set the location of the close button x, y
q_loc = [1050, 525]
এবং অপ্রত্যাশিত বন্ধ হওয়ার আগে অপেক্ষা করার সময়:
#--- set the time to wait before shutdown
countdown = 30
কমান্ড দ্বারা এটি পরীক্ষা করুন:
python3 /path/to/run_close.py
এটি সমস্ত বিকল্পের সাথে পরীক্ষা করুন: Enterতাত্ক্ষণিক শাটডাউন, চাপবিহীন শাটডাউন এবং মাউস-পদক্ষেপের মাধ্যমে প্রক্রিয়াটি ভাঙ্গার জন্য চাপুন
যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে একটি শর্টকাট কীতে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন:
python3 /path/to/run_close.py
সম্পাদনা
স্ক্রিপ্টের এমন কোনও সংস্করণের নীচে যাতে কোনও অতিরিক্ত সেটিংয়ের প্রয়োজন হয় না। এটি স্ক্রিনের রেজোলিউশন যাই হোক না কেন, প্রস্থান বোতামটির স্থানাঙ্কগুলি গণনা করে।
সেটআপটি প্রায় একই রকম, তবে [3.]
এড়ানো যায়।
#!/usr/bin/env python3
import subprocess
import time
#--- set the time to wait before shutdown
countdown = 30
def get_qloc():
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
scrs = [s.split("+") for s in xr if all([s.count("x") == 1, s.count("+") == 2])]
center = [int(int(s)/2) for s in [scr[0] for scr in scrs if scr[1] == "0"][0].split("x")]
return [center[0] + 250, center[1]]
q_loc = get_qloc()
subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])
coords1 = q_loc
t = 0
while True:
time.sleep(1)
cmd = "xdotool", "getmouselocation"
currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
coords2 = [int(n.split(":")[1]) for n in currloc]
if coords2 != coords1:
break
else:
if t >= countdown:
subprocess.Popen(["xdotool", "key", "KP_Enter"])
break
t += 1
ব্যাখ্যা
সিস্টেমটি বন্ধ করতে সেশন ম্যানেজার উইন্ডোটির আকার সর্বদা কেন্দ্রিক এবং একটি স্থির (পরম) আকারের হয়, পর্দার রেজোলিউশনে স্বতন্ত্র। সুতরাং পর্দার কেন্দ্রের সাথে সম্পর্কিত অবস্থানটি একটি ধ্রুবক উপাদান।
তারপরে আমাদের যা করতে হবে তা হ'ল পর্দার রেজোলিউশন পড়া এবং সেখান থেকে বোতামের অবস্থান গণনা করা।
প্রয়োগ করা ফাংশন ( get_qloc()
) বাম স্ক্রিনের রেজোলিউশন গণনা করে , যেহেতু এটিই সংলাপটি উপস্থিত হবে।
বিঃদ্রঃ
শট ডাউন উইন্ডোটি উপস্থিত হওয়ার পরেtime.sleep(0.4)
মাউসটি সরানো হয়েছে কিনা তা নিশ্চিত করার জন্য তুলনামূলক ধীর গতির সিস্টেমগুলির জন্য লাইনে সেট করা সময়টি সেট করা হয় । দ্রুত সিস্টেমে এটি সংক্ষিপ্ত হতে পারে, ধীর সিস্টেমে (সম্ভবত কোনও ভিএম এর মতো) এটি আরও দীর্ঘতে সেট করার প্রয়োজন হতে পারে।