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 przez pam_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
lub WARNING **: 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:
echo $DISPLAY
I możesz sprawdzić, co sudo
myśli Twój WYŚWIETLACZ, wpisując:
sudo -s
echo $DISPLAY
exit
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 ustawiony sudo
? 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
i xhost
. Najpopularniejszym obecnie jest xauth
(1), który korzysta ze XAUTHORITY
zmiennej środowiskowej. Ponownie sprawdźmy, czy jest poprawnie ustawiony w sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Jeśli XAUTHORITY
wskazuje plik w twoim katalogu domowym, ale po uruchomieniu jest pusty sudo
, to jest problem.
POPRAWKA: Zapisz zmienne środowiskowe
Więc jaka jest poprawka? Jeśli zmienne środowiskowe DISPLAY
lub XAUTHORITY
środowiskowe nie są zapisywane w poprzek sudo
, możesz powiedzieć sudo
(8), aby chronić środowisko, korzystając z -E
opcji:
sudo -E evince
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ślne sudo
? 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 linii Defaults env_keep += "DISPLAY XAUTHORITY"
do pliku sudoers
(5) za pomocą visudo
(8) . Możesz sprawdzić, jakie zmienne środowiskowe sudo zachowuje, uruchamiając:
sudo sudo -V
(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:
sudo visudo -f /etc/sudoers.d/local
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),
xhost si:localuser:root
W tym przypadku określamy root
jako nazwę użytkownika, ponieważ jest to konto, na którym sudo
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ę).