Commençons par le commencement : XDG_RUNTIME_DIR
Pour répondre à votre première question, "Qu'est-ce que XDG_RUNTIME_DIR ?" Il s'agit d'une variable d'environnement qui est définie automatiquement lorsque vous vous connectez. Elle indique à tout programme que vous exécutez où trouver un répertoire spécifique à l'utilisateur dans lequel il peut stocker de petits fichiers temporaires. Notez que XDG_RUNTIME_DIR
est fixé par pam_systemd
(8) Il n'est donc pas réellement lié à X (exécution de programmes en mode graphique), qui est le problème que vous semblez rencontrer.
Comment résoudre les problèmes
Votre deuxième question, "Comment résoudre ce problème ?" est très bon. Cela signifie que vous êtes intéressé non seulement par ce que la solution, mais aussi comment pour le découvrir par toi-même. Pour commencer, regardez d'abord les premiers messages d'erreur. En particulier, recherchez No protocol specified
o WARNING **: Could not open X display
devrait vous montrer que le problème vient X (également appelé Le système de fenêtrage X ) qui est la façon dont les programmes graphiques sont affichés sur votre écran. Le fait de savoir cela devrait soulever de nombreuses questions de dépannage dans votre esprit.
X AFFICHAGE
Votre prochaine question pourrait être, qu'est-ce que c'est "Affichage X" qu'Evince ne peut pas ouvrir ? Un "display" est l'adresse de votre écran. [*] Tout programme qui veut écrire sur votre écran doit connaître l'adresse. Vous pouvez voir quel est votre écran X en vérifiant la variable d'environnement DISPLAY :
echo $DISPLAY
Et vous pouvez vérifier ce que sudo
pense que votre AFFICHAGE est en tapant :
sudo -s
echo $DISPLAY
exit
S'il ne montre rien, c'est qu'il y a un problème. (Voir la correction ci-dessous).
XAUTHORITY
Mais, et si ce n'était pas le problème et que le DISPLAY
est réglé correctement dans sudo
? Vous pouvez alors vous demander si X a une sorte de permission qui empêche les autres utilisateurs d'écrire sur mon écran ? Si vous pensiez ça, vous auriez raison, X dispose de deux méthodes d'autorisation principales : xauth
y xhost
. Le plus couramment utilisé aujourd'hui est xauth
(1) qui utilise le XAUTHORITY
variable d'environnement. Encore une fois, vérifions si elle est correctement définie dans sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Si XAUTHORITY
pointe vers un fichier dans votre répertoire personnel pour vous, mais il est vide quand vous exécutez sudo
alors c'est ça le problème.
FIX : Sauvegarder les variables d'environnement
Alors, quelle est la solution ? Si l'un ou l'autre DISPLAY
ou le XAUTHORITY
Les variables d'environnement ne sont pas sauvegardées dans le sudo
vous pouvez dire sudo
(8) pour préserver l'environnement en utilisant le -E
comme suit :
sudo -E evince
Une meilleure solution : env_keep
Vous pourriez vous demander, Attendez, si -E
fait que tout fonctionne comme par magie, alors pourquoi n'est-ce pas la solution par défaut pour sudo
? La réponse est qu'il s'agit d'un risque potentiel pour la sécurité. Les variables d'environnement affectent le fonctionnement des programmes et vous ne voulez pas qu'elles soient toutes exportées d'un compte d'utilisateur vers la racine. La manière "correcte" de le faire est d'ajouter la ligne suivante Defaults env_keep += "DISPLAY XAUTHORITY"
a la sudoers
(5) en utilisant visudo
(8) . Vous pouvez vérifier quelles variables d'environnement sudo préserve en exécutant :
sudo sudo -V
(Oui, vous tapez sudo
deux fois). Je recommande de ne pas mettre la ligne dans le fichier sudoers par défaut ( /etc/sudoers
), mais dans un fichier local qui ne sera pas écrasé lors de la mise à jour de votre système. Vous pouvez le faire comme suit :
sudo visudo -f /etc/sudoers.d/local
Mais attendez, et si rien de ce qui précède ne fonctionne ?
Je pense que cette réponse est assez complète, mais si vous rencontrez toujours des difficultés, il y a une autre chose que je suggère. Vous pouvez utiliser xhost
(1) pour accorder l'accès à un utilisateur spécifique sur l'hôte local (votre machine) comme suit,
xhost si:localuser:root
Dans ce cas, nous spécifions root
comme nom d'utilisateur, puisque c'est le compte que sudo
exécute des programmes comme.
[*] : Q : Je n'ai qu'un seul écran, alors pourquoi un écran X a-t-il besoin d'une "adresse" ? A : C'est parce que X peut travailler non seulement sur votre machine, mais aussi sur Internet. Avec X Il est facile d'exécuter des programmes sur votre machine qui apparaissent sur d'autres hôtes Internet et des programmes sur d'autres hôtes qui apparaissent sur votre écran (si vous leur en donnez l'autorisation).