DISPLAY가 유효한지 확인하는 방법

DISPLAY가 유효한지 확인하는 방법

매뉴얼 페이지 X(7)를 읽고 이 문제를 검색했지만 해결책을 찾을 수 없습니다.

DISPLAY=:0환경이 여전히 표시에 유효한 경우 장기 실행 프로세스를 어떻게 확인할 수 있습니까? (사용자가 동시에 로그아웃할 수는 있지만 프로세스는 여전히 존재합니다)

가장 중요한 점은 DISPLAY가 여전히 다음에 속해 있는지 확인하는 것입니다.<USER>

답변1

어쩌면 다음과 같은 것일 수도 있습니다.

if sudo -Hu "$user" xdpyinfo -display "$DISPLAY" > /dev/null 2>&1; then
  echo "user $user can connect to display $DISPLAY"
else
  echo "user $user cannot connect to display $DISPLAY"
fi

가 없으면 xdpyinfoX 서버에 아무 것도 표시하지 않는 표준 단순 X11 유틸리티를 사용해 볼 수 있습니다(위에 표시된 대로 stdout 및 stderr이 /dev/null로 리디렉션됨).

xlsatoms -name PRIMARY
xprop -notype -root CUT_BUFFER0
xwininfo -root

답변2

유효한 디스플레이 였다면 :0프로세스(즉, 이를 제공한 xserver)는 루트가 소유했을 것입니다. "효과적"을 어떻게 이해하든 상관 없습니다.

xserver에 연결할 수 있는지 궁금하다면 xlsclients이 모니터에 연결을 사용하는 것이 좋습니다. 명령이 연결할 수 있으면 0을 반환하고, 연결할 수 없으면 1을 반환합니다.

X가 작동하는 방식은 한 명의 사용자가 한 번에 하나의 xserver에 연결하는 것이 아닙니다. 사용자를 xsessions에 바인딩하려면 xserver에 연결된 프로그램을 봐야 합니다. 창 관리자는 항상 하나의 (활성) 창 관리자만 있을 수 있으므로 좋은 후보입니다. 디스플레이 관리자에서 시작하여 프로세스 관계(상위 프로세스, 하위 프로세스)를 추적할 수도 있습니다. 그러나 이는 결코 사소한 일이 아닙니다. 어쩌면 디스플레이 관리자가 이 정보를 어딘가에 저장했을 수도 있지만 잘 모르겠습니다.

관련 정보