Не позволяйте мыши разбудить дисплеи из режима ожидания
Мне нравится переводить дисплеи в режим энергосбережения / ожидания, когда я на некоторое время оставляю компьютер. Было бы хорошо, если бы не сверхчувствительная мышь. Иногда драйвер читает какое-то движение, которое не видно невооруженным глазом (то есть курсор), и это нарушает энергосбережение. Было бы ждать еще 10 минут, прежде чем вернуться в режим ожидания.
Мой обходной путь - следующий скрипт, связанный с C-S-q
:
xlock -startCmd 'xset dpms 2 2 2' -endCmd 'xset dpms 600 1200 1300' -mode blank -echokeys -timeelapsed +usefirst
Используя xset
Я устанавливаю значения в 2 секунды каждое перед переходом в режим ожидания. Во всяком случае, это нехорошо. Иногда есть интересные состояния, которые я хочу прочитать, прежде чем вводить пароль. Я мог бы держать курсор движущимся, но он грязный. (Кстати, вариант xlock mousemotion
не помогает - он просто скрывает курсор, но дисплеи загораются.)
Итак, вопрос: есть ли способ заставить дисплеи переходить в режим ожидания и оставаться там до тех пор, пока не будет нажата клавиша клавиатуры? Я использую gentoo и недавний Xorg, но надеюсь, что ответ не должен быть специфичным для дистрибутива.
В основном ответ может быть таким же простым, как включить / отключить мышь в командной строке? Думаю, это бы сработало, если бы DPMS не знала эту идею.
3 ответа
На сайте Unix SE есть отличный пост @pbm, который освещает эту проблему.
Короче, первое использование xinput list
чтобы получить идентификатор устройства для вашей мыши, а затем использовать
xinput --set-prop [ID#] "Device Enabled" "0"
а также
xinput --set-prop [ID#] "Device Enabled" "1"
отключить и включить мышь.
Я только что проверил это здесь, отключив мышь, а затем позвонив xset dpms force standby
, Размахивание мышью в течение нескольких секунд ничего не мешало экрану, но нажатие одной клавиши работало нормально. Используя вторую команду, вы вернули мышь в нормальное состояние, включая настройку "Постоянное замедление", которую мне установили мои скрипты запуска по умолчанию.
Вы должны быть в состоянии передать эти две команды -startCmd
а также -endCmd
варианты xlock
чтобы получить то, что вы после.
Я делаю это так в Ubuntu:
#!/bin/bash
# allow only one instance
r=$(pidof -x -o $$ ssmonoff.sh)
set -- $r
if [ "${#@}" -ge 1 ]; then
echo "Script already running. Exit..."
exit
fi
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while read line; do
if echo $line | grep "boolean true" &> /dev/null; then
xinput --set-prop "Dell Premium USB Optical Mouse" "Device Enabled" "0"
xset dpms force off
else
xinput --set-prop "Dell Premium USB Optical Mouse" "Device Enabled" "1"
fi
done )
Некоторые заметки:
- Я также выключаю монитор.
- Лучше использовать полное имя вместо ID.
Я надеюсь, что это помогает.
Что-то похожее на ответ MiLo, но без dbus:
MOUSE="Logitech Wireless Mouse"
# Disable mouse
xinput --set-prop "${MOUSE}" "Device Enabled" "0"
# Turn off screen
xset dpms force off
# Wait to screen to be on again to enable mouse
while true; do
status=$(xset q | grep -o "^\s*Monitor is .*" | grep -o -e On -e Off)
if [[ $status == "On" ]]; then
xinput --set-prop "${MOUSE}" "Device Enabled" "1"
exit 0
fi
sleep 1
done