Автоматическое определение подключения-отключения второго монитора

в 16:24, , рубрики: gentoo, linux, udev

Всем, доброго времени суток.

По сути, к реализации этой маленькой автоматизации меня сподвигла лень.

Собственно, с чего все началось.

У меня есть ноутбук с установленной gentoo, и i3wm оконным менеджером. Так же есть несколько мониторов(дома, на работе и т д). Разрешения на всех мониторах разные, способы подключения тоже (VGA, HDMI, DVI) разные. Активно, использую первые два.

Раньше, при подключении второго монитора, приходилось вызывать команды, которые инициализировали этот самый монитор. Запуск команды с автоматическим ключем, не всегда давал, желаемого результата(не угадывал разрешение).

xrandr --auto

Потому, приходилось запускать эту же команду, но с набором других ключей, расширением например.

--mode

И хотя, в xrandr для каждого манитора у меня есть несколько вариантов разширений, есть одно (максимальное для данного монитора, которое удолетворяет), но на каждом мониторе оно разное(так как сами мониторы разные).

Потому пришлось искать решение…

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

Все, что нам нужно, это заглянуть в директорию /etc/udev/rules.d, где собственно и будут храниться наши правила для монитора.

Далее нужно создать там файл. Создание файлов в этой директории, подчиняются парочке маленьких правил. А именно, то, что имена файлов должны иметь разширение .rules. И второе, не столь важное в данной ситуации. Все файлы разположены в алфавитном порядке, что влияет на порядок выполнения файла.

Я назвал свой файл так — 70-persistent-monitor.rules — лишь по аналогии с файлами, что уже были в этой папке.
Содержимое файла следующее

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/bin/change_monitor.sh"

Для получения значений KERNEL и SUBSYSTEM выполните команду:

 sudo udevadm monitor

И подключите отключите второй монитор

Автоматическое определение подключения отключения второго монитора

ACTION — указывает на какие действия реагировать, в данном случае на оба включение и отключение. И собственно RUN — тот скрипт который мы будем запускать. Из примера видно, что файл называется change_monitor.sh и находится в /usr/bin/. Хотя разположение, может быть и другим. Например /home/user/bin

Ну и собственно сам файл

#!/bin/sh

#export Display for output
export DISPLAY=:0.0

#some scripts for work
xrandr_command="/usr/bin/xrandr"
awk_command="/bin/awk"

#get max  resolution of connected devises

resolution_VGA=`${xrandr_command} | $awk_command '/VGA1 connected/ { getline; print  $1}'`

resolution_HDMI=`${xrandr_command} | $awk_command '/HDMI1 connected/ { getline; print  $1}'`

#if resolution exist we get true
if [ -n "$resolution_VGA" ]; then

#notify-send $resolution_VGA
xrandr --output VGA1 --above LVDS1 --mode $resolution_VGA

elif [ -n "$resolution_HDMI" ]; then

#notify-send $resolution_HDMI
xrandr --output HDMI1 --above LVDS1 --mode $resolution_HDMI

else

xrandr --auto

fi

Возможно, реализация не очень и красивая, но рабочая. Мы стараемся получить максимально установленное разрешение для подключенного монитора из output команды xrandr. В том случае, если монитор подключен, то строка /VGA1 connected будет найдена. Если нет то она будет VGA1 disconnected и ничего найдено не будет.

P.S на разных системах именование устройств (VGA1 HDMI1) — могут отличаться. для того, что бы увидеть, достаточно набрать в консоли xrandr
Автоматическое определение подключения отключения второго монитора

Тут я думаю, все понятно.

Автор: daruwanov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js