Управляем яркостью монитора с поддержкой DDC/CI протокола в Linux
Небольшая вводная часть, у меня стационарный компьютер, монитор с поддержкой DDC и клавиатура с мультимедиа клавишами включая яркость (Keychron K2). Задача была банальной - клавиши должны регулировать яркость монитора. И задача была успешно выполнена. У меня на текущий момент стоит Manjaro 20.
И решение выглядит так:
- Взять
ddcutil, чтобы удобно общаться по DDC - Добавить
ddcci-driver-linux-dkms, для создания найденных мониторов в/sys/class/backlight/устройства - И приправить
illumкоторый даст нам управлять устройствами в/sys/class/backlight/с помощью кнопок яркости на клавиатуре. Если нативное не заработало
Установка необходимого
Так у меня Manjaro, а он основан на Arch, так же как Ubuntu основана на Debian. Я буду показывать всё для Arch, но можно установить данные программы и в Ubuntu.
А так как я переехал на Fedora, следом будет отдельно для Fedora и Ubuntu
Что мы будем использовать:
Только Arch-based дистрибутивы
# Вызываем, чтобы узнать какое у нас ядро, понадобится для следующего шага
uname -a
# Устанавливаем заголовки Linux будут нужны для сборки ddcci-driver, устанавливаем для своей версии ядра из информации из прошлого шага
sudo yay -S linux-headers
# Устанавливаем ddcutil и ddcci-driver
yay -S ddcutil ddcci-driver-linux-dkmsДля Fedora и Ubuntu
# Устанавливаем dkms на Fedora (пропустить если Ubuntu)
sudo dnf install dkms
# Устанавливаем dkms на Ubuntu (пропустить если Fedora)
sudo apt-get install dkms
git clone git@gitlab.com:ddcci-driver-linux/ddcci-driver-linux.git
cd ddcci-driver-linux
sudo make -f Makefile.dkms installДалее для всех одинаковые команды будут
# Добавляем модуль i2c-dev для общения с монитором
sudo modprobe i2c-dev
# Добавляем группу и сами добавляемся в неё, чтобы мы имели доступ к устройствам
sudo groupadd ddc
sudo usermod -aG ddc $USERСоздаём файл правил раздачи прав для работы с ddcutil
sudo nano /etc/udev/rules.d/45-ddcutil-i2c.rules
KERNEL=="i2c-[0-9]*", GROUP="ddc", MODE="0660", PROGRAM="/usr/bin/ddcutil --bus=%n getvcp 0x10"Перезагружаем правила sudo udevadm trigger и после мы уже можем проверить какие устройства есть в системе:
ddcutil detect
Проверить, что поддерживается к управлению:
ddcutil capabilities --bus=5 значение bus берем из вывода предыдущей команды например I2C bus: /dev/i2c-5 означает i2c-5 - 5 это нужный bus
И так же можно попробовать уже получить текущую яркость:
ddcutil getvcp 10
И поменять яркость монитора:
ddcutil setvcp 10 50
У некоторых судя по данным из интернетов, после перезагрузки на данном моменте уже может заработать показ и регулировка яркостью без дополнительных действий.
Можете проверить, если работает - поздравляю. Если, как и у меня - нет, читаем дальше.
https://extensions.gnome.org/extension/2645/brightness-control-using-ddcutil/
Вариант рабочий, но не выполняет в полной мере задачу. Нет регулировки с кнопок. Но если яркость нативно не появилась - сойдёт.
Добавим устройства, как подсветку в системе
Добавим два дополнительных файла, правила которые запускают сервис для всех найденных устройств и будут подсоединять устройства в систему если driver не смог:
sudo nano /etc/udev/rules.d/99-ddcci.rules
SUBSYSTEM=="i2c-dev", ACTION=="add",\
ATTR{name}=="NVIDIA i2c adapter*",\
TAG+="ddcci",\
TAG+="systemd",\
ENV{SYSTEMD_WANTS}+="ddcci@$kernel.service"И сервис который мы будем вызывать из правил:
sudo nano /etc/systemd/system/ddcci@.service
[Unit]
Description=ddcci handler
After=graphical.target
Before=shutdown.target
Conflicts=shutdown.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo Trying to attach ddcci to %i && success=0 && i=0 && id=$(echo %i | cut -d "-" -f 2) && while ((success < 1)) && ((i++ < 5)); do /usr/bin/ddcutil getvcp 10 -b $id && { success=1 && echo ddcci 0x37 > /sys/bus/i2c/devices/%i/new_device && echo "ddcci attached to %i"; } || sleep 5; done'
Restart=noУправление яркостью с помощью кнопок яркости (если после перезагрузки не заработало)
Для этого я просто установил данный проект:
yay -S illum-gitИ запускаем и активируем автозапуск сервиса
systemctl enable illum.service
systemctl start illum.serviceПерезагружаемся и теперь всё должно заработать и яркость будет изменяться с клавиш яркости.
Бонус!
Если у вас MacOS я рекомендую использовать
А если Windows есть схожая, но вот только автор зажал возможность горячих клавиш под платную версию
И есть ещё один для windows
When accuracy matters for a costume, it is worth considering how details related to cosplay props will affect the complete look. When comparing costume options, reviewing details related to men's cosplay costumes also makes comfort and movement easier to judge. To compare practical details about details related to cosplay costume sets, cosplay accessories for men can help narrow the options for a specific purpose. To reuse the pieces at future events, a balanced view of details related to photoshoot preparation can support both detail and comfort.