emacsclient 연결이 거부되었습니다

emacsclient 연결이 거부되었습니다

데몬 모드에서 emacs를 실행하고 있는데 실행 중인 서버와의 연결이 끊어졌습니다. 다시 연결한 후 실행하면

emacsclient -nc

오류가 발생했습니다.

localhost 포트 6012에 연결 중: 연결이 거부되었습니다.

실수: 디스플레이 localhost:12.0을 열 수 없습니다.

데몬이 여전히 실행 중인 것 같지만 연결 방법을 모르겠습니다. 제안 사항이 있습니까?

관련성이 있을 수도 있고 그렇지 않을 수도 있는 기타 재미있는 사실:

스크린 세션을 통해 헤드 노드에 연결한 다음 서버의 다른 측면 노드에 연결합니다.

저는 며칠 동안 이 설정을 실행해 왔으며 일반적으로 아무런 문제 없이 다시 연결할 수 있습니다.

데몬을 다시 시작할 수 있다고 확신하지만 작업 세션이 matlab-emacs를 통해 상호 작용하는 실행 중인 matlab 작업에 연결되어 있으므로 작업 세션을 재개하고 싶습니다.

편집: Giles의 제안을 시도했지만 여전히 문제가 있습니다.

echo $DISPLAY

반품

로컬호스트:18.0

나는 스크린 세션에 들어가서 실행

export DISPLAY=localhost:18.0

스크린 세션에서 echo $DISPLAY를 다시 실행해도 됩니다.

로컬호스트:18.0

이제 emacsclient -nc가 반환됩니다.

실수: 디스플레이 localhost:18.0을 열 수 없습니다.

이제 스크린 세션을 실행하는 컴퓨터는 동일한 모니터를 사용하고 있지만 여전히 연결되어 있지 않습니다.

참고로 나도 시도해봤다

 export display=localhost:18

edit2: 내 시스템 아키텍처에 대한 참고 사항 내 사무실 노트북은 SSH를 통해 "host1" 서버에 연결되어 있습니다. Host1에는 여러 노드 시스템이 있습니다. 먼저 화면 세션을 생성하거나 로그인합니다.

 screen -S ohnoplus-five

그런 다음 node005에 연결합니다.

ssh node005

그런 다음 node005를 로그아웃하지 않고 화면에서 분리했다가 다시 연결합니다.

스크린-R 오노플러스-5

호스트 1에서

Gills의 제안에 따라 내 로컬 노트북이 아닌 호스트 1의 echo $DISPLAY가 반환한 디스플레이인 import DISPLAY=localhost18.0을 실행했습니다.

답변1

원격 GUI(X11) 연결TCP 포트 6000+를 통해N어디N디스플레이 번호입니다. 따라서 두 메시지 모두 동일한 문제를 나타냅니다. 일부 프로그램이 모니터 12에 연결을 시도하지만 실패합니다.

Emacsclient는 X11 연결을 설정하지 않지만 Emacs는 X11 연결을 설정합니다. 따라서 이 메시지가 표시된다면 Emacsclient가 Emacs에 접속하여 새 프레임을 열도록 지시했다는 의미입니다. Emacsclient가 X11 디스플레이를 사용할 수 있다고 생각하면 GUI 프레임을 요청하고, 그렇지 않으면 터미널 프레임을 요청합니다. 환경 변수를 설정한 후 DISPLAYEmacsclient는 X11 디스플레이를 사용할 수 있다고 가정합니다.

DISPLAY환경 변수는 X11 연결을 로컬 컴퓨터로 다시 전달할 때 SSH에 의해 자동으로 설정됩니다. 그러나 기존 Screen 세션에 연결하면 Screen 세션 내에서 설정된 변수를 포함한 환경을 얻게 됩니다 DISPLAY. 연결을 끊었다가 다시 연결하면 디스플레이 번호가 동일²하지 않을 수 있습니다.

변수를 업데이트하려면 DISPLAYScreen 세션에서 분리하고 실행하여 echo $DISPLAYSSH 설정 값(예: localhost:13)을 확인한 다음 Screen 세션에 다시 연결하고 실행합니다 export DISPLAY=localhost:13(또는 올바른 숫자). screen 세션에 창이 여러 개 있는 경우 각 창에서 이 작업을 수행해야 합니다. 새 창을 만드는 경우 Ctrl+ A :setenv DISPLAY localhost:13`을 입력하여 Enter화면 자체에 환경 변수를 설정하면 새 창이 제대로 작동하는지 확인할 수 있습니다.

원하는 경우 설정을 해제 DISPLAY하거나 를 실행하여 터미널 프레임을 열 수 있습니다 emacsclient -nw.

1 SSH는 10부터 시작하는 디스플레이 번호 매기기를 사용하며 로컬 디스플레이에는 0-9의 숫자만 남깁니다. 일반적으로 12가 표시되면 이것이 SSH를 통해 열린 세 번째 GUI 연결임을 의미합니다.
² 실제로 네트워크 문제로 인해 연결이 끊어졌다가 빠르게 다시 연결되는 경우 원격 컴퓨터는 아직 네트워크 문제를 인식하지 못할 가능성이 높습니다. 클라이언트가 메시지를 보낸 지 시간이 꽤 지났다는 것만 알 수 있지만 이는 정상입니다. 비활성 - 이 경우 원격 컴퓨터에 관한 한 모니터 12는 계속 사용 중입니다.


SSH 홉이 여러 개 있고 로컬 시스템에서 중간 시스템으로의 연결이 중단되고 복원된 경우, 복원 후 중간 시스템의 디스플레이 번호가 변경되었지만 중간 시스템에서 최종 시스템으로의 SSH 연결은 여전히 ​​유지됩니다. 원래 디스플레이 번호를 전달합니다.

이 경우 가장 쉬운 방법은 최종 머신에서만 Screen을 실행하고 중간 머신을 그대로 사용하는 것입니다.대리인. 다음에 추가

Host node[0-9]*
ProxyCommand ssh -W %h:%p host1

당신에게 ~/.ssh/config달려가세요 ssh node005. 그러면 중개 기계에 대해 걱정할 필요가 없습니다.

Screen을 중간 시스템에서 실행해야 하는 경우 변수를 업데이트한 후 호스트1에서 node005로의 SSH 연결을 다시 시작해야 합니다 DISPLAY. (이전 디스플레이 번호에서 새 디스플레이 번호로 TCP 연결을 전달할 수도 있지만 이는 이전 디스플레이 번호가 그동안 재사용되지 않은 경우에만 작동합니다.)

관련 정보