LXC容器运行X服务器
Linux容器(LXC)项目提供了Linux上操作系统级虚拟化容器管理工具。大多数应用容器的场合是不需图形界面,如FTP, HTTP等后台服务。容器要运行X桌面环境可通过ssh, xdmcp远程方式,此时容器是X客户机,容器是无需安装X服务器。
Linux主机系统使用Ctrl-Alt-F1到Ctrl-Alt-F7在不同的虚拟终端之间进行切换,其中vt01到vt06是文本模式的终端,而vt07是X终端,X一般在虚拟终端7 (vt07)上运行。当需要容器以本地方式运行X时,就需为容器分配另外一个虚拟终端(如vt09)。
本文介绍的内容是在容器中以本地方式运行X,即在宿主的vt09上运行容器X
实验环境:同一台机器上安装两套完整的debian 8桌面系统,debian-A和debian-B。
1。手工指定键盘/鼠标输入设备驱动
启动debian-B系统,安装xserver-xorg-input-kbd和xserver-xorg-input-mouse软件包,创建/etc/X11/xorg.conf.d/目录,在其下创建10-input.conf文件,内容如下:
<代码> # - v - “ServerFlags”小节 #禁止设备自动检测 选择“AutoAddDevices”“假” EndSection “ServerLayout”小节 标识符“桌面” InputDevice“Mouse0”“CorePointer” InputDevice“Keyboard0”“CoreKeyboard” EndSection “InputDevice”小节 标识符“Keyboard0” 司机“kbd” #选项”XkbLayout”“gb” EndSection “InputDevice”小节 标识符“Mouse0” 司机“鼠标” 选择“协议”“自动” 选择“设备”“/dev/输入/老鼠” 选择“ZAxisMapping”“4 5 6 7” EndSection # - ^ 代码>
重新启动debian-B系统,由10-input.conf配置文件手工指定键盘/鼠标设备运行正常。
2。配置容器
先关闭debian-B系统,然后启动debian-A系统,将debian-B系统的根挂载到debian-A系统的目录/mnt/sdc1/上。
debian-A系统作为宿主(下面将称宿主)
debian-B系统作为容器(下面将称容器)
从宿主复制设备文件到容器根中
root@debian:/home/灵灵# cp - a/dev/tty1/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty2/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty3/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty4/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty5/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty6/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty7/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty8/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/tty9/mnt/sdc1/dev/
root@debian:/home/灵灵# cp - a/dev/input/mnt/sdc1/dev
root@debian:/home/灵灵#
将容器的inittab文件中以下行注释掉
1:2345:重生:38400/sbin/盖蒂tty1
23:重生:38400/sbin/盖蒂tty2
3:23重生:38400/sbin/盖蒂tty3
23:重生:38400/sbin/盖蒂tty4
5:23:重生:38400/sbin/盖蒂tty5
6:23:重生:/sbin/盖蒂38400 tty6
并增加以下行
1:2345:重生:38400/sbin/盖蒂控制台
c1:23:重生:38400/sbin/盖蒂tty1
c2:23:重生:38400/sbin/盖蒂tty2
c3:23:重生:38400/sbin/盖蒂tty3
c4:23:重生:38400/sbin/盖蒂tty4
c5:23:重生:/sbin/盖蒂38400 tty5
创建容器vm3,其配置配置如下:
linlin@debian: ~ $猫/var/lib/lxc/vm3/config
<代码> # #容器 lxc。utsname=vm3 # - v -项目(1) lxc.network.type=veth lxc.network.flags=了 lxc.network.link=br0 lxc.network.name=eth0 lxc.network.mtu=1500 lxc.network.ipv4=192.168.0.10/24 # - ^ - lxc。rootfs=/mnt/sdc1 lxc。tty=6 lxc.pts=1024 # #功能 lxc.cap。=mac_admin下降 lxc.cap。=mac_override下降 lxc.cap。=sys_admin下降 lxc.cap。=sys_module下降 # #设备 #否认所有设备 lxc.cgroup.devices.deny=一个 #允许mknod所有设备(但不是使用它们) lxc.cgroup.devices.allow=c *: * m lxc.cgroup.devices.allow=b *: * m #/dev/控制台 lxc.cgroup.devices.allow=c 5:1读写存储器 #/dev/保险丝 lxc.cgroup.devices.allow=c 10:229读写存储器 #/dev/null lxc.cgroup.devices.allow=c 1:3读写存储器 #/dev/ptmx lxc.cgroup.devices.allow=c 5:2读写存储器 #/dev/pts/* 136年lxc.cgroup.devices.allow=c: *读写存储器 #/dev/随机的 lxc.cgroup.devices.allow=c 1:8读写存储器 #/dev/rtc lxc.cgroup.devices.allow=c 254:0读写存储器 #/dev/电传 lxc.cgroup.devices.allow=c 5:0读写存储器 #/dev/urandom lxc.cgroup.devices.allow=c 1:9读写存储器 #/dev/0 lxc.cgroup.devices.allow=c 1:5读写存储器 # - v -项目(2):容器要启动X所必需的 # tty9即vt9 lxc.cgroup.devices.allow=c 4:9读写存储器 #/dev/mem lxc.cgroup.devices.allow=c 1:1读写存储器 #输入 lxc.cgroup.devices.allow=c 13: *读写存储器 # - ^ - # #文件系统 lxc.mount。输入=proc/mnt/sdc1/proc proc nodev, noexec, nosuid 0 0 lxc.mount。入口=sysfs/mnt/sdc1/sys sysfs违约,ro 0 0LXC容器运行X服务器