WAYDROID(1)

πŸ“¦ version 1.6.3, in ubuntu stonking

πŸ’– WAYDROID πŸ’–

okay bestie, so like β€” this is the waydroid manual page, from the User Commands section of the manual. It's giving "run a whole entire Android on your Linux desktop" energy and honestly? iconic. Let's get into it. 🫢


✨ NAME ✨

waydroid β€” a container-based approach to booting a full Android system on GNU/Linux. no cap, a whole phone, on your laptop. 🌸


✨ SYNOPSIS ✨

waydroid [options] action [subaction] [args]

✨ DESCRIPTION ✨

so waydroid is this whole system that runs a full Android system inside a container and integrates it with a Wayland compositor, which means Android apps can just… run on your Gnu/Linux desktop?? like they live there now. πŸ’…

it supports:

  • multi-window mode
  • full-screen UI
  • and a whole pile of configuration properties

main character energy fr fr.


✨ CONCEPTS ✨

Waydroid is built on three fundamental concepts, and lowkey understanding them is the whole key to manual startup and troubleshooting. like, if you get these three, you get Waydroid. periodt.

  • Image β€” an image is a pre-built, read-only filesystem of Android (system and vendor partitions included). Images live on disk, typically in /var/lib/waydroid/images. Waydroid downloads official images during waydroid init, or you can bring your own custom images with the -i option. think of an image as an Android installation ISO that isn't running yet. it's just… sitting there. waiting. πŸ’€
  • Container β€” the container is the running instance of an Android image. it uses Linux namespaces and cgroups to run the Android userspace in isolation, sharing the host kernel. the container has to be started (usually with sudo waydroid container start) before any graphical output shows up. you can stop it, restart it, freeze it, or unfreeze it. and heads up: container management requires root privileges. πŸ‘‘
  • Session β€” the session is the component that bridges the Android container to the Wayland compositor. it handles graphics output (showing the Android UI), input events (mouse, keyboard, touch), and multi-window integration. the session runs as a normal user (no root!) with waydroid session start. once the session is up, Android apps become visible and interactive. stopping the session (with waydroid session stop) only removes the graphical connection β€” the container may keep running.

so in normal usage with systemd services, all of these components are managed automatically. but manual control is highkey useful for debugging, custom setups, or when you're running without systemd at all.


✨ OPTIONS ✨

  • -h, --help β€” show help message and exit. πŸŽ€
  • -V, --version β€” show program's version number and exit.
  • -l LOG, --log LOG β€” path to log file (default: /var/lib/waydroid).
  • --details-to-stdout β€” print details (e.g. build output) to stdout instead of writing to the log.
  • -v, --verbose β€” write even more to the logfiles (may reduce performance 😭).
  • -q, --quiet β€” do not output any log messages. silent. mysterious.
  • -f β€” force options (used with init actions).
  • -i LOCATION β€” initialize from specified location (default: /usr/share/waydroid-extra/images). used only with the init action.

✨ ACTIONS ✨

  • status β€” quick check of the waydroid status. vibe check, basically.
  • log β€” follow the waydroid logfile.
  • init β€” set up waydroid specific configs and install images.
  • upgrade β€” upgrade images.
  • session β€” session controller (start/stop the Wayland integration).
  • container β€” container controller (start/stop/freeze/unfreeze the Android container).
  • app β€” applications controller (install, remove, launch, list apps).
  • prop β€” Android properties controller.
  • show-full-ui β€” show Android full screen in a window.
  • shell β€” run a remote shell command inside the container.
  • logcat β€” show Android's logcat.

✨ INIT OPTIONS ✨

used with waydroid init to control image sources and type.

  • -h, --help β€” show help for init and exit.
  • -i IMAGES_PATH, --images_path IMAGES_PATH β€” custom path to store downloaded images (default: /var/lib/waydroid/images).
  • -f, --force β€” force initialization, useful when resetting or using custom images.
  • -c SYSTEM_CHANNEL, --system_channel SYSTEM_CHANNEL β€” URL of the OTA channel for the system image (default: official Waydroid server).
  • -v VENDOR_CHANNEL, --vendor_channel VENDOR_CHANNEL β€” URL of the OTA channel for the vendor image (default: official server).
  • -r ROM_TYPE, --rom_type ROM_TYPE β€” ROM flavour: lineage (default, LineageOS-based), bliss (BlissOS-based), or a custom OTA URL.
  • -s SYSTEM_TYPE, --system_type SYSTEM_TYPE β€” type of system regarding Google services: VANILLA (no Google apps), FOSS (free/open alternatives), or GAPPS (Google Play Services). default is VANILLA.

✨ LOG OPTIONS ✨

used with waydroid log.

  • -h, --help β€” show help for log and exit.
  • -n LINES, --lines LINES β€” number of initial output lines to show.
  • -c, --clear β€” clear the log file.

✨ CONTAINER SUBACTIONS ✨

used with waydroid container.

  • -h, --help β€” show help for container and exit.
  • start β€” start the container (requires root/sudo). πŸ‘‘
  • stop β€” stop the container.
  • restart β€” restart the container.
  • freeze β€” freeze the container. ❄️
  • unfreeze β€” unfreeze the container.

