16.04에 Radu의 대답이 효과가없는 것 같습니다. 다른 릴리스로 변경되는 것으로 보이는 DISPLAY 문제와 싸우려고하기보다는 약간 다른 방식으로이 문제를 해결합니다. 두 가지 방법으로 호출되는 단일 스크립트를 만듭니다. udev 규칙은 스크립트를 호출하여 일종의 출력을 명명 된 파이프로 보냅니다. 로그인하면 스크립트도 서비스 모드에서 시작됩니다. 여기서 파이프를 수신하고 원하는 GUI 명령을 실행합니다.
예를 들어, USB 저장 장치가 연결될 때 알림을받는 것을 좋아합니다. 특히, 장치의 경로와 일련 번호 (이상하게 보일 수 있지만 이유가 있음)가 무엇인지 알고 싶습니다. 이 작업을 수행하는 데 사용하는 스크립트는 다음과 같습니다.
#!/bin/bash
# script name: usb-notify.sh
# This script needs to be called at logon with "service" parameter
# This script needs to be called by udev on USB insertion with no parameter
pipe="/tmp/usb-notifications"
if [ "$1" == "service" ]; then
# create the named pipe that will help us trigger events from udev
rm "$pipe"
mkfifo "$pipe"
# This outer while loop ensures that we can process multiple triggers
while true
do
# This inner while loop reads individual trigger events
while read info
do
# run some GUI command. Here, I'm running notify-send
notify-send "USB Inserted" "$(echo -e $info)"
done < "$pipe"
done
else
# Here's where udev triggers our event. If you don't need to pass any arguments
# you could just as easily pass an empty line as a trigger for the service.
[ -e "$pipe" ] && echo "Device: $DEVNAME\\\nSN: $ID_SERIAL_SHORT" > "$pipe"
fi
그런 다음이 스크립트를 두 가지 방법으로 호출해야합니다. 먼저이 스크립트를 호출하려면 udev 규칙을 만들어야합니다. 다음 명령으로이를 수행 할 수 있습니다 (물론 스크립트를 트리거하는 모든 장치를 감시하도록 변경해야 함).
echo 'ACTION=="add",KERNEL=="sd?",RUN+="[path-to-script]/usb-notify.sh"' | sudo tee -a /etc/udev/rules.d/80-USB.rules
둘째, 로그인시 "service"매개 변수를 사용하여이 스크립트를 호출해야합니다. "Startup Applications"프로그램을 열고 "[path-to-your-script] /usb-notify.sh service"를 실행하는 항목을 추가하십시오.
이 스크립트는 udev 이벤트에서 거의 모든 GUI 응용 프로그램을 실행하도록 수정할 수 있습니다. 다른 사용자가 파이프를 보지 못하게하려면 제한적인 권한을 설정해야합니다.