Nice programing

X 서버가 실행 중인지 확인하는 방법은 무엇입니까?

nicepro 2020. 12. 29. 08:27
반응형

X 서버가 실행 중인지 확인하는 방법은 무엇입니까?


현재 세션 사용자가 Linux에서 Xserver를 실행 중인지 확인할 수있는 방법이 있습니까?

나는 다음과 같은 것으로 시작했습니다.

ps -e | grep X 

하지만 이것은 항상 작동하지 않습니다

한 가지 더 시도한 것은 $DISPLAY변수를 확인하는 것 입니다.

이것을 확인하는 다른 방법이 있습니까?

편집 : 일부 사람들은 $ DISPLAY 변수 사용을 제안했지만 사용자가이 변수를 사용하면 어떨까요? 그가 뭔가를 시도하고이 변수를 변경하면 내가 그것을 확인했을 때 더 이상 시스템의 정확한 상태를 반영하지 않습니다. 항상 정답을 반환하는 특정 방법이 없습니까?

따라서 프로그래밍 방식으로 수행 할 수 있습니다.

#include <X11/Xlib.h> 
int main()
    { exit(XOpenDisplay(NULL) ? 0 : 1);  } 

$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 

하지만 스크립트 방식을 찾고 있습니다.


많은 X 서버를 실행하는 서버에서 종종 X 명령을 실행해야하므로 ps기반 응답이 작동하지 않습니다. 당연히 $DISPLAY적절하게 설정되어야합니다. 그것이 유효한지 확인하려면 xset q다음과 같은 일부 조각에서 사용하십시오 .

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi

$ DISPLAY가 표준 방식입니다. 이것이 사용자가 사용할 X 서버 (있는 경우)에 대해 프로그램과 통신하는 방법입니다.


나는 사용한다

pidof X && echo "yup X server is running"

pgrep 및 $ DISPLAY는 다른 옵션입니다.

기타 고려 사항 :

su 그러면 $ DISPLAY가 설정되지 않습니다. 실행중인 프로그램의 환경을 변경하는 요인으로 인해 작동하지 않을 수 있습니다.

나는 ps -e를 추천하지 않는다 | grep X는 X 서버가 아닌 procX를 찾습니다.


X가 실행 중인지 확인하는 데 사용하는 트릭은 다음과 같습니다.

텔넷 127.0.0.1 6000

연결되면 X 서버가 실행 중이고 인바운드 TCP 연결을 수락합니다 (요즘에는 일반적으로 기본값이 아님) ....


사용할 수 있습니다 xdpyinfo(를 통해 설치할 수 있음 apt-get install x11-utils).


xprop -root &> /dev/null 

... "X-able"상황을 테스트하기 위해 시도 된 진정한 명령입니다. 그리고 X를 실행하는 모든 시스템에 있음이 거의 보장됩니다. 물론 명령이 발견되지 않으면 실패하므로 X가 존재하지 않더라도 X가 없다고 가정 할 수 있습니다. (그래서> 대신 &>를 사용합니다)


1)

# netstat -lp | grep -ix
tcp 00 * : x11 * : * 2937 / X 듣기          
tcp6 0 0 [::] : x11 [::] : * 2937 / X 듣기          
활성 UNIX 도메인 소켓 (서버 만 해당)
unix 2 [ACC] 스트림 듣기 8940 2937 / X @ / tmp / .X11-unix / X0
unix 2 [ACC] 스트림 듣기 8941 2937 / X /tmp/.X11-unix/X0
#

2) nmap

# nmap localhost | grep -ix
6000 / tcp 개방 X11
#

이 목적을 위해 xdpyprobe 프로그램을 작성 했습니다 . xset, xdpyinfo 및 기타 일반 도구와 달리 추가 작업을 수행하지 않으며 (X 서버를 확인하고 종료하기 만 함) 출력을 생성하지 않을 수 있습니다 ( "-q"옵션이 지정된 경우).


먼저 기본 X11 패키지가 서버에 올바르게 설치되었는지 확인해야합니다.

rpm -qa | grep xorg-x11-xauth

그렇지 않은 경우 모든 패키지를 친절하게 설치하십시오.

sudo yum install xorg-x11-xauth xterm

openssh 서버가 x11 연결을 전달하도록 구성되어 있는지 확인합니다.

edit file : vim /etc/ssh/sshd_config

X11Forwarding yes

참고 : 해당 줄 앞에 주석 (#)이 있거나 no로 설정되어 있으면 위와 일치하도록 파일을 업데이트하고 ssh 서버 데몬을 다시 시작합니다 (여기에서주의하십시오. 오류가 발생하면 잠글 수 있습니다. 섬기는 사람)

sudo /etc/init.d/sshd restart

이제 X11 요청을 전달하도록 SSH 애플리케이션을 구성합니다.

ssh -Y your_username@your_server.your_domain.com

if [[ $DISPLAY ]]; then 
fi

확인을위한 PHP 스크립트입니다.

$xsession = `pidof X`;
if (!$xsession) {
    echo "There is no active X session, aborting..\n";
    exit;
}

Similar command can be used in shell script too. like the pidof command.


The bash script solution:

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi

Doesn't work if you login from another console (Ctrl+Alt+F?) or ssh. For me this solution works in my Archlinux:

#!/bin/sh
ps aux|grep -v grep|grep "/usr/lib/Xorg"
EXITSTATUS=$?
if [ $EXITSTATUS -eq 0 ]; then
  echo "X server running"
  exit 1
fi

You can change /usr/lib/Xorg for only Xorg or the proper command on your system.

ReferenceURL : https://stackoverflow.com/questions/637005/how-to-check-if-x-server-is-running

반응형