升级到 Fedora 37 后,Systemd 在没有 XAUTHORITY 环境变量的情况下启动 emacs 守护进程

升级到 Fedora 37 后,Systemd 在没有 XAUTHORITY 环境变量的情况下启动 emacs 守护进程

问题

我正在使用 Systemd 将 Emacs 守护进程作为用户服务运行,遵循EmacsWiki 中的文档。我在使用 Fedora-36 时配置了它,一切都按预期工作。当我升级到 Fedora-37 后,emacsclient -c开始失败并出现错误*ERROR*: Display :0 can't be opened; Emacs 守护进程也添加Authorization required, but no authorization protocol specifiedsystemctl --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 个新变量,有DISPLAYGNOME_SETUP_DISPLAYWAYLAND_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像往常一样启动。

相关内容