머신에서 열려있는 모든 디스플레이를 나열하는 명령이 있습니까?


76

SSH를 내 컴퓨터에 로컬로 넣었을 때 (해결 방법은 아닙니다) 실행하지 않으면 그래픽 응용 프로그램을 시작할 수 없습니다.

export DISPLAY=:0.0

이것을 먼저 실행 한 다음 그래픽 응용 프로그램을 실행하면 문제가 해결됩니다. 그렇지 않으면 작동하지 않고 연결할 디스플레이가 없습니다.

컴퓨터에서 사용 가능한 모든 디스플레이 (예 : 가능한 모든 값)를 나열하는 명령이 있습니까?


터미널에서 응용 프로그램을 시작하는 더 확실한 방법은 ( DISPLAY=:0 yourapp & )입니다.
nobar

3
명령 행 스크립트에서 해당 표시 번호를 얻으려면을 시도하십시오 w. 추가 정보 : 기존 X 표시 이름을 나열 하시겠습니까?
aexl

답변:


80

SSH를 통해 X 연결을 전달하려면 서버 측과 클라이언트 측 모두에서 연결을 활성화해야합니다. (배포에 따라 기본적으로 활성화 또는 비활성화 될 수 있습니다.) 서버 측 X11Forwarding yes에서 /etc/sshd_config(또는 /etc/ssh/sshd_config구성 파일이있는 위치) 있는지 확인하십시오 . 클라이언트 측에서 -X옵션을 ssh명령 에 전달하거나에 입력 ForwardX11하십시오 ~/.ssh/config.

를 실행 ssh -X localhost하면 $DISPLAY(아마도) localhost:10.0입니다. :0.0SSH를 통해 연결되지 않은 경우의 값 인와 대조하십시오 . (이 .0부분은 생략 될 수 있습니다. 화면 번호이지만 여러 화면이 거의 사용되지 않습니다.) X 표시에는 두 가지 형태가 있습니다.

  • 앞에 아무 것도없는 로컬 디스플레이 :.
  • TCP는 호스트 이름과 함께 앞에 표시됩니다 :.

을 사용하면 ssh -X localhost두 디스플레이를 통해 X 서버에 액세스 할 수 있지만 응용 프로그램은 다른 방법을 사용합니다. :NUMBER로컬 소켓 및 공유 메모리를 통해 HOSTNAME:NUMBER서버에 액세스하는 반면 TCP를 통해 서버에 액세스하면 속도가 느리고 일부 확장이 비활성화됩니다.

쿠키라고하는 X 서버에 액세스하려면 일반적으로 파일의 비하인드 스토리 뒤에 저장되는 인증 양식이 필요합니다 ~/.Xauthority. ssh를 사용하여 다른 사용자 계정에 액세스하거나 배포에서 쿠키를 다른 파일에 넣은 경우 DISPLAY=:0SSH 세션 내에서 쿠키 가 작동하지 않을 수 있습니다 (그러나 ssh -X서버에서 활성화되어 있으면 작동하지 않습니다) 할 XAUTHORITY때 엉망이되어야합니다 ssh -X). 이것이 문제라면 환경 변수설정XAUTHORITY 하거나 다른 사용자의 쿠키를 얻어야합니다 .

실제 질문에 대답하려면 :

  • 로컬 디스플레이는의 소켓에 해당합니다 /tmp/.X11-unix.

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • 원격 디스플레이는 6000 이상의 열린 TCP 포트에 해당합니다. 머신 M의 디스플레이 번호 N에 액세스하는 것은 머신 M의 TCP 포트 6000 + N에 연결하여 수행됩니다. 머신 M 자체에서 :

    netstat -lnt | awk '
      sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
        print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
      }'
    

    (이 글 머리 기호의 나머지 부분은 학문적 관심사입니다.)

    다른 컴퓨터 nmap -p 6000-6099 host_name에서 일반적인 범위의 열린 TCP 포트를 검사 하는 데 사용할 수 있습니다 . 현재 X 서버가 TCP 소켓, 특히 루프백 인터페이스 외부에서 수신 대기하는 경우는 거의 없습니다.

    엄밀히 말하면, 다른 응용 프로그램은 일반적으로 X 서버가 사용하는 범위의 포트를 사용할 수 있습니다. 포트가 열려있는 프로그램을 확인하여 X 서버가 수신 중인지 알 수 있습니다.

    lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
    

    이처럼 모호한 sshd것이 있으면 X 서버인지 우연의 일치인지 확실하게 알 수 없습니다.


