내가 컴퓨터에 있고 X11 전달을 사용하여 컴퓨터에 ssh를 사용한다고 가정해 보겠습니다 local
. SSH 세션에서 실행 중인 프로그램이 표시되고 있음을 알릴 remote
수 있는 방법이 있습니까 ? 이상적으로는 X 서버를 실행하는 컴퓨터의 호스트 이름을 알고 싶습니다. 내 목표는 프로그램(emacs)이 표시되는 컴퓨터에 따라 다른 동작을 유발하는 것입니다.remote
local
답변1
X 서버가 호스트 이름을 클라이언트에 보고하지 않는 것 같습니다. 클라이언트는 연결하려는 호스트 이름을 알아야 하지만 SSH를 통해 연결해야 합니다. 즉, localhost
전달을 위해 SSH를 사용합니다.
OpenSSH 서버는 SSH_CLIENT
환경 변수를 설정합니다. 여기서 클라이언트의 IP 주소를 읽을 수 있습니다. 이는 서버가 보는 주소이므로 동일한 NAT 뒤에 있는 컴퓨터를 구별할 수 없습니다. 이는 다른 일이 발생하지 않는다는 가정 하에 X 서버의 주소입니다(SSH 전달, 클라이언트의 원격 X 서버...). Emacs를 실행하는 데 프레임워크를 생성하기 위해 emacsclient를 사용한 경우가 아니라 Emacs가 해당 SSH 연결에서 시작된 경우에만 Emacs에서 환경 변수를 얻을 수 있다는 점에 유의하십시오.
x-server-XXX
Emacs의 기능을 사용하여 x-display-XXX
모니터의 특정 속성(크기, 색상 심도, X 공급업체 등)을 얻을 수 있습니다 display-XXX
.
답변2
서버 이름을 얻는 깔끔한 방법:
서버가 시작되면 루트 속성에 자체 이름을 입력하도록 준비합니다.
xprop -root -f __SERVER_NAME__ 8s -set __SERVER_NAME__ "$(hostname -s)"
xprop -root __SERVER_NAME__
그런 다음 를 사용하여 이름을 얻을 수 있습니다 .