Как я могу ослабить ограничения безопасности X для демона jenkins?
Он отлично работает в командной строке, когда я делаю
xhost +
su - jenkins
emulator -avd myAVD.avd
но
emulator -avd myAVD.avd
исполняется Дженкинс демон с
"SDL init failure: No available video device"
Как я могу ослабить ограничения безопасности X для демона jenkins,
так что это может сделать emulator -avd myAVD.avd без сбоев?
1 ответ
Наиболее вероятная причина, по которой вы получаете ошибку, заключается в том, что emulator не знает, где находится ваш дисплей. Программы X11 используют $DISPLAY Переменная окружения для определения местоположения сервера X11 и способа запуска большинства демонов, они не получают переменную окружения. (Большинству демонов не нужен [и не должен] запускаться X11.)
Вам нужно будет найти способ передать текущее значение $DISPLAY Демону - обратите внимание, что он может меняться между логинами.
Что касается безопасности, никогда не используйте xhost + - это дает полный доступ каждому1. Вместо этого предоставьте другой учетной записи доступ к вашим данным Xauthority.
$ xauth extract /dev/stdout $DISPLAY | su -c "xauth merge /dev/stdin" jenkins
Один из возможных способов автоматизировать все это - поместить несколько команд в ваш ~/.xprofile... вам потребуется поддержка ACL для того, чтобы следующее работало:
# ваш.xprofile
if [ "$DISPLAY" ]; затем
сенсорный / TMP / Jenkins-дисплей
setfacl -m u::rw,u:jenkins:r,g::-,o::- /tmp/jenkins-display
{ echo $DISPLAY; xauth nextract /dev/stdout $DISPLAY; } > /tmp/jenkins-display
фии сделать emulator-wrapper скрипт для запуска emulator инструмент:
#! / Bin / ш
# скрипт-обертка для эмулятора
{читать -r DISPLAY; экспорт DISPLAY; xauth nmerge /dev/stdin; } tmp / jenkins-display
эмулятор exec "$@"Несколько некрасиво.
1 "Каждый" обычно означает любого пользователя, который может запускать программы на компьютере, но если ваш сервер X11 прослушивает TCP-соединения, это будет означать "весь Интернет", хотя в современных дистрибутивах это встречается редко.