TL; DR: root не должен запускать GUI-приложение, установите для него обычного пользователя.Запуск графического интерфейса в докере (no ssh, no VNC)
Я пытаюсь запустить arduino IDE (скачанный, а не пакет) изнутри Докера. Я написал Dockerfile следующим образом:
FROM ubuntu:14.04
MAINTAINER Mael Auzias <[email protected]>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]
я потратил время, чтобы понять, как же Jessica Frazelle обычно начинается ее graphical containers по праву начать мину с помощью команды:
$docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix 25af73b6cb3c ./arduino
No protocol specified
Picked up JAVA_TOOL_OPTIONS:
No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
я установил strace
и проверить с xeyes
что было неправильно, и я получаю следующую ошибку:
connect(3, {sa_family=AF_LOCAL, [email protected]"/tmp/.X11-unix/X0"}, 20) = -1 ECONNREFUSED (Connection refused)
Неужели кто-нибудь испытал это? Может ли кто-нибудь указать мне какой-нибудь документ или посмотреть, что я делаю неправильно?
Любая помощь будет радушна.
PS: как указано в заголовке, я не хочу использовать ssh или VNC. Никакая криптография не должна использоваться или сеть, когда сокет unix быстрее и достаточно.
Решение
Есть некоторые новости ...
В корневом каталоге пользователя я не могу запустить графическое приложение. Когда я su regular-user
и начинаю xterm
или xeyes
, он работает. Я не понимаю, почему, хотя:/
Здесь работает Dockerfile, протестирован на Fedora 23. Приложение не должно быть побежал, как корень, так что начинает использовать X. Обратите внимание, что, несвязанный к этой проблеме параметр Java был удален из файла bash arduino
(поэтому он запускается правильно).
После docker build -t arduino-1.6.6 .
, docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix arduino-1.6.6 ./arduino
Запустите IDE arduino.
Вы не быть в состоянии загрузить любой код в Arduino без добавления --device
или -v
поделиться /dev/ttyUSB0
.
FROM ubuntu:14.04
MAINTAINER Mael Auzias <[email protected]>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
RUN sed -i 's/"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"//g' /home/arduino/arduino-1.6.6/arduino
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]