Гид по технологиям

Как выключить монитор горячей клавишей в Ubuntu

• 5 min read • Linux • Обновлено 23 Nov 2025
Выключить монитор горячей клавишей в Ubuntu
Выключить монитор горячей клавишей в Ubuntu

К чему это и зачем

Традиционная команда для выключения монитора — xset dpms force off — в некоторых версиях Ubuntu неожиданно «просыпает» экран спустя ~1 минуту из‑за взаимодействия с системными вызовами. Простая автоматизация через Python + Xlib позволяет корректно отловить следующее событие ввода и предотвратить немотивированное пробуждение.

Коротко: этот метод полезен, если вы хотите быстро выключать экран ноутбука или внешнего монитора, экономя батарею, без смены спящего режима всей системы.

Поддерживаемые окружения и ограничения

  • Работает в сессиях X11 (Xorg). Не будет работать в Wayland — у Wayland другие API для управления вводом и DPMS.
  • Скрипт использует python и python-xlib; в некоторых системах требуется Python 2. Для Python 3 потребуются незначительные правки (см. раздел «Совместимость с Python 3»).

Быстрая инструкция — шаги

  1. Установите зависимости: sudo apt-get install python python-xlib
  2. Создайте исполняемый Python-скрипт с кодом ниже и сохраните, например, в ~/bin/screen_off.py
  3. Сделайте файл исполняемым (свойства файла → разрешить выполнение или chmod +x)
  4. Назначьте файл на горячую клавишу в настройках «Клавиатура → Сочетания клавиш»

Установка зависимостей

Откройте терминал и выполните:

sudo apt-get install python python-xlib

Эта команда установит интерпретатор Python (если он ещё не установлен) и библиотеку python-xlib, позволяющую работать с сервером X из Python.

Скрипт — создайте файл и вставьте код

Скопируйте и вставьте следующий код в текстовый редактор и сохраните как ~/bin/screen_off.py (или любое другое место):

#!/usr/bin/python
import time
import subprocess
from Xlib import X
from Xlib.display import Display

# Подключаемся к монитору X-сессии
display = Display(':0')
root = display.screen().root

# Блокируем указатель и клавиатуру, чтобы гарантировать получение следующего события ввода
root.grab_pointer(True,
                  X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask,
                  X.GrabModeAsync, X.GrabModeAsync,
                  0, 0, X.CurrentTime)
root.grab_keyboard(True, X.GrabModeAsync, X.GrabModeAsync, X.CurrentTime)

# Выключаем монитор через xset
subprocess.call('xset dpms force off'.split())

# Запускаем команду для интеграции с gnome-screensaver (опционально)
p = subprocess.Popen('gnome-screensaver-command -i'.split())

# Небольшая пауза, чтобы система успела перейти в состояние «экран выключен»
time.sleep(1)

# Ждём следующего события ввода и затем завершаем процесс блокировки
while True:
    print(display.next_event())
    p.terminate()
    break

Примечание: shebang указывает /usr/bin/python — в некоторых системах это Python 2. Для Python 3 замените print(display.next_event()) на print(display.next_event()) с учётом синтаксиса Python 3 (то есть в скрипте выше синтаксис уже соответствует Python 3). Если у вас есть только python3, используйте #!/usr/bin/env python3.

Сделать файл исполняемым

Через GUI: правый клик по файлу → Свойства → Вкладка «Права» → включите «Разрешить выполнение файла как программы».

Через терминал:

chmod +x ~/bin/screen_off.py

Скриншот: интерфейс выключения монитора в Ubuntu

ALT: Схематичное изображение выключения монитора клавишей в Ubuntu

Назначение горячей клавиши

  1. Откройте «Настройки» → «Клавиатура» → «Сочетания клавиш».
  2. Нажмите «Добавить» (или «+»), задайте имя и в поле «Команда» укажите полный путь к вашему скрипту, например /home/vasya/bin/screen_off.py
  3. После добавления нажмите на поле «Сочетание» и укажите желаемую клавишу.

