emacs가 디스플레이를 열 수 없습니다

emacs가 디스플레이를 열 수 없습니다

최근에 이런 일이 발생하기 시작했습니다. 나는 다음을 실행 /usr/bin/emacsclient --alternate-editor="" --no-wait -c합니다.

오류: 디스플레이: 0.0을 열 수 없습니다.

다른 어떤 앱도 이 작업을 수행하지 않습니다.

출력 xdpyinfo:

name of display: 0.0
version number: 11.0
vendor string: The X.Org Foundation
vendor release number: 10707000
X.Org version: 1.7.7

편집하다: 이전 Emacs 서버/데몬이 아직 실행 중이라는 것을 발견했습니다.

$ ps ux | grep [e]macs
richard   2642  0.0  0.8  38788 24984 ?        Ss   Jun22   0:25 emacs --daemon
richard   7512  0.0  0.6  33896 19720 ?        Ss   Jun23   0:05 emacs --daemon
richard  15458  0.0  0.6  32836 19076 ?        Ss   09:40   0:01 emacs --daemon

로그아웃할 때 끄는 방법 아시는 분 계신가요?

답변1

추가 정보를 보면 귀하의 emacsclient가 "잘못된" emacs 서버에 연결되어 있는 것 같습니다. (또는 첫 번째 것을 시작하는 것이 더 좋습니다. emacs --daemon통신 소켓이 이미 사용 중이기 때문에 후속 호출은 서버를 시작하지 못합니다.) 이전 X 세션에서 emacs 데몬이 시작된 경우 X에 대한 잘못된 연결 자격 증명을 사용하여 표시됩니다. 그래서 실패합니다.

비그래픽/tty 모드로 서버에 연결하여 다음 옵션을 사용하여 터미널에서 -nwemacsclient를 실행하면 어떤 emacs 프로세스가 서버를 실행하고 있는지 확인할 수 있습니다.

emacsclient -nw

emacsclient를 통해 LISP 코드를 실행하도록 하여 실행 중인 emacs를 종료할 수 있습니다.

emacsclient -t --eval '(progn (server-save-buffers-kill-terminal 1) (save-buffers-kill-emacs 1))' 

어디:

  • 이 옵션(또는 -t별칭)은 Emacs가 X 디스플레이에 연결되는 것을 방지합니다.-nw--tty
  • server-save-buffers-kill-terminalEmacs에게 중지하라고 말하기 전에 emacsclient를 분리하십시오(그렇지 않으면 확인 프롬프트가 표시됩니다).
  • save-buffers-kill-emacs함수는 일반적으로 Emacs에게 확인을 요청하지 않도록 C-x C-c지시하는 인수와 함께 호출됩니다.1

또한, 나는 당신이 너무 많이 실행하는 이유 emacs --daemon는 다음 옵션을 사용하여 emacsclient를 호출하기 때문이라고 추측합니다 --alternate-editor="".매뉴얼 페이지 emacsclient(1)지적했다:

(대체) EDITOR의 값이 빈 문자열인 경우 Emacs는 데몬 모드에서 시작되고 emacsclient는 이에 연결을 시도합니다.

emacs --daemon.gnomercX 세션 시작 스크립트(예: GNOME 세션 구성)에서 시작하는 것이 세션 종료 시 세션 관리자가 emacs 데몬 종료를 처리하도록 하는 더 나은 옵션일 수 있습니다 .

답변2

무슨 일이 일어났는지 추측한 것 같아요. 문제를 해결하는 방법을 알려드릴 수 있도록 로그인하고 Emacs를 시작하는 방법에 대해 더 많이 알아야 합니다.

X 프로그램이 X 디스플레이에 연결하려면 두 가지 정보가 필요합니다. 일반적으로 DISPLAY환경 변수 에서 가져오는 표시 이름을 알아야 합니다 . 또한 X 쿠키라는 표시용 비밀번호가 필요합니다. 이 비밀번호는 일반적으로 ~/.Xauthority환경 변수 로 표시되거나 호출되는 파일 에 저장됩니다 XAUTHORITY. (자세한 설명은 여기를 참조하세요)

:0.0Emacsclient가 올바른 표시 정보( )를 기본 Emacs 프로세스에 전달하지만 X 쿠키를 전달하지 않는 것 같습니다 . 일반적으로 Emacsclient는 자체 환경( XAUTHORITY존재하는 경우 포함)을 Emacs 서버로 보내고 두 프로세스 모두 동일한 파일 시스템에 액세스하여 쿠키 파일을 읽습니다. 여기서는 실패합니다.

그 이유를 알아보려면 다음 질문에 대한 답변이 유용할 수 있습니다.

  • 의 가치는 무엇입니까 $XAUTHORITY? (미설정시 해당 값은 처럼 동작합니다 ~/.Xauthority.)
  • 이 파일은 어디에 있으며 해당 권한은 무엇입니까?
  • Emacs 프로세스와 현재 클라이언트가 어떻게든 다른 컨텍스트(컴퓨터, 사용자, chroot 등)에서 시작됩니까?
  • Emacs 프로세스마다 다른 값이 있나요 $XAUTHORITY? ( ps -C emacs wwe또는 grep -az XAUTHORITY= /proc/$(pidof emacs)/environ)
  • 어떻게 로그인합니까(디스플레이 관리자(무엇보다도), 텍스트 모드, SSH를 통해...)? Emacs 프로세스는 어떻게 시작됩니까(어디에서 언제)? 데몬으로 시작되었나요?

답변3

데비안 오류#586685이 문제에 대한 해결 방법은 여러 가지가 있습니다. 이는 gdm3(Xauthority 파일이 저장되는 위치)에 의해 도입된 변경인 것으로 보입니다.

업스트림 버그도 있습니다: Gnome 버그#651431.

관련 정보