"Fehler: XDG_RUNTIME_DIR nicht in der Umgebung festgelegt." Beim Versuch, Nautilus als Root auszuführen

14

Ich versuche, nautilus als root auszuführen, aber wenn ich "sudo nautilus" vom Terminal aus starte, erhalte ich folgende Fehlermeldung:

Fehler: XDG_RUNTIME_DIR nicht in der Umgebung festgelegt.

(nautilus: 9341): Gtk-WARNING **: Display kann nicht geöffnet werden:

Das Problem tritt nicht auf, wenn ich versuche, nautilus als Nicht-Root-Benutzer auszuführen. Ich benutze Ubuntu 14.04. Weiß jemand, wie ich das beheben kann?

Quantenfliege
quelle
Nur zur Veranschaulichung, ich bin hier gelandet, nachdem derselbe Fehler aufgetreten ist, als ich versucht habe, X11Forwarding über ssh durchzuführen. Lösung: Ich hatte vergessen, die -XOption beim Starten meiner SSH-Sitzung zu verwenden.
Zeugen Jehovas.

Antworten:

13

Wenn Sie Software als ein anderer Benutzer ausführen, starten Sie in der Tat die neue minimale und isolierte Umgebung, in der einige "übermäßige" Variablen nicht vorkommen (unter anderem Variablen, die für das Einfügen von Bibliotheken oder das Festlegen bestimmter Berechtigungen verantwortlich sind). Ersetzen Sie Ihren sudo nautilusAnruf durch Folgendes: Es werden benutzerspezifische x Servereinstellungen aus der aktuellen Sitzung übernommen:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

Dies ist eine einmalige Low-Level-Lösung, die jedoch auf einem fehlerhaft konfigurierten Computer funktioniert. Wenn Sie Ihr sudoProblem dauerhaft beheben möchten, müssen Sie das Problem mit Ihrer Umgebungskonfiguration finden und wie in den anderen Antworten beschrieben beheben.

cprn
quelle
1
@Cyprian Guerra - Dies wird nicht in die Umgebung eingefügt, sondern ermöglicht nur die einmalige Ausführung. Das ist kaum hilfreich. Das Ausführen sudo nautilussollte beim Ausführen vom Terminal aus wie gewohnt funktionieren. Wenn ich das vom Terminal aus bei einer Neuinstallation mache, öffnet es sich normalerweise wie gewohnt mit sudo.
@ user94959 Sie verstehen das Grundprinzip nicht - die neue Umgebung wird festgelegt, die Variablen werden übertragen, die Task wird ausgeführt, wenn die Task diese separate Umgebung verlässt, wird sie zerstört. Daher müssen Sie die Variablen für jede neue Umgebung festlegen. Wenn Sie mehr Lesestoff wünschen, versuchen Sie es pkexecmit sudoManpages und google für den entsprechenden Streit.
cprn
@CyprianGuerra, wie kommt es dann, wenn ich versuche, eine Anwendung über das Desktop-Menü zu öffnen, für die erweiterte Berechtigungen erforderlich sind, die nach der Kennworteingabe ausgeführt werden können? Offensichtlich fehlt etwas in der Konfiguration, wenn es nicht richtig gestartet wird, weil es in der XDG-Umgebung nicht wie normal eingestellt ist. Das Problem ist, wenn das Sprichwort Cannot open displaybedeutet, dass in der Konfigurationsdatei etwas fehlt, weil es geändert und aus der Umgebung entfernt wurde, wenn dies nicht der Fall sein sollte. Wie kann es dann dauerhaft in die Umgebung zurückgesetzt werden, damit ich mich nicht darum kümmern muss?
1
@sherrellbc Ich sage ausdrücklich, dass Policy Kit ausgeführt werden soll, envbevor es ausgeführt wird, nautilusund ersteres sorgt dafür, dass die Variablen für mich festgelegt werden. Sie können überprüfen man env.
cprn
1
@cprn D'oh. Ich hätte zuerst die Manpage überprüfen sollen. env COMMAND ARG ...
Sherrellbc
1

Ich hatte auch das gleiche Problem auf Ubuntu 14.04. Terminal öffnen durch Drücken von,

Ctrl+ Alt+T

dann sudo visudo

Ändern Sie die Zeile

Defaults env_keep = "https_proxy"

zu

Standard env_keep + = "https_proxy"

Es wirkte wie ein Zauber.

Om Prakash
quelle
Es funktioniert, aber die Einstellung für $XAUTHORITYwiderspricht dem Zweck.
cprn
1

Um es einfacher zu machen - mehr erklärt das neue Booten meines Systems.

Nach allen Erklärungen hier bin ich zum Ergebnis gekommen - und "env" im Terminal hat schon gesagt, dass das für diese Session richtig ist:

Diese zwei Zeilen zur Verwendung der Umgebungsvariablen:

für das tmp verhalten habe ich gewählt:

mkdir -pv ~ / .cache / xdgr

Um die Umgebungsvariable zu setzen:

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

Nach dem Schließen des Terminals und einem erneuten Öffnen für den Rückruf von env erfahren sie:

XDG_RUNTIME_DIR = / run / user / 1001

hinweis: es ist ok für den benutzer unter ubuntu, root braucht mehr (letzte info per term - mit 0700 berechtigungen)

Andrew
quelle
0

Wenn dieser Fehler in Docker auftritt; das ist was ich mache

# 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
quelle