Как я могу ослабить ограничения безопасности 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-соединения, это будет означать "весь Интернет", хотя в современных дистрибутивах это встречается редко.