„Błąd: XDG_RUNTIME_DIR nie został ustawiony w środowisku.” podczas próby uruchomienia nautilusa jako root

15

Próbuję uruchomić nautilus jako root, ale kiedy uruchamiam „sudo nautilus” z terminala, pojawia się następujący błąd:

błąd: XDG_RUNTIME_DIR nie jest ustawiony w środowisku.

(nautilus: 9341): Gtk-WARNING **: nie można otworzyć wyświetlacza:

Problem nie występuje, gdy próbuję uruchomić nautilus jako użytkownik inny niż root. Używam Ubuntu 14.04. Czy ktoś wie, jak to naprawić?

quantumbutterfly
źródło
Dla przypomnienia znalazłem się tutaj po tym, jak pojawił się ten sam błąd, gdy próbowałem wykonać X11 Forwarding przez ssh. Rozwiązanie: zapomniałem użyć tej -Xopcji podczas rozpoczynania sesji ssh.
JW.

Odpowiedzi:

14

Kiedy uruchamiasz oprogramowanie jako inny użytkownik, w rzeczywistości uruchamiasz nowe minimalne i izolowane środowisko, które nie przenosi niektórych „nadmiernych” zmiennych (między innymi zmiennych odpowiedzialnych za wstrzykiwanie bibliotek lub ustawianie określonych uprawnień). Zamień swoje sudo nautiluspołączenie na następujące - spowoduje to zachowanie specyficznych dla użytkownika ustawień serwera x z bieżącej sesji:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

Jest to jednorazowe rozwiązanie niskiego poziomu, ale będzie działać na źle skonfigurowanej maszynie. Jeśli chcesz trwale „naprawić sudo”, musisz znaleźć problem z konfiguracją środowiska i rozwiązać go zgodnie z opisem w innych odpowiedziach.

cprn
źródło
1
@Cyprian Guerra - To nie jest ustawione w środowisku, pozwala tylko uruchomić raz. To nie jest pomocne. Uruchamianie sudo nautiluspowinno działać normalnie z terminala po uruchomieniu. Zwykle za każdym razem, gdy robię to z terminala przy nowej instalacji, otwiera się jak zwykle w sudo.
@ user94959 Nie rozumiesz podstawowej zasady - nowe środowisko jest ustawiane, zmienne są przenoszone, zadanie jest uruchamiane, gdy zadanie wychodzi z tego oddzielnego środowiska jest niszczone. Dlatego tak, musisz ustawić zmienne dla każdego nowego środowiska. Jeśli chcesz więcej czytać materialnych try pkexeci sudomężczyzna stron jak google dla powiązanego sporu.
cprn
@CyprianGuerra to dlaczego przy próbie otwarcia aplikacji z menu na pulpicie wymagającej podwyższonych uprawnień można uruchomić po wprowadzeniu hasła? oczywiście czegoś brakuje w konfiguracji, jeśli nie uruchomi się poprawnie, ponieważ nie jest ustawiony w środowisku XDG jak zwykle? problem polega na tym, że jego powiedzenie Cannot open displayoznacza, że czegoś brakuje w jego pliku konfiguracyjnym, ponieważ coś go zmodyfikowało i usunęło ze środowiska, kiedy nie powinno. Jak w takim razie można go przywrócić do środowiska na stałe, aby nie musiałem się z tym uporać?
1
@ sherrellbc Mówię jawnie zestaw zasad, aby uruchomić envprzed uruchomieniem, nautilusa ten pierwszy dba o ustawienie zmiennych dla mnie. Można sprawdzić man env.
cprn
1
@cprn D'oh. Powinienem był najpierw sprawdzić stronę podręcznika. env COMMAND ARG ...
sherrellbc
1

Miałem również ten sam problem na Ubuntu 14.04. Otwórz terminal, naciskając,

Ctrl+ Alt+T

następnie sudo visudo

zmień linię

Domyślne env_keep = "https_proxy"

do

Domyślne env_keep + = "https_proxy"

Działa jak urok.

Om Prakash
źródło
Działa, ale ustawienie takie samo dla $XAUTHORITYprzeciwstawia się celowi.
cprn
1

Aby to ułatwić - więcej informacji na temat nowego uruchamiania mojego systemu.

Po wszystkich wyjaśnieniach tutaj doszedłem do wyniku - a „env” w terminalu powiedział już, że jest to właściwe dla tych sesji:

Te dwa wiersze, aby użyć zmiennej środowiskowej:

dla zachowania tmp wybrałem:

mkdir -pv ~ / .cache / xdgr

Aby ustawić zmienną środowiskową:

eksport XDG_RUNTIME_DIR = ŚCIEŻKA $: ~ / .cache / xdgr

Po zamknięciu terminalu i ponownym otwarciu na przywołanie env mówi:

XDG_RUNTIME_DIR = / run / user / 1001

Uwaga: w systemie Ubuntu jest ok, użytkownik root potrzebuje więcej (ostatnie informacje według terminu - z uprawnieniami 0700)

Andrzej
źródło
0

Jeśli otrzymujesz ten błąd w Dockerze; tym się właśnie zajmuję

# 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
źródło