Une application a besoin de deux choses pour ouvrir une fenêtre sur un écran X. Il doit connaître l'emplacement de l'affichage X; qui est véhiculé par la DISPLAYvariable d'environnement. Il doit également s'authentifier auprès du serveur X. Ceci est transmis via un cookie, qui est une valeur secrète générée par le serveur X lors de son démarrage et stockée dans un fichier auquel seul l'utilisateur qui a démarré le serveur X peut accéder. Le fichier cookie par défaut est ~/.Xauthority.
Alternativement, l'exécution du programme en tant qu'utilisateur qui exécute le serveur X fonctionnera, à condition que le fichier cookie se trouve à l'emplacement par défaut (sinon, vous devrez localiser le fichier cookie, comme dans le cas racine). Ajoutez la Userdirective (par exemple User=dogs).
Bien sûr, le service ne fonctionnera pas s'il n'y a pas d'affichage X avec ce numéro appartenant à l'utilisateur que vous spécifiez.
C'est assez bizarre de démarrer un programme GUI à partir de Systemd. Il n'a pas été conçu pour cela. Les programmes GUI vivent dans une session X, démarrée par un utilisateur. Systemd est destiné aux processus système. Vous devriez plutôt essayer des démons.
systemctl --user
. LaDISPLAY
variable n'est pas non plus une question alors. Jetez un oeil ici .Vous pouvez ajouter
.xinitrc
:Ça marche pour moi!
la source