溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

LXC容器運(yùn)行X Server

發(fā)布時(shí)間:2020-06-30 00:45:52 來源:網(wǎng)絡(luò) 閱讀:490 作者:lu_linlin 欄目:系統(tǒng)運(yùn)維

LXC容器運(yùn)行X Server

Linux Containers (LXC)項(xiàng)目提供了Linux上操作系統(tǒng)級虛擬化容器管理工具.大多數(shù)應(yīng)用容器的場合是不需圖形界面,如FTP、HTTP等后臺(tái)服務(wù).容器要運(yùn)行X桌面環(huán)境可通過ssh,xdmcp遠(yuǎn)程方式,此時(shí)容器是X Client,容器是無需安裝X Server.

Linux主機(jī)系統(tǒng)使用 Ctrl-Alt-F1 到 Ctrl-Alt-F7 在不同的虛擬終端之間進(jìn)行切換,其中 vt01 到 vt06 是文本模式的終端,而 vt07 是 X 終端,X一般在虛擬終端7(vt07)上運(yùn)行.當(dāng)需要容器以本地方式運(yùn)行X時(shí),就需為容器分配另外一個(gè)虛擬終端(如vt09).

本文介紹的內(nèi)容是在容器中以本地方式運(yùn)行X,即在宿主的vt09上運(yùn)行容器X.

實(shí)驗(yàn)環(huán)境:同一臺(tái)機(jī)器上安裝兩套完整的debian 8桌面系統(tǒng),debian-A和debian-B.

1.手工指定鍵盤/鼠標(biāo)輸入設(shè)備驅(qū)動(dòng)

啟動(dòng)debian-B系統(tǒng),安裝xserver-xorg-input-kbd和xserver-xorg-input-mouse軟件包,創(chuàng)建/etc/X11/xorg.conf.d/目錄,在其下創(chuàng)建10-input.conf文件,內(nèi)容如下:


#--v--

Section "ServerFlags"
#禁止設(shè)備自動(dòng)檢測
         Option "AutoAddDevices" "False"
EndSection

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

Section "InputDevice"
     Identifier "Keyboard0"
     Driver "kbd"
#Option "XkbLayout" "gb"
EndSection

Section "InputDevice"
     Identifier "Mouse0"
     Driver "mouse"
     Option "Protocol" "auto"
     Option "Device" "/dev/input/mice"
     Option "ZAxisMapping" "4 5 6 7"
EndSection

#--^--

重新啟動(dòng)debian-B系統(tǒng),由10-input.conf配置文件手工指定鍵盤/鼠標(biāo)設(shè)備運(yùn)行正常.

2.配置容器

先關(guān)閉debian-B系統(tǒng),然后啟動(dòng)debian-A系統(tǒng),將debian-B系統(tǒng)的根掛載到debian-A系統(tǒng)的目錄/mnt/sdc1/上.

debian-A系統(tǒng)作為宿主(下面將稱宿主)
debian-B系統(tǒng)作為容器(下面將稱容器)

從宿主復(fù)制設(shè)備文件到容器根中
root@debian:/home/linlin# cp -a /dev/tty1 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty2 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty3 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty4 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty5 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty6 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty7 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty8 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/tty9 /mnt/sdc1/dev/
root@debian:/home/linlin# cp -a /dev/input /mnt/sdc1/dev
root@debian:/home/linlin#

將容器的inittab文件中以下行注釋掉
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

并增加以下行
1:2345:respawn:/sbin/getty 38400 console
c1:23:respawn:/sbin/getty 38400 tty1
c2:23:respawn:/sbin/getty 38400 tty2
c3:23:respawn:/sbin/getty 38400 tty3
c4:23:respawn:/sbin/getty 38400 tty4
c5:23:respawn:/sbin/getty 38400 tty5

創(chuàng)建容器vm3,其config配置如下:
linlin@debian:~$ cat /var/lib/lxc/vm3/config

##Container
lxc.utsname = vm3

#--v--項(xiàng)目(1)
lxc.network.type  = veth
lxc.network.flags = up
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

##Capabilities
lxc.cap.drop = mac_admin
lxc.cap.drop = mac_override
lxc.cap.drop = sys_admin
lxc.cap.drop = sys_module

##Devices
#Deny all devices
lxc.cgroup.devices.deny = a
#Allow to mknod all devices (but not using them)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m

#/dev/console
lxc.cgroup.devices.allow = c 5:1 rwm
#/dev/fuse
lxc.cgroup.devices.allow = c 10:229 rwm
#/dev/null
lxc.cgroup.devices.allow = c 1:3 rwm
#/dev/ptmx
lxc.cgroup.devices.allow = c 5:2 rwm
#/dev/pts/*
lxc.cgroup.devices.allow = c 136:* rwm
#/dev/random
lxc.cgroup.devices.allow = c 1:8 rwm
#/dev/rtc
lxc.cgroup.devices.allow = c 254:0 rwm
#/dev/tty
lxc.cgroup.devices.allow = c 5:0 rwm
#/dev/urandom
lxc.cgroup.devices.allow = c 1:9 rwm
#/dev/zero
lxc.cgroup.devices.allow = c 1:5 rwm

#--v--項(xiàng)目(2):容器要啟動(dòng)X所必需的
#tty9 即 vt9
lxc.cgroup.devices.allow = c 4:9 rwm
#/dev/mem
lxc.cgroup.devices.allow = c 1:1 rwm
#input
lxc.cgroup.devices.allow = c 13:* rwm
#--^--

