在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