добавить правило udev для внешнего дисплея

Я написал небольшой сценарий оболочки, настраивающий подключенные внешние дисплеи с помощью 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 определенно работает, потому что вызов его вручную после подключения делает то, что должен.

Чего не хватает?


person didi_X8    schedule 08.10.2012    source источник


Ответы (1)


Это выглядит примерно так же. Единственная реальная разница, которую я вижу, заключается в том, что скрипт устанавливает переменную DISPLAY, которая может быть ключевой.

http://ruedigergad.com/2012/01/28/hotplug-an-external-screen-to-your-laptop-on-linux/

person Paul Archer    schedule 10.01.2013
comment
Это была половина того, чего не хватало. Также необходимо: переменная окружения XAUTHORITY, см. заголовок unix.stackexchange.com/questions/14854/. Я установил ваш ответ как правильный, потому что он привел меня на правильный путь. - person didi_X8; 18.03.2013