web-dev-qa-db-ja.com

Mini DisplayPortに何かが差し込まれたり切断されたりしたときにスクリプトを実行できますか?

/etc/acpi/には、ラップトップのふたを開いたり閉じたりするときに呼び出されるlid.shスクリプトのように、物理コンピューターで特定のイベントが発生したときに何かを行うためにカスタマイズできるスクリプトがいくつかありますが、 mコマンドを実行できるように、Mini DisplayPortに何かが差し込まれたり切断されたりしたことを検出する方法を探しています。

そこにそのようなスクリプトはありません(何かを見逃していない限り)。

コマンドは、xrandrを使用してマルチモニターのセットアップを自動的に構成します。これはGnomeで(~/.config/monitors.xmlを使用して)自動的に行われていましたが、xmonadに完全に切り替えたため、これを自動的に検出しません。

4
user779159

はい、udevを使用して可能になるはずです。

こちら 同様の質問(HDMI(切断)接続のサウンド出力を変更する)を尋ねました。まず、次のようなudevルールを作成する必要があります。

SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/update_screen_config"

私の答えと同じ場所にあるはずですが、名前は変更できます。必要なサブシステムとアクションを正確に知るには、udevadmを使用してDPを接続します。私のシステムでは、次のようなHDMI画面を接続しています。

$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
(here I connected my screen)
KERNEL[16383.092226] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [16383.281930] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
(disconnected my screen)
KERNEL[16389.092226] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [16389.281930] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)

2番目の部分は、/usr/local/bin/update_screen_configの作成です(他の名前または場所を指定できます)。 Pythonスクリプトを使用しましたが、実行できるため、必要なものを使用できます。これは、ケーブルが接続/切断されたときに呼び出されるスクリプトになるため、現在の状態を見つけ、xrandrを使用して必要なことを行う必要があります。画面の状態を検出した方法と、それがニーズに合っているかどうかを確認してください。

注:このスクリプトは、udevによってrootとして実行されるため、udevを使用する前に通常のユーザーとしてテストしてください。

3
Salem