2010-12-09 2 views
0

udev에 이벤트에서 실패XOpenDisplay는 내가 지금처럼 X 표시를 열려고하고

disp = XOpenDisplay(NULL); 

내 사용자에서이 작업을 실행 잘 작동하지만, 쉘 때이 udev에 이벤트 (10.10 우분투)에서 실행되는 경우 함수 호출은 NULL을 반환합니다. 나는 이것이 다른 환경과 관련이 있는지 궁금해하고 XOpenDisplay (": 0.0")도 시도했지만 사용하지 못했습니다.

왜 이런 일이 발생하는지 알고 있습니까?

+0

사실 X가 다중 사용자 서버이고 표시 핸들이 현재 X 사용자의 컨텍스트에서 획득되어야하지만 누군가가이 모든 도움이 될만한 세부 정보를 가리킬 수 있기 때문에 실제로 추측하고 있습니다. – djp

답변

1

XOpenDisplay(NULL)은 일반적으로 udev 컨텍스트에서 설정되지 않은 DISPLAY 환경 변수를 검사합니다. XOpenDisplay(something) (something=NULL 포함)을 사용하려면 X 서버 인스턴스에 대한 액세스 키가 필요합니다.

XOpenDisplay 또는이를 사용하는 그래픽 프로그램을 사용하려면 XAUTHORITY 환경 변수를 키 파일의 위치로 설정해야합니다. 이 env var가 비어 있으면 ~/.Xauthority이 폴백으로 사용됩니다.

udev에서 그래픽 프로그램을 시작하는 것은 좋지 않은 아이디어입니다 (접근 방법 및 디자인에 잘못된 것이 있습니다) : X 디스플레이 번호를 알지 못합니다. 하나 이상의 X 서버가 활성화되어있을 수도 있기 때문에 추측 할 수 없습니다. 그리고 키 파일을 가져야합니다. 키 파일을 결정하거나 얻을 수있는 것은 아닙니다. udev는 루트로 실행될 수 있지만 NFS 마운트는 root_squash이고, 사람이 키 파일을 재배치 할 수있는 변수는 XAUTHORITY입니다.

그래픽 문제는 요즘 사용자 또는 데스크톱 환경에서 특정 이벤트를 특별히 수신하는 백그라운드 프로그램을 시작해야한다는 것을 의미합니다. 단순히 사람들의 스크린을 침범 할 수는 없지만 이벤트 알림 시스템을 준수해야합니다.

관련 문제