从 systemd 服务中运行 nvidia-settings

从 systemd 服务中运行 nvidia-settings

我正在尝试使用脚本,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

相关内容