##Filesystem
lxc.mount.entry = proc /mnt/sdc1/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry = sysfs /mnt/sdc1/sys sysfs defaults,ro 0 0

linlin@debian:~$

說明:容器vm3的config配置是在LXC debian模版的基礎(chǔ)上修改并增加(1)(2)項(xiàng)目而成.

3.容器運(yùn)行X

3.1 手工啟動(dòng)X

啟動(dòng)容器vm3后,以根用戶命令行登錄,然后輸入命令startx -- vt9 便可在tty9(即vt09)上運(yùn)行X桌面環(huán)境.

Debian GNU/Linux  vm3 console
vm3 login: root
密碼:
root@vm3:~# startx -- vt9

已成功在容器運(yùn)行X桌面環(huán)境,并且可以切換到宿主系統(tǒng),vt7和vt9可以互相切換.在容器X桌面環(huán)境注消能正常返回容器控制臺(tái).

出現(xiàn)問題:只是容器的X界面刷新很慢,運(yùn)行的X server是Xorg.不知是什么原因?

3.2 自動(dòng)啟動(dòng)X

上面容器vm3的gdm是使用缺省配置,啟動(dòng)容器后無法自動(dòng)啟動(dòng)X.查看/usr/share/gdm/defaults.conf中有一行內(nèi)容是:

command=/usr/bin/X -audit 0

即指定X命令.

因此可修改容器的gdm配置,即可在宿主上往/mnt/sdc1/etc/gdm/gdm.conf(即容器上/etc/gdm/gdm.conf)加下面兩行:

[server-Standard]
command=/usr/bin/X vt09 -audit 0

測試:

root@vm3:~# /etc/init.d/gdm stop
Stopping GNOME Display Manager: gdm.
root@vm3:~# /etc/init.d/gdm start
Starting GNOME Display Manager: gdm.
root@vm3:~#

已正常啟動(dòng)X并進(jìn)入桌面環(huán)境.

以后在宿主啟動(dòng)容器后就可自動(dòng)啟動(dòng)X.

root@debian:/home/linlin# lxc-start -n vm3 -d
root@debian:/home/linlin#

現(xiàn)在用 lxc-start 啟動(dòng)容器,就會(huì)自動(dòng)切換到容器X(即vt9)上.按<Ctrl>+<Alt>+<F7>可切回到vt7(即宿主X)上,vt7和vt9可以互相切換.
在容器X桌面環(huán)境點(diǎn)擊關(guān)機(jī)按鈕,可正常關(guān)閉容器.

gdm配置(即/mnt/sdc1/etc/gdm/gdm.conf)內(nèi)容如下:

#GDM Custom Configuration file.
[daemon]

[security]

[xdmcp]

[gui]

[greeter]

[chooser]

[debug]

[servers]

#--v--增加的兩行,X命令command比缺省多了vt09參數(shù)
[server-Standard]
command=/usr/bin/X vt09 -audit 0
#--^--

說明:有文章講將gdm設(shè)置為FirstVT=9和VTAllocation=false可自動(dòng)啟動(dòng)X到vt9上,但經(jīng)測試無效的.調(diào)試容器gdm的結(jié)果是:FirstVT的值vt09沒傳到X命令參數(shù)中.不知是什么原因?

4.Xvesa

因容器使用Xorg的X界面刷新很慢,可使用Xvesa代替Xorg.
debian不提供獨(dú)立的Xvesa軟件包,可將輕量級發(fā)行版SliTaz系統(tǒng)上的可執(zhí)行二進(jìn)制文件Xvesa復(fù)制到容器vm3下,即/mnt/sdc1/usr/bin/Xvesa

啟動(dòng)容器vm3后,以根用戶命令行登錄,然后輸入很長的命令

Debian GNU/Linux  vm3 console
vm3 login: root
密碼:
root@vm3:~# startx -- /usr/bin/Xvesa -ac -shadow  -screen 1024x768x24 -keybd keyboard -mouse mouse,5,/dev/input/mice -- vt9

startx啟動(dòng)X的同時(shí),也會(huì)啟動(dòng)窗口管理器的,已成功在容器運(yùn)行X桌面環(huán)境,可以正常移動(dòng)鼠標(biāo)和鍵盤輸入,但就是無法切換vt7和vt9,還好注消容器用戶后可以返回到宿主的容器控制臺(tái).

Xvesa的X界面刷新正常,不會(huì)很慢.

說明:使用Xvesa,是不用改動(dòng)gdm配置,不用安裝xserver-xorg-input-kbd和xserver-xorg-input-mouse軟件包.

5.安全

因容器要使用X必需允許訪問/dev/mem,所以存在安全隱患,因此不要在生產(chǎn)環(huán)境的容器運(yùn)行X.即在容器config配置中,只要不配置下面內(nèi)容,即使容器安裝了X,也是無法啟動(dòng)X的.


#/dev/mem
lxc.cgroup.devices.allow = c 1:1 rwm

通常,LXC各個(gè)模版是不配置訪問/dev/mem的.
( 附:LXC容器圖形前端 fglxc-ver0.0.9.zip 源代碼 下載地址 http://u.163.com/xtfcsdnT 提取碼: lAPs2V9m )
本篇從原網(wǎng)易遷移過來

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI