Чтобы иметь возможность выключения с помощью сочетания клавиш, мы можем назначить gnome-session-quit ---power-off
настраиваемое сочетание клавиш.
В Unity это приведет к следующему диалогу:
Затем нам нужно еще как минимум два нажатия клавиш, чтобы наконец выключить нашу систему. Это довольно неудобно, и я бы предпочел старое диалоговое окно выключения, когда вы можете выключить питание, просто нажав Returnили оставив его ждать по умолчанию обратный отсчет 60 секунд.
При вызове gnome-session-quit --poweroff
из сеанса флэшбэка сеанса GNOME в той же системе (14.04 LTS) возвращается старое диалоговое окно, включая обратный отсчет:
Итак, мы знаем, что это где-то обитает.
Есть ли способ вызвать этот старый диалог при запуске сеанса Unity?
unity
shutdown
gnome-classic
Takkat
источник
источник
Ответы:
Вот скрипт для эмуляции желаемого поведения. Должен быть запущен как с
sudo
. Может быть привязан к сочетанию клавиш (с предварительным добавлениемshutdown
команды в файл sudoers для запуска без пароля ). Упрощенно, лаконично и выполняет свою работу.Обновление: 14 июня
Как предлагает Таккат, вот скрипт, который использует опцию --timer zenity и dbus для достижения того же поведения без необходимости доступа sudo:
Основная идея здесь заключается в том, что опция времени ожидания zenity завершается с кодом больше 0, что обычно означает, что команда не выполнена. Таким образом, рассматривая опцию отмены zenity и тайм-аут как условие, которое позволит отключить, мы используем оператор OR (
||
) для выключения, только если пользователь нажимает кнопку отмены (помеченную как «DOIT») или время ожидания диалога.Можно сделать еще один вариант для улучшения взаимодействия с пользователем
yad
(сначала необходимо установить эти командыsudo apt-add-repository ppa:webupd8team/y-ppa-manager;sudo apt-get update; sudo apg-get install yad
). Этот вариант использует индикатор выполнения, чтобы сообщить пользователю, сколько времени осталосьВ другой возможной версии учитывается, что если вы измените метку кнопки ОК в zenity, кнопка, выделенная по умолчанию, может быть или не быть кнопкой ОК.
Сценарий завершает работу системы при любом возврате, который не равен 0. Если время выполнения сценария истекло, возвращаемое значение 1 или 5 указывает сценарию выполнить
else
частьисточник
zenity --timeout
встроенный таймер. При этом нам не придется отменять / перезапускать отключение позже.if [[ $? -eq 1 ]] ; then exit \else dbus...
условием, которое делает это. Очевидно, что нет никакого способа вызвать старого помощника выхода из системы ...Не буквально то, что вы просили, но, по крайней мере, (эффективно) сопоставимое решение было бы поместить сценарий ниже под сочетанием клавиш.
Что оно делает
Когда используется сочетание клавиш:
gnome-session-quit --power-off
команда запускаетсямышь перемещается к соответствующей кнопке «закрыть», эффективно делая предварительно выбранную кнопку выключения:
Потом:
Сценарий
Как пользоваться
Я вполне уверен, что вы знаете, как его использовать, но здесь мы пойдем по причинам привычки:
Скрипт использует
xdotool
Скопируйте скрипт в пустой файл, сохраните его как
run_close.py
В разделе заголовка установите расположение экрана кнопки выключения в окне закрытия (мое первое предположение было правильным):
и время ожидания, прежде чем отключить без присмотра:
Протестируйте его командой:
Протестируйте его всеми опциями: нажмите Enterдля немедленного выключения, автоматического выключения и прервите процедуру движением мыши
Если все работает нормально, добавьте его к сочетанию клавиш: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду:
РЕДАКТИРОВАТЬ
Ниже приведена версия скрипта, которая не требует каких-либо дополнительных настроек. Он рассчитывает координаты кнопки выхода, независимо от разрешения экрана.
Настройка почти такая же, но
[3.]
ее можно пропустить.объяснение
Размер окна диспетчера сеансов для закрытия системы всегда центрирован и имеет фиксированный (абсолютный) размер, не зависящий от разрешения экрана. Поэтому положение относительно центра экрана является постоянным фактором.
Все, что нам нужно сделать, это прочитать разрешение экрана и рассчитать положение кнопки оттуда.
Применяемая функция (
get_qloc()
) вычисляет разрешение левого экрана , поскольку именно там появится диалог.Заметка
Время, установленное в строке
time.sleep(0.4)
, устанавливается для относительно медленных систем, чтобы убедиться, что мышь перемещается после появления окна выключения. В более быстрых системах это может быть короче, в более медленных системах (например, возможно, в ВМ) может потребоваться установить более продолжительное время.источник