Kiedy próbowałem otworzyć Evince z wiersza poleceń, pojawia się błąd
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:
Jak rozwiązać ten problem?
command-line
sudo
evince
Muhammad Iliyas
źródło
źródło
Odpowiedzi:
Najpierw najważniejsze: XDG_RUNTIME_DIR
Aby odpowiedzieć na pierwsze pytanie: „Co to jest XDG_RUNTIME_DIR?” , jest to zmienna środowiskowa, która jest ustawiana automatycznie po zalogowaniu. Informuje każdy uruchomiony program, gdzie znaleźć katalog odpowiedni dla użytkownika, w którym może przechowywać małe pliki tymczasowe. Zauważ, że
XDG_RUNTIME_DIR
jest ustawiony przezpam_systemd
(8) , więc nie jest tak naprawdę związany z X (uruchamianie programów graficznie), co wydaje się mieć problem.Jak rozwiązywać problemy
Twoje drugie pytanie: „Jak rozwiązać ten problem?” jest bardzo dobry. Oznacza to, że jesteś zainteresowany nie tylko tym, co to jest poprawka, ale także tym, jak samodzielnie ją rozwiązać. Aby rozpocząć, najpierw spójrz na pierwsze komunikaty o błędach. W szczególności poszukiwanie
No protocol specified
lubWARNING **: Could not open X display
powinno pokazać, że problem dotyczy X (zwanego także The X Windowing System ), czyli sposobu wyświetlania programów graficznych na ekranie. Świadomość, że powinno to wywołać wiele pytań dotyczących rozwiązywania problemów.X WYŚWIETLACZ
Twoje następne pytanie może brzmieć: co to za „wyświetlacz X”, którego ewangelii nie można otworzyć? „Wyświetlacz” to adres twojego ekranu. [*] Każdy program, który chce pisać na ekranie, musi znać adres. Możesz zobaczyć, jaki jest Twój ekran X, sprawdzając zmienną środowiskową DISPLAY:
I możesz sprawdzić, co
sudo
myśli Twój WYŚWIETLACZ, wpisując:Jeśli nic nie pokazuje, to jest problem. (Patrz poprawka poniżej).
XAUTHORITY
Ale co, jeśli to nie jest problem i
DISPLAY
jest on poprawnie ustawionysudo
? Możesz się zastanawiać, czy X ma jakieś uprawnienia, które uniemożliwiają innym użytkownikom pisanie na moim ekranie? Jeśli tak uważasz, masz rację, X ma dwie główne metody autoryzacji:xauth
ixhost
. Najpopularniejszym obecnie jestxauth
(1), który korzysta zeXAUTHORITY
zmiennej środowiskowej. Ponownie sprawdźmy, czy jest poprawnie ustawiony wsudo
:Jeśli
XAUTHORITY
wskazuje plik w twoim katalogu domowym, ale po uruchomieniu jest pustysudo
, to jest problem.POPRAWKA: Zapisz zmienne środowiskowe
Więc jaka jest poprawka? Jeśli zmienne środowiskowe
DISPLAY
lubXAUTHORITY
środowiskowe nie są zapisywane w poprzeksudo
, możesz powiedziećsudo
(8), aby chronić środowisko, korzystając z-E
opcji:Lepszy sposób: env_keep
Możesz zapytać: Czekaj, jeśli
-E
sprawia , że wszystko działa magicznie, to dlaczego nie jest to ustawienie domyślnesudo
? Odpowiedź jest taka, że jest to potencjalne zagrożenie bezpieczeństwa. Zmienne środowiskowe wpływają na działanie programów i nie chcesz, aby wszystkie były eksportowane z konta użytkownika do katalogu głównego. „Prawidłowym” sposobem na to jest dodanie liniiDefaults env_keep += "DISPLAY XAUTHORITY"
do plikusudoers
(5) za pomocąvisudo
(8) . Możesz sprawdzić, jakie zmienne środowiskowe sudo zachowuje, uruchamiając:(Tak, piszesz
sudo
dwa razy). Zalecam umieszczenie wiersza nie w domyślnym pliku sudoers (/etc/sudoers
), ale w pliku lokalnym, który nie zostanie zastąpiony podczas aktualizacji systemu. Możesz to zrobić w następujący sposób:Ale poczekaj, co jeśli żadne z powyższych nie zadziała?
Myślę, że to dość dokładna odpowiedź, ale jeśli nadal masz problemy, zasugeruję jeszcze jedną rzecz. Możesz użyć
xhost
(1), aby udzielić dostępu konkretnemu użytkownikowi na lokalnym hoście (twoim komputerze),W tym przypadku określamy
root
jako nazwę użytkownika, ponieważ jest to konto, na którymsudo
uruchamiane są programy jako.[*] : P: Mam tylko jeden ekran, więc dlaczego wyświetlacz X potrzebuje „adresu”? Odp .: To dlatego, że X może działać nie tylko na twoim komputerze, ale także przez Internet. Dzięki X łatwo jest uruchamiać programy na komputerze, które wyświetlają się na innych hostach internetowych i programy na innych hostach, które pojawiają się na ekranie (zakładając, że dasz im na to zgodę).
źródło
xhost +
celu umożliwienia powszechnego dostępu.)XDG_RUNTIME_DIR
jest zmienną środowiskową ustawioną w kontekście X Windows, dzięki czemu programy mogą znajdować rzeczy. Ty (neo
) skonfigurowałeś kontekst graficzny.Próbując uruchomić
evince
jakoroot
, wprowadzono warunek, w którym użytkownik (root
) próbuje uzyskać dostęp doneo
ekranu innego użytkownika ( ). Jest to uważane za złą rzecz.Jeśli zdecydujesz, że MUSISZ uruchomić edytor graficzny
root
, przeczytajman gksudo
i skorzystaj z niegogksudo
.źródło
journalctl -b -p err | wl-copy
raportuje,Failed to connect to a Wayland server
co ma sens, ale brzmi głupio z POV użytkownika.