Beim Versuch, Evince über die Befehlszeile zu öffnen , ist ein Fehler aufgetreten
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:
Wie kann dieses Problem behoben werden?
command-line
sudo
evince
Muhammad Iliyas
quelle
quelle
Antworten:
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
durchpam_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 suchenWARNING **: 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:
Und Sie können überprüfen, was
sudo
Ihrer Meinung nach Ihr DISPLAY ist, indem Sie Folgendes eingeben: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 istsudo
? 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
undxhost
. Das heute am häufigsten verwendete istxauth
(1), bei dem dieXAUTHORITY
Umgebungsvariable verwendet wird. Lassen Sie uns noch einmal überprüfen, ob es richtig eingestellt istsudo
:Wenn Sie
XAUTHORITY
auf eine Datei in Ihrem Home-Verzeichnis verweisen, diese beim Ausführen jedoch leersudo
ist, ist dies das Problem.UPDATE: Speichern Sie die Umgebungsvariablen
Also, was ist das Problem? Wenn entweder die
DISPLAY
oder dieXAUTHORITY
Umgebungsvariablen nicht über die gespeichert werdensudo
, können Siesudo
(8) anweisen, die Umgebung zu erhalten, indem Sie die folgende-E
Option verwenden:Ein besserer Weg: env_keep
Sie könnten fragen: Warten Sie, wenn
-E
alles magisch funktioniert, warum ist es dann nicht die Standardeinstellung fürsudo
? 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"
zursudoers
(5) -Datei hinzuzufügen . Sie können überprüfen, welche Umgebungsvariablen sudo beibehält, indem Sie Folgendes ausführen:visudo
(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: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: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).
quelle
xhost +
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 auszuführenroot
, haben Sie die Bedingung eingegeben, bei der ein Benutzer (root
) versucht, auf dieneo
Anzeige ( ) eines anderen Benutzers zuzugreifen . Dies wird als eine schlechte Sache angesehen.Wenn Sie sich entscheiden, MÜSSEN Sie einen grafischen Editor als ausführen
root
, lesenman gksudo
und verwendengksudo
.quelle
journalctl -b -p err | wl-copy
es meldetFailed to connect to a Wayland server
, was Sinn macht, aber von User POV dumm klingt.