Как я могу ослабить ограничения безопасности 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; } 

Несколько некрасиво.


1 "Каждый" обычно означает любого пользователя, который может запускать программы на компьютере, но если ваш сервер X11 прослушивает TCP-соединения, это будет означать "весь Интернет", хотя в современных дистрибутивах это встречается редко.

Другие вопросы по тегам