Ich habe letzte Nacht Debian auf meinem Rechner installiert. Jetzt verstehe ich nicht, warum ich GUI-Apps nicht von einem Terminal ausführen kann, wenn ich als Root ausgeführt werde.
Beispielsweise:
sudo -i
glxgears
Erzeugt die folgende Ausgabe:
No protocol specified
Error: couldn't open display :0
Aber wenn ich das Terminal zum ersten Mal öffne, kann ich glxgears
vom Benutzerkonto ausführen . Erst wenn ich das tue sudo -i
, taucht das Problem auf. Dies geschieht für jede GUI-App, die ich ausführen möchte. Ich denke, es hängt wahrscheinlich mit X11 zusammen, aber ich bin mir nicht sicher.
Antworten:
Für den Zugriff auf den X-Server sind zwei Dinge erforderlich:
$DISPLAY
Variable, die auf die richtige Anzeige zeigt (normalerweise:0
)Die Authentifizierungsinformationen können explizit über angegeben werden
$XAUTHORITY
. Standardmäßig ist dies nicht der Fall~/.Xauthority
.Wenn
$DISPLAY
und$XAUTHORITY
für Ihren Benutzer festgelegt ist,sudo
werden sie auch für die neue Shell festgelegt, und alles sollte ordnungsgemäß funktionieren.Wenn sie nicht festgelegt sind, werden wahrscheinlich die falschen Werte verwendet, und Sie können keine X-Anwendungen starten.
In Debian
$XAUTHORITY
wird das normalerweise nicht explizit gesetzt. Einfach hinzufügenzu deinem
.bashrc
oder explizit zu sagenXAUTHORITY=~/.Xauthority sudo ...
und alles sollte funktionieren.Sie können auch
xauth list
überprüfen, ob die richtigen Authentifizierungsinformationen verfügbar sind.quelle
xauth info
zeigt den Pfad zurxhost +
Mein Problem wurdexhost +
sudo -i
stattsudo su -
.Ich hatte die gleiche Frage wie Sie, aber für einen normalen Benutzer. Angenommen, ich möchte Firefox mit dem Benutzerkonto foo starten. Ich bin als Bar angemeldet:
Leider ist dieser Befehl mit demselben Fehler wie in der Frage fehlgeschlagen (dh es wurde kein Protokoll angegeben und das Display kann nicht geöffnet werden).
Meine Lösung bestand darin, den Benutzer foo einfach zur Liste der autorisierten Zugriffe auf den X-Server hinzuzufügen.
Und das war es dann, ich war in der Lage, Firefox (und andere X-Anwendung) mit
sudo
und dem Benutzer foo zu starten .Hintergrund : In X Window gibt es eine Client / Server-Architektur. Wenn Sie eine Anwendung starten, fordern Sie die X-Server-Berechtigung an, diese anzuzeigen. Sobald Sie eine Sitzung öffnen (Sie melden sich grafisch an), dürfen Sie (Ihr Benutzer) standardmäßig mit dem Server kommunizieren und Anwendungen anzeigen. Andere Benutzer haben diese Berechtigung nur, wenn Sie sie angeben.
xhost
ist ein Tool zum Bearbeiten der Liste der Berechtigungen. Dassi
bedeutet, dass die Regel serverseitig ist und den lokalen Benutzerfoo
zum Anzeigen von Anwendungen berechtigt . X Window ist in dieser Hinsicht sehr leistungsfähig und Sie können Remoteanwendungen lokal anzeigen, indem Sie mit derDISPLAY
Umgebungsvariablen undxhost
(aber nicht darauf beschränkt) spielen. In früheren Zeiten, als Menschen tipptenxhost +
und implizit erlaubt, dass jeder seine X - Sitzung verwendet, war es heutzutage möglich, eine Anwendung auf dem Bildschirm anzuzeigen, um Streiche zu spielen ;-) letzten 10 Jahre).PS: Ich habe dies getan, um Firefox in einer Art "Gefängnis" zu starten (um in Zukunft eine Sicherheitsanfälligkeit wie bei pdf.js zu vermeiden ). Aber ich habe schnell herausgefunden, dass das Aufrufen von Firefox über sudo weder den Zugriff auf Audio- noch auf Video-Hardware zulässt. Aber es gibt jemanden, der klar erklärt, wie man die Videohardwarebeschleunigung und das Audio aktiviert, wenn man Firefox über sudo aufruft . YMMV mit diesen Anweisungen, z. B. ich habe noch eine Berechtigung mit Audio verweigert, aber Video ist in Ordnung (getestet auf Fedora 22 mit SELinux ON).
quelle
foo
warroot
, dh ich musstexhost si:localuser:root
auf Ubuntu 17.10 laufen .xhost si:localhost<user>
Befehl hinzu? Wenn keine Benutzer angemeldet sind, steht keinem X-Server eine Berechtigung zur Verfügung.ParaView
einem Programmvtk
, das normalerweise auf der Workstation selbst aufgebaut ist.ParaView
bietet auch ein sicheres Headless-Client / Server-Rendering-Modell über ssh, bei dem ich Remote anstelle von VNC nutzen möchte. Ohne Anmeldung an der Workstation und Ausführungxhost
kann ich die GPU nicht verwenden. Das bedeutet, dass ich den Computer nicht remote neu starten kann und immer noch Zugriff auf die GPU habe.-X
oder (besser?) Für-Y
ssh, um die korrekte Umleitung durchzuführen. Dann brauchen Sie natürlich einen lokalen C-Server. Bei GPU und OpenGL bin ich mir jedoch nicht sicher, wo das Rendern / Berechnen stattfindet. Vielleicht liegt es auf der Client-Seite, nicht auf der Server-Seite. Könnte schwierig sein.Du kannst entweder
Geben Sie die Anzeige an, die in der Befehlszeile verwendet werden soll, indem Sie hinzufügen
-display :0.0
oder
Richten Sie die Umgebungsvariable im Anmeldeskript von root ein (eines von .bashrc, .profile, .bash_profile ...).
export DISPLAY=:0.0
Sie können überprüfen, ob es eingestellt ist,
Um Ihre Anzeige für alle Benutzer von allen Hosts als normalen Benutzer zu öffnen, können Sie dies tun mit:
xhost +
quelle
xhost +
funktionierte auch für mich, nur dass sie vergessen hatten zu erwähnen, dass wir es vom Terminal des autorisierenden Benutzers ausführen sollten, nicht von einem Terminal untersudo su
.Da Sie unter Debian arbeiten, ist es die einfache und unterstützte Lösung, dafür zu sorgen
sudo
, dass Ihre X11-Berechtigungsnachweise kopiert werden.pam_xauth
istlibpam-modules
genau zu diesem Zweck im Lieferumfang enthalten ; Um es zu verwenden, müssen Sie nur hinzufügenzu Ihrer
/etc/pam.d/sudo
Datei. Sie können es auch hinzufügensu
. Ausführliche Informationen finden Siepam_xauth
natürlich auf der Manpage.quelle
Was hat mir geholfen:
xauth generate :0 . trusted
auf deruser
Seite, die eine neue generierenMIT-MAGIC-COOKIE-1
Überprüfen Sie den neu erstellten Schlüssel mit
xauth list' as
Benutzerand
root(they should be the same if your
xAuthority` Variable auf die gleiche Datei verweist.Voila greift von
root
jedemX-App
Terminal aus zu, jedoch nur vorübergehend.Um es dauerhaft zu machen, siehe @Huygens Antwort!
quelle
Alternative Lösung :
Dienste wie cron, die unter root ausgeführt werden, können nicht angezeigt werden, wenn der aktuelle x-Benutzer nicht root ist.
Wir müssen nur den root-Benutzer zu x hinzufügen, Sie können dies zum Zeitpunkt der Anmeldung mit einem Startskript tun
Zu Testzwecken können wir einfach als Befehl unter dem aktuellen Benutzer ausführen und das Root-Skript / job / service / ... neu starten.
quelle
Der
sudo
Befehl verfügt über einen Schalter zum Beibehalten von Umgebungsvariablen.Damit können Sie den Befehl mit -E switch ausführen. Beispiel:
Wenn Sie keine datenschutzkritischen Anwendungen wie Webbrowser ausführen müssen, sollten Sie -E switch mit sudo hinzufügen. Wir können Chrome oder Firefox nicht einfach durch Hinzufügen des Schalters -E ausführen . Weil viele Browser Schutz vor Verletzungen des Benutzerraums implementiert haben. @ huygens Antwort kann Einblicke in dieses Thema haben.
Hinweis: Das Hinzufügen -E - Schalter wird nicht helfen , wenn Ihre Benutzerumgebung nicht über
DISPLAY
undXAUTHORITY
bereits richtig eingestellt .quelle
Verwenden Sie diesen Befehl und es wird funktionieren
quelle
cp: cannot stat ‘/home/user/.Xauthority’: No such file or directory
auf jedem der über 10 Debian-basierten Rechner, auf die ich Zugriff habe, angezeigt.