tags: SPICE

Remote desktop trial using SPICE protocol via mobile broadband connection

This post is continued story from these posts ( 1, 2, 3 ).

Previously I tried SPICE protocol as alternative of Microsoft’s RDP, but at that time SPICE protocol was very early development so I could not satisfy my needs to use in daily use. But situation has changed. RHEL 6 has included SPICE protocol for VDI, so I’ve tried once again.

1. Environment

  • Physical Host: Scientific Linux 6

  • kernel: 2.6.32-71.el6.x86_64

  • qemu-kvm-0.12.1.2-2.160.el6_1.2.x86_64

  • spice-server-0.8.0-1.el6.x86_64

  • Virtual Desktop: Fedora 15(i686)

  • kernel: 2.6.38.8-35.fc15.i686.PAE

  • xorg-x11-drv-qxl-0.0.21-3.fc15.i686

I’ve also used DNS, ddclient, and some router for this trial.(not written in this post)

2. Create Physical host

First, I’ve created normal kvm host. After the installation, I’ve also installed spice-server via yum.

3. Create Virtual Desktop

This procedure is just a little bit complex. First, I’ve created virtual machine using virt-manager and installed Fedora 15. But virt-manager only treat with VNC connection, so I’ve changed the configuration of virtual machine to work with SPICE.

4. Modify configuration to work with SPICE

After the installation, I’ve dumped configuration of virtual machine to XML file.

1
2
3
4
5
(at Guest OS)
# halt -p
(at Host OS)
# virsh dumpxml <virtual machine name> > <XML filename>
# virsh undefine <virtual machine name>

and edit XML file. Red charactor shows changes from original XML file.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<domain type='kvm'>
  <name>f15</name>
  <uuid>4845a1da-cf61-62dc-783c-d0bff899b68e</uuid>
  <memory>786432</memory>
  <currentMemory>786432</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686' machine='rhel6.1.0'>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/storage/cdimg/fedora/Fedora-15-i386-netinst.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vm/f15.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:c1:29:97'/>
      <source bridge='br0'/>
      <target dev='vnet4'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='spice' port='5930' autoport='no' listen='0.0.0.0'/>
    <sound model='ac97'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' vram='32768' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
</domain>

After the edit I defined virtual machine again.

1
# virsh define /home/vm/f15.xml

After definition, I cannot see console in virt-manager anymore. The reason is that virt-manager doesn’t support SPICE. So I issued virsh command to boot virtual machine.

1
# virsh start f15

5. Connect virtual machine from Windows client

Windows client bianry can be downloded from spice-space.org. I’ve downloaded spice-client-win32-0.6.3.zip and spice_libs_win32_063_and_earlier.zip.

After download, I unzipped both package and moved spicec.exe to libs directory for spicec.exe works with some libraries.

6. User Experience

I’ve tried. See movie.

7. Conclusion

SPICE protocol works good with mobile broadband and LAN connection, but you will feel some stress about some multimedia experience. SPICE connection via mobile broadband will consume about 800kbps bandwidth from my experience.

Enjoy.

今日はKVM+SPICE環境で仮想デスクトップごっこをしてみた

http://www.spice-space.org/

環境

  • 物理サーバ
  • Fedora 14 alpha
  • KVM環境、xorg-x11-drv-qxl, tunctl
  • 仮想デスクトップ
  • Fedora 13
  • xorg-x11-drv-qxl
  • クライアント環境

1.物理サーバ(1)

  1. 普通にFedora 14 alphaを入れる。KVMグループを入れておくと楽なのかも。
  2. インストール後ブリッジ接続ができるように設定変更して再起動。(インストール後1回目の再起動はrebootしても反応がないので強制リセットした)
  3. xorg-x11-drv-qxl, tunctlをインストールする

2.仮想デスクトップ(1)

  1. 物理サーバのvirt-managerで普通にFedora 13を入れる
  2. インストール後とりあえずvirt-managerからForce Offして落としておく

3.クライアント(1)

  1. Fedora 13用のSPICEリポジトリを追加して、yum install spicecする。

4.物理サーバ(2)

  1. 以下のスクリプトを/etc/qemu-ifupとして保存。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh
set -x

switch=br0

if [ -n "$1" ];then
 /usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1
 /usr/bin/sudo /sbin/ip link set $1 up
 sleep 0.5s
 /usr/bin/sudo /usr/sbin/brctl addif $switch $1
 exit 0
else
 echo "Error: no interface specified"
 exit 1
fi
  1. さっきShutdownした仮想サーバを以下のようにコマンドラインから起動
1
2
3
4
5
6
qemu-kvm -hda /root/f13.img -enable-kvm -m 768 -vga qxl ¥
-spice port=5930,disable-ticketing -name f13 ¥
-uuid XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -rtc base=localtime ¥
-device virtio-net-pci,vlan=0,id=net0,mac=XX:XX:XX:XX:XX:XX,bus=pci.0 ¥
-net tap,vlan=0,name=hostnet0 -usb -device usb-tablet,id=input0 ¥
-device AC97,id=sound0

5.クライアント(3)

  1. 以下のコマンドでデスクトップに接続。接続時はまだ最大800x600の解像度しか出ない。
    1
    
    $ spicec --host <物理サーバのアドレス> --port <さっき指定したポート番号>
  2. ログインしたらrootになって、xorg-x11-drv-qxlをインストールして仮想デスクトップを再起動する
  3. 再起動後、画面が大きくなる。試したときは1024x768まで出せた。

で、やってみてどうだったか

  • いい感じだと思う。RDPのようなサクサク感がある。LAN環境であれば十分デスクトップとして使える。日本語入力も含めキー入力も問題なし(でも今回クライアント環境をVirtualBox上のFedora13でやったので[Ctrl]+[Alt]+[F2]とかがVirtualBox側に取られて結構なんだかであった。やっぱり仮想環境上でクライアントするのはいろいろ面倒くさいかもしれない)。
  • ムービーを流しながらウィンドウをドラッグすると少しもっさりする
  • 使用する帯域は大体目測で10KB/s〜2MB/s(80Kbps〜16Mbps)
  • 音も出てる。でも今回クライアント環境をVirtualBox上のFedora13でやったのでピッチが落ちててがっかりであった。Windowsクライアントでやればもっと幸せになれるかもしれない
  • USBリダイレクションはSPICEの仕様にはあるが、まだ実装されていないようだ あまりHOWTO的な文書がなくて環境を作るのに苦労したが結構満足度が高いのでこれからどんどん使ってみようかな!