Благодарности: денежное общество и мойка авто

Управление монитором с клавиатуры через DisplayPort

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

Для управления монитором будем использовать программу ddccontrol, это консольная утилита которая имеет и GUI интерфейс, но нам GUI не нужна. Устанавливаем

sudo apt install ddccontrol gddccontrol ddccontrol-db i2c-tools

выполним ещё пару команд для работы программы

sudo adduser $USER i2c
sudo /bin/sh -c 'echo i2c-dev >> /etc/modules'

теперь можно запустить программу DDC control

и понастраивать монитор, но нам надо сделать управление с помощью горячих клавиш и для этого используем консольную версию. Для начала проверим какие адреса отвечают за ту или иную регулировку.

ddccontrol -p

у меня в базе нет моего монитора, однако монитор отдал при запросе адреса регисторв регулировки яркости, контраста и прочего.

ddccontrol версии 0.6.0
Авторские права 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Авторские права 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
Эта программа распространяется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Вы можете распространять ее копии на условиях GNU General Public License.
Найдены мониторы :
 — Устройство: dev:/dev/i2c-5
   Поддерживается DDC/CI: Да
   Имя монитора: VESA standard monitor
   Тип входа: Цифровой
  (Автоматический выбор)
Чтение EDID и инициализация DDC/CI на шине dev:/dev/i2c-5…
I/O warning : failed to load external entity «/usr/share/ddccontrol-db/monitor/GSM5AE2.xml»
Document not parsed successfully.
Чтение EDID:
Plug and Play ID: GSM5AE2 [VESA standard monitor]
Тип входа: Аналоговый
=============================== ПРЕДУПРЕЖДЕНИЕ ===============================
There is no support for your monitor in the database, but ddccontrol is
using a basic generic profile. Many controls will not be supported, and
some controls may not work as expected.
Please update ddccontrol-db, or, if you are already using the latest
version, please send the output of the following command to
ddccontrol-users@lists.sourceforge.net:
LANG= LC_ALL= ddccontrol -p -c -d
Спасибо.
=============================== ПРЕДУПРЕЖДЕНИЕ ===============================

= VESA standard monitor
> Color settings
> Brightness and Contrast
> id=brightness, имя=Brightness, адрес=0x10, задержка=-1ms, тип=0
поддерживается, значение=100, максимум=100
> id=contrast, имя=Contrast, адрес=0x12, задержка=-1ms, тип=0
поддерживается, значение=70, максимум=100
> Color maximum level
> id=red, имя=Red maximum level, адрес=0x16, задержка=-1ms, тип=0
поддерживается, значение=50, максимум=100
> id=green, имя=Green maximum level, адрес=0x18, задержка=-1ms, тип=0
поддерживается, значение=50, максимум=100
> id=blue, имя=Blue maximum level, адрес=0x1a, задержка=-1ms, тип=0
поддерживается, значение=50, максимум=100
> Color minimum level
> id=redblack, имя=Red minimum level, адрес=0x6c, задержка=-1ms, тип=0
поддерживается, значение=0, максимум=100
> id=greenblack, имя=Green minimum level, адрес=0x6e, задержка=-1ms, тип=0
поддерживается, значение=0, максимум=100
> id=blueblack, имя=Blue minimum level, адрес=0x70, задержка=-1ms, тип=0
поддерживается, значение=0, максимум=100
> Input settings
> Input sources
> id=inputsource, имя=Input Source Select (Main), адрес=0x60, задержка=-1ms, тип=2
Возможные значения:
> id=analog — имя=Analog, значение=1
> id=digital — имя=Digital, значение=3
поддерживается, значение=4, максимум=3
> Others
> Restore defaults
> id=defaults, имя=Restore Factory Defaults, адрес=0x4, задержка=2000ms, тип=1
Возможные значения:
> id=default — имя=Restore Factory Defaults, значение=1
поддерживается, значение=0, максимум=1
> id=defaultluma, имя=Restore Brightness and Contrast, адрес=0x5, задержка=2000ms, тип=1
Возможные значения:
> id=default — имя=Restore Brightness and Contrast, значение=1
поддерживается, значение=0, максимум=1
> id=defaultcolor, имя=Restore Factory Default Color, адрес=0x8, задержка=2000ms, тип=1
Возможные значения:
> id=default — имя=Restore Factory Default Color, значение=1
поддерживается, значение=0, максимум=1
> OSD
> id=newcontrolvalue, имя=New Control Value, адрес=0x2, задержка=-1ms, тип=2
Возможные значения:
> id=nochanges — имя=No changes, значение=1
> id=changed — имя=Some values changed, значение=2
поддерживается, значение=1, максимум=255
> Power control
> id=dpms, имя=DPMS Control, адрес=0xd6, задержка=-1ms, тип=2
Возможные значения:
> id=on — имя=On, значение=1
> id=standby — имя=Standby, значение=4
поддерживается, значение=1, максимум=4

