2012年11月15日 星期四

libvirt 搭配 spice 達到 host and guest 桌面剪貼薄 copy and paste 文字及圖片



在 linux 上要使用虛擬化(Virtualization),就我所知,身邊的朋友大部份都是用 virtualbox,因為最容易上手,介面也漂亮,以前也有用過,但是發現 virtualbox 有分成二個版本,一個是 freeware 版,另一個是 ose 版( Open Source Edition),在 debian 中的 ose 版本,是拿掉 usb 功能的,所以從此就改用 kvm。

kvm 程式小,速度快,但使用時,不同 OS 使用的參數並不一樣,如舊的 kernel 2.6.24 以下的 OS 就無法使用 virtio。而虛擬機器上的顯卡及網卡都有好幾個型號可選等等,有太多參數可以調整,若是直接執行 kvm 指令,後面下一堆參數,那久了真的是件辛苦的事。

而且,kvm 有滿多不方便之處,像是無法在 host 及 guest 之間剪貼薄 copy and paste,每次要傳個連結或圖片,都要先存成檔案,再由 host scp 到 guest 中,實在很麻煩。另外,要在 guest 中使用滑鼠,要讓 guest 覇佔去,若要讓滑鼠回到 host 下,還要按 Ctrl+Alt 才行,使用上不方便,還好現在可配合 spice 來達到這功能。

SPICE (Simple Protocol for Independent Computing Environment) 是一種遠端顯示桌面的協定,一開始是由 Qumranet 公司於 2007 年開發,是 closed source。Red Hat 於 2008 年 9 月買下 Qumranet,並於 2009 年 12 月將之開放出來。

SPICE 功能滿多的,其中幾個特點如下,完整版請看下方連結(註1):
傳輸資料使用 openssl 加密。
高品質的影片及3D畫面傳送。
支援遠端聲音錄製及播放。
剪貼薄分享。
在 guest 中裝上 spice agent,以達到 host 及 guest 即時切換,不用按 Ctrl-Alt 來取回滑鼠主控權。


這裡只針對 Clipboard sharing 及 Spice agent 部份稍加介紹。

kvm 可以直接支援 spice,但是一樣要下很多指令,有興趣參考下方連結(註3)。

因此,就需要使用另外的管理介面來輔助,這裡針對的是其中一套,叫 libvirt。

libvirt 的介紹,魏藥大大已有寫了幾篇(註3)(註4),在此就不重覆說明,請參考下方連結,這裡僅針對 host and guest 桌面間的 copy and paste 來做說明。

在開啟 virt-manager 後,找一台原本舊的機器修改設定或新建一台都可以,在 Details 裡,將原本預設的 Display VNC 改成 Display Spice,然後按右下方 Apply 即可,virt-manager 會問說要不要自動新增 Spice agent channels,回答 Yes 後會產生一個 Channel 的項目,檢視內容為:
Channel Device
Device type: spicevmc
Target type: virtio
Target name: com.redhat.spice.0

這樣就完成 spice 在 host 的設定,預設 spice 和  vnc 一樣,也是 listen localhost tcp 5900 port,使用上和原本 vnc 一樣。

另外,若將 Video 改成 qxl 的話,可在虛擬機器中使用較高的解析度,取代原本的 cirrus 或 vga。
要配 xserver-xorg-video-qxl 來使用,在 guest 中要記得安裝。

在 guest 開機進入 OS 後,要裝上 spice agent,若 guest 是 ubuntu 或 fedora 這些,預設應該都已經裝好才是。若是 debian 而沒裝上 desktop environment,則要手動裝上:
$ sudo apt-get install spice-vdagent

裡面有二個執行檔:
/usr/sbin/spice-vdagentd
Spice agent daemon

/usr/bin/spice-vdagent
Spice agent xorg client

在 guest 開機時,要啟動 Spice agent daemon
$ sudo /etc/init.d/spice-agent start

進入 X 之後,要啟動 Spice agent xorg client (只能在 X 中啟動)
將 /usr/bini/spice-vdagent 放到 gnome 或 kde 的啟動中即可,或是放到 /etc/X11/Xsession.d/ 中來啟動。

若正常情況下,便可在 host 及 guest 來 copy and paste 文字及圖片了。
kernel 模組 uinput 應該是使用中才對,若為 0 則是有問題。
$ lsmod | grep uinput
uinput 17440 1

