SSH를 내 컴퓨터에 로컬로 넣었을 때 (해결 방법은 아닙니다) 실행하지 않으면 그래픽 응용 프로그램을 시작할 수 없습니다.
export DISPLAY=:0.0
이것을 먼저 실행 한 다음 그래픽 응용 프로그램을 실행하면 문제가 해결됩니다. 그렇지 않으면 작동하지 않고 연결할 디스플레이가 없습니다.
컴퓨터에서 사용 가능한 모든 디스플레이 (예 : 가능한 모든 값)를 나열하는 명령이 있습니까?
답변
SSH를 통해 X 연결을 전달하려면 서버 측과 클라이언트 측 모두에서 연결을 활성화해야합니다. (배포에 따라 기본적으로 활성화 또는 비활성화 될 수 있습니다.) 서버 측 X11Forwarding yes
에서 /etc/sshd_config
(또는 /etc/ssh/sshd_config
구성 파일이있는 위치) 있는지 확인하십시오 . 클라이언트 측에서 -X
옵션을 ssh
명령 에 전달하거나에 입력 ForwardX11
하십시오 ~/.ssh/config
.
를 실행 ssh -X localhost
하면 $DISPLAY
(아마도) localhost:10.0
입니다. :0.0
SSH를 통해 연결되지 않은 경우의 값 인와 대조하십시오 . (이 .0
부분은 생략 될 수 있습니다. 화면 번호이지만 여러 화면이 거의 사용되지 않습니다.) X 표시에는 두 가지 형태가 있습니다.
- 앞에 아무 것도없는 로컬 디스플레이
:
. - TCP는 호스트 이름과 함께 앞에 표시됩니다
:
.
을 사용하면 ssh -X localhost
두 디스플레이를 통해 X 서버에 액세스 할 수 있지만 응용 프로그램은 다른 방법을 사용합니다. :NUMBER
로컬 소켓 및 공유 메모리를 통해 HOSTNAME:NUMBER
서버에 액세스하는 반면 TCP를 통해 서버에 액세스하면 속도가 느리고 일부 확장이 비활성화됩니다.
쿠키라고하는 X 서버에 액세스하려면 일반적으로 파일의 비하인드 스토리 뒤에 저장되는 인증 양식이 필요합니다 ~/.Xauthority
. ssh를 사용하여 다른 사용자 계정에 액세스하거나 배포에서 쿠키를 다른 파일에 넣은 경우 DISPLAY=:0
SSH 세션 내에서 쿠키 가 작동하지 않을 수 있습니다 (그러나 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 서버인지 우연의 일치인지 확실하게 알 수 없습니다.
답변
표시는의 첫 번째 인수 Xorg
입니다. ps
그런 다음 grep Xorg
out 할 수 있습니다 .
[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
필요한 곳 어디에서나이 작업을 수행 할 수 있습니다.
답변
# 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
]
답변
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
답변
에서 /tmp
폴더도있을 수 .X??-lock
와 파일을 ??
세션 번호를 나타내는.
세션 번호를 재사용하려면이를 삭제해야합니다.
ls -a
로 시작하는 파일 .
이 숨겨져 있는 것을 볼 수 있습니다 .