Waydroid

提供: ArchWiki
2024年9月28日 (土) 22:06時点におけるDreamChaser (トーク | 投稿記録)による版 (最新版への翻訳・加筆)
ナビゲーションに移動 検索に移動

関連記事

この記事あるいはセクションで使われている用語や表現には問題が存在します。
議論: Need to improve style. (議論: トーク:Waydroid#)

Waydroid は、通常の Linux システム上で完全な Android システムを起動するコンテナベースな手法です。

前提条件

CPU 要件

要件は CPU アーキテクチャによって異なります。詳しくは テーブルで確認することができます。

必要な CPU 命令があるかどうかは、cat /proc/cpuinfo で確認することができます。

GPU 要件

Waydroid は現在 Intel GPU で最適に動作します。そのまますぐに使用できるはずです。

すべての AMD GPU はサポートされています。もし Waydroid が動作しない場合は、新しい Waydroid イメージ(イメージはRadeon 680M で動作します)をビルドするか、以下の NVIDIA の手順を試してみてください。

NVIDIA GPU は現在動作しませんが、2 つの回避策があります:

  1. 可能であれば統合グラフィックカードに切り替えます
  2. ソフトウェア レンダリングを使用します (#ソフト​​ウェア レンダリング を参照)

Wayland セッションマネージャ

Waydroid は Wayland セッションマネージャーでのみ動作しますので、Wayland セッションであることを確認してください。

X11 を使用している場合でも、多くの Wayland セッション マネージャーはネストされたセッションをサポートしていることに注意してください (そのため、X11 セッション内で実行できます)。最も単純な例は cage です。

カーネル モジュール

まず、binder モジュールが付属しているカーネルを実行する必要があります。これらは Arch Linux のデフォルト カーネル (linux) の一部ではないため、これらのモジュールを同梱するカーネルをインストールする必要があります。

また、他のカーネルを使用するために、ブートローダーを設定する必要がある場合もあります。新しいカーネルでブートローダーを起動する方法については、wiki ページを参照してください。他のカーネル (のバージョン) での起動は、Linux システムの再起動が必要になる数少ないケースの 1 つです。 Waydroid を起動する前に、これらのモジュールを使用してカーネルを起動する必要があります。

互換性のあるカーネルを入手するには、複数の方法があります。

Linux-Zen を使用する

linux-zen カーネルには、必要なモジュールが含まれています。これは、カーネルをコンパイルする必要がなく (コンパイルには時間がかかります)、定期的に更新バージョンを受け取るため、最も快適な方法と言えます。

DKMS モジュール

binder_linux-dkmsAUR をインストールし、モジュール オプション devicesテンプレート:=binder,hwbinder,vndbinder を指定して カーネル モジュール binder_linux をロードします (バグレポートを参照)。

$ sudo modprobe binder-linux deviceテンプレート:=binder,hwbinder,vndbinder

カーネル 5.18 以降での問題を回避するには、カーネル パラメータ ibtテンプレート:=off を使用する必要もあります。 /dev/binderfs マウント時のセグメンテーション違反 を参照してください。

カーネルをビルドする

あるいは、必要なオプションを指定して linux カーネル、または他のカーネル パッケージ (>=5.7) を再コンパイルすることもできます。 カーネル#コンパイル も参照してください。

最小限のカーネルをビルドするときは、次の要件に留意してください。

  • IPv6 のサポート。カーネルに IPv6 ネットワークが組み込まれていない場合、Waydroid では IPv4 接続が行われません。
  • Netlink ソケット (CONFIG_NF_CT_NETLINKテンプレート:=y)。
  • PSI (CONFIG_PSIテンプレート:=y)。
  • ループブロック・デバイス (CONFIG_BLK_DEV_LOOPテンプレート:=m) - Waydroid を起動する前に、loop モジュールをロードする必要があります。

コンパイル オプションを設定する場合、2 つのオプションを使用できます。

binderbinderfs です。両方の手順を以下に示します。
binder を使用する

このモジュールは、カーネルにコンパイルすることも (y)、モジュールにコンパイルすることも (m)、まったくコンパイルしないこともできます (n)。また、構成内のすべての組み合わせが可能であるわけではなく、一部のオプションには他のオプションが必要になります。

以下の構成オプションは、binder をモジュールとしてコンパイルしますが、最後のオプションは、binder モジュールがロードされるときに、/dev/ ディレクトリに 3 つのデバイスが作成されることを指定します。

CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=m
CONFIG_ANDROID_BINDERFS=n
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"

AUR からカーネルをビルドする場合、次の手順で構成を更新できます。

  1. makepkg --nobuild を実行します。これにより、ダウンロードされたソースが検証および展開され、prepare() 関数が実行されます。
  2. カーネル ディレクトリの下部にある .config ファイル (ファイル名にドットを含む) を編集します。
  3. prepare() 関数の最後にあるのは、おそらくコンフィグ (make olddefconfigかもしれません) からの情報を使用して makefile を再生成するコマンドです。それを build() 関数に移動するか、自分で実行します。
  4. makepkg --noextract を実行します。これは、makepkg --nobuild が中断された場所から再開します。
bindingfs を使用する

binder カーネル モジュールは、複数のユーザーに問題を引き起こすことが知られています。これらの問題に対処するために、binderfs が作成されました。カーネルをコンパイルするときに、古い方法と新しい方法のどちらかを選択する必要があります。以下のオプションでは、代わりに bindingfs を使用します。

カーネル ソースには、構成オプションを設定するための簡単なスクリプトも付属しています。コンフィグを手動で編集する場合と同様に、依存関係のチェックは行われません。 .config ファイルと同じディレクトリにある場合は、次のコマンドを実行できます:

$ scripts/config --enable  CONFIG_ANDROID
$ scripts/config --enable  CONFIG_ANDROID_BINDER_IPC
$ scripts/config --enable  CONFIG_ANDROID_BINDERFS
$ scripts/config --set-str CONFIG_ANDROID_BINDER_DEVICES ""

AUR からカーネルをビルドする場合、これらの行を PKGBUILD の適切な場所 (通常は prepare()) に挿入するだけで十分です。

binder デバイスのセットアップ

Waydroid パッケージの最新バージョンがあることを確認してください。これは Waydroid が自動的に処理します。

インストール

waydroidAURインストール します。

必要に応じて、waydroid-imageAUR または waydroid-image-gappsAUR をインストールして、AUR を通じて必要な Android イメージを入手します。ただし、Waydroid 自体にイメージのダウンロードを処理させることをお勧めします。

Waydroid を初期化した後、最新の Android イメージがまだ利用できない場合は自動的にダウンロードされます。

# waydroid init

GAppsを利用して初期化するには:

# waydroid init -s GAPPS -f

次に、テンプレート:Waydroid-container.service起動/有効化します。

これで Waydroid が動作するはずです。

使い方

waydroid-container.servicestart されていることを確認してから、次を実行します:

$ waydroid session start

Waydroid セッションがアクティブになりました。対話コマンドの例を次に示します:

GUI を起動します:

$ waydroid show-full-ui

シェルを起動します:

# waydroid shell

アプリケーションをインストールします:

$ waydroid app install $path_to_apk

アプリケーション一覧を取得します:

$ waydroid app list

アプリケーションを実行します:

$ waydroid app launch $package_name

ネットワーク

ネットワークはそのまま動作するはずですが、そうでない場合は、パケット転送 がカーネルで有効になっていることを確認し、Waydroid session start の実行 "前" にファイアウォールで次のルールを許可する必要があるかもしれません。

ufw を例として挙げます。

  • DNS トラフィックを許可する必要があります:
    • # ufw allow 67
    • # ufw allow 53
  • パケット転送を許可する必要があります:
    • # ufw default allow FORWARD

firewalld の場合は、次のコマンドを使用できます。

  • DNS:
    • # firewall-cmd --zone=trusted --add-port=67/udp
    • # firewall-cmd --zone=trusted --add-port=53/udp
  • パケット転送:
    • # firewall-cmd --zone=trusted --add-forward
  • waydroid インターフェイスを信頼するプログラムに追加します:
    • # firewall-cmd --zone=trusted --add-interface=waydroid0

テンプレート:注

ヒントとコツ

ソフトウェアレンダリング

以下をすでに実行していることを確認してください:

# waydroid init

(詳細については、#インストール セクションを参照してください)

次に、以下を追加します。

/var/lib/waydroid/waydroid_base.prop
ro.hardware.gralloc=default
ro.hardware.egl=swiftshader

最後に、waydroid-container.service再起動 します。

表示領域の寸法設定

waydroid ウィンドウのサイズを設定するには、次のコマンドを使用して好みに合わせてサイズに調整します。

$ waydroid prop set persist.waydroid.width 576
$ waydroid prop set persist.waydroid.height 1024

次に、waydroid-container.service再起動 します。


トラブルシューティング

問題が発生した場合は、公式の Issue Tracker を参照してください: Waydroid issue tracker

一般的なヒント

Waydroid は開発が速いため、問題が発生した場合に、最初に行うべき手順のリストを次に示します。

  1. Waydroid パッケージが最新であることを確認してください。
  2. # waydroid upgrade
    を実行して、最新の Waydroid イメージがあることを確認してください
  3. Waydroid をリセットします: waydroid-container.servicestop し、
    # waydroid init -f
    を実行して、サービスを再度 start します。
  4. ちょっとしたクリーンアップを行うこともできます。
    # rm -rf /var/lib/waydroid /home/.waydroid
    $ rm -rf ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid
    を実行します。
テンプレート:ヒント

ARM アプリと互換性がない

Casualsnek の スクリプト を使用して、変換レイヤーをインストールします。

変換レイヤーの最適化のため、AMD CPU では libndk を使用し、Intel CPU では libhoudini を使用することをお勧めします。ただし、アプリによっては、ある変換レイヤーでは機能し、別の翻訳レイヤーでは機能しないものもあります。したがって、ゲームが動作しない場合やパフォーマンスが低下する場合は、両方を試す必要がある場合があります。

libndk arm translation をインストール

# python3 main.py install libndk 

libhoudini arm translation をインストール

# python3 main.py install libhoudini

画面回転するとアプリが使えなくなる

Issue 70 を参照してください。

「F11」をクリックして、現在のアプリをウィンドウ モードに切り替えます。

クリップボード マネージャー サービスの起動に失敗します

python-pyclipAUR とその依存関係をグラフィカル セッションにインストールします (X11 の場合は xclip、Wayland の場合は wl-clipboard)。

物理キーボードが動作しない場合がある

左の Alt キーを押してください。

dnsmasq: failed to open pidfile /run/waydroid-lxc/dnsmasq.pid: Permission denied(アクセス許可が拒否されました)

AppArmor ルールが設定されていない可能性があります。次のルールを追加します。

/etc/apparmor.d/usr.sbin.dnsmasq
@{run}/waydroid-lxc/r,
@{run}/waydroid-lxc/* rw,

Waydroid シェル内のコマンド出力にアクセスできない、または見つからない

Arch ベースのディストリビューションには、 lxc-attach の動作中に表示される恐れのある「バグ」 があり、これにより、adbd または settings のような waydroid shell 内のコマンドでこの問題が発生する可能性があります。

この問題を回避するには、waydroid shell コマンドを次のように置き換えることが考えられます。

# lxc-attach -P /var/lib/waydroid/lxc/ -n waydroid --clear-env

WARNING: Service manager /dev/binder has died(dev/binderが停止しました)

Isuue 136 を参照してください。

PSI を有効にする必要があります。

psi=1カーネル コマンド ライン に追加します。

Liquorix カーネル は Waydroid では動作しません は、PSI と互換性のない特定のスケジューラーを使用するため、注意してください。

multi-GPU systemを使用すると表示がおかしくなる

現在、Waydroid はホスト コンポジターが実行されているのと同じ GPU 上で実行する必要があります。これを修正する 2 つの方法は、/var/lib/waydroid/lxc/waydroid/config_nodes を編集して正しい GPU になるようにするか、コンポジターが実行される GPU を変更するかのいずれかです。

こちらも参照してください