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모니터에 액세스하려면 스크립트를 승인해야 합니다. 스크립트가 루트로 실행되더라도 X는 네트워크 투명하기 때문에 자동으로 실행되지 않습니다. 로컬 디스플레이에 대한 로컬 루트 액세스만 허용되어야 하며 일반적으로 특별한 메커니즘은 없습니다.쿠키이 메커니즘은 루트에서도 작동합니다. 이 내용은 다음과 같습니다다른 사용자의 데스크탑에서 루트로 그래픽 프로그램을 시작할 수 있습니까?.

관련 정보