Управляем монитором из скрипта

На всем известном форуме наткнулся на одну, для меня интересную тему: автоматическое пробуждение или отправление монитора в standby при засыпании/пробуждении самой машины. Интересно будет тем, у кого стационарный компьютер или к ноутбуку подключен внешний монитор.

Программа называется ddccontrol - довольно древняя, но до сих пор находится в репах многих дистрибутивов. Она использует протокол DDC/CI, с ее помощью можно изменять яркость, контрастность изображени, управлять питанием и использовать некоторые другие возможности монитора. К сожалению не все мониторы поддерживают этот протокол или просто отсутствуюут в базе данных программы. Тестировалась мной на федоре, для убунты необходимо поправить путь к бинарнику. Кстати, мой монитор довольно новый ( > 3 лет), распознался без проблем. Итак, установка очень простая

$ sudo dnf install ddccontrol

или

$ sudo apt install ddccontrol

после установки запустите программу с параметром -p, чтобы узнать, поддерживается ли ваш монитор. Выполнять необходимо с правами администратора

$ sudo ddccontrol -p

При положительном результате вы получите гору информации. В нашем случае интересны строки находящиеся в самом верху - найденные мониторы

Detected monitors :
- Device: dev:/dev/i2c-2
DDC/CI supported: No
Monitor Name: VESA standard monitor
Input type: Digital
- Device: dev:/dev/i2c-1
DDC/CI supported: Yes
Monitor Name: VESA standard monitor
Input type: Analog
(Automatically selected)

"Device: dev:/dev/i2c-1" - это мой внешний монитор. И информация в самом низу, в разделе "> Power control":

> Power control
> id=dpms, name=DPMS Control, address=0xd6, delay=-1ms, type=2
Possible values:
> id=on - name=On, value=1
> id=standby - name=Standby, value=4
supported, value=1, maximum=4

Интересующие нас параметры address=0xd6 - идентификатор управления питанием , "value=1" - включение и "value=4" - standby.

На сайте можно найти различную документацию, я приведу команду, которая отправляет монитор в standby

$ sudo ddccontrol dev:/dev/i2c-1 -r 0xd6 -w 4

В начале, для того чтобы запускать команду каждый раз, когда ноут засыпает, я создал как обычно скрипт systemd (что кстати сработало), но пользователь intelfx предложил более юзабельный вариант - с sh скриптом. Для этого используем директорию /usr/lib/systemd/system-sleep (в вашей можетбыть другой), скрипты в которой будут автоматически запущены c различными аргументами: pre - для засыпания и post - пробуждения. В принципе из простого скрипта и так все понятно. Обзавем его monitor.sh

#!/bin/sh
case $1/$2 in
pre/*)
/usr/bin/ddccontrol dev:/dev/i2c-1 -r 0xd6 -w 4
;;
post/*)
/usr/bin/ddccontrol dev:/dev/i2c-1 -r 0xd6 -w 1
;;
esac

Скрипт надо сделать исполняемым. К сожалению права на выполнения только для рута не хватает, почему я еще не выяснил. Так что


$ sudo a+x /usr/lib/systemd/system-sleep/monitor.sh

Вот в принципе и все. Потестировать можно так


$ systemctl suspend

или


$ systemctl hibernate

ЗЫ: Могут быть проблемы с запуском скрипта из usr/lib/systemd/... , у кого активирован apparmor на убунте или selinux на федоре - для этого нужно добавлять соответствующие правила, но это уже отдельная тема. Я не параноик, на федоре всегда деактивирую монстроподобный, неповоротливый selinux. Но вы вправе кидаться тапками - с точки зрения безопасности это неразумно.

Оценка: 
5
Средняя: 5 (4 оценки)

Комментарии

Я не параноик, на федоре всегда деактивирую монстроподобный, неповоротливый selinux. Но вы вправе кидаться тапками — с точки зрения безопасности это неразумно.

Это как сказать. С одной стороны, он как бы нужен. С другой стороны, нужно владеть всеми нюансами настройки SELinux, иначе пользы от не него мало, а неожиданных проблем в разных местах много.

Оценка: 
Средняя: 5 (2 оценки)

Комментировать

Filtered HTML

  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <strike> <code> <h2> <h3> <h4> <h5> <del> <img>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.