Systemd - 사용할 .Xauthority 파일 찾기

Systemd - 사용할 .Xauthority 파일 찾기

현재 X 서버를 사용하여 노출된 서비스를 구성하기 위해 systemd 단위 파일을 사용하고 있습니다.

X 서버 인스턴스는 로그인한 사용자(현재 pi사용자)에 의해 시작되지만 서비스는 루트에서 시작됩니다.

systemctl start test_graphic_appXAUTHORITY.Xauthority 파일 위치를 유닛 파일의 변수 에 하드코딩하면 아래와 같이 성공적으로 서비스를 시작할 수 있습니다.

[Unit]
Description=Test Graphic App
After=multi-user.target

[Service]
Type=simple

User=root
Group=root

Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/pi/.Xauthority"

ExecStart=/usr/bin/python3 /usr/sbin/test_graphic_app.py

KillSignal=SIGINT
SuccessExitStatus=SIGINT

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=test_graphic_app

Restart=on-failure

[Install]
WantedBy=default.target

그러나 다른 사용자로 로그인하거나 랩톱에서 로컬로 실행하면 X를 시작한 사용자가 아니기 때문에 분명히 작동하지 않습니다.pi

시스템에서 .Xauthority 파일 위치를 동적으로 가져오고 싶습니다.


sudo xauth info | grep Authority | awk '{print $3}'나는 다음과 같이 사용하려고

Environment="XAUTHORITY=$(/usr/bin/xauth info | grep Authority | awk '{print $3}')"

ExecStartPre=/bin/bash -c 'export XAUTHORITY=${XAUTHORITY}'

하지만 내 노트북에서 명령을 실행하면 파이에서는 작동하지 않습니다.

## On laptop ##
$ sudo xauth info | grep "Authority file" | awk '{print $3}'
/run/user/1000/gdm/Xauthority

## On pi ##
$ sudo xauth info | grep "Authority file" | awk '{print $3}'
xauth:  file /root/.Xauthority does not exist
/root/.Xauthority

X 서버 인스턴스를 시작한 사용자를 기반으로 .Xauthority 파일 위치를 가져오는 방법을 찾을 수 없습니다. 또한 어떤 사용자도 X 디스플레이를 사용하여 다음 작업을 수행하는 것을 허용하고 싶지 않습니다.xhost +

내 시스템 장치 내에서 위치를 어떻게 알 수 있나요?

.Xauthority 위치를 찾는 것 외에 더 나은 솔루션이 있습니까?

답변1

허용된 연결 목록에 로컬 사용자 루트만 추가하는 xhost +더 복잡한 버전이 있습니다 .xhost +si:localuser:root

배포판에 따라 로그인 시 실행되도록 이 명령을 넣을 위치를 찾아야 합니다. /etc/X11/기존 파일을 찾으려면 "이미"를 사용하세요 xhost. 내 파이에서 나는 이것을 발견했습니다 /etc/X11/Xsession.d/35x11-common_xhost-local:

if type xhost >/dev/null 2>&1; then
  xhost +si:localuser:$(id -un) || :
fi

다른 시스템에서는 에 있습니다 /etc/X11/xinit/xinitrc.d/localuser.sh.

답변2

설치 스크립트에 다음을 추가하세요.

sudo mkdir /opt/xauthorityfix
sudo chmod 777 /opt/xauthorityfix
echo "#!/bin/sh" > /opt/xauthorityfix/setxauthority.sh
echo "export XAUTHORITY=$XAUTHORITY" >> /opt/xauthorityfix/setxauthority.sh
sudo chmod 755 /opt/xauthorityfix

그런 다음 Python 스크립트를 이 셸 스크립트로 래핑합니다.

#!/bin/sh

source /opt/xauthorityfix/setxauthority.sh
/usr/bin/python3 /usr/sbin/test_graphic_app.py

시스템 서비스에 스크립트를 시작하도록 요청하세요!

설치 스크립트를 실행할 때 XAUTHORITY 환경 변수를 설정했는지 확인하세요. sudo나 sudo -E.

기본적으로 설치 스크립트를 실행할 때 XAUTHORITY 환경 변수를 저장하므로 나중에 쉽게 참조할 수 있습니다.

관련 정보