Das Wichtigste zuerst: XDG_RUNTIME_DIR
Um Ihre erste Frage zu beantworten: "Was ist XDG_RUNTIME_DIR?" Dies ist eine Umgebungsvariable, die beim Anmelden automatisch festgelegt wird. Sie teilt jedem Programm mit, wo sich ein benutzerspezifisches Verzeichnis befindet, in dem kleine temporäre Dateien gespeichert werden können. Beachten Sie, dass dies XDG_RUNTIME_DIRdurch pam_systemd(8) festgelegt ist , sodass es nicht mit X (grafische Ausführung von Programmen) zusammenhängt, was das Problem ist, das Sie zu haben scheinen.
Problembehandlung
Ihre zweite Frage: "Wie behebe ich dieses Problem?" ist eine sehr gute. Das bedeutet , dass Sie nicht nur daran interessiert sind , was das fix ist, sondern auch , wie es auf eigene Faust herauszufinden. Schauen Sie sich zunächst die ersten Fehlermeldungen an. Wenn Sie nach No protocol specifiedoder suchen WARNING **: Could not open X display, sollten Sie insbesondere feststellen , dass das Problem bei X (auch als X-Fenstersystem bezeichnet ) liegt. Auf diese Weise 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 dieses "X-Display" , das sich nicht öffnen lässt? Eine "Anzeige" ist die Adresse für Ihren Bildschirm. [*] Jedes Programm, das auf deinen 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 sudoIhrer Meinung nach Ihr DISPLAY ist, 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 das DISPLAYrichtig eingestellt ist sudo? Dann fragen Sie sich vielleicht, ob X über bestimmte Berechtigungen verfügt, die andere Benutzer daran hindern, auf mein Display zu schreiben. Wenn Sie das für richtig hielten, hat X zwei Hauptautorisierungsmethoden: xauthund xhost. Das heute am häufigsten verwendete ist xauth(1), bei dem die XAUTHORITYUmgebungsvariable verwendet wird. Lassen Sie uns noch einmal überprüfen, ob es richtig eingestellt ist sudo:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Wenn Sie XAUTHORITYauf eine Datei in Ihrem Home-Verzeichnis verweisen, diese beim Ausführen jedoch leer sudoist, ist dies das Problem.
UPDATE: Speichern Sie die Umgebungsvariablen
Also, was ist das Problem? Wenn entweder die DISPLAYoder die XAUTHORITYUmgebungsvariablen nicht über die gespeichert werden sudo, können Sie sudo(8) anweisen, die Umgebung zu erhalten, indem Sie die folgende -EOption verwenden:
sudo -E evince
Ein besserer Weg: env_keep
Sie könnten fragen: Warten Sie, wenn -Ealles magisch funktioniert, warum ist es 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 mit (8)Defaults env_keep += "DISPLAY XAUTHORITY" zur sudoers(5) -Datei hinzuzufügen . Sie können überprüfen, welche Umgebungsvariablen sudo beibehält, indem Sie Folgendes ausführen:visudo
sudo sudo -V
(Ja, du tippst sudozweimal). Ich empfehle, die Zeile nicht in die Standard-sudoers-Datei ( /etc/sudoers) zu schreiben , 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 rootals Benutzernamen an, da dies das Konto ist, sudounter dem Programme ausgeführt werden.
[*] : F: Ich habe nur einen Bildschirm. Warum benötigt ein X-Display eine "Adresse"? A: Das liegt daran, dass X nicht nur auf Ihrem Computer, sondern auch über das Internet funktioniert. Mit X ist es einfach, Programme auf Ihrem Computer auszuführen, die auf anderen Internet-Hosts angezeigt werden, und Programme auf anderen Hosts, die auf Ihrem Bildschirm angezeigt werden (vorausgesetzt, Sie geben ihnen die Erlaubnis).