WAYDROID(1)
π 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 duringwaydroid init, or you can bring your own custom images with the-ioption. 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 (withwaydroid 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), orGAPPS(Google Play Services). default isVANILLA.
β¨ 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:trueon 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 thewp_presentationprotocol.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 submitwl_shmbuffers 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). thesession startcommand, 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 stopand thenwaydroid 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 β¨
- π project website: https://waydro.id
- π documentation: https://docs.waydro.id
- π» GitHub: https://github.com/waydroid/waydroid
- π§ Arch Wiki: https://wiki.archlinux.org/title/Waydroid
β¨ 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
- ubuntu stonking: waydroid 1.6.3+ds-2 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms