매뉴얼 페이지 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
가 없으면 xdpyinfo
X 서버에 아무 것도 표시하지 않는 표준 단순 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에 연결된 프로그램을 봐야 합니다. 창 관리자는 항상 하나의 (활성) 창 관리자만 있을 수 있으므로 좋은 후보입니다. 디스플레이 관리자에서 시작하여 프로세스 관계(상위 프로세스, 하위 프로세스)를 추적할 수도 있습니다. 그러나 이는 결코 사소한 일이 아닙니다. 어쩌면 디스플레이 관리자가 이 정보를 어딘가에 저장했을 수도 있지만 잘 모르겠습니다.