Я написал небольшой сценарий оболочки, настраивающий подключенные внешние дисплеи с помощью xrandr.
# cat /home/didi/bin/monitor_autoswitcher.sh
#!/bin/bash
xrandr | grep "HDMI1 connected"
if [[ $? == 0 ]]; then
# is connected
xrandr --output HDMI1 --right-of LVDS1 --auto
else
# not connected
xrandr --output HDMI1 --auto
fi
xrandr | grep "VGA1 connected"
if [[ $? == 0 ]]; then
# is connected
xrandr --output VGA1 --right-of LVDS1 --auto
else
# not connected
xrandr --output VGA1 --auto
fi
Это работает. Теперь я хочу, чтобы он запускался автоматически, и узнал, что это можно сделать с помощью udev. Я попытался
udevadm monitor
который при подключении внешнего дисплея выводит
KERNEL[465828.240250] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV [465828.243549] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
а при отключении
KERNEL[465836.844209] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV [465836.847445] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
Также хорошо.
Затем я добавил правило udev:
# cat 40-external-display.rules
SUBSYSTEM=="drm", ACTION=="change", RUN+="/home/didi/bin/monitor_autoswitcher.sh"
и перезапустил udev
service udev restart
К сожалению, при подключении/отключении дисплея по-прежнему ничего не происходит. Скрипт monitor_autoswitcher.sh
определенно работает, потому что вызов его вручную после подключения делает то, что должен.
Чего не хватает?