Как выключить экран из докера? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть докер-контейнер, работающий с приложением с графическим интерфейсом.Все работает хорошо, за исключением случаев, когда приложение пытается выключить экран, выдавая в систему следующую команду: xset -display :0.0 dpms force off

Когда эта команда достигает системы, происходит сбой контейнера Docker.

Вот содержимое docker-compose.yml для этого контейнера:

version: "3"

volumes:
  kiosk_vol:

services:
  func:
    image: docker.alatimier.fr/kiosk/func:snapshot
    restart: always
    environment:
      KIOSK_ID: ${KIOSK_ID}
      ADDR: ${ADDR}
      # For Linux host
      DISPLAY:
      # For OSX host, install socat and xquarts and create TCP bridge between the docker container and X11 window server :
      # socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
      #DISPLAY: docker.for.mac.localhost:0
    volumes:
    - kiosk_vol:/working_directory
    - /tmp/.X11-unix:/tmp/.X11-unix:rw
    depends_on:
    - conf
    ipc: "host"

Не могли бы вы представить, почему я не могу отключить экран хоста из контейнера докера?

Хостнаходится на lubuntu 18.04, и я проверил командную строку, чтобы выключить экран, и она отлично работает.

Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

Итак, я выяснил:

Прежде всего, отредактируйте файл dockerfile для установки утилит X (без него xset неизвестен в контейнере docker):

RUN apt-get install --no-install-recommends -y x11-xserver-utils

Тогдаотредактируйте docker-compose.yml, чтобы предоставить доступ к файлу .Xauthority и передать отображаемое имя:

version: "4"

volumes:
  kiosk_vol:

services:
  func:
    image: docker.alatimier.fr/kiosk/func:snapshot
    restart: always
    environment:
      KIOSK_ID: ${KIOSK_ID}
      ADDR: ${ADDR}
      # For Linux host
      DISPLAY: $DISPLAY
      # For OSX host, install socat and xquarts and create TCP bridge between the docker container and X11 window server :
      # socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
      #DISPLAY: docker.for.mac.localhost:0
    volumes:
    - kiosk_vol:/working_directory
    - /tmp/.X11-unix:/tmp/.X11-unix:rw
    - $HOME/.Xauthority:/root/.Xauthority:rw
    depends_on:
    - conf
    ipc: "host"

Надеюсь, что эта справка будет, если у кого-то возникла такая же проблема.

...