스크립트를 사용하려고 하는데,엔비디아 팬 컨트롤러, 내 시스템(Arch Linux)의 GPU 온도를 제어합니다. systemd를 통해 실행하려고 할 때 오류가 발생하는 것을 제외하고는 잘 작동합니다.
nvidia-settings control display is undefined
조사 결과 문제는 서비스에 사용된 .Xauthority 파일에서 발생한 것으로 보입니다. nvidia-settings
는 스크립트에서 사용되며 .Xauthority 파일을 사용하지만 팬 속도를 변경하려면 루트 액세스가 필요합니다. systemd를 통해 액세스할 수 있는 .Xauthority 파일을 루트에 제공하는 방법이 있습니까? 서비스는 현재 서비스를 설치하는 데 사용한 sysadmin 사용자에 대해 이 파일을 가리키므로 다른 사용자가 로그인하면 실행되지 않습니다.
사용자 서비스 생성을 시도했지만 명령이 루트로 실행되어야 하기 때문에 작동하지 않았습니다.
답변1
현재 동일한 배포판에서 비슷한 문제를 다루고 있는데 아치 위키에서 다음 섹션을 찾았습니다.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