Una aplicación necesita dos cosas para abrir una ventana en una pantalla X. Necesita saber la ubicación de la pantalla X; eso es transmitido por la DISPLAY
variable de entorno. También necesita autenticarse con el servidor X. Esto se transmite a través de una cookie, que es un valor secreto generado por el servidor X cuando se inicia y almacena en un archivo al que solo puede acceder el usuario que inició el servidor X. El archivo de cookie predeterminado es ~/.Xauthority
.
Si su servidor X está utilizando la ubicación predeterminada del archivo de cookies, la adición Environment=XAUTHORITY=/home/dogs/.Xauthority
funcionará (suponiendo que /home/dogs
sea el directorio de inicio del usuario que inició sesión en X). Si necesita encontrar la ubicación, consulte ¿Puedo iniciar un programa gráfico en el escritorio de otro usuario como root? y Abrir una ventana en una pantalla X remota (¿por qué "No se puede abrir la pantalla")?
Alternativamente, ejecutar el programa como el usuario que está ejecutando el servidor X funcionará, siempre que el archivo de cookies se encuentre en la ubicación predeterminada (de lo contrario, tendrá que ubicar el archivo de cookies, como en el caso raíz). Agregue la User
directiva (por ejemplo User=dogs
).
Por supuesto, el servicio no se ejecutará si no hay una pantalla X con ese número propiedad del usuario que especifique.
Es bastante extraño iniciar un programa GUI desde Systemd. No fue diseñado para esto. Los programas GUI viven en una sesión X, iniciada por un usuario. Systemd es para procesos del sistema. Deberías experimentar con demonios en su lugar.
systemctl --user
. Además, laDISPLAY
variable no es una cuestión entonces. Echa un vistazo aquí .