it-swarm.com.de

Was ist XDG_RUNTIME_DIR?

Während ich versuchte, Evince von der Kommandozeile aus zu öffnen, gab es einen Fehler

[email protected]:~$ 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:

Wie kann dieses Problem behoben werden?

12
Muhammad Iliyas

Das Wichtigste zuerst: XDG_RUNTIME_DIR

Zur Beantwortung Ihrer ersten Frage "Was ist XDG_RUNTIME_DIR?" handelt es sich um eine Umgebungsvariable, die automatisch festgelegt wird, wenn Sie sich anmelden. Sie teilt jedem Programm mit, wo Sie einen Benutzer finden -spezifisches Verzeichnis, in dem kleine temporäre Dateien gespeichert werden können. Beachten Sie, dass XDG_RUNTIME_DIR durch _pam_systemd_ (8) festgelegt wird, sodass es eigentlich nicht mitX(Programme grafisch ausführen), was das Problem ist, das Sie zu haben scheinen.

Problembehandlung

Ihre zweite Frage "Wie kann ich dieses Problem beheben?" ist eine sehr gute Frage. Das heißt, Sie interessieren sich nicht nur für what das Update, sondern auch für how , um es selbst herauszufinden. Schauen Sie sich zunächst die ersten Fehlermeldungen an. Insbesondere sollte die Suche nach _No protocol specified_ oder _WARNING **: Could not open X display_ zeigen, dass das Problem mitX/zusammenhängt.(auch The X Windowing System genannt) So werden grafische Programme auf Ihrem Bildschirm angezeigt. Wenn Sie wissen, dass dies viele Fragen zur Fehlerbehebung in Ihrem Kopf aufwirft.

X ANZEIGE

Ihre nächste Frage könnte sein, was ist das "X display" , das evince nicht öffnen kann? Eine "Anzeige" ist die Adresse für Ihren Bildschirm.[*] Jedes Programm, das auf Ihren Bildschirm schreiben möchte, muss die Adresse kennen. Sie können sehen, wie Ihre X-Anzeige aussieht, indem Sie die Umgebungsvariable DISPLAY überprüfen:

_echo $DISPLAY
_

Und Sie können überprüfen, was Sudo von Ihrem DISPLAY hält, indem Sie Folgendes eingeben:

_Sudo -s
echo $DISPLAY
exit
_

Wenn es nichts anzeigt, ist das das Problem. (Siehe Fix weiter unten).

XAUTHORITY

Aber was ist, wenn das nicht das Problem ist und DISPLAY in Sudo richtig eingestellt ist? Dann wundern Sie sich vielleicht, obXüber Berechtigungen verfügt, die andere Benutzer daran hindern, auf mein Display zu schreiben? Wenn Sie das gedacht hätten, hätten Sie recht,Xhat zwei Hauptautorisierungsmethoden: xauth und xhost. Das heute am häufigsten verwendete ist xauth (1) , das die Umgebungsvariable XAUTHORITY verwendet. Überprüfen wir noch einmal, ob es in Sudo richtig eingestellt ist:

_echo $XAUTHORITY
Sudo -s
echo $XAUTHORITY
exit
_

Wenn XAUTHORITY auf eine Datei in Ihrem Ausgangsverzeichnis verweist, diese jedoch leer ist, wenn Sie Sudo ausführen, ist dies das Problem.

UPDATE: Speichern Sie die Umgebungsvariablen

Also, was ist das Problem? Wenn entweder die Umgebungsvariablen DISPLAY oder XAUTHORITY nicht in Sudo gespeichert werden, können Sie Sudo (8) angeben ), um die Umwelt zu schonen, indem Sie die Option _-E_ wie folgt verwenden:

_Sudo -E evince
_

Ein besserer Weg: env_keep

Sie könnten sich fragen: Warten Sie, wenn _-E_ alles auf magische Weise zum Funktionieren bringt, warum ist dies dann nicht die Standardeinstellung für Sudo? Die Antwort lautet, dass dies ein potenzielles Sicherheitsrisiko darstellt. Umgebungsvariablen wirken sich auf die Funktionsweise von Programmen aus, und Sie möchten nicht, dass alle Programme von einem Benutzerkonto in das Stammverzeichnis exportiert werden. Die "richtige" Möglichkeit besteht darin, die Zeile _Defaults env_keep += "DISPLAY XAUTHORITY"_ der sudoers (5) -Datei mit visudo hinzuzufügen. (8) . Sie können überprüfen, welche Umgebungsvariablen Sudo beibehält, indem Sie Folgendes ausführen:

_Sudo sudo -V
_

(Ja, Sie geben zweimal Sudo ein.) Ich empfehle, die Zeile nicht in die Standard-Sudoers-Datei (_/etc/sudoers_) zu setzen, sondern in eine lokale Datei, die beim Upgrade Ihres Systems nicht überschrieben wird. Das können Sie so machen:

_Sudo visudo -f /etc/sudoers.d/local 
_

Aber was ist, wenn keines der oben genannten Verfahren funktioniert?

Ich denke, das ist eine ziemlich gründliche Antwort, aber wenn Sie immer noch Probleme haben, gibt es noch eine andere Sache, die ich vorschlagen würde. Sie können xhost (1) verwenden, um einem bestimmten Benutzer auf dem lokalen Host (Ihrem Computer) wie folgt Zugriff zu gewähren:

_xhost si:localuser:root
_

In diesem Fall geben wir root als Benutzernamen an, da dies das Konto ist, unter dem Sudo Programme ausführt.


[*]: F: Ich habe nur einen Bildschirm. Warum benötigt ein X-Display eine "Adresse"? A: Es liegt daran, dassXnicht nur daran arbeiten kann Ihre Maschine, aber über das Internet. MitXist es einfach, Programme auf Ihrem Computer auszuführen, die auf anderen Internet-Hosts und Programmen auf anderen angezeigt werden Hosts, die auf Ihrem Bildschirm angezeigt werden (vorausgesetzt, Sie erteilen ihnen die Erlaubnis).

21
hackerb9

XDG_RUNTIME_DIR ist eine Umgebungsvariable, die in Ihrem X Windows-Kontext festgelegt ist, damit Programme Dinge finden können. Sie (neo) haben den Grafikkontext eingerichtet.

Wenn Sie versuchen, evince als root auszuführen, haben Sie die Bedingung eingegeben, in der ein Benutzer (root) versucht, auf die Anzeige eines anderen Benutzers (neo) zuzugreifen. Dies wird als eine schlechte Sache angesehen.

Wenn Sie sich entschließen, einen grafischen Editor als root auszuführen, lesen Sie man gksudo und verwenden Sie gksudo.

3
waltinator