Der wahrscheinlichste Grund für den Fehler ist, dass Sie emulator
nicht wissen, wo sich Ihre Anzeige befindet. X11-Programme verwenden die $DISPLAY
Umgebungsvariable, um den Standort des X11-Servers zu ermitteln, und bei den meisten Daemons wird die Umgebungsvariable nicht empfangen. (Die meisten Dämonen brauchen X11 nicht zum Laufen.)
Sie müssen einen Weg finden, um den aktuellen Wert von $DISPLAY
an den Daemon zu übergeben. Beachten Sie, dass er sich zwischen den Anmeldungen ändern kann .
Wie für die Sicherheit, nicht verwenden immer xhost +
- es gibt vollen Zugriff auf alle 1 . Geben Sie stattdessen dem anderen Konto Zugriff auf Ihre Xauthority- Daten.
$ xauth extract /dev/stdout $DISPLAY | su -c "xauth merge /dev/stdin" jenkins
Eine Möglichkeit, all dies zu automatisieren, besteht darin, ein paar Befehle in Ihrem ~/.xprofile
Befehl einzugeben. Sie benötigen die ACL-Unterstützung, um Folgendes aktivieren zu können:
# Ihr .xprofile if ["$ DISPLAY"]; dann Berühren Sie / tmp / jenkins-display setfacl -mu :: rw, u: jenkins: r, g :: -, o :: - / tmp / jenkins-display > / tmp / jenkins-display fi
und erstellen Sie ein emulator-wrapper
Skript zum Ausführen des emulator
Tools:
#! / bin / sh # ein Wrapper-Skript für 'Emulator' </ tmp / jenkins-display Exec-Emulator "$ @"
Etwas hässlich.
1 "Jeder" bezieht sich normalerweise auf jeden Benutzer, der Programme auf dem Computer ausführen kann. Wenn Ihr X11-Server jedoch auf TCP-Verbindungen wartet, würde dies "das gesamte Internet" bedeuten, obwohl dies in modernen Distros ungewöhnlich ist.