"Erreur: XDG_RUNTIME_DIR non défini dans l'environnement." en tentant d'exécuter nautilus en tant que root

14

J'essaie d'exécuter nautilus en tant que root, mais lorsque j'exécute "sudo nautilus" à partir du terminal, j'obtiens l'erreur suivante:

erreur: XDG_RUNTIME_DIR non défini dans l'environnement.

(nautilus: 9341): Gtk-WARNING **: impossible d'ouvrir l'affichage:

Le problème ne se produit pas lorsque j'essaie d'exécuter nautilus en tant que non root. J'utilise ubuntu 14.04. Est-ce que quelqu'un sait comment je peux résoudre ce problème?

papillon
la source
Juste pour mémoire, je me suis retrouvé ici après que la même erreur se soit produite lors de la tentative de X11Forwarding via ssh. Solution: j'avais oublié d'utiliser l' -Xoption lors du démarrage de ma session ssh.
JW.

Réponses:

13

Lorsque vous exécutez un logiciel en tant qu'autre utilisateur, vous démarrez en fait le nouvel environnement minimal et isolé qui ne comporte pas de variables "excessives" (entre autres les variables chargées d'injecter des bibliothèques ou de définir certains privilèges). Remplacez votre sudo nautilusappel par ce qui suit - il conservera les paramètres de serveur x spécifiques à l'utilisateur de la session en cours:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

Il s'agit d'une solution unique de bas niveau, mais elle fonctionnera sur une machine mal configurée. Si vous voulez «réparer définitivement» votre problème, sudovous devez trouver le problème avec la configuration de votre environnement et le corriger comme décrit dans d'autres réponses.

cprn
la source
1
@Cyprian Guerra - Cela ne correspond pas à l'environnement, cela ne vous permet d'exécuter qu'une seule fois. Ce n'est guère utile. L'exécution sudo nautilusdevrait fonctionner normalement à partir du terminal lors de l'exécution. Normalement, chaque fois que je fais cela à partir du terminal sur une nouvelle installation, il s'ouvre normalement avec sudo.
@ user94959 Vous ne comprenez pas le principe de base - le nouvel environnement est défini, les variables sont reportées, la tâche s'exécute, lorsque la tâche quitte cet environnement séparé est détruite. Par conséquent, oui, vous devez définir les variables pour chaque nouvel environnement. Si vous souhaitez plus lire essayages matériel pkexecet sudopages homme ainsi que google pour le différend connexe.
cprn
@CyprianGuerra alors comment se fait-il quand j'essaie d'ouvrir une application à partir du menu du bureau qui nécessite des privilèges élevés peut s'exécuter après la saisie du mot de passe? de toute évidence, il manque quelque chose dans la configuration si elle ne démarre pas correctement car elle n'est pas définie dans l'environnement XDG comme d'habitude? le problème est lorsque son dicton Cannot open displaysignifie que quelque chose manque dans son fichier de configuration parce que quelque chose l'a modifié et supprimé de l'environnement alors qu'il ne devrait pas. Alors, comment peut-il être réintroduit dans l'environnement de manière permanente alors je n'ai pas à gérer cela?
1
@sherrellbc Je dis explicitement au kit de stratégie de s'exécuter envavant de s'exécuter nautiluset le premier prend soin de définir les variables pour moi. Vous pouvez vérifier man env.
cprn
1
@cprn D'oh. J'aurais dû d'abord consulter la page de manuel. env COMMAND ARG ...
sherrellbc
1

J'ai également eu le même problème sur Ubuntu 14.04. Ouvrez le terminal en appuyant sur,

Ctrl+ Alt+T

ensuite sudo visudo

changer la ligne

Par défaut env_keep = "https_proxy"

à

Par défaut env_keep + = "https_proxy"

Cela a fonctionné comme par enchantement.

Om Prakash
la source
Cela fonctionne mais le même réglage $XAUTHORITYdéfie le but.
cprn
1

Pour le rendre facile - plus expliqué le nouveau démarrage de mon système.

Après toutes les explications ici, je suis arrivé au résultat - et "env" dans le terminal a déjà dit que c'était bon pour ces sessions:

Ces deux lignes pour utiliser la variable d'environnement:

pour le comportement tmp que j'ai choisi:

mkdir -pv ~ / .cache / xdgr

Pour définir la variable d'environnement:

export XDG_RUNTIME_DIR = $ PATH: ~ / .cache / xdgr

Après la fermeture du terminal et une nouvelle ouverture pour le rappel d'env ils racontent:

XDG_RUNTIME_DIR = / run / user / 1001

note: c'est ok pour l'utilisateur sous ubuntu, root a besoin de plus (dernière info par terme - avec 0700 permissions)

Andrew
la source
0

Si vous obtenez cette erreur dans Docker; c'est ce que je fais

# sudo xhost +
access control disabled, clients can connect from any host
# export DISPLAY=:0.0
# docker run -it --env DISPLAY=unix$DISPLAY --privileged  --volume /tmp/.X11-unix:/tmp/.X11-unix .. rest of your Docker arugments
Alex Punnen
la source