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将无法启动服务器,因为通信套接字已在使用中。)如果 emacs 守护进程在先前的 X 会话中启动,则它使用错误的连接凭据到 X 显示,因此失败。

您可以通过以非图形/tty 模式连接到服务器来找出哪个 emacs 进程正在运行服务器;在终端中使用以下-nw选项运行 emacsclient:

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-terminal在告诉 Emacs 停止之前分离 emacsclient(否则它将发出确认提示);
  • save-buffers-kill-emacs函数通常由 调用C-x C-c,参数1告诉 Emacs 不要要求确认。

另外,我猜你运行这么多的原因emacs --daemon是你使用以下选项调用 emacsclient --alternate-editor=""手册页 emacsclient(1)指出:

如果(备用)EDITOR 的值为空字符串,则 Emacs 将以守护进程模式启动,并且 emacsclient 将尝试连接到它。

emacs --daemon从 X 会话启动脚本(例如,或 GNOME 会话配置)启动可能是一个更好的选择,.gnomerc以便会话管理器在会话终止时负责杀死 emacs 守护进程。

答案2

我想我猜出发生了什么事。我需要了解有关如何登录以及如何启动 Emacs 的更多信息,以便告诉您如何修复它。

X 程序需要有两条信息才能连接到 X 显示。它需要知道显示的名称,该名称通常取自DISPLAY环境变量。它还需要有一个用于显示的密码,称为 X cookie,通常存储在~/.Xauthority由环境变量调用或指示的文件中XAUTHORITY。 (更多解释请看这里

我怀疑 Emacsclient 正在将正确的显示信息 ( :0.0) 传递给主 Emacs 进程,但它没有传递 X cookie。通常,Emacsclient 将其自己的环境(包括XAUTHORITY如果存在)发送到 Emacs 服务器,并且两个进程可以访问同一文件系统来读取 cookie 文件。这在这里失败了。

为了找出原因,以下问题的答案可能会有用:

  • 的价值是什么$XAUTHORITY? (如果未设置,则该值就好像是~/.Xauthority。)
  • 该文件在哪里以及它的权限是什么?
  • Emacs 进程和当前客户端是否以某种方式在不同的上下文中启动(机器、用户、chroot,...)?
  • Emacs 进程是否有不同的值$XAUTHORITY? (ps -C emacs wwe或者grep -az XAUTHORITY= /proc/$(pidof emacs)/environ
  • 您如何登录(在显示管理器(其中)、文本模式、通过 SSH,...)? Emacs 进程是如何启动的(从哪里、在什么时候)?它是作为守护进程启动的吗?

答案3

Debian 错误#586685对于这个问题有几个解决方法;这似乎是 gdm3(存储 Xauthority 文件的位置)引入的更改。

还有一个上游 bug:Gnome bug#651431

相关内容