Impostazione DISPLAY nel file di servizio di systemd


9

Sto cercando di apprendere i servizi di systemd provando ad avviare xclock come servizio; il file di servizio è di seguito

[Unit]
Description=clock

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xclock

[Install]
WantedBy=graphical.target

Qualche idea di cosa c'è che non va qui? Viene visualizzato un errore che dice "impossibile connettersi al display".

Risposte:


18

Un'applicazione ha bisogno di due cose per aprire una finestra su un display X. Deve conoscere la posizione del display X; che viene trasmesso dalla DISPLAYvariabile d'ambiente. Deve anche autenticarsi con il server X. Questo viene trasmesso attraverso un cookie, che è un valore segreto generato dal server X quando viene avviato e memorizzato in un file a cui solo l'utente che ha avviato il server X può accedere. Il file cookie predefinito è ~/.Xauthority.

Se il tuo server X utilizza il percorso del file cookie predefinito, l'aggiunta Environment=XAUTHORITY=/home/dogs/.Xauthorityfunzionerà (supponendo che /home/dogssia la home directory dell'utente che ha effettuato l'accesso in X). Se è necessario trovare la posizione, vedere Posso avviare un programma grafico sul desktop di un altro utente come root? e Apri una finestra su un display X remoto (perché "Impossibile aprire il display")?

In alternativa, l'esecuzione del programma come l'utente che esegue il server X funzionerà, a condizione che il file cookie sia nella posizione predefinita (in caso contrario, dovrai individuare il file cookie, come nel caso root). Aggiungi la Userdirettiva (ad es User=dogs.).

Ovviamente il servizio non verrà eseguito se non esiste una visualizzazione X per quel numero di proprietà dell'utente specificato.

È piuttosto strano avviare un programma GUI da Systemd. Non è stato progettato per questo. I programmi della GUI vivono in una sessione X, avviata da un utente. Systemd è per i processi di sistema. Dovresti invece provare i demoni.


1
Non è un problema durante l'utilizzo systemctl --user. Anche la DISPLAYvariabile non è quindi una questione. Dai un'occhiata qui .
Suuuehgi,

-2

Puoi aggiungere .xinitrc:

xhost si:localuser:$USER

Per me funziona!


1
questo è per i file di servizio di systemd, non .xinitrc
slang
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.