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 specifiedo 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 sudopensa 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' DISPLAYopzione è 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: xauthe xhost. Quello più comunemente usato oggi è xauth(1) che utilizza la XAUTHORITYvariabile d'ambiente. Ancora una volta, controlliamo se è impostato correttamente in sudo:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Se XAUTHORITYsta 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 DISPLAYo o XAUTHORITYnon vengono salvate su sudo, puoi dire a sudo(8) di preservare l'ambiente usando l' -Eopzione, in questo modo:
sudo -E evince
Un modo migliore: env_keep
Potresti chiedere, Aspetta, se -Etutto 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 sudodue 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 rootcome nome utente, poiché quello è l'account che sudoesegue 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).