udevルールで呼び出されたシェルコマンドでxrandrコマンドが実行されない

udevルールで呼び出されたシェルコマンドでxrandrコマンドが実行されない

私はUltraBase(ドッキングステーション)を含むThinkpadを所有しています。私のオペレーティングシステムはUbuntu 10.10です。これで、外部モニタの解像度を正しく設定して「ドッキング」イベントに反応したいと思います。私がしたことは次のとおりです。

$ udevadm info -a -p /sys/devices/platform/dock.0

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/devices/platform/dock.0':
  KERNEL=="dock.0"
  SUBSYSTEM=="platform"
  DRIVER==""
  ATTR{modalias}=="platform:dock"
  ATTR{docked}=="0"
  ATTR{flags}=="16"
  ATTR{uid}=="0"
  ATTR{type}=="dock_station"

looking at parent device '/devices/platform':
  KERNELS=="platform"
  SUBSYSTEMS==""
  DRIVERS==""

その後、udevルールを作成しました。

$ cat /etc/udev/rules.d/99-docking.rules
KERNEL=="dock.0", ATTR{docked}=="1", RUN+="/usr/local/sbin/dock.sh"

/usr/local/sbin/dock.shスクリプトは次のとおりです。

#!/bin/sh
# turn external display on, internal off
echo "hello world" >> "/home/hoppe/udev.out"
/usr/bin/xrandr --output LVDS1 --off
/usr/bin/xrandr --output DP2 --mode "1920x1080"
echo "hello world" >> "/home/hoppe/udev.out"
exit

両方のechoコマンドは問題なく実行されます。また、スクリプトを手動で呼び出すと、解像度が正しく設定されます。私は何が間違っていましたか?

ベストアンサー1

xrandr実行されましたが失敗しました。エラーメッセージを読んでください。何が間違っているのか教えてくれます。#!この行の後に次の行を追加すると、スクリプトのすべての出力をログファイルに入れることができます。

exec >/home/hoppe/udev.out 2>&1

メッセージは次のとおりです。

Can't open display 

他のXプログラムと同様に、環境変数xrandrとしてマークされたXサーバーと通信しますDISPLAY。どのディスプレイと会話したいかを教えてください。いつでも複数のXサーバーが稼働している可能性があり、一部はハードウェアと通信し、一部はリモートで(たとえば、仮想ネットワークコントローラ)、一部には目に見えるディスプレイがありません(例:xvfb)待つ。どのXモニターが特定のハードウェアに接続されているかを見つけるのは簡単ではありませんが、実際にはこのモニターが:0ハードウェアに接続されており、他のモニターがすべて接続されていないとします。したがって、これをスクリプトに入れます。

export DISPLAY=:0

問題を解決した後にDISPLAYモニターにアクセスするには、スクリプトを承認する必要があります。スクリプトが root として実行されても、X はネットワーク透過性であるため、自動的には実行されません。ローカルディスプレイへのローカルルートアクセスのみを許可する必要があり、通常特別なメカニズムはありません。クッキーこのメカニズムはルートでも機能します。この内容は次のとおりです。他のユーザーのデスクトップからrootとしてグラフィカルプログラムを起動できますか?

おすすめ記事