Linux: Запретить включение экрана клавиатуры под X
Я пытаюсь связать ключ (используя xbindkeys
) включить / выключить мои мониторы под X. Пока у меня есть ключ, связанный с этим скриптом:
#!/bin/bash
MOUSE="Logitech USB-PS/2 Optical Mouse"
if [[ ! -z $(xset q | grep "Monitor is On") ]]; then
logger "Turning off display"
xinput disable "$MOUSE"
xset s 2 2
xset dpms force off
else
logger "Turning on display"
xinput enable "$MOUSE"
xset s 3600 3600
xset dpms force on
fi
Это работает почти идеально: если экран включен, он отключает мышь (для предотвращения случайного пробуждения), устанавливает время гашения на 2 секунды (на случай, если что-то его разбудит) и выключает экран. Если он выключен, он восстанавливает предыдущие настройки и снова включает экран.
К сожалению, это, похоже, не работает, когда фактически связано с клавишей: оно всегда считает, что экран включен. Я подозреваю, что это потому, что нажатие клавиши снова включает их, а затем запускает скрипт, который снова их выключает.
Я не могу найти способ предотвратить автоматическое включение экрана при нажатии клавиш, кроме как полностью отключить клавиатуру (что затруднит повторное включение).
Еще лучшим решением было бы, если бы я мог запустить скрипт в любое время, когда экран включается / выключается; тогда я смогу снова включить экран, нажав любую клавишу, а не только ту, которая привязана к этому сценарию.
2 ответа
Сценарий запускается сразу после нажатия связанной клавиши, но экран снова включается только после отпускания.
Вы можете проверить это, введя
xset dpms force off
в вашем терминале и удерживая Enter.
Экран остается выключенным до тех пор, пока вы не отпустите клавишу, а затем сразу же снова включится.
Простой обходной путь - добавить небольшую задержку, чтобы запустить xset
команда после отпускания ключа (используя sleep
команда, например).
Я сделал что-то, чтобы использовать xscreensaver
(установите только пустой экран, чтобы не запускать графические хаки), а затем просмотрите его, используя xscreensaver-command -watch
:
-watch Prints a line each time the screensaver changes state: when the
screen blanks, locks, unblanks, or when the running hack is
changed. This option never returns; it is intended for use by
shell scripts that want to react to the screensaver in some
way. An example of its output would be:
BLANK Fri Nov 5 01:57:22 1999
RUN 34
RUN 79
RUN 16
LOCK Fri Nov 5 01:57:22 1999
RUN 76
RUN 12
UNBLANK Fri Nov 5 02:05:59 1999
Страница man содержит пример, который стоит посмотреть.
К сожалению, сток xscreensaver
настаивает на том, чтобы время от времени устанавливать для параметров DPMS свои собственные значения. Я представил патч, чтобы остановить это, но jwz отказался. Вы можете найти этот патч полезным или просто скомпилировать xscreensaver с --without-dpms-ext
,
В качестве альтернативы может быть полезно изучить xscreensaver
код для подсказок о том, как написать свой собственный наблюдатель.