синий это адрес монитора, красным я выделил адреса регистров, меня интересует яркость и выключение монитора. Для установки 100% яркости надо ввести команду:

ddccontrol dev:/dev/i2c-5 -r 0x10 -w 100

где 0x10 это адрес регистра, для выключения монитора

ddccontrol dev:/dev/i2c-5 -r 0xd6 -w 4

у Вас эти значения адресов могут быть другими. Для регулировки значений необходимо использовать ключ W, уменьшение яркости на 10% будет выглядеть так:

ddccontrol dev:/dev/i2c-5 -r 0x10 -W -10

увеличение на 10% так:

ddccontrol dev:/dev/i2c-5 -r 0x10 -W -10

Теперь осталось задать горячие клавиши этим командам,

клавиша Shift у меня заменяет клавишу FN, и соответственно F1 — яркость =0, F2 — яркость =100%, F3 и F4 уменьшение и увеличение яркости на 10%, F11 -включение монитора, F12 — выключение монитора.

Однако все перечисленные функции работают за исключением включения монитора, поскольку в режиме ожидания (Standby) он не общается по шине.

Но у меня есть ещё и встроенные динамики звук на которые передается по DisplayPort и хотелось бы ими управлять, однако в выводе выше нет данных об адресе регистра для управления динамиками, но есть команда для вывода значений всех регистров, для определения регистра громкости установим громкость на мониторе в значение в которое не установлен ни один другой параметр монитора, я установил громкость на значение 41 и выполнил команду отображения всех регистров

ddccontrol -p -c -d

я приведу лишь кусок вывода

Control 0x5c: +/0/0 [???]
Control 0x5d: +/0/0 [???]
Control 0x5e: +/0/0 [???]
Control 0x5f: +/0/0 [???]
Control 0x60: +/4/3 C [Input Source Select (Main)]
Control 0x61: +/0/0 [???]
Control 0x62: +/41/100 [???]
Control 0x63: +/0/0 [???]
Control 0x64: +/0/0 [???]
Control 0x65: +/0/0 [???]
Control 0x66: +/0/0 [???]
Control 0x67: +/0/0 [???]
Control 0x68: +/0/0 [???]
Control 0x69: +/0/0 [???]
Control 0x6a: +/0/0 [???]
Control 0x6b: +/0/0 [???]
Control 0x6c: +/0/100 C [Red minimum level]
Control 0x6d: +/0/0 [???]
Control 0x6e: +/0/100 C [Green minimum level]
Control 0x6f: +/0/0 [???]
Control 0x70: +/0/100 C [Blue minimum level]
Control 0x71: +/0/0 [???]
Control 0x72: +/0/0 [???]
Control 0x73: +/0/0 [???]
Control 0x74: +/0/0 [???]
Control 0x75: +/0/0 [???]
Control 0x76: +/0/0 [???]
Control 0x77: +/0/0 [???]
Control 0x78: +/0/0 [???]
Control 0x79: +/0/0 [???]

ищем где текущее значение 41 это и будет наша громкость. Теперь точно так же зададим горячие клавиши.

F5 — громкость 0, F6 — громкость 100%, F7 — уменьшить громкость на 10%, F8 — увеличить громкость на 10%