SSH를 통해 내 컴퓨터에 로컬로 연결할 때(묻지 마세요. 해결 방법입니다.) 다음을 실행하지 않으면 그래픽 응용 프로그램을 시작할 수 없습니다.
export DISPLAY=:0.0
먼저 실행한 다음 그래픽 응용 프로그램을 실행하면 모든 것이 작동합니다. 그렇지 않으면 작동하지 않으며 연결할 모니터가 없습니다.
기계에서 사용 가능한 모든 디스플레이(예: 가능한 모든 값)를 나열하는 명령이 있습니까?
답변1
SSH를 통해 X 연결을 전달하려면 서버와 클라이언트 측 모두에서 이를 활성화해야 합니다. (배포판에 따라 기본적으로 활성화되거나 X11Forwarding yes
비활성화 될 수 있습니다.) 서버 측에서/etc/sshd_config
(또는 /etc/ssh/sshd_config
구성 파일이 있는 곳이면 어디든지) 클라이언트 측에서는 -X
옵션을 다음으로 전달합니다.ssh
주문하다ForwardX11
, 또는~/.ssh/config
.
을 실행하면 (아마도) yes 가 ssh -X localhost
표시될 것입니다 . 반면 SSH를 통해 연결되지 않은 경우의 값입니다. (이 부분은 생략 가능합니다. 화면 번호이지만 여러 화면을 사용하는 경우는 거의 없습니다.) X 표시는 두 가지 형태로 나타날 수 있습니다.$DISPLAY
localhost:10.0
:0.0
.0
- 이전 콘텐츠 없이 로컬로 표시됩니다
:
. - 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)
원격 디스플레이는 열린 TCP 포트 6000 이상에 해당합니다. 시스템 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 포트의 일반적인 범위를 조사할 수 있습니다. 현재는 특히 루프백 인터페이스 외부에서 TCP 소켓을 수신하는 X 서버가 거의 없습니다.엄밀히 말하면 다른 응용 프로그램은 X 서버에서 일반적으로 사용하는 포트 범위를 사용할 수 있습니다. 포트가 열려 있는 프로그램을 확인하여 X 서버가 수신 대기 중인지 여부를 알 수 있습니다.
lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
이렇게 모호한 내용이 나타난다면
sshd
X 서버인지 아니면 단순한 우연의 일치인지 알 수 없습니다.
답변2
yes 의 첫 번째 매개변수를 표시합니다 Xorg
. 그런 다음 그것을 ps
해결할 수 있습니다 Xorg
.
[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
그런 다음 필요한 형식으로 변환 할 수 있습니다 .
답변3
# 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
]
답변4
이 /tmp
폴더에는 세션 번호를 나타내는 .X??-lock
파일이 있을 수도 있습니다.??
세션 번호를 재사용하려면 삭제해야 합니다.
ls -a
정상적으로 사용되는 것을 볼 수 있으며 , a로 시작하는 파일은 .
숨겨져 있습니다.