# Client für Linux - mit Waydroid installieren

Waydroid ist ein unter [GNU GPL v3](https://github.com/waydroid/waydroid/blob/main/LICENSE) lizensierter und einer von vielen gängigen Emulatoren für Android auf Linux-Systemen. Wir nutzen es, um **FabAccess** für Linux verfügbar zu machen (alternativ zum [GTK Mono Client Build](https://docs.fab-access.org/books/fabaccess-installation/page/client-alle-plattformen-anleitung-zum-selber-kompilieren "Client (alle Plattformen) - Anleitung zum selber kompilieren")). Waydroid verwendet einen [LXC](https://linuxcontainers.org/)-Unterbau (Container, ähnlich Docker), um zu spawnen. Wir berufen uns grundlegend auf die offizielle Dokumentation unter [https://docs.waydro.id/usage/install-on-desktops](https://docs.waydro.id/usage/install-on-desktops).

## Intro

Es gibt zu viele Linux-Distros, um auf jede einzugehen, was die Installation angeht. Auf dieser Seite finden sich Details zum Setup auf Kubuntu (analog: Debian, Ubuntu) und Fedora (analog: CentOS).

Diese Dokumentation beruht auf folgenden Beispielsystemen:

- OS: Kubuntu 24.04 und Fedora 40, jeweils mit aktiviertem Wayland
- Waydroid 1.5.0 mit LineageOS 18.1 (Android 11)

## Erfordernisse (Requirements)

Die benötigten Systemeigenschaften sind in [https://wiki.archlinux.org/title/Waydroid#Wayland\_session\_manager](https://wiki.archlinux.org/title/Waydroid#Wayland_session_manager) beschrieben.

- CPU/Architektur: [https://developer.android.com/ndk/guides/abis?hl=de#sa](https://developer.android.com/ndk/guides/abis?hl=de#sa)
- GPU: Intel oder AMD; **nicht** **Nvidia**
- Display Session: Wayland; **nicht X11**
- ca. 1 GB Speicherplatz (für die Images und libhoudini)
- ca. 400-500MB RAM

<p class="callout info">Es wurde berichtet, dass Waydroid auf auch Raspberry Pi's laufen kann!</p>

### One-Liner: Setup als fertiges Bash Script

Folgende einzelne Zeile installiert das aktuellste FabAccess Borepin Release automatisch und vollständig auf Linux-Systemen:

```bash
curl -L -s https://y.fab-access.org/waydroid | bash
```

Wer dem Kurzlink [https://y.fab-access.org/waydroid](https://y.fab-access.org/waydroid) nicht traut, der kann folgende voll ausgeschriebene Zeile verwenden:

```bash
curl -s https://gitlab.com/fabinfra/fabaccess/borepin/-/raw/main/waydroid-installer.sh | bash
```

### Das grundlegende Setup  


Wer das Setup manuell durchführen möchte, kann auch alle nachfolgenden Schritte verfolgen.

Kubuntu:

```bash
sudo apt update && sudo apt upgrade
sudo apt install curl ca-certificates -y
curl -s https://repo.waydro.id | sudo bash
sudo apt install waydroid -y

# Die installierte Waydroid Version checken
dpkg -l | grep waydroid

#Init ausführen (Images installieren)
# Folgendes Images werden dabei automatisch von https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_x86_64/ geladen:
# - LineageOS 18.1 (20241102 VANILLA) - das Image ist ca. 800 MB groß
# - LineageOS 18.1 (20241102 MAINLINE) - das Image ist ca. 180 MB groß
sudo waydroid init
```

Fedora

```bash
sudo dnf update
curl -s https://repo.waydro.id | sudo bash
sudo dnf install waydroid -y

# Die installierte Waydroid Version checken
dnf list installed | grep waydroid

#Init ausführen (Images installieren)
# Folgendes Images werden dabei automatisch von https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_x86_64/ geladen:
# - LineageOS 18.1 (20241102 VANILLA) - das Image ist ca. 800 MB groß
# - LineageOS 18.1 (20241102 MAINLINE) - das Image ist ca. 180 MB groß
sudo waydroid init --system_channel https://ota.waydro.id/system --vendor_channel https://ota.waydro.id/vendor --rom_type lineage --system_type VANILLA
```

### Fehlerbehebung (Fedora)

Falls das bisherige Setup mit Fehlern scheitert, müssen ggf. die SELinux Regeln für `systemd` und `waydroid` angepasst werden:

```bash
ausearch -c 'systemctl' --raw | audit2allow -M my-systemctl
semodule -X 300 -i my-systemctl.pp

ausearch -c 'waydroid' --raw | audit2allow -M my-waydroid
semodule -X 300 -i my-waydroid.pp
```

Temporär - d.h. nur Testweise - kann auch mit `<a href="https://www.tecmint.com/disable-selinux-in-centos-rhel-fedora/">setentforce 0</a>` gearbeitet werden.

Etwaige Anpassungen sind außerdem an der Config von Nöten, falls "Failed to load config for waydroid" auftritt (siehe auch Issue [493](https://github.com/waydroid/waydroid/issues/493) und [652](https://github.com/waydroid/waydroid/issues/652)):

```bash
sudo vim /var/lib/waydroid/lxc/waydroid/config
```

Auskommentieren:

```bash
#lxc.apparmor.profile = unconfined
```

## Service und Logs

Waydroid wird automatisch als Service installiert und auch gestartet. Wir können den Service starten, stoppen und neustarten, und darüberhinaus Logs auslesen:

```bash
sudo systemctl status waydroid-container.service
sudo systemctl start waydroid-container.service
sudo systemctl stop waydroid-container.service
sudo systemctl restart waydroid-container.service

# Journal und Log File:
sudo journalctl -f -u waydroid-container.service
sudo less /var/lib/waydroid/waydroid.log

#oder kurz:
waydroid log

#oder über LXc:
sudo lxc-info -P /var/lib/waydroid/lxc -n waydroid -sH
```

## Python pip und venv installieren

Kubuntu:

```bash
sudo apt install python3-pip python3-venv
```

Fedora:

```bash
sudo dnf install python3-pip python3-venv
```

## Zwischenablage (Clipboard) reparieren

Bei der Installation klappt u.U. die geteilte Zwischenablage nicht. In diesem Fall benötigt es die folgenden Pakete.

Kubuntu:

```bash
sudo dnf install wl-clipboard
```

Fedora:

```bash
sudo apt install wl-clipboard
```

und dann:

```bash
sudo pip install pyclip --break-system-packages #unsauberer Trick. Hat jemand eine bessere Lösung?
```

### Session starten

```bash
# als normaler Nutzer
waydroid session start

# oder im Hintergrund:
nohup waydroid session start &
```

## Optionen konfigurieren  


Wir stellen an ein paar Schrauben!

<p class="callout info">Für das Ausführen muss eine Waydroid Session bereits laufen!</p>

#### Multi-Window Option setzen

Aktiviert/deaktiviert die Fensterintegration mit dem Desktop

```bash
waydroid prop set persist.waydroid.multi_windows true
```

#### Auflösung des Fensters anpassen  


Standardmäßig wird die Session im Vollbildmodus gestartet. Auf einem großen Monitor ist das ggf. screcklich. Das lässt sich optional setzen. Siehe [https://github.com/waydroid/waydroid/issues/700](https://github.com/waydroid/waydroid/issues/700)

```bash
# Zum Zurücksetzen der Standardeinstellungen folgendes ausführen:
waydroid prop set persist.waydroid.width ""
waydroid prop set persist.waydroid.height ""

# Höhe aus Breite berechnen per Verhältnis (z.B. 16:9):
#width = 900 / 16 * 9 =~ 506
waydroid prop set persist.waydroid.height 900
waydroid prop set persist.waydroid.width 506
```

## Netzwerk-Traffic zwischen Gast und Host erlauben

Falls nach der Installation Anwendungen in Waydroid keine Internetverbindung haben, fehlt möglicherweise eine Konfiguration in der Firewall und/oder in einem Waydroid-Script. Siehe auch [https://github.com/waydroid/waydroid/issues/143](https://github.com/waydroid/waydroid/issues/143)

### Fix in Waydroid Script

```bash
sudo sed -i -E 's/=.\$\(command -v (nft|ip6?tables-legacy).*/=/g' /usr/lib/waydroid/data/scripts/waydroid-net.sh
sudo systemctl restart waydroid-container.service
```

## ARM-Builds auf x86-Systemen erlauben (libhoudini) und mehr  


Normalerweise wird Waydroid vermutlich eher auf einem x86-System installiert werden. Android Applications (APKs) sind aber häufig nur für arm7/arm8 kompiliert. Dafür gibt es einen Workaround namens **libhoudini.** Dafür nutzen wir folgendes Script aus dem Projekt [https://github.com/casualsnek/waydroid\_script](https://github.com/casualsnek/waydroid_script). Wir legen uns eine virtuelle Umgebung (venv) für das Projekt an und installieren die Requirements.

```bash
# als normaler Nutzer
cd ~
git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script/

python3 -m venv venv
venv/bin/pip install --upgrade pip
venv/bin/pip install -r requirements.txt
```

Danach führen wir aus und wählen **libhoudini** aus:

```bash
sudo venv/bin/python3 main.py
```

[![image.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/RZAwlomhv75m9MRF-image.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/RZAwlomhv75m9MRF-image.png)

[![image.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/TtoeTbStGpKrLlTs-image.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/TtoeTbStGpKrLlTs-image.png)

Mit der Leertaste können Pakete ab- oder zugewählt werden:

[![image.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/IjllzIoVsix6UYxB-image.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/IjllzIoVsix6UYxB-image.png)

Danach startet die Installation. libhoudini ist ca. 100 MB groß.

Wir können das Menü auch überspringen und einen vollständigen CLI-Befehl eingeben:

```bash
sudo venv/bin/python3 main.py --android-version 11 install libhoudini
```

## FabAccess Client (Borepin) installieren

Wir laden den Client als APK-Datei direkt herunter:

```bash
# als normaler Nutzer
cd ~
wget https://gitlab.com/api/v4/projects/20862588/packages/generic/borepin/v0.3.11/org.fab_infra.fabaccess-Signed.apk
waydroid app install org.fab_infra.fabaccess-Signed.apk

# wir prüfen, ob das geklappt hat:
waydroid app list | grep fabaccess

# der Output sollte sein:
packageName: org.fab_infra.fabaccess
```

Siehe auch [Downloads / Demo](https://docs.fab-access.org/books/fabaccess-installation/page/downloads-demo#bkmrk-borepin-%28mobile-app%29)

## Waydroid Client anzeigen und benutzen  


Nachdem der Container gestartet ist und die Session läuft, können wir das User Interface anzeigen:

```bash
# als normaler Nutzer
waydroid show-full-ui
```

Die Standardoberfläche bei/nach dem Start:

[![image.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/8OxDYVeaoW6aFzL4-image.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/8OxDYVeaoW6aFzL4-image.png)

Und letztlich Borepin in Waydroid starten:

<p class="callout info">Der Kaltstart von Borepin bzw. Waydroid kann ca. 30-60 Sekunden dauern.</p>

[![image.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/VLWZsqBCBt38qdIK-image.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/VLWZsqBCBt38qdIK-image.png)

## Waydroid in einem Fenster anzeigen

Unter Wayland hat das Client-Fenster leider keine Drag&amp;Drop-Funktion. Wir können es in einen Rahmen einsperren, in dem wir das Tool "cage" verwenden

Kubuntu:

```bash
sudo apt install cage
```

Fedora:

```bash
sudo dnf install cage
```

 und dann Waydroid ins Fenster zwingen:

```bash
cage waydroid show-full-ui
```

Dadurch erhalten wir folgende Ansicht:

[![image.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/ujS69Ur8i9FB7Yzc-image.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/ujS69Ur8i9FB7Yzc-image.png)

## FabAccess Borepin aus dem Startmenü heraus starten

Waydroid wird standardmäßig in das Menü eingebunden:

[![grafik.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/ZauZmdOM8ev7CykW-grafik.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/ZauZmdOM8ev7CykW-grafik.png)

Im Menü-Editor kann dieser Eintrag auch angesehen werden:

[![grafik.png](https://docs.fab-access.org/uploads/images/gallery/2024-11/scaled-1680-/89OcIKtNVe1z37ep-grafik.png)](https://docs.fab-access.org/uploads/images/gallery/2024-11/89OcIKtNVe1z37ep-grafik.png)

## FabAccess Borepin per Kommandozeile starten

Das geht auch:

```matlab
waydroid app launch org.fab_infra.fabaccess
```

oder mit Cage:

```matlab
cage waydroid app launch org.fab_infra.fabaccess
```

## Waydroid Upgrade

Waydroid bekommt regelmäßig Updates. Wir können mit folgendem Befehl aktualisieren:

```bash
sudo waydroid upgrade
```

Das im Hintergrund befindliche Base-Image für das Betriebssystem macht sich auch visuell bemerkbar und kann direkt per `Download` aktualisiert werden:

[![Bildschirmfoto_20250106_173317.png](https://docs.fab-access.org/uploads/images/gallery/2025-01/scaled-1680-/lnj7bIQB6M6RZWCY-bildschirmfoto-20250106-173317.png)](https://docs.fab-access.org/uploads/images/gallery/2025-01/lnj7bIQB6M6RZWCY-bildschirmfoto-20250106-173317.png)

## Drag &amp; Drop Fenster

Durch Gedrückthalten der `Super`-Taste (in der Regel die Taste zwischen linkem `Ctrl` und `Alt`) und Anklicken einer beliebigigen Stelle des Wayland-Fensters kann dieses an die gewünschte Stelle verschoben werden.