waydroid post
This commit is contained in:
182
_posts/2026-02-15-archlinux-waydroid-installation-guide.md
Normal file
182
_posts/2026-02-15-archlinux-waydroid-installation-guide.md
Normal file
@@ -0,0 +1,182 @@
|
||||
---
|
||||
layout: post
|
||||
author: Sam Hadow
|
||||
tags: archlinux sysadmin
|
||||
---
|
||||
|
||||
This blog post is a short guide to run and use [waydroid](https://github.com/waydroid/waydroid) on archlinux.
|
||||
|
||||
# What is waydroid?
|
||||
|
||||
Waydroid is a container-based approach to boot a ful android system on a regular linux system with an x86 or ARM CPU, and so has less overhead than an android x86 virtual machine to run android apps on a linux system. Waydroid only works in a wayland session but it's still possible to use a nested session if you use X11, which will be covered in this guide.
|
||||
|
||||
# Installation guide
|
||||
|
||||
## Requirements
|
||||
|
||||
A kernel which comes with the `rust_binder` module is necessary to run waydroid, `linux-zen` kernel includes this module.
|
||||
|
||||
### Other kernels
|
||||
|
||||
If you're using another kernel you can add it via DKMS (note that you can use another [aur helper](https://wiki.archlinux.org/title/AUR_helpers) than yay).
|
||||
|
||||
```bash
|
||||
yay -S binder_linux-dkms
|
||||
```
|
||||
|
||||
Then you can manually load it:
|
||||
|
||||
```bash
|
||||
sudo modprobe binder-linux devices=binder,hwbinder,vndbinder
|
||||
```
|
||||
|
||||
Or load it automatically at boot:
|
||||
|
||||
```bash
|
||||
echo "binder_linux" > /etc/modules-load.d/binder_linux.conf
|
||||
echo "options binder_linux devices=binder,hwbinder,vndbinder" > /etc/modprobe.d/binder_linux.conf
|
||||
```
|
||||
|
||||
## Installing necessary packages:
|
||||
|
||||
```bash
|
||||
sudo pacman -S waydroid
|
||||
```
|
||||
|
||||
### [On X11]
|
||||
|
||||
If using X11, you'll need to run a nested wayland session, a simple solution is using cage. You could also use weston.
|
||||
|
||||
```bash
|
||||
sudo pacman -S cage
|
||||
```
|
||||
|
||||
## Initializing waydroid:
|
||||
|
||||
```bash
|
||||
sudo waydroid init
|
||||
```
|
||||
|
||||
Or with google apps support:
|
||||
|
||||
```bash
|
||||
sudo waydroid init -s GAPPS
|
||||
```
|
||||
|
||||
## Running waydroid
|
||||
|
||||
This command will automatically start the waydroid container and a session before showing the UI.
|
||||
|
||||
```bash
|
||||
waydroid show-full-ui
|
||||
```
|
||||
|
||||
Otherwise if you want a CLI, you have to start the container and then a session:
|
||||
|
||||
```bash
|
||||
sudo systemctl start waydroid-container.service
|
||||
waydroid session start
|
||||
```
|
||||
|
||||
#### Useful commands
|
||||
|
||||
| Command | Purpose |
|
||||
| :---------------------------------- | :----------------------------- |
|
||||
| `waydroid session start` | Starting a session |
|
||||
| `waydroid session stop` | Stopping a session |
|
||||
| `waydroid status` | Checking Waydroid status |
|
||||
| `sudo waydroid upgrade` | Upgrading the LineageOS image |
|
||||
| `waydroid app list` | Get the list of installed apps |
|
||||
| `waydroid app install $path_to_apk` | Install an APK |
|
||||
| `waydroid show-full-ui` | Launch the GUI |
|
||||
| `waydroid app launch $package_name` | Launch an app |
|
||||
| `sudo waydroid shell` | Launch a shell |
|
||||
| `waydroid --help` | Display the help message |
|
||||
|
|
||||
|
||||
### [On X11]
|
||||
|
||||
On X11 waydroid container can be started but then all waydroid commands need to be run inside a nested wayland session.
|
||||
If you just need waydroid UI the simplest is with cage:
|
||||
|
||||
```bash
|
||||
cage -- waydroid show-full-ui
|
||||
```
|
||||
|
||||
If you need the command line then you need to have a console running inside a wayland session. For example with Konsole:
|
||||
|
||||
```bash
|
||||
cage -- konsole
|
||||
```
|
||||
|
||||
You can then type the commands the same as described above.
|
||||
|
||||
## Firewall rules and packet forwarding
|
||||
|
||||
You need some additional rules in your firewall if you want the network to work inside waydroid. For example with nftables you need these additional rules in your tables:
|
||||
|
||||
```
|
||||
table inet filter {
|
||||
chain input {
|
||||
# -------------------------------- waydroid
|
||||
iifname "waydroid0" accept comment "Allow incoming network traffic from WayDroid"
|
||||
|
||||
}
|
||||
|
||||
chain forward {
|
||||
# -------------------------------- waydroid
|
||||
iifname "waydroid0" accept comment "Allow incomming network traffic from WayDroid"
|
||||
oifname "waydroid0" accept comment "Allow outgoing network traffic from WayDroid"
|
||||
}
|
||||
chain output {
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You also need to enable packet forwarding. To check if it's already enabled:
|
||||
|
||||
```bash
|
||||
sysctl net.ipv4.ip_forward
|
||||
sysctl net.ipv6.conf.all.forwarding
|
||||
```
|
||||
|
||||
If it's not enabled you can permanently enable it in the file `/etc/sysctl.conf` by uncommenting the lines `net.ipv4.ip_forward=1` for IPv4 and `net.ipv6.conf.all.forwarding=1` for IPv6. Please note that in most cases you can for now just enable the IPv4 packet forwarding and ignore the IPv6 one.
|
||||
And to reload the configuration:
|
||||
|
||||
```bash
|
||||
sudo sysctl -p /etc/sysctl.conf
|
||||
```
|
||||
|
||||
## Additional notes
|
||||
|
||||
#### 1) clipboard sharing
|
||||
|
||||
If you want to share the clipboard between a wayland session and waydroid UI you need to install the packages `python-pyclip` and `wl-clipboard`.
|
||||
It however won't work with X11 and nested wayland sessions.
|
||||
|
||||
#### 2) app stores
|
||||
|
||||
You might want to install [aurora store](https://gitlab.com/AuroraOSS/AuroraStore), an open source google play store client not requiring a google account. And an F-Droid client like [droidify](https://f-droid.org/en/packages/com.looker.droidify/).
|
||||
|
||||
#### 3) GPU
|
||||
|
||||
If you have an Intel or AMD GPU it should work out of the box. But if you have a NVIDIA GPU you'll need to enable software rendering. For that in `/var/lib/waydroid/waydroid.cfg` add the following:
|
||||
|
||||
```
|
||||
[properties]
|
||||
ro.hardware.gralloc=default
|
||||
ro.hardware.egl=swiftshader
|
||||
```
|
||||
|
||||
and then run:
|
||||
|
||||
```bash
|
||||
sudo waydroid upgrade --offline
|
||||
sudo systemctl restart waydroid-container.service
|
||||
```
|
||||
|
||||
#### 4) Additional troubleshooting
|
||||
|
||||
Finally you might want to check the [archwiki](https://wiki.archlinux.org/title/Waydroid) directly if having issues with waydroid.
|
||||
And although it's quite old and contains some unecessary steps now, you can check [this guide](https://forum.garudalinux.org/t/ultimate-guide-to-install-waydroid-in-any-arch-based-distro-especially-garuda/15902) too.
|
||||
Reference in New Issue
Block a user