Waydroid
関連記事
Waydroidは、通常の GNU/Linux システム上で完全な Android システムを起動するためのコンテナベースのアプローチです。
目次
- 1 前提条件
- 2 Installation
- 3 Usage
- 4 Network
- 5 Troubleshooting
- 5.1 General tips
- 5.2 Rotated apps are unusable
- 5.3 Failed to start Clipboard manager service
- 5.4 Sometimes the physical keyboard does not work
- 5.5 dnsmasq: failed to open pidfile /run/waydroid-lxc/dnsmasq.pid: Permission denied
- 5.6 Commands inside Waydroid shell outputs inaccessible or not found
- 5.7 WARNING: Service manager /dev/binder has died
- 6 See also
前提条件
CPU 要件
要件は CPU アーキテクチャによって異なります。詳しくは テーブルで確認することができます。
必要な CPU 命令があるかどうかは、cat /proc/cpuinfo
で確認することができます。
GPU 要件
Waydroid は現在 Intel GPU で最適に動作します。それらはすぐに使用できるはずです。
すべての AMD GPU はサポートされています。もし Waydroid が動作しない場合は、新しい Waydroid イメージ(Radeon 680M で動作)をビルドするか、以下の NVIDIA の手順を試してみてください。
NVIDIA GPU は現在動作しませんが、2 つの回避策があります:
- 可能であれば、統合型グラフィックカードに変更する
- ソフトウェアレンダリングを使用します:
- すでに
waydroid init
が実行されていることを確認してください。(インストール]]の項を参照)。 /var/lib/waydroid/waydroid_base.prop
を編集し、ro.hardware.gralloc=default ro.hardware.egl=swiftshader
に設定する。- 再起動し、
waydroid-container.service
を起動します。
- すでに
Wayland セッションマネージャ
Waydroid は Wayland セッションマネージャーでのみ動作しますので、Wayland セッションであることを確認してください。
X11 にいる場合でも、多くの Wayland セッションマネージャはネストされたセッションをサポートしていることに注意してください(X11 セッションの中で実行することができます)。
Kernel Modules
You need to run a kernel which comes with the binder modules and optionally the ashmem one. They are not part of Arch Linux's default kernel (linux), thus you need to install a kernel which ships these modules.
You might also need to configure your bootloader to use a different kernel. Please refer to the wiki page of your bootloader how to boot with the new kernel. Booting into another kernel (version) is one of the few occasions when you have to reboot a Linux system. You should boot into the kernel with these modules before starting Waydroid.
To get a compatible kernel, you have multiple options:
Using Linux-Zen
The linux-zen kernel includes the necessary modules. This might be the most comfortable way, as you do not have to compile the kernel (which takes a long time) and will receive updated versions regularly.
DKMS modules
You can install anbox-modules-dkms-gitAUR and load kernel modules with:
# modprobe ashmem_linux # modprobe binder_linux
Alternatively, if your kernel is 5.18 or newer, install binder_linux-dkmsAUR, which provides just binder_linux.
Building a kernel
Alternatively, you can recompile the linux kernel — or other kernel packages (>=5.7) — with the necessary options. Also see Kernel#Compilation.
When setting compilation options, you have 2 options available; binder and binderfs. Instructions for both are provided below.
Using binder
The modules can either be compiled into the kernel (y
), into modules (m
), or not at all (n
). Also, not all combinations in the configuration are possible, and some options will require other options.
The configuration options below will compile binder as a module, while the last option specifies that there will be three devices created in the /dev/
directory, when the binder module is loaded.
CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=m CONFIG_ANDROID_BINDERFS=n CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
When building a kernel from the AUR, one can update the configuration with the following steps:
- run
makepkg --nobuild
, which will download the sources, verify and extract them and run theprepare()
function. - edit the
.config
file (with the dot in the filename), which is located at the base of the kernel directory. - at the end of the
prepare()
function was probably a command which regenerates the makefiles with information from the configuration, possiblymake olddefconfig
. Move that to thebuild()
function, or execute it yourself. - run
makepkg --noextract
, which will continue from the place wheremakepkg --nobuild
stopped.
Using binderfs
The binder kernel module is known to cause some issues to several users. To address these issues, binderfs was created. One has to choose between the old and the new way when compiling the kernel. With the options below, one will use binderfs instead.
With the kernel sources comes also a simple script to set configuration options. It will not do dependency checks, just like when editing the configuration by hand. When being in the same directory where the .config
file lies, one can execute the following commands:
$ 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 ""
When building a kernel from the AUR, it is enough to insert these lines at the right place in the PKGBUILD, usually in prepare()
.
Setup binder devices
Make sure you have the latest version of Waydroid package, and Waydroid will take automatically care of this.
Installation
Install the waydroidAUR package.
Optionally, install waydroid-imageAUR or waydroid-image-gappsAUR to provide the needed Android image through AUR. It is however recommended to let Waydroid itself handle downloading the images.
Afterwards init Waydroid, this will automatically download the latest Android image if it is not yet available.
# waydroid init
To init with GApps support:
# waydroid init -s GAPPS -f
Next start/enable the waydroid-container.service
.
Waydroid should now work.
Usage
Make sure that waydroid-container.service
is running then run:
$ waydroid session start
The Waydroid session is now active, here are a couple of useful commands to interact with it:
Launch GUI:
$ waydroid show-full-ui
Launch shell:
# waydroid shell
Install an application:
$ waydroid app install $path_to_apk
Run an application:
$ waydroid app launch $package-name #Can be retrieved with `waydroid app list`
Network
The network should work out of the box, if its not you might need to make sure packet forwarding is enabled in kernel and allow the following rules through your firewall before running Waydroid session start.
Taking ufw as an example:
- Dns traffic needs to be allowed:
# ufw allow 67
# ufw allow 53
- Packet forwarding needs to be allowed:
# ufw default allow FORWARD
For firewalld, you can use those commands:
- DNS:
# firewall-cmd --zone=trusted --add-port=67/udp
# firewall-cmd --zone=trusted --add-port=53/udp
- Packet forwarding:
# firewall-cmd --zone=trusted --add-forward
Troubleshooting
If you run into issues, take a look at the official Issue Tracker: Waydroid issue tracker
General tips
Waydroid is in rapid developement so if you face issues, here is a good list of steps to do first:
- Make sure your Waydroid package is up to date;
- Make sure you have the latest Waydroid image by running
# waydroid upgrade
- Reset Waydroid: stop the
waydroid-container.service
, run# waydroid init -f
and start the service again. - You may also want to do little cleanup, run
# rm -rf /var/lib/waydroid /home/.waydroid
$ rm -rf ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid
Rotated apps are unusable
See https://github.com/waydroid/waydroid/issues/70
Click F11 to switch the current app to windowed mode.
Failed to start Clipboard manager service
Install python-pyclipAUR
Sometimes the physical keyboard does not work
Press Left Alt key.
dnsmasq: failed to open pidfile /run/waydroid-lxc/dnsmasq.pid: Permission denied
apparmor rule is not set, goto /etc/apparmor.d/usr.sbin.dnsmasq and add below
#/etc/apparmor.d/usr.sbin.dnsmasq @{run}/waydroid-lxc/ r, @{run}/waydroid-lxc/* rw,
Commands inside Waydroid shell outputs inaccessible or not found
On Arch based distributions there's a "bug" that may appear while working with lxc-attach that may cause this issue with commands inside waydroid shell
like adbd
or settings
.
A possible workaround for this would be replace the
# waydroid shell
command with
# lxc-attach -P /var/lib/waydroid/lxc/ -n waydroid --clear-env
WARNING: Service manager /dev/binder has died
See https://github.com/waydroid/waydroid/issues/136
You should enable PSI.
Add psi=1
to the kernel command line.