Я использую GitLab CI для запущения автоматизированных тестов на установке Ubuntu 14.04. Бегун GitLab CI создал нового пользователя, gitlab-runner
, который выполняет все тесты. Теперь эти тесты включают компоненты графического интерфейса пользователя, таким образом, мне нужны X дисплеев - на котором я вызываю даже без физического дисплея через ConnectedMonitor
и CustomEDID
опции в xorg.conf
.
Проблема - это, когда тест запускается пользователем gitlab-runner
через DISPLAY=:0.0 ./runTestApp
, Я добираюсь, "Не мог соединиться для отображения:0.0" ошибок. Я могу зафиксировать его путем входа в систему как обычный пользователь на рабочей станции и работать sudo DISPLAY=:0.0 xhost +
.
Однако:
xhost +
на запуске (пытался вставить его /etc/rc.local
)xhost +
на самом деле очень небезопасно, но я не узнал, что сделать вместо этого. Такое чувство, что это могло бы иметь отношение .Xauthority
файл (который мой обычный пользователь имеет, но gitlab-runner
не делает),Что состоит в том, чтобы дать лучший способ gitlab-runner
постоянный доступ к этим X дисплеям?
Во-первых, для предоставления доступа только к бегуну CI Gitlab необходимо использовать более ограниченную команду:
xhost +SI:localuser:gitlab-runner
116-секундный, /etc/rc.local
выполнения слишком рано, чтобы эта команда имела эффект, и далее, необходимо установить $DISPLAY
, чтобы это работало.
Это зависит от того, как Ваш X-сервер запускается. Если Вы используете LightDM, я думаю, что можно заставить его работать путем добавления следующей строки к /etc/lightdm/lightdm.conf
:
greeter-setup-script=xhost +SI:localuser:gitlab-runner
Если Вы делаете ps alxww|grep X
, необходимо видеть, что X-сервер работает с опцией -auth
, сопровождаемой некоторым именем файла. Этот файл содержит случайное число, названное MIT-MAGIC-COOKIE-1. Только клиентам X11, которые могут представить это число серверу X11 в запуске протокола, разрешают соединиться. Приложения, запущенные тем же пользователем, который запустил сервер, найдут значение cookie в ~/.Xauthority файлом, который обычно не читаем другими.
можно или удалить -auth
, опция от запуска сервера, путем взгляда в конфигурации любого xdm, gdm и т.д. запускает механизм, который Вы используете, или можно скопировать cookie от зарегистрированного пользователя другому пользователю, или можно дать им доступ для чтения к.Xauthority файлу.
, Например, скопировать cookie, как пользователь pholz:
xauth list :0 >/tmp/toadd
chmod a+r /tmp/toadd
и как пользовательский gitlab-бегун:
xauth add $(</tmp/toadd)
Или позволить доступ для чтения:
chmod a+r /home/pholz/.Xauthority
chmod a+rx /home/pholz/
и затем в среде gitlab-бегуна установите:
export XAUTHORITY=/home/pholz/.Xauthority
<час> , Конечно, если Вам действительно не нужен дисплей, можно запустить отдельный сервер X11, который отображается в память и абсолютно независим от любого пользовательского входа в систему и экрана. Вы должны только сделать:
sudo apt-get install xvfb
Xvfb :1 -noreset &
export DISPLAY=:1
Затем все Ваши приложения отобразятся в этот виртуальный кадровый буфер. Если Вы хотите проверить то, что находится на экране, можно использовать снимки экрана, удаленные рабочие столы или Xnest.