然後 X 的 log 檔中會有訊息,若沒有類似這種訊息,也是不正確
$ cat /var/log/Xorg.0.log
[ 898.310] (II) config/udev: Adding input device spice vdagent tablet (/dev/input/event5)
[ 898.310] (**) spice vdagent tablet: Applying InputClass "evdev pointer catchall"
[ 898.310] (II) Using input driver 'evdev' for 'spice vdagent tablet'
[ 898.310] (**) spice vdagent tablet: always reports core events
[ 898.310] (**) evdev: spice vdagent tablet: Device: "/dev/input/event5"
[ 898.310] (--) evdev: spice vdagent tablet: Vendor 0 Product 0
[ 898.310] (--) evdev: spice vdagent tablet: Found 3 mouse buttons
[ 898.310] (--) evdev: spice vdagent tablet: Found scroll wheel(s)
[ 898.310] (--) evdev: spice vdagent tablet: Found relative axes
[ 898.310] (--) evdev: spice vdagent tablet: Found absolute axes
[ 898.310] (--) evdev: spice vdagent tablet: Found x and y absolute axes
[ 898.310] (--) evdev: spice vdagent tablet: Found absolute touchscreen
[ 898.310] (II) evdev: spice vdagent tablet: Configuring as touchscreen
[ 898.310] (II) evdev: spice vdagent tablet: Adding scrollwheel support
[ 898.310] (**) evdev: spice vdagent tablet: YAxisMapping: buttons 4 and 5
[ 898.310] (**) evdev: spice vdagent tablet: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
[ 898.310] (**) Option "config_info" "udev:/sys/devices/virtual/input/input5/event5"
[ 898.311] (II) XINPUT: Adding extended input device "spice vdagent tablet" (type: TOUCHSCREEN, id 10)
[ 898.311] (WW) evdev: spice vdagent tablet: touchpads, tablets and touchscreens ignore relative axes.
[ 898.311] (II) evdev: spice vdagent tablet: initialized for absolute axes.
[ 898.312] (**) spice vdagent tablet: (accel) keeping acceleration scheme 1
[ 898.312] (**) spice vdagent tablet: (accel) acceleration profile 0
[ 898.312] (**) spice vdagent tablet: (accel) acceleration factor: 2.000
[ 898.312] (**) spice vdagent tablet: (accel) acceleration threshold: 4


在 debian 中,若 spice-vdagentd 及 spice-vdagent 都有執行,但是還是無法 copy and paste,就要檢查看看是否有裝 libpam-ck-connector,因為小弟一開始沒裝桌面環境,結果一直無法正常運作,裝上 gnome-desktop 後,就會動,後來很辛苦的一個個找才找到是這個 consolekit 的 pam 模組的問題。
$ sudo apt-get install libpam-ck-connector

注意,裝好後,一定要登出再登入,或重新開機才會生效。


SPICE 目前主要是用在虛擬機器上,而不是在實體機器,所以要取代 vnc 及 freenx 也不是在短期內能做到,不過未來的前景很看好,不但可傳輸影像、聲音,還有 3D 畫面。在 debian 中有看到一個 xserver-xspice 的 xserver,想必就是用在實體機器上的,不過還沒測過,不知道實際運作起來如何,有沒有可能完全取代 vnc 及 freenx 就要再測試。

SPICE 真的是非常的強大,配合 kvm 來做虛擬化,不但效能好,而且功能也越來越完整了,希望越來越多人使用 kvm。真要感謝 redhat 在 linux 上所做的努力,今天才有這麼棒的虛擬化環境。


參考文件:

1. SPICE features:
http://www.spice-space.org/features.html

2. SPICE 官方網站:
http://www.linux-kvm.org/page/SPICE

3. 基於 KVM 與 libvirt 的虛擬化叢集系統-Debian 篇
http://www.openfoundry.org/tech-column/8448

4. 基於 KVM 與 libvirt 的虛擬化叢集系統-儲存空間的配置
http://www.openfoundry.org/tw/tech-column/8539-the-clustered-virtualization-system-based-on-kvm-and-libvirt-chapter-of-debian-storage-allocation

沒有留言:

張貼留言