Systemd - Localizar arquivo .authority a ser usado

2

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?

    
por Arkaik 16.09.2018 / 17:45

1 resposta

2

Existem versões mais sofisticadas de xhost + , ou seja, xhost +si:localuser:root , que adiciona apenas raiz do usuário local à lista de conexões permitidas.

Você precisa encontrar onde colocar este comando para que ele seja executado no login, dependendo da sua distribuição. Procure em /etc/X11/ por um arquivo existente usando xhost . No meu pi eu encontrei em /etc/X11/Xsession.d/35x11-common_xhost-local :

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

Em outro sistema, estava em /etc/X11/xinit/xinitrc.d/localuser.sh .

    
por 16.09.2018 / 18:14