Не позволяйте мыши разбудить дисплеи из режима ожидания

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