Pendant que j'essayais d'ouvrir Evince à partir de la ligne de commande, cela me donne une erreur
neo@Muhammad:~$ sudo evince
No protocol specified
** (evince:4164): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Cannot parse arguments: Cannot open display:
Comment résoudre ce problème?
command-line
sudo
evince
Muhammad Iliyas
la source
la source
Réponses:
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 parpam_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
ouWARNING **: 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:
Et vous pouvez vérifier ce que
sudo
pense votre DISPLAY en tapant: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éfinisudo
? 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
etxhost
. Le plus couramment utilisé aujourd'hui estxauth
(1) qui utilise laXAUTHORITY
variable d'environnement. Encore une fois, vérifions s'il est correctement défini danssudo
:Si
XAUTHORITY
pointe vers un fichier dans votre répertoire personnel pour vous, mais qu'il est vide lorsque vous exécutezsudo
, c'est le problème.CORRECTIF: enregistrer les variables d'environnement
Alors, quelle est la solution? Si la
DISPLAY
ou lesXAUTHORITY
variables d'environnement ne sont pas enregistrées à travers lesudo
, vous pouvez diresudo
(8) de préserver l'environnement en utilisant l'-E
option, comme ceci: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éfautsudo
? 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 ligneDefaults env_keep += "DISPLAY XAUTHORITY"
au fichiersudoers
(5) en utilisantvisudo
(8) . Vous pouvez vérifier les variables d'environnement que sudo conserve en exécutant:(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: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,Dans ce cas, nous spécifions
root
comme nom d'utilisateur, car c'est le compte quisudo
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).
la source
xhost +
pour autoriser l'accès universel.)XDG_RUNTIME_DIR
est une variable d'environnement définie dans votre contexte X Windows, afin que les programmes puissent trouver des choses. Vous (neo
) avez configuré le contexte graphique.En essayant de courir
evince
commeroot
, vous avez entré dans la condition où un utilisateur (root
) tente d'accéder à un autre utilisateur (neo
affichage). Ceci est considéré comme une mauvaise chose.Si vous décidez que vous DEVEZ exécuter un éditeur graphique comme
root
, lisezman gksudo
et utilisezgksudo
.la source
journalctl -b -p err | wl-copy
il signaleFailed to connect to a Wayland server
ce qui est sensé, mais sonne stupide de POV utilisateur.