Как вызвать gnome-session-quit с обратным отсчетом от Unity?

Вы должны обновить свой apt-кеш, выпустив:

sudo apt-get update
1
задан 13 April 2017 в 15:24

1 ответ

Не в буквальном смысле, о чем вы просили, но по крайней мере (эффективно) сопоставимое решение заключалось бы в том, чтобы поставить скрипт ниже под клавишей быстрого доступа.

Что он делает

Когда используется клавиша быстрого доступа:

выполняется команда gnome-session-quit --power-off, а мышь перемещается на соответствующую кнопку «закрыть», эффективно сделав кнопку выключения:

Затем: [ ! d11] выполняется команда gnome-session-quit --power-off Если пользователь ничего не делает, система ждет 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

Как использовать

Я уверен, что вы знаете, как его использовать, но здесь мы идем по причинам habbit:

Скрипт использует 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), устанавливается для относительно медленных систем, чтобы убедиться, что мышь перемещена левый экран появляется окно закрытия. В более быстрых системах это может быть короче, на более медленных системах (например, возможно, в виртуальной машине) может потребоваться установить более длинный

6
ответ дан 24 May 2018 в 01:29
  • 1
    @Takkat Исправлено, эта версия должна работать с любым разрешением. – Jacob Vlijm 12 June 2015 в 08:57
  • 2
    Большой! Он работает безупречно на моей виртуальной машине тоже. – Takkat 12 June 2015 в 20:18

Другие вопросы по тегам:

Похожие вопросы: