在 docker 容器中运行 x-org 时键盘/鼠标不响应

Kri*_*iss 6 x11 user-interface docker

我想为 GUI 应用程序(例如 Chrome)创建一个 docker 映像,并且希望这个 GUI 应用程序可以在没有安装 X 服务器的裸 Linux 服务器上运行。

我知道为 X Window 客户端(GUI 应用程序本身)创建和运行 docker 映像非常容易。这需要在主机上安装并运行 X 服务器。

sudo docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix xorg xterm -display :0
Run Code Online (Sandbox Code Playgroud)

但对我来说,我需要 X 客户端和服务器都在 docker 容器中运行。

这是我的 dockerfile:

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y xorg
Run Code Online (Sandbox Code Playgroud)

我通过命令运行图像:

sudo docker run -i -t --rm -e DISPLAY=:0 --privileged xorg xinit
Run Code Online (Sandbox Code Playgroud)

X 服务器可以启动,屏幕变黑,几秒钟后,xterm 窗口显示。但是,我无法使用键盘和鼠标。屏幕似乎冻结了

我搜索并尝试了很多解决方案,但没有人能解决这个问题。(我不需要虚拟x服务器)

Kri*_*iss 5

我已经解决了这个问题。

起初,我认为可能是docker容器中的x服务器无法访问主机设备,并且我在LXC/cgroup上花了很多时间。例如,我将 docker exec 引擎更改为 LXC,并添加了选项“ ”,并且还在容器中--lxc-conf='lxc.cgroup.devices.allow = c 13:* rwm创建了。/dev/input/*

所有这些操作都是不必要的。

如果我们在特权模式下运行 docker 容器,所有主机设备将自动添加。或者我们可以使用“ --device=/dev/input/mice”等选项来共享主机设备。

真正的问题是x服务器无法自动发现和添加设备。我不知道为什么。但我们可以修改 x 服务器的配置并自定义设备。

添加文件 /etc/X11/xorg.conf.d/10-input.conf

 Section "ServerFlags"
     Option "AutoAddDevices" "False"  
 EndSection

 Section "ServerLayout"
     Identifier     "Desktop"
     InputDevice    "Mouse0" "CorePointer"
     InputDevice    "Keyboard0" "CoreKeyboard"  
 EndSection

 Section "InputDevice"
     Identifier "Keyboard0"
     Driver "kbd"
     Option "Device" "/dev/input/event2" 
 EndSection

 Section "InputDevice"
     Identifier "Mouse0"
     Driver "mouse"
     Option "Protocol" "auto"
     Option "Device" "/dev/input/mice"
     Option "ZAxisMapping" "4 5 6 7"  
 EndSection
Run Code Online (Sandbox Code Playgroud)

并运行 docker 容器:

docker run -i -t -v /tmp/.X11-unix:/tmp/.X11-unix --rm --privileged ubuntu startx
Run Code Online (Sandbox Code Playgroud)