emacs 29.1 的库存 systemd 用户服务文件如下所示:
[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
[Service]
Type=notify
ExecStart=/usr/bin/emacs --fg-daemon
# ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
# Emacs will exit with status 15 after having received SIGTERM, which
# is the default "KillSignal" value systemd uses to stop services.
SuccessExitStatus=15
# The location of the SSH auth socket varies by distribution, and some
# set it from PAM, so don't override by default.
# Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure
[Install]
WantedBy=default.target
但是,在我的计算机启动、登录并尝试运行后emacsclient -c
,什么也没有发生,并且journalctl -u emacs -f --user
包含一个错误日志:
需要授权,但未指定授权协议
重新启动 emacs ( systemctl --user restart emacs
) 后,启动 emacs 没有问题,emacsclient 窗口按预期打开。但是,重新启动后,同样的问题又出现了——显然必须立即重新启动 emacs,这违背了将其设置为 systemd 用户服务的目的。
经过多次谷歌搜索后,我最终https://www.emacswiki.org/emacs/EmacsAsDaemon#h5o-19(编辑1:此链接现在已失效,请参阅底部)它表示我们需要通过添加以下行来确保 emacs 在 Gnome 之后启动:
[Unit]
[email protected]
[email protected]
问题是 Ubuntu 22.04+(目前运行 23.10)没有[电子邮件保护]单元。我尝试了各种方法,例如gdm.service
,user@%U.service
而不是上一节中的 gnome shell,但似乎都不起作用。这里正确的方法是什么?
我也看过https://emacs.stackexchange.com/questions/74937/systemd-starts-emacs-daemon-without-xauthority-environment-variable-after-upgrad其中提到了 gnome/x11/fedora 上的相同问题,但解决方案略有不同,但不适用于 Gnome/Wayland/Ubuntu 组合。
我也在Emacs StackExchange并已被重定向至此处。
编辑1:
Emacs Wiki 已更新说明,因此上述链接已失效。更新后的说明(截至撰写本文时)位于https://www.emacswiki.org/emacs/EmacsAsDaemon#h5o-1
但是,这些说明在 Ubuntu 23.10 上也不起作用。emacsclient -c
重启后启动时,我仍然收到与上述相同的错误日志(是的,我daemon-reload
也遇到了这种情况)。添加一个插件:
[Unit]
After=graphical-session.target
没有帮助。
答案1
除了设置之外,还有什么有帮助的:
[Unit]
After=graphical-session.target
[Install]
WantedBy=graphical-session.target
是将配置文件从符号链接~/.config/systemd/user/default.target.wants/emacs.service
(指向/usr/lib/systemd/user/emacs.service
)移动到新目录graphical-session.target.wants
。
所以现在应该是:
~/.config/systemd/user/graphical-session.target.wants/emacs.service -> /usr/lib/systemd/user/emacs.service