在Docker容器中运行x-org时,键盘/鼠标无法响应

我想为GUI应用程序(例如Chrome)创build一个Docker镜像,我希望这个GUI应用程序可以在没有安装X服务器的情况下在一个裸Linux服务器上运行。

我知道为X Window Client(GUI应用程序本身)创build和运行Docker镜像非常容易。 这需要在主机上安装并运行X服务器。

sudo docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix xorg xterm -display :0 

但是对于我来说,我需要在Docker容器中运行X客户机和服务器。

这是我的dockerfile:

 FROM ubuntu:14.04 RUN apt-get update && apt-get install -y xorg 

我通过命令运行图像:

 sudo docker run -i -t --rm -e DISPLAY=:0 --privileged xorg xinit 

X服务器可以启动,我的屏幕变黑,几秒钟后,xterm窗口显示。 但是,我不能使用键盘和鼠标。 屏幕看起来像freezen

我已经search并尝试了很多解决scheme,但没有人能解决这个问题。 (虚拟的x服务器不是我需要的)

我已经解决了这个问题。

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

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

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

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

添加文件/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" 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 

并运行docker集装箱:

 docker run -i -t -v /tmp/.X11-unix:/tmp/.X11-unix --rm --privileged ubuntu startx