Если хотите назначить Caps Lock: сперва отключите поведение Caps Lock в «Клавиатура → Макеты → Параметры клавиатуры» и выберите «Отключить Caps Lock». В интерфейсе может отображаться как “VoidSymbol”, но назначение будет работать.

Скриншот: gedit с кодом скрипта

ALT: Окно текстового редактора gedit с открытым кодом Python-скрипта для выключения экрана

Скриншот: свойства файла для разрешения выполнения

ALT: Окно свойств файла в Ubuntu со включённой опцией разрешения на выполнение

Скриншот: параметры раскладки клавиатуры

ALT: Параметры раскладки клавиатуры — отключение Caps Lock

Скриншот: создание нового сочетания клавиш

ALT: Окно настроек сочетаний клавиш в Ubuntu, добавление нового ярлыка

Почему этот скрипт надёжнее простого xset в цикле

  • Скрипт захватывает ввод мыши и клавиатуры через Xlib, поэтому точно знает, когда придёт следующее событие, и не пускает «фальшивые» события, которые раньше могли разбудить экран.
  • Запуск xset в цикле потребляет CPU и неудобен для отмены; здесь мы выполняем один вызов xset и ждём реального события.

Когда это не сработает

  • Wayland: Wayland не поддерживает Xlib — используйте инструменты, специфичные для Wayland (например, wlroots-утилиты или API DE).
  • Окружения с нестандартными screensaver/locker: если оконный менеджер или окружение активно генерирует события ввода или программно меняет DPMS, поведение может отличаться.

Альтернативные подходы

  • xrandr: можно понижать яркость или отключать вывод через xrandr, но это управляет самим выводом, а не DPMS.
  • systemd-inhibit / power profiles: использовать управление питанием на уровне системы, чтобы переводить машину в легкий спящий режим.
  • D-Bus-методы DE: некоторые окружения предоставляют D-Bus API для блокировки экрана и отключения дисплея.

Тесты и критерии приёмки

  • Скрипт должен погасить экран при нажатии назначенной клавиши.
  • Экран остаётся погашенным до следующего реального события ввода (клик или клавиша).
  • CPU не растёт до 100% во время ожидания события.
  • Скрипт корректно завершается после пробуждения экрана.

Устранение неполадок

  • Скрипт ничего не делает: проверьте наличие python-xlib и права на выполнение.
  • Скрипт завершился с ошибкой Display(‘:0’): возможно, DISPLAY отличается (используйте echo $DISPLAY в терминале, чтобы узнать текущий дисплей, и подставьте Display(os.environ[‘DISPLAY’])).
  • При работе в Wayland: используйте X11-сессию (на экране входа выберите Xorg) или ищите Wayland‑специфичный инструмент.

Совместимость с Python 3

Если ваша система использует только Python 3, замените shebang на #!/usr/bin/env python3 и убедитесь, что синтаксис print корректен (в данном примере print уже использует скобки).

Риски и безопасность

  • Скрипт захватывает ввод (grab_pointer/grab_keyboard) — это штатный механизм X; неправильно модифицированный код может оставить захват незавершённым. Всегда тестируйте в контролируемой сессии.
  • Не запускайте сомнительные скрипты с правами root — этот скрипт не требует повышения привилегий.

Короткий глоссарий

  • DPMS: стандарт энергосбережения монитора (Display Power Management Signaling).
  • Xlib: библиотека взаимодействия с X11-сервером.
  • Xorg/X11: классический сервер отображения графики в Linux.

Шаблон проверки перед выкладкой (Checklist)

  • Зависимости установлены (python, python-xlib)
  • Скрипт сохранён и доступен по полному пути
  • Файл помечен как исполняемый
  • Горячая клавиша назначена и протестирована в X11-сессии

Итог

Это простой и надёжный метод вернуть функциональность выключения монитора по горячей клавише в Ubuntu при использовании X11. Он экономит батарею и работает лучше циклических вызовов xset. Если вы перешли на Wayland, рассмотрите DE‑специфичные решения.

Важное: если что-то идёт не так — проверяйте текущую переменную DISPLAY и убедитесь, что вы в X-сессии.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро