Как отключить монитор в Arch Linux без активации затемнения экрана

Если вы сталкивались с ситуацией, когда нажатие кнопки питания монитора приводит к неожиданным сбоям X11, а ручное отключение через xset dpms force off работает лишь частично – эта инструкция для вас. Разберём, как создать удобный скрипт, который не только переводит экран в энергосберегающий режим, но и предотвращает повторное затемнение после пробуждения.

Шаг 1: Создание скрипта для отслеживания нажатий клавиш

Основная задача – заставить систему ждать вашего действия перед восстановлением стандартных настроек энергосбережения. Для этого понадобится утилита xinput, которая отслеживает события ввода. Убедитесь, что она установлена:

sudo pacman -S xorg-xinput

Создайте файл await.sh в папке `~/bin` (если её нет – создайте через mkdir -p ~/bin). Вот содержимое скрипта:

#!/usr/bin/env bash  
xinput test-xi2 --root 2>&1 |   
  grep --line-buffered -m 1 'EVENT type 2 (KeyPress)' &> /dev/null  

Что здесь происходит:
– xinput test-xi2 –root отслеживает события ввода в реальном времени (включая нажатия клавиш);
– grep –line-buffered ищет первое совпадение с типом события KeyPress (нажатие клавиши);
– Флаг -m 1 останавливает выполнение после первого найденного события.

Важно: Не забудьте дать скрипту права на выполнение:

chmod +x ~/bin/await.sh

Шаг 2: Настройка алиаса и тонкости работы с xset

Теперь объединим всё в один алиас. Добавьте в ваш .bashrc или .zshrc строку:

alias off='xset dpms force off && await.sh && xset -dpms'

Разберём команду по частям:

  1. xset dpms force off – мгновенно выключает монитор;
  2. await.sh – ждёт любого нажатия клавиши;
  3. xset -dpms – отключает таймеры энергосбережения (именно они вызывают повторное затемнение).

Кстати, если после пробуждения экран всё равно гаснет, проверьте настройки хранителя экрана отдельно:

xset s off  # Отключение screen blanking  
xset s noblank  # Запрет затемнения

Почему не сработает «xset dpms force off; xset -dpms» без await.sh? Потому что вторая команда выполнится сразу после первой, и настройки энергосбережения отключатся до пробуждения монитора. Нам же нужно деактивировать их именно после вашего возвращения к работе.

Распространённые ошибки и альтернативные методы

Проблема: Скрипт зависает или не реагирует на нажатия.

  • Убедитесь, что в системе нет других процессов, блокирующих ввод (например, некоторые менеджеры окон могут перехватывать события).
  • Проверьте, что xinput установлен и доступен в PATH.

Альтернатива: Если скрипт кажется сложным, можно использовать read с таймаутом, но это менее надёжно:

alias off='xset dpms force off && read -n 1 && xset -dpms'

Однако такой подход требует явного нажатия Enter, что не всегда удобно.

Дополнительная настройка для автоматизации

Чтобы избежать ручного ввода команд при каждом запуске системы, добавьте следующие строки в файл ~/.xprofile:

xset s off  
xset -dpms  

Это отключит энергосбережение глобально. Но будьте осторожны: на ноутбуках это может привести к ускоренному разряду батареи (решение лучше подходит для стационарных ПК).

На заметку: Если вы используете менеджер входа вроде LightDM, проверьте его конфигурацию в /etc/lightdm/lightdm.conf. Иногда параметры DPMS переопределяются на уровне демона.

Теперь, когда вы знаете как работает связка xset и xinput, можно экспериментировать: например, добавить звуковое уведомление при выключении монитора или привязать скрипт к сочетанию клавиш через i3wm или Openbox. Главное – не бойтесь менять параметры и проверять их влияние через xset q (эта команда покажет текущее состояние всех таймеров).

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное