UDEV: RUN+="/usr/bin/setsid /usr/bin/nautilus"가 작동하지 않습니다. X 사용자로 이를 감지하고 실행하는 이유와 방법은 무엇입니까?

UDEV: RUN+="/usr/bin/setsid /usr/bin/nautilus"가 작동하지 않습니다. X 사용자로 이를 감지하고 실행하는 이유와 방법은 무엇입니까?

~에서수동 udev

이는 매우 단기적으로 실행되는 포그라운드 작업에만 사용할 수 있습니다. 장기 실행 이벤트 프로세스는 해당 장치 또는 슬레이브 장치에 대한 모든 추가 이벤트를 차단할 수 있습니다.

나는 이것을하고있다 :

KERNEL=="sd[a-z]", SUBSYSTEM=="block", ATTR{ro}=="0", ATTR{removable}=="1", SUBSYSTEMS=="usb", DRIVERS=="usb-storage", SYMLINK+="usb_%E{ID_VENDOR}_%E{ID_MODEL}_%E{ID_SERIAL_SHORT}"
ACTION=="add", KERNEL=="sd[a-z]", SUBSYSTEM=="block", ATTR{ro}=="0", ATTR{removable}=="1", SUBSYSTEMS=="usb", DRIVERS=="usb-storage", RUN+="/usr/bin/setsid /usr/bin/nautilus"

과연 세시드새 세션에서 프로그램 실행

나는 달리고 있다엑스처럼: 루트 937 1.4 1.3 179992 26328 xinit /root/.xinitrc를 통한 tty2 S

답변1

X11 프로그램을 실행하려면 창을 어디에 배치할지 알려줘야 합니다. 이는 DISPLAY환경 변수를 통해 수행됩니다.

콘솔에 로그인한 사용자가 있는 경우 일반적으로 해당 디스플레이가 있습니다 :0(그러나 둘 이상이 있을 수 있으며 :0콘솔이 아닌 X 서버에 사용될 수 있음). 따라서 다음을 포함하는 스크립트를 실행해야 합니다.

#!/bin/sh
export DISPLAY=:0
setsid nautilus &

너는 필요할지도 모른다XAUTHORITY설정 외에도DISPLAY.

그러나 이것은 잘못된 접근 방식입니다. 콘솔에 로그인한 사용자가 없으면 어떻게 되나요? 콘솔 사용자가 여러 명이라면 어떻게 되나요? X 쿠키 파일이 루트에 직접 액세스할 수 없는 FUSE 파일 시스템에 있으면 어떻게 되나요?

udev가 데스크탑 애플리케이션에 알릴 수 있는 메커니즘이 있습니다:D 버스. 많은 데스크톱 환경에서는 이 기능을 사용하여 이동식 장치를 연결할 때 파일 관리자 창이 팝업되도록 예약합니다. 정확히 어떻게 작동하는지 모르겠지만, 그것이 당신이 조사해야 할 것입니다.

관련 정보