15

표시는의 첫 번째 인수 Xorg입니다. ps그런 다음 grep Xorgout 할 수 있습니다 .

[braga@coleman teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

그런 다음 awk필요한 곳 ​​어디에서나이 작업을 수행 할 수 있습니다.


10
Xorg 이외의 서버에서 생성 한 디스플레이 (예 : Xvnc) 는 감지하지 않습니다 .
CJM

5
ps aux |grep X나를 위해 더 잘 작동
nobar

6
w로그인 한 모든 사람과 해당 디스플레이를 표시합니다.
Plenus Franckly

2
Xorg에 대한 주장은 (적어도 지금은 2016 년에) 선택적이고 (적어도 Fedora에서는) 없어서이 방법은 더 이상 작동하지 않습니다.
BRPocock

어떤 이유로 든 환경을 설정하는 것만으로도 var가 작동하지 않을 경우 ... 명령에 접두어를 DISPLAY=:0 netsurf "https://medium.com/"사용하거나 ... export DISPLAY=:0쉘을 사용하지 않고 프로세스와 var를 공유하십시오
Ray Foss

7
# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2

[편집 : Xnest 인스턴스를 실행하여 이것이 잡히는 지 확인했습니다. 로그인 쉘만 캡처합니다 ( 'w'는 'who'의 줄임말). 나를 위해 드로잉 보드로 돌아갑니다.] [편집 : 찾았습니다 :

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2

]


1
그게 ... 이상하다 ... 나는 그 설명이 무엇인지 궁금하다.
Fordi

(GDM을 디스플레이 1024에서 실행하는 것과 관련하여) 나는 그것을 두 번 복제 할 수 없었습니다. 당시 xrdp, X11 포워딩 및 몇 가지 VNC 클라이언트를 시도했습니다. 일반 설치에서는 잠금 화면에서 "다른 사용자로 로그인"버튼을 누르면 GDM이 X0 ... 또는 X1에서 실행되는 것 같습니다. 두 번째 방법은 Fedora 23에서 작동했습니다.
Ray Foss

명령을 사용하여 Display 1024에서 무언가를 찾았지만 실행중인 것을 볼 수 없습니다 ... ps xeww | grep DISPLAY=:1024지금은 더 이상합니다. 디스플레이 20에서 Chrome-remote-desktop을 실행하고 있습니다.
Ray Foss

w응용 프로그램이 x 서버에서 실행되고 있지 않으면 (창 관리자 및 데스크탑 없음) 작동하지 않습니다. 그러나 ls /tmp/.X11-unix작동합니다.
12431234123412341234123

3
ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

모든 현재 DISPLAY를 나열하여 작업을 수행합니다. 또한 다음을 사용하여 특정 사용자 ($ usr)에 할당 된 디스플레이를 볼 수 있습니다.

ps e -u $usr | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

그 두 번째는 의미가 ps e -u $USER | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u있습니까?
Alexx Roche

0

에서 /tmp폴더도있을 수 .X??-lock와 파일을 ??세션 번호를 나타내는.

세션 번호를 재사용하려면이를 삭제해야합니다.

ls -a로 시작하는 파일 .이 숨겨져 있는 것을 볼 수 있습니다 .


그것들은 전시 세션입니까?
phk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.