Atualmente, estou usando um arquivo de unidade systemd para configurar um serviço que usa a exibição do servidor X.
A instância do servidor X é iniciada pelo usuário logado (atualmente pi
user), mas o serviço é iniciado na raiz.
Eu posso lançar com sucesso o serviço usando systemctl start test_graphic_app
se eu codificar o local do arquivo .Xauthority na variável XAUTHORITY
do arquivo de unidade como segue
[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
No entanto, isso obviamente não funciona se eu fizer login usando outro usuário ou se eu executá-lo localmente no meu laptop, porque o usuário que está iniciando o X não é pi
Gostaria de obter dinamicamente o local do arquivo .Xauthority no sistema.
Eu tentei usar sudo xauth info | grep Authority | awk '{print $3}'
da seguinte forma
Environment="XAUTHORITY=$(/usr/bin/xauth info | grep Authority | awk '{print $3}')"
ExecStartPre=/bin/bash -c 'export XAUTHORITY=${XAUTHORITY}'
No entanto, se o comando funciona no meu laptop, não no 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
Não consegui encontrar como obter o local do arquivo .Xauthority, dependendo do usuário que iniciou a instância do servidor X. Além disso, não quero permitir que qualquer usuário use o X display fazendo xhost +
Como posso obter a localização na minha unidade de sistema?
Existe alguma solução melhor do que encontrar o local de autoridade do .X?