问题
我正在使用 Systemd 将 Emacs 守护进程作为用户服务运行,遵循EmacsWiki 中的文档。我在使用 Fedora-36 时配置了它,一切都按预期工作。当我升级到 Fedora-37 后,emacsclient -c
开始失败并出现错误*ERROR*: Display :0 can't be opened
; Emacs 守护进程也添加Authorization required, but no authorization protocol specified
到systemctl --user status emacs.service
输出中。
临时解决方案。
首先,我发现只需重新启动服务即可systemctl --user restart emacs.service
解决问题,直到我再次重新启动计算机。但每次启动机器时都必须手动重新启动该服务,这违背了使用 Systemd 自动启动它的目的。
调试尝试。
经过对这个主题的一些研究,我发现 emacs 守护进程XAUTHORITY
在自动启动时没有获取环境变量。重启后运行ps -C emacs eww
,可以看到设置了以下14个环境变量。
HOME, LANG, LOGNAME, PATH, SHELL, SYSTEMD_EXEC_PID, USER,
XDG_DATA_DIRS, XDG_RUNTIME_DIR, DBUS_SESSION_BUS_ADDRESS,
NOTIFY_SOCKET, MANAGERPID, INVOCATION_ID, JOURNAL_STREAM
重新启动服务后,我看到43个环境变量。合计 29 个新变量,有DISPLAY
、GNOME_SETUP_DISPLAY
、WAYLAND_DISPLAY
、 和XAUTHORITY
。
因此一种可能性是 Systemd 在这些变量可用之前启动了用户服务,从而导致了问题。如果是这种情况,我该如何解决?
但我还发现我可以.Xauthority
在我的主目录中创建一个名为 file 的软链接,它指向实际的软链接,并且 Emacs 似乎无需这些环境变量即可工作。因此,也许不需要这些环境变量,从 fedora-36 到 fedora-37 的变化是.Xauthority
主目录中不再有该文件。如果是这种情况,我应该如何解决这个问题?
答案1
我最近在 F37 安装上从 Plasma X11 切换到 Plasma Wayland 后遇到了这个问题。我通过搜索网络看到的共识似乎就是您所发现的:在图形环境和变量可用emacs.service
之前启动。不过DISPLAY
我没有收到Authorization required
你的消息。
我开始将emacs.service
文件从移动~/.config/systemd/user/default.target.wants
到~/.config/systemd/user/graphical-session.target.wants
,但这并没有改变任何东西。
从中得到暗示如何按顺序启动systemd服务单元?,我复制/usr/lib/systemd/user/emacs.service
到~/.config/systemd/user
,将其链接到graphical-session.target.wants
文件夹中,并将以下几行添加到该[Unit]
部分
Requires=plasma-kwin_wayland.service
After=plasma-kwin_wayland.service
重新启动并重新登录后,我验证emacs.service
正在运行,并且能够emacsclient
像往常一样启动。