6

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は確実に機能します。

何が欠けていますか?

4

1 に答える 1

7

これはほとんど同じように見えます。私が見る唯一の本当の違いは、スクリプトがDISPLAY変数を設定することです。これはキーである可能性があります。

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

于 2013-01-10T17:05:29.997 に答える