Не буквально те, про що ви просили, але, принаймні, (ефективно) порівнянне рішення було б помістити сценарій нижче під клавішу швидкого доступу.
Що це робить
Коли використовується клавіша швидкого доступу:
Потім:
- Якщо користувач натискає 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
EDIT
Нижче версії сценарію, яка не потребує додаткових налаштувань. Він обчислює координати кнопки виходу, незалежно від роздільної здатності екрана.
Налаштування майже однакові, але [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)
, встановлюється для відносно повільних систем, щоб переконатися в переміщенні миші після появи вікна закриття. У більш швидких системах він може бути коротшим, на повільних системах (наприклад, VM), можливо, знадобиться встановити довший.