✨ SESSION SUBACTIONS ✨

used with waydroid session.

  • -h, --help β€” show help for session and exit.
  • start β€” start the Wayland session (run as normal user, not root).
  • stop β€” stop the Wayland session.

✨ APP SUBACTIONS ✨

used with waydroid app.

  • -h, --help β€” show help for app and exit.
  • install APK_FILE β€” push a single package to the container and install it.
  • remove PACKAGE_NAME β€” remove single app package from the container.
  • launch PACKAGE_NAME β€” start single application.
  • list β€” list all installed applications.

✨ PROPERTIES ✨

used with waydroid prop.

  • -h, --help β€” show help for prop and exit.
  • get PROPERTY β€” get value of property from container.
  • set PROPERTY VALUE β€” set value to property on container.

so properties control the behaviour of Waydroid and the Android system. use waydroid prop set property value to set a property. to unset one, set the value to an empty string (""). and ngl, most properties need you to restart the Waydroid session before they actually take effect. πŸ™ˆ

🌈 Behaviour 🌈

  • persist.waydroid.multi_windows (true/false) β€” enable/disable window integration with the desktop (multi-window mode).
  • persist.waydroid.height_padding (0-9999) β€” adjust height padding.
  • persist.waydroid.width_padding (0-9999) β€” adjust width padding.
  • persist.waydroid.width (0-9999) β€” override desired resolution width.
  • persist.waydroid.height (0-9999) β€” override desired resolution height.
  • persist.waydroid.suspend (true/false) β€” let the container sleep after display timeout when no apps are active (default: true on kernel 4.9+).
  • persist.waydroid.uevent (true/false) β€” allow Android direct access to hotplugged devices (default: false).
  • persist.waydroid.reverse_scrolling (true/false) β€” invert the direction of scrolling (default: false).

πŸ“ App behaviour πŸ“

  • persist.waydroid.fake_touch (string, max 91 chars) β€” comma-separated list of package names for which mouse inputs are interpreted as touch inputs. supports wildcard *.
  • persist.waydroid.fake_wifi (string, max 91 chars) β€” comma-separated list of package names for which the system always appears as if connected to Wi-Fi. supports wildcard *.

πŸ”₯ Debug πŸ”₯

  • persist.waydroid.no_presentation (true/false) β€” disable the wp_presentation protocol.
  • persist.waydroid.invert_colors (true/false) β€” swap the color space from RGBA to BGRA.
  • persist.waydroid.cursor_on_subsurface (true/false) β€” draw the cursor on a subsurface instead of the cursor surface.
  • persist.waydroid.cursor_force_shm (true/false) β€” always submit wl_shm buffers for the cursor surface.
  • persist.waydroid.no_background_subsurface (true/false) β€” do not submit a black background subsurface.
  • persist.waydroid.use_subsurface (true/false) β€” submit overlayed subsurfaces rather than letting Android compose the stack.

✨ EXAMPLES ✨

πŸ“ Logging πŸ“

waydroid log > ~/waydroid-log.txt

πŸ“ Logcat πŸ“

sudo waydroid logcat > ~/waydroid-logcat.txt

πŸ“ Initialization with custom images πŸ“

# Clean previous data (reboot if errors occur)
sudo rm -rf /var/lib/waydroid /home/.waydroid ~/waydroid
# Force init to use custom images from default extra directory
sudo waydroid init -f
# Or use a custom path
sudo waydroid init -f -i ~/Downloads/test_build

πŸ“ Initialization with specific ROM and GAPPS πŸ“

sudo waydroid init -r lineage -s GAPPS

πŸ“ Starting Waydroid manually πŸ“

# Terminal 1 (as root)
sudo waydroid container start
# Terminal 2 (as normal user)
waydroid session start
# After "Android with user 0 is ready", launch full UI
waydroid show-full-ui

πŸ“ Multi-window mode πŸ“

waydroid prop set persist.waydroid.multi_windows true
waydroid session stop
# Now launching apps will open in separate windows

πŸ“ App management πŸ“

waydroid app install ~/Downloads/example.apk
waydroid app launch com.example.app
waydroid app list
waydroid app remove com.example.app

✨ NOTES ✨

  • many operations require root privileges (use sudo). the session start command, however, must be run as a normal user under a Wayland compositor. don't mix these up bestie, it will Not work. 😭
  • after changing most properties, restart the Waydroid session: waydroid session stop and then waydroid session start. every single time. no shortcuts.
  • APK files that only contain ARM binaries will not work on x86_64 hosts. consider installing F-Droid or a Play Store image for graphical app management. πŸ’€

✨ SEE ALSO ✨

adb(1)


✨ AUTHOR ✨

Waydroid is maintained by the Waydroid team. this manual page was written for the Debian project based on upstream documentation. 🫢


so yeah, that's the whole thing. waydroid, dated 2025-03-15, this page being the WAYDROID(1) manual page from the User Commands section. go run some Android on your desktop, you absolute legend. πŸ’–βœ¨πŸ‘‘

πŸ“¦ where this page comes from