$DISPLAY를 올바르게 (재)설정하는 방법은 무엇입니까?

$DISPLAY를 올바르게 (재)설정하는 방법은 무엇입니까?

MobaXTerm을 사용하여 SSH를 통해 Windows PC에서 Linux PC로 연결합니다.

SSH 세션 내에는 일부 창과 창이 있는 tmux 세션이 있습니다.

ssh 세션은 몇 시간 동안 활동이 없으면 연결이 끊어지는 경우가 많습니다(MobaXTerm에서 유사한 연결 유지 설정을 시도했지만 성공하지 못했습니다).

첫 번째 문제: 새 SSH 세션을 시작한 후기존 tmux 세션에 다시 연결, $DISPLAY변수가 "잘못"으로 설정되는 경우가 있습니다. 즉, X-Windows(예: Firefox)를 사용하여 GUI를 시작할 때 "디스플레이를 열 수 없습니다"라는 오류 메시지가 나타납니다. 예를 들어:

$ firefox &
[1] 23077
$ Unable to init server: Broadway display type not supported: localhost:11.0
Error: cannot open display: localhost:11.0

[1]+  Exit 1                  firefox
$ echo $DISPLAY
localhost:11.0

보통 제가 오픈할 때새로운터미널과 나는 업데이트된/올바른 값을 얻을 것입니다 $DISPLAY. 해당 터미널에서 X-Window를 사용하여 GUI를 성공적으로 시작할 수 있습니다.

$DISPLAY질문: 동적으로 "업데이트 " 할 수 있는 방법이 있습니까?기존의터미널(즉, SSH 연결이 끊어질 때까지 활성화되는 터미널)?즉, 가져온/발견된 새 값에 대해서만 새 터미널을 시작하지 않으려고 합니다 $DISPLAY.

나는 그것이 무엇을 의미하는지 실제로 이해하지 못합니다 $DISPLAY. 따라서 누군가 그것이 무엇을 의미하고 설명된 맥락에서 무엇을 하는지 설명할 수 있다면 감사하겠습니다.

답변1

tmux가 연결되면 기본적으로 DISPLAY세션 환경에서 업데이트 되지만 새 창에만 적용할 수 있습니다. 기존 창에 적용하려면 다음을 수행할 수 있어야 합니다.

eval "$(tmux showenv -s DISPLAY)"

답변2

DISPLAYX 클라이언트(응용 프로그램)가 연결할 해당 X 서버를 찾는 데 사용됩니다. 형식이지만 hostname:displaynr.screennr일반적으로 이와 같은 내용만 볼 수 있습니다 :0. 이는 첫 번째 디스플레이에서 실행되는 X 서버를 의미합니다 localhost.

X 프로토콜이 암호화되지 않았기 때문에 호스트 이름을 사용하면 안전하지 않습니다. 따라서 sshX 전달은 이 모드를 사용하여 사용 가능한 디스플레이 번호(보통 10 이상)를 찾고 해당 디스플레이 번호에서 X 서버인 것처럼 가장합니다. 그러나 실제로는 SSH 연결을 통해 X 프로토콜을 SSH 클라이언트를 호출하는 호스트에서 실행되는 X 서버로 전달합니다.

그렇기 때문에 DISPLAY다시 연결할 때 뭔가 다른 결과를 얻게 됩니다 ssh. 각 연결은 ssh이 변수를 다른 값으로 설정합니다.

이 새로운 올바른 값이 표시됩니다.앞으로tmux에 연결합니다. 새 터미널을 열 때에도 볼 수 있습니다. 새 터미널은 새로 설정된 변수를 복사하는 반면 이전 터미널은 이미 가지고 있는 변수를 DISPLAY유지하기 때문입니다 .DISPLAY

DISPLAY따라서 tmux에 추가하는 대신 읽고 tmux에 추가한 다음 기존 세션에 설정하는 스크립트를 직접 작성한 경우 DISPLAY수행해야 할 작업을 자동화할 수 있습니다.

그러나 tmux를 사용하여 이 작업을 수행하는 것은 간단해 보이지 않습니다.여기당신에게 효과가 있을 수도 있고 없을 수도 있는 이 작업을 수행하는 방법에 대한 몇 가지 제안이 포함된 또 다른 질문입니다.

답변3

네트워크에 로그인할 때는 -X;(이전)을 사용하세요.ssh -X [email protected]

-X알림을 통해 ssh브라우저가 표시될 수 있습니다.

관련 정보