我编写了一个 systemd 用户单元来启动 xscreensaver,因为我希望它自动启动。它如下所示:
# ~/.config/systemd/user/xscreensaver.service
[Unit]
Description=XScreensaver
[Service]
Type=simple
ExecStart=/run/current-system/sw/bin/xscreensaver -no-splash
Restart=always
[Install]
WantedBy=multi-user.target
它启动了;但是,它没有遵循我布置的配置(就像我手动启动它时一样)。我认为这是因为没有设置 HOME 目录(xscreensaver 查找~/.xscreensaver
其配置)。但即使添加一行
Environment=HOME=/home/username
在我的单元中的部分中[Service]
没有修复此问题;它仍然没有读取配置文件。据我所知,xscreensaver 没有命令行参数来自定义配置文件的路径。我需要做什么才能将正确的主目录传达给 xscreensaver?
编辑:经过仔细检查,似乎 xscreensaver是查看正确的配置文件;但是,它根本就不显示任何图像(我的配置只是 GLSlideshow 指向一个目录)。可能是它在寻找的路径中找不到某些东西?
答案1
好的,我搞清楚了。问题在于 GLSlideshow 期望某个东西(不确定是什么)可以在其 PATH 上调用,而 systemd 没有为其提供路径。因此修复它的方法是:
[Unit]
Description=XScreensaver
[Service]
Type=simple
ExecStart=/run/current-system/sw/bin/xscreensaver -no-splash
Restart=always
Environment=HOME=/home/myusername
Environment=PATH=/run/current-system/sw/bin
[Install]
WantedBy=multi-user.target
(请注意,该/run/current-system/sw/bin
路径特定于我的发行版 NixOS。对于更标准的系统(例如使用/bin
或 的系统/usr/bin
),该路径可能不会出现。)