Wie kann ich die X-Sicherheitseinschränkungen für den Jenkins-Daemon lockern?

1085
user19496

Wenn es funktioniert, funktioniert es gut auf der Kommandozeile

xhost +  su - jenkins  emulator -avd myAVD.avd  

aber

emulator -avd myAVD.avd 

Der von jenkins ausgeführte Dämon schlägt mit fehl

"SDL init failure: No available video device" 

Wie kann ich die X-Sicherheitseinschränkungen für den Jenkins-Daemon lockern,
damit er emulator -avd myAVD.avdohne Fehler auskommt?

0
Wenn Sie keine zufriedenstellende Antwort erhalten, erhalten Sie unter http://askubuntu.com eine Antwort N.N. vor 13 Jahren 0

1 Antwort auf die Frage

1
grawity

Der wahrscheinlichste Grund für den Fehler ist, dass Sie emulatornicht wissen, wo sich Ihre Anzeige befindet. X11-Programme verwenden die $DISPLAYUmgebungsvariable, 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 $DISPLAYan 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 ~/.xprofileBefehl 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-wrapperSkript zum Ausführen des emulatorTools:

#! / 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.

http: // localhost: 8080 / systemInfo zeigt alle Umgebungsvariablen für den Jenkins-Daemon-Prozess an, und $ DISPLAY fehlt. user19496 vor 13 Jahren 0