o emacs não pode abrir a exibição

4

Recentemente, isso começou a acontecer; Eu corro: /usr/bin/emacsclient --alternate-editor="" --no-wait -c e recebo:

ERROR: Display :0.0 can't be opened

Nenhuma outra aplicação faz isso.

A saída de 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
.....

Editar:

Eu descobri que servidores / daemons antigos do emacs ainda estão em execução.

$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

Alguém tem alguma idéia de como isso pode ser desligado quando eu fizer logoff?

    
por ctrl-alt-delor 23.06.2011 / 14:08

3 respostas

3

Dada a informação adicional, eu acho que o seu emacsclient está se conectando ao servidor emacs "errado". (Ou melhor, o primeiro que foi iniciado: invocações subseqüentes de emacs --daemon falharão ao iniciar o servidor já que o soquete de comunicação já está em uso). Se o daemon do emacs foi iniciado em uma sessão X anterior, ele está usando o erro errado. credenciais para se conectar ao display X e, assim, falhar.

Você pode descobrir qual processo do emacs está executando o servidor conectando-se a ele no modo não-gráfico / tty; execute o emacsclient em um terminal com a opção -nw :

emacsclient -nw

Você pode matar um emacs em execução fazendo com que ele execute o código LISP através do emacsclient:

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

onde:

  • a opção -t (alias para -nw ou --tty ) é para evitar que o Emacs se conecte à exibição X;
  • o server-save-buffers-kill-terminal desanexa o emacsclient antes de você informar ao Emacs para parar (caso contrário, ele emitirá um prompt de confirmação);
  • a função save-buffers-kill-emacs é normalmente invocada por C-x C-c , o argumento 1 diz ao Emacs para não solicitar confirmação.

Além disso, eu acho que a razão pela qual você está tendo tantos emacs --daemon em execução é que você invoca o emacsclient com a opção --alternate-editor="" : o página do manual emacsclient (1) afirma que:

If the value of (the alternate) EDITOR is the empty string, then Emacs is started in daemon mode and emacsclient will try to connect to it.

Pode ser uma opção melhor para iniciar emacs --daemon do seu script de inicialização do X session (por exemplo, .gnomerc ou a configuração de sessão do GNOME) para que o gerenciador de sessão mate o daemon do emacs quando a sessão terminar.

    
por 25.06.2011 / 11:56
1

Acho que acho que está acontecendo. Eu preciso saber mais sobre como você loga e como você inicia o Emacs para lhe dizer como consertar isso.

Um programa X precisa ter duas informações para se conectar a um monitor X. Ele precisa saber o nome da exibição, que normalmente é obtido da variável de ambiente DISPLAY . Ele também precisa ter uma senha para a exibição, chamada de cookie X, e geralmente armazenada em um arquivo chamado ~/.Xauthority ou indicado pela variável de ambiente XAUTHORITY . ( Mais explicações aqui )

Eu suspeito que o Emacsclient está passando as informações de exibição corretas ( :0.0 ) para o processo principal do Emacs, mas não está passando o cookie X. Normalmente, o Emacsclient envia seu próprio ambiente (incluindo XAUTHORITY , se presente) para o servidor Emacs, e os dois processos têm acesso ao mesmo sistema de arquivos para ler o arquivo de cookie. Isso está falhando aqui.

Para descobrir por que, aqui estão as perguntas cujas respostas provavelmente serão úteis:

  • Qual é o valor de $XAUTHORITY ? (Se não definido, é como se o valor fosse ~/.Xauthority .)
  • Onde está esse arquivo e quais são as permissões nele?
  • O processo do Emacs e o cliente atual foram lançados em um contexto diferente de alguma forma (máquina, usuário, chroot,…)?
  • O processo Emacs tem um valor diferente para $XAUTHORITY ? ( ps -C emacs wwe ou grep -az XAUTHORITY= /proc/$(pidof emacs)/environ )
  • Como você faz login (em um gerenciador de exibição (que), no modo de texto, sobre SSH,…)? Como o processo do Emacs é iniciado (de onde, em que ponto)? É iniciado como um daemon?
por 24.06.2011 / 00:33
0

O bug # 586685 do Debian tem algumas soluções alternativas para esse problema; parece ser uma mudança introduzida com o gdm3 (onde o arquivo Xauthority está armazenado).

Existe também um bug no upstream: Bug do Gnome # 651431 .

    
por 20.09.2011 / 20:24