Tout d'abord: 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 cela XDG_RUNTIME_DIR
est défini par pam_systemd
(8) , donc ce n'est pas réellement lié à X (exécution graphique des programmes), qui est le problème que vous semblez avoir.
Comment dépanner
Votre deuxième question, "Comment résoudre ce problème?" est un très bon. Cela signifie que vous souhaitez non seulement savoir quel est le correctif, mais aussi comment le découvrir par vous-même. Pour commencer, regardez d'abord les premiers messages d'erreur. En particulier, la recherche de No protocol specified
ou WARNING **: Could not open X display
devrait vous montrer que le problème vient de X (également appelé le système de fenêtrage X ), c'est-à-dire comment les programmes graphiques sont affichés sur votre écran. Le savoir devrait soulever de nombreuses questions de dépannage dans votre esprit.
AFFICHAGE X
Votre prochaine question pourrait être, quel est cet "affichage X" qui ne peut pas s'ouvrir? Un "affichage" est l'adresse de votre écran. [*] Tout programme qui souhaite écrire sur votre écran doit connaître l'adresse. Vous pouvez voir ce qu'est votre affichage X en vérifiant la variable d'environnement DISPLAY:
echo $DISPLAY
Et vous pouvez vérifier ce que sudo
pense votre DISPLAY en tapant:
sudo -s
echo $DISPLAY
exit
S'il ne montre rien, c'est bien le problème. (Voir correctif ci-dessous).
XAUTHORITY
Mais que se passe-t-il si ce n'est pas le problème et que le DISPLAY
paramètre est correctement défini sudo
? Ensuite, vous vous demandez peut-être, X a-t-il une sorte d'autorisations qui empêchent les autres utilisateurs d'écrire sur mon écran? Si vous pensiez cela, vous auriez raison, X a deux principales méthodes d'autorisation: xauth
et xhost
. Le plus couramment utilisé aujourd'hui est xauth
(1) qui utilise la XAUTHORITY
variable d'environnement. Encore une fois, vérifions s'il est correctement défini dans sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Si XAUTHORITY
pointe vers un fichier dans votre répertoire personnel pour vous, mais qu'il est vide lorsque vous exécutez sudo
, c'est le problème.
CORRECTIF: enregistrer les variables d'environnement
Alors, quelle est la solution? Si la DISPLAY
ou les XAUTHORITY
variables d'environnement ne sont pas enregistrées à travers le sudo
, vous pouvez dire sudo
(8) de préserver l'environnement en utilisant l' -E
option, comme ceci:
sudo -E evince
Une meilleure façon: env_keep
Vous pourriez bien demander, Attendez, si -E
tout fonctionne comme par magie, alors pourquoi n'est-ce pas la valeur par défaut sudo
? La réponse est qu'il s'agit d'un danger 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 façon "correcte" de le faire est d'ajouter la ligne Defaults env_keep += "DISPLAY XAUTHORITY"
au fichier sudoers
(5) en utilisant visudo
(8) . Vous pouvez vérifier les variables d'environnement que sudo conserve en exécutant:
sudo sudo -V
(Oui, vous tapez sudo
deux fois). Je recommande de ne pas placer 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 à niveau de votre système. Vous pouvez faire ça comme ça:
sudo visudo -f /etc/sudoers.d/local
Mais attendez, que se passe-t-il si aucun des éléments ci-dessus ne fonctionne?
Je pense que c'est une réponse assez approfondie, mais si vous rencontrez toujours des problèmes, il y a une autre chose que je suggérerais. Vous pouvez utiliser xhost
(1) pour accorder l'accès à un utilisateur spécifique sur l'hôte local (votre machine) comme ceci,
xhost si:localuser:root
Dans ce cas, nous spécifions root
comme nom d'utilisateur, car c'est le compte qui sudo
exécute les programmes en tant que.
[*] : Q: Je n'ai qu'un seul écran, alors pourquoi un écran X a-t-il besoin d'une "adresse"? R: C'est parce que X peut fonctionner non seulement sur votre machine, mais sur Internet. Avec X , il est facile d'exécuter des programmes sur votre machine qui s'affichent sur d'autres hôtes Internet et des programmes sur d'autres hôtes qui apparaissent sur votre écran (en supposant que vous leur en donnez la permission).