如何从 docker 容器关闭屏幕?
How to turn off the screen from a docker container?
我有一个 docker 容器 运行 上面有一个 GUI 应用程序。一切正常,除非应用程序尝试通过向系统推送以下命令来关闭屏幕: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,我测试了命令行关屏没问题
谢谢。
所以我发现:
首先是编辑 docker 文件以安装 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"
希望这对遇到同样问题的人有所帮助。
我有一个 docker 容器 运行 上面有一个 GUI 应用程序。一切正常,除非应用程序尝试通过向系统推送以下命令来关闭屏幕: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,我测试了命令行关屏没问题
谢谢。
所以我发现:
首先是编辑 docker 文件以安装 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"
希望这对遇到同样问题的人有所帮助。