virtio-gpu環境でopenGL-ES入りandroid-x86を動かす

virtio-gpu環境でopenGL-ES入りandroid-x86を動かす

android-x86の8.1r1が出たので、KVM環境で動かしてみました。

Linuxデスクトップ上でAndroidアプリを動かす試みとしてはanboxとかもあり、これもコンテナの下で動くAndroidということで非常に興味深いプロジェクトですが、まだopenSUSE上でまともに動かすことに成功していないのと、この間arch上で動いているanboxを東海道らぐの会合で見ましたが、まだまともに動かないアプリも結構あり、じゃあ最近のKVM環境で動かしたらどうなんかなということで試してみました。

今回はGPUおたくらしくvirtio-gpu(VirGL3d)を使ってopenGL-ESを有効にしたandroid-x86を動かしてみます

virtio-gpu(VirGL3D)とは

VirGL3Dとは仮想環境でGPUを扱うための準仮想化システムであり、GPUパススルーやGPU共有と異なり、独自のAPIを持った独立GPUとして扱うものです。

VMWareやVirtualboxの仮想GPUなどとほぼ同じものと考えて良いでしょう

まだWindows Driverが未完成(openGLは動き始めたがDirectXが動かない)だったりと発展途上のプロジェクトではありますが、X11やAndoroidではそこそこまっとうに動くようになってきています

テスト環境

今回もパッケージが新しければ新しいほど良いという感じの実験なのでopenSUSE Tumbleweedを使います

  • DELL Latitude E5470
    • CPU: Intel Core i5 6200U
    • GPU: Intel UHD Graphics 520
    • Mem: 8GB
    • OS: openSUSE Tumbleweed x86_64
    • qemu: 3.1.0

例によってvirt-managerでVMの制御ができるようにまではなっている前提で。

ISOのダウンロード

android-x86公式から8.1r1のx86-64版isoをダウンロードします

ゲストの作成

virt-managerからisoを選んでゲストのインストールを行います

もともと古いPC等に入れて使うことを想定されていることもあり、デフォルトテンプレートで一番相性が良いテンプレートがWindows 10だったりしますのでそうします

shot1

あとは粛々とウィザードを最後まで進めて行けばOKですが、最後の「インストール前に設定を確認する」にチェックを入れてください

shot2

virtio-gpuを設定する

「インストール前に設定を確認する」にチェックを入れて完了すると、そのままVMの設定が開きますので、「ディスプレイ:Spiceを選びます」

ここでリッスンタイプを「なし」にして、「GLを開く」をONにすると、レンダリングを受け持つGPUが出てきますので、Intel HD Graphicsを選びます

残念ながら、2019-1-23現在、AMDのGPUはlibvirtからvirtio-gpuのレンダリングデバイスに指定しても動かないので注意してください

これはmesaの仕様で、GLSLシェーダーキャッシュをディスク上に作ろうとしますが、libvirtでは現在そのあたりを考慮せず存在しないディレクトリにキャッシュを作ろうとして起動に失敗します

(コマンドラインからqemuを直に呼べばいけると思いますが未検証)

shot3

続いて、ビデオを選び、「モデル」にvirtioを選んで3DアクセラレーションをONにします

shot4

これで「インストールを開始」を選べばandroid-x86のライブCDが起動するはずですが、時々libvirtのバグでEGLデバイスが確保的ないというエラーが出ることがあります

shot5

ディスプレイの設定画面に再度戻るとデバイスを設定したはずなのに、デバイスが「自動」になっていますので改めてデバイスを指定してください

あとは普通にライブが起動するはずなので、普通にインストールすればOKです

shot6

Android x86のインストール手順そのものはぐぐればいくらでも出てくると思いますので割愛します

動かしてみて

OSそのものはかなりサクサク動きます。

(正直手元の古いAndroid4.4タブレットより軽いんじゃないか説)

ゲーム類は、そもそも起動しないタイトルがあったり、マウス操作を受け付けないタイトルがあったりはしますが、マウス操作でいけるタイプのタイトルであれば予想以上に実用レベルで動きます

以下のスクリーンショットは、検証用に適当にPlayストアから拾ってきた「ドールズフロントライン」というゲームですが、割と軽めの2Dゲームということもあり全く問題なく動きました

shot7

スワイプ動作を受け付けないため、カメラ操作ができませんが、「カスタムキャスト」あたりのかなり重いタイトルでも動くには動いています

shot8

まとめ

VirGL3Dを使うことで、制約はあれこれありますが、openGL-ESが使える仮想android環境がopenSUSE TumbleweedのKVMで割と簡単に実現できますので、よろしければぜひ一度お試しください

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×