Tidak secara harfiah apa yang Anda minta, tetapi setidaknya solusi (efektif) yang sebanding adalah dengan meletakkan script di bawah ini di bawah tombol pintas.
Apa yang dilakukannya
Saat tombol pintas digunakan:
Kemudian:
- Jika pengguna menekan Enter, sistem dimatikan
- Jika pengguna tidak melakukan apa-apa, sistem menunggu selama 30 detik (atau periode waktu lain yang ingin Anda tetapkan) dan dimatikan.
- Jika pengguna menggerakkan mouse selama 30 detik, prosedur dihentikan
Naskah
#!/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
Cara Penggunaan
Saya cukup yakin Anda tahu cara menggunakannya, tapi di sini kita pergi untuk alasan habbit:
Script digunakan xdotool
sudo apt-get install xdotool
Salin skrip ke file kosong, simpan sebagai run_close.py
Di bagian kepala, atur lokasi layar tombol mati di jendela dekat (tebakan pertama saya benar):
#--- set the location of the close button x, y
q_loc = [1050, 525]
dan waktu untuk menunggu sebelum dimatikan:
#--- set the time to wait before shutdown
countdown = 30
Tes-jalankan dengan perintah:
python3 /path/to/run_close.py
Uji dengan semua opsi: menekan Enteruntuk segera dimatikan, shutdown tanpa pengawasan dan hancurkan prosedur dengan mouse-move
Jika semua berfungsi dengan baik, tambahkan ke tombol pintasan: pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah:
python3 /path/to/run_close.py
EDIT
Di bawah versi skrip yang tidak memerlukan pengaturan tambahan. Ini menghitung koordinat tombol keluar, tidak peduli apa resolusi layarnya.
Pengaturannya hampir sama, tetapi [3.]
bisa dilewati.
#!/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
Penjelasan
Ukuran jendela Session Manager untuk menutup sistem selalu terpusat dan berukuran tetap (absolut), tidak tergantung pada resolusi layar. Oleh karena itu posisi relatif ke tengah layar adalah faktor konstan.
Yang perlu kita lakukan adalah membaca resolusi layar dan menghitung posisi tombol dari sana.
Fungsi yang diterapkan ( get_qloc()
) menghitung resolusi layar kiri , karena di situlah dialog akan muncul.
Catatan
Waktu, yang diatur dalam garis time.sleep(0.4)
diatur untuk sistem yang relatif lambat, untuk memastikan mouse digerakkan setelah jendela dimatikan muncul. Pada sistem yang lebih cepat, bisa lebih pendek, pada sistem yang lebih lambat (seperti mungkin VM) mungkin perlu diatur lebih lama.