![从 systemd 服务中运行 nvidia-settings](https://linux22.com/image/214845/%E4%BB%8E%20systemd%20%E6%9C%8D%E5%8A%A1%E4%B8%AD%E8%BF%90%E8%A1%8C%20nvidia-settings.png)
我正在尝试使用脚本,nvidia 风扇控制器,控制我的系统(Arch Linux)上的 GPU 温度。这工作得很好,除了当我尝试通过 systemd 运行时,我收到错误
nvidia-settings control display is undefined
经过一番调查,问题似乎来自服务中使用的 .Xauthority 文件。nvidia-settings
,由脚本使用,依赖于.Xauthority 文件,但也需要 root 权限才能更改风扇速度。有没有办法给 root 一个可以通过 systemd 访问的 .Xauthority 文件?该服务当前指向我用于安装该服务的 sysadmin 用户的此文件,因此当任何其他用户登录时不会运行。
我尝试创建用户服务,但这不起作用,因为该命令必须以 root 身份运行。
答案1
我目前正在同一发行版上处理类似的问题,我在 arch wiki 上找到了这一部分:https://wiki.archlinux.org/title/Systemd/User#DISPLAY_and_XAUTHORITY
我不太理解它以及如何使用该脚本,而是使用了这个命令:
systemctl --user show-environment
要列出环境变量并将 DISPLAY 和 XAUTHORITY 添加到服务中,如下所示:
[Unit]
Description=GPU fan speed controller service
[Service]
ExecStart=/usr/local/bin/fan_sped_control.sh
Environment="DISPLAY=:1"
Environment="XAUTHORITY=/run/user/1000/gdm/Xauthority"
如果有人知道更干净的方法来实现这一目标,请告诉我:)
答案2
Hrvoje R. 的解决方案是正确的。
我通常从 systemd 服务执行的脚本中导出这些变量。
export XAUTHORITY=/run/user/1000/gdm/Xauthority
export DISPLAY=:1