Небольшая вводная часть, у меня стационарный компьютер, монитор с поддержкой 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
Перезагружаем правила 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
У некоторых судя по данным из интернетов, после перезагрузки на данном моменте уже может заработать показ и регулировка яркостью без дополнительных действий.
Можете проверить, если работает - поздравляю. Если, как и у меня - нет, читаем дальше.
Тут по желанию можно даже остановиться и установить Gnome extension https://extensions.gnome.org/extension/2645/brightness-control-using-ddcutil/
Вариант рабочий, но не выполняет в полной мере задачу. Нет регулировки с кнопок. Но если яркость нативно не появилась - сойдёт.
Добавим устройства, как подсветку в системе
Добавим два дополнительных файла, правила которые запускают сервис для всех найденных устройств и будут подсоединять устройства в систему если driver не смог:
sudo nano /etc/udev/rules.d/99-ddcci.rules
И сервис который мы будем вызывать из правил:
sudo nano /etc/systemd/system/ddcci@.service
Управление яркостью с помощью кнопок яркости (если после перезагрузки не заработало)
Для этого я просто установил данный проект:
yay -S illum-git
И запускаем и активируем автозапуск сервиса
systemctl enable illum.service
systemctl start illum.service
Перезагружаемся и теперь всё должно заработать и яркость будет изменяться с клавиш яркости.
Бонус!
Если у вас MacOS я рекомендую использовать
А если Windows есть схожая, но вот только автор зажал возможность горячих клавиш под платную версию
И есть ещё один для windows