分123SPICEは仮想マシン上のディスプレイと通信するためのプロトコルです。SPICEプロトコルに対応したクライアントをいくつか紹介しましょう。SPICEを有効化した仮想マシンを起動するSPICEは仮想マシン上のディスプレイ・入力デバイスとローカルマシン上のクライアントの中を取り持つプロトコルです。グラフィックデバイスとしてQXLを指定した仮想マシンを立ち上げることで,仮想マシン内部のグラフィックドライバーであるQXLドライバーとSPICEサーバーが連携し,SPICEクライントがネットワーク越しにSPICEサーバーと通信することで,リモートの仮想マシンの画面をクライアント側で表示できます(※1⁠)⁠。VMWareのvSphereクライアントにある,リモートの画面を表示する仕組みだと考えれば良いでしょう。※1SPICEにおいてQXLが必須というわけではありません。PCIパススルーなどで実デバイスを仮想マシンに見せる場合は,QXLを使わなくてもSPICEプロトコルを利用可能です。仕組み上はQEMUである必要もなく,他の仮想マシンシステムでもSPICEサーバー(libspice-server)を利用するよう修正すれば,SPICEに対応することは可能なはずです。Interface(VDI⁠)⁠」として実デバイス・仮想デバイス自身もネットワーク越しに操作できるプロトコルを定義しています。これによりリモートの仮想マシン上のオーディオをクライアント側で再生・録音したり,クライアント側にあるUSBデバイスを仮想マシン上で認識することも可能になります。SPICEに対応したQEMUインスタンスを構築しましょう。いってもQEMUコマンドに渡すオプションを変えるだけで,基本的な手順は第592回「QEMUでGPUの3Dアクセラレーションを利用する」と同じです。SPICEなしで構築した上で,あとからSPICEを有効化してもかまいません。よって第592回で構築したイメージを流用する方法もあります。リモート側にQEMUを動かすための諸々をインストールしておきます。kvmCPUの仮想化支援機構を使いたいなら,kvmグループに所属しておく必要があります。環境やインストールしたパッケージによっては最初から所属しているかもしれません。QEMUコマンド実行時に「権限がない」旨のエラーが出るようなら,上記のように明示的に所属したあとに,ログインしなおしてください。新規にイメージを構築するなら,空のイメージファイルを作っておきましょう。20GUEFI対応のイメージにしたいなら,第441回「QEMU/KVMでUEFIファームウェアを使う」を参考に,OVMFもインストールしておきます。vars.fdUbuntuをインストールするなら,次のように実行します。ubuntu-19.10-desktop-amd64.isoUEFIに対応させるなら次のように実行します。ubuntu-19.10-desktop-amd64.iso第592回と異なるのは次の4点です。port=5900,disable-ticketing」が追加された最初のvmport=offはVMWareのI/Oポートのエミュレーションを無効化しています。SPICE上のマウス処理と相性が悪いようです。QXLはSPICE用のグラフィックデバイスです。これとSPICEを組み合わせることで,高速なリモートデスクトップ環境を構築できます。今回はリモートデスクトップを前提としているため,ローカルの仮想マシンウィンドウを立ち上げる「-display」オプションは使っていません。最後の「-spice」オプションが今回のポイントです。「⁠port=5900」でその仮想マシンのSPICEサーバーへの接続ポートを設定します。複数のマシンを立ち上げるなら,それぞれ異なる値にします。「⁠addr=」オプションを使うことで,bind()するアドレスを指定できます。何も指定しないとANYになるので,そのマシン上のすべてのインターフェース経由でアクセスできることになります。「disable-ticketing」はこのあと紹介するSPICEクライントが接続する際に,「⁠認証を行わない」よう設定しています。仮想マシンが動いているサーバーの5900番ポートに接続できる人なら誰でもその仮想マシンの画面にアクセスできるという状態です。単純にパスワード認証したいのであれば「disable-ticketing」の代わりに「password=パスワード」を指定してください。X.509やSASLによる認証もサポートしています。アドレスや認証関連はWAN経由でSPICEを使いたい場合に,特に必要になってきます。経路をTLSで暗号化する方法も存在します。これらのオプションについては「qemu-systemのマニュアル」を参照してください。仮想マシンが立ち上がったので,あとはこれから紹介するクライアントで接続するだけです。ここからは仮想マシンのホストのアドレスが「vmserver.local」である前提で説明します。ポート番号とセットで「vmserver.local:5900」を「SPICEアドレス」と呼ぶことにします。各自のホスト名やIPアドレス,ポート番号などに読み替えてください。