Per prima cosa: XDG_RUNTIME_DIR
Per rispondere alla tua prima domanda, "Che cos'è XDG_RUNTIME_DIR?" , è una variabile di ambiente che viene impostata automaticamente al momento dell'accesso. Indica a qualsiasi programma in esecuzione dove trovare una directory specifica dell'utente in cui è possibile memorizzare piccoli file temporanei. Nota che XDG_RUNTIME_DIR
è impostato da pam_systemd
(8) , quindi non è in realtà correlato a X (eseguendo i programmi graficamente), che è il problema che sembra avere.
Come risolvere
La tua seconda domanda, "Come risolvere questo problema?" è molto buono. Ciò significa che siete interessati, non solo ciò che la correzione è, ma anche come per capirlo da soli. Per iniziare, guarda prima i primi messaggi di errore. In particolare, la ricerca di No protocol specified
o WARNING **: Could not open X display
, dovrebbe mostrarti che il problema è con X (chiamato anche X Windowing System ) che è come i programmi grafici sono mostrati sullo schermo. Sapere che dovrebbe sollevare molte domande di risoluzione dei problemi nella tua mente.
X DISPLAY
La tua prossima domanda potrebbe essere: che cos'è questo "display X" che evince non può aprire? Un "display" è l'indirizzo per il tuo schermo. [*] Qualsiasi programma che vuole scrivere sul tuo schermo deve conoscere l'indirizzo. Puoi vedere qual è il tuo display X controllando la variabile d'ambiente DISPLAY:
echo $DISPLAY
E puoi controllare cosa sudo
pensa che sia il tuo DISPLAY digitando:
sudo -s
echo $DISPLAY
exit
Se non mostra nulla, questo è il problema. (Vedi correzione di seguito).
XAUTHORITY
Ma cosa succede se questo non è il problema e l' DISPLAY
opzione è impostata correttamente sudo
? Quindi potresti chiederti, X ha una sorta di permessi che impediscono ad altri utenti di scrivere sul mio display? Se lo pensavi, avresti ragione, X ha due metodi di autorizzazione principali: xauth
e xhost
. Quello più comunemente usato oggi è xauth
(1) che utilizza la XAUTHORITY
variabile d'ambiente. Ancora una volta, controlliamo se è impostato correttamente in sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Se XAUTHORITY
sta puntando a un file nella tua home directory per te, ma è vuoto quando esegui sudo
, allora questo è il problema.
FIX: salvare le variabili di ambiente
Allora, qual è la soluzione? Se le variabili di ambiente DISPLAY
o o XAUTHORITY
non vengono salvate su sudo
, puoi dire a sudo
(8) di preservare l'ambiente usando l' -E
opzione, in questo modo:
sudo -E evince
Un modo migliore: env_keep
Potresti chiedere, Aspetta, se -E
tutto funziona magicamente, allora perché non è l'impostazione predefinita sudo
? La risposta è che si tratta di un potenziale pericolo per la sicurezza. Le variabili di ambiente influiscono sul modo in cui funzionano i programmi e non si desidera che vengano esportati tutti da un account utente alla radice. Il modo "corretto" per farlo è quello di aggiungere la linea Defaults env_keep += "DISPLAY XAUTHORITY"
al file sudoers
(5) usando visudo
(8) . Puoi controllare quali variabili di ambiente sudo conserva eseguendo:
sudo sudo -V
(Sì, digiti sudo
due volte). Consiglio di inserire la riga non nel file sudoers predefinito ( /etc/sudoers
), ma in un file locale che non verrà sovrascritto quando si aggiorna il sistema. Puoi farlo in questo modo:
sudo visudo -f /etc/sudoers.d/local
Ma aspetta, e se nessuna delle precedenti funzioni?
Penso che questa sia una risposta abbastanza approfondita, ma se hai ancora problemi, c'è un'altra cosa che suggerirei. Puoi utilizzare xhost
(1) per concedere l'accesso a un utente specifico sull'host locale (la tua macchina) in questo modo,
xhost si:localuser:root
In questo caso, stiamo specificando root
come nome utente, poiché quello è l'account che sudo
esegue i programmi come.
[*] : D: Ho solo una schermata, quindi perché un display X ha bisogno di un "indirizzo"? A: È perché X può funzionare non solo sul tuo computer, ma su Internet. Con X , è facile eseguire programmi sul tuo computer che vengono visualizzati su altri host Internet e programmi su altri host che compaiono sullo schermo (supponendo che tu conceda loro l'autorizzazione).