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_DIR
durch 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 specified
oder 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 sudo
Ihrer 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 DISPLAY
richtig 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: xauth
und xhost
. Das heute am häufigsten verwendete ist xauth
(1), bei dem die XAUTHORITY
Umgebungsvariable verwendet wird. Lassen Sie uns noch einmal überprüfen, ob es richtig eingestellt ist sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Wenn Sie XAUTHORITY
auf eine Datei in Ihrem Home-Verzeichnis verweisen, diese beim Ausführen jedoch leer sudo
ist, ist dies das Problem.
UPDATE: Speichern Sie die Umgebungsvariablen
Also, was ist das Problem? Wenn entweder die DISPLAY
oder die XAUTHORITY
Umgebungsvariablen nicht über die gespeichert werden sudo
, können Sie sudo
(8) anweisen, die Umgebung zu erhalten, indem Sie die folgende -E
Option verwenden:
sudo -E evince
Ein besserer Weg: env_keep
Sie könnten fragen: Warten Sie, wenn -E
alles 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 sudo
zweimal). 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 root
als Benutzernamen an, da dies das Konto ist, sudo
unter 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).