SPICEは仮想マシン上のディスプレイと通信するためのプロトコルです。SPICEプロトコルに対応したクライアントをいくつか紹介しましょう。
SPICEを有効化した仮想マシンを起動する
SPICEは仮想マシン上のディスプレイ・
SPICEでは単に画面のやりとりだけでなく、
まずはSPICEに対応したQEMUインスタンスを構築しましょう。といってもQEMUコマンドに渡すオプションを変えるだけで、
リモート側にQEMUを動かすための諸々をインストールしておきます。
$ sudo apt install qemu-system-x86 qemu-utils $ sudo adduser $USER kvm
CPUの仮想化支援機構を使いたいなら、
新規にイメージを構築するなら、
$ qemu-img create -f qcow2 ubuntu.qcow2 20G
UEFI対応のイメージにしたいなら、
$ sudo apt install ovmf $ cp /usr/share/OVMF/OVMF_VARS.fd vars.fd
Ubuntuをインストールするなら、
$ qemu-system-x86_64 \
-enable-kvm -M q35 -smp 2 -m 4G \
-drive format=qcow2,file=ubuntu.qcow2,if=virtio \
-net nic,model=virtio \
-net user,hostfwd=tcp::2222-:22 \
-machine vmport=off \
-vga qxl \
-spice port=5900,disable-ticketing \
-boot once=d -no-reboot -cdrom ubuntu-19.10-desktop-amd64.isoUEFIに対応させるなら次のように実行します。
$ qemu-system-x86_64 \
-enable-kvm -M q35 -smp 2 -m 4G \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=vars.fd \
-drive format=qcow2,file=ubuntu.qcow2,if=virtio \
-net nic,model=virtio \
-net user,hostfwd=tcp::2222-:22 \
-machine vmport=off \
-vga qxl \
-spice port=5900,disable-ticketing \
-boot once=d -no-reboot -cdrom ubuntu-19.10-desktop-amd64.iso第592回と異なるのは次の4点です。
- 「
-machine vmport=off」が追加された - 「
-vga virtio」の代わりに 「 -vga qxl」になった - 「
-display gtk,grab-on-hover=on,gl=on」がなくなった - 「
-spice port=5900,disable-ticketing」が追加された
最初のvmport=offはVMWareのI/
QXLはSPICE用のグラフィックデバイスです。これとSPICEを組み合わせることで、
今回はリモートデスクトップを前提としているため、-display」
最後の-spice」port=5900」addr=」
「disable-ticketing」disable-ticketing」password=パスワード」
アドレスや認証関連はWAN経由でSPICEを使いたい場合に、
仮想マシンが立ち上がったので、
シンプルなGTKベースのクライアント「spice-client-gtk」
もっともシンプルなクライアントが、
$ sudo apt install spice-client-gtk
デスクトップファイルなどは作成しないので、
$ spicy --uri='spice://vmserver.local:5900'
「--url」
マウスがウィンドウから抜けられなくなったり、
ちなみに同梱のspicy-screenshotを使うと、
公式推奨の「virt-viewer」
SPICEの公式が推奨しているのが、
$ sudo apt install virt-viewer
アプリケーション一覧から
$ remote-viewer spice://vmserver.local:5900
ちなみに第572回で紹介しているGNOME BoxesもSPICEクライアントとして利用できるようです。ローカルでlibvirtも利用する予定があるのなら、
Ubuntuデスクトップに最初から入っている「Remmina」
UbuntuデスクトップではリモートデスクトップクライアントとしてRemminaが最初からインストールされています。RemminaにはSPICEプラグインが存在するものの、
$ sudo apt install remmina-plugin-spice
Remminaは端末から起動するより、
マウスとキーボードのイベントがRemminaの先の仮想マシンに奪われてしまった場合、
ちなみに上記はUbuntu 19.
ウェブブラウザーからアクセス可能な「spice-html5」
ちょっと変わったところとしては、
websockifyを利用すると、
websockifyはspice-html5パッケージの推奨パッケージとして指定されているので、
$ sudo apt install spice-html5
SPICE 0.
- 任意のウェブサーバーとwebosockifyを組み合わせて動かす方法
- webosckifyをウェブサーバーとしても動かす方法
今回はよりお手軽な後者のみを説明します。まずはwebsockifyを使ってWebSocketサーバーを立ち上げましょう。
$ websockify --web /usr/share/spice-html5/ 5959 vmserver.local:5900
「--web」--web」/usr/」
「5959」
あとはウェブサーバーを立ち上げたアドレスの5959番ポートにウェブブラウザーからアクセスするだけです。
$ xdg-open http://localhost:5959/spice.html
あとは
spice-html5の便利な点は、
Android版の「aSPICE」
Android版のSPICEクライアントとしてはbVNCやaRDPと同じ開発者が作っているaSPICEが存在します。ソースコードはbVNCやaRDPと共通化できるものは共通化しているようなので、
PCを動かせない環境でどうしてもリモートにあるデスクトップ環境にアクセスしなくてはならない際に便利かもしれません。
ただしマウスをサーバーモードで動かさないと、
spice-vdagentを利用して高機能化
spice-vdagentを利用すると、
- クリップボードの共有
- クライアントウィンドウサイズに基づいた画面解像度の自動変更
- マウスカーソルがクライアントウィンドウに奪われないモードの有効化
spice-vdagentを利用するためにはゲスト側にspice-vdagentパッケージをインストールする必要があります。ただしUbuntuデスクトップなら最初からインストールされているので、
もうひとつ必要なのが、
$ qemu-system-x86_64 \
-enable-kvm -M q35 -smp 2 -m 4G \
-drive format=qcow2,file=ubuntu-bios.qcow2,if=virtio \
-net nic,model=virtio \
-net user,hostfwd=tcp::2222-:22 \
-machine vmport=off \
-vga qxl \
-spice port=5900,disable-ticketing \
-device virtio-serial -chardev spicevmc,id=vdagent,debug=0,name=vdagent \
-device virtserialport,chardev=vdagent,name=com.redhat.spice.0追加されたのは最後の2行です。virtio-serialデバイスを作っています。ゲストOS上のspice-vdagentはこのデバイスを経由して、
spice-vdagentが有効化されたので、
さらにローカルのNautilusから、
たとえばRemminaならウィンドウ左にある設定アイコンの
USBのリダイレクト機能
最後にUSBのリダイレクト機能を紹介しましょう。QEMUで仮想マシンを起動する際に、
仮想マシン起動時のオプションがさらに長くなります。
$ qemu-system-x86_64 \
-enable-kvm -M q35 -smp 2 -m 4G \
-drive format=qcow2,file=ubuntu-bios.qcow2,if=virtio \
-net nic,model=virtio \
-net user,hostfwd=tcp::2222-:22 \
-machine vmport=off \
-vga qxl \
-spice port=5900,disable-ticketing \
-device virtio-serial -chardev spicevmc,id=vdagent,debug=0,name=vdagent \
-device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
-device nec-usb-xhci,id=usb \
-chardev spicevmc,name=usbredir,id=usbredirchardev1 \
-device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \
-chardev spicevmc,name=usbredir,id=usbredirchardev2 \
-device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \
-chardev spicevmc,name=usbredir,id=usbredirchardev3 \
-device usb-redir,chardev=usbredirchardev3,id=usbredirdev3ここまでくるとQEMUコマンドよりは、
追加されたのは最後の7行です。2行目以降は、
たとえばRemminaだと、
選べるのは
デバイスを選択して
ネットワーク越しにUSBデバイスを使う以上、