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
は確実に機能します。
何が欠けていますか?