如何从Docker容器关闭屏幕?

时间:2019-02-20 10:30:36

标签: docker x11

我有一个运行着GUI应用程序的docker容器。一切正常,除非该应用尝试通过将以下命令推到系统来关闭屏幕: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"

您知道为什么我无法从Docker容器关闭主机屏幕吗?

主机位于lubuntu 18.04上,我测试了命令行以关闭屏幕,并且运行正常。

谢谢。

1 个答案:

答案 0 :(得分:0)

所以我发现了:

第一件事是编辑dockerfile以安装X实用程序(如果没有,则docker容器中不知道xset):

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"

如果有人遇到同样的问题,请寻求帮助。