I'm currently using a systemd unit file to configure a service which uses X server display.
The X server instance is launched by the user logged in (currently pi user) but the service is launched at root.
I can successfully launch the service using systemctl start test_graphic_app if I hard code the .Xauthority file location into XAUTHORITY variable from the unit file as follow
[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 However this obviously doesn't work if I log using another user or if I run it locally on my laptop cause the user launching X is not pi
I would like to dynamically get the .Xauthority file location on the system.
I've tried using sudo xauth info | grep Authority | awk '{print $3}' as follow
Environment="XAUTHORITY=$(/usr/bin/xauth info | grep Authority | awk '{print $3}')" ExecStartPre=/bin/bash -c 'export XAUTHORITY=${XAUTHORITY}' However if the command works on my laptop, it doesn't on the pi
## 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 I was unable find how to get the .Xauthority file location depending on the user that have launched the X server instance. Also, I don't want to allow any user to use X display doing xhost +
How can I get the location within my systemd unit?
Is there any better solution other than finding the .Xauthority location?
default.targetis set to graphical runlevel, so the service start after X has been launched.