Waydroid: Difference between revisions
imported>PedroHLC m Teach how to override width |
→V4L2 camera forwarding: Simplify setup instructions |
||
| (52 intermediate revisions by 22 users not shown) | |||
| Line 1: | Line 1: | ||
[https://waydro.id Waydroid] is an application which uses LXC containers to run Android applications on a non-Android system. | |||
{{Warning| | {{Warning|Waydroid requires a [[Wayland]] desktop session and cannot be used on X11 directly, but can be run in a nested [[Wayland]] session, using e.g. [https://www.hjdskes.nl/projects/cage cage].}} | ||
== | == Installation == | ||
{{Warning|Installing Waydroid on your system before running nixos-generate-config will create unnecessary fstab entries that may interfere with system functionality.}} | |||
Enable Waydroid in your system configuration: | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
{ | { | ||
virtualisation | virtualisation.waydroid.enable = true; | ||
# Newer kernel versions may need | |||
virtualisation.waydroid.package = pkgs.waydroid-nftables; | |||
# Enable clipboard sharing | |||
environment.systemPackages = [ pkgs.wl-clipboard ]; | |||
} | } | ||
</nowiki>}} | </nowiki>|name=|lang=}} | ||
After rebuilding and switching, finish the Waydroid install in your shell. | |||
<syntaxhighlight lang="console"> | |||
Fetch Waydroid images. | |||
You can add the parameters "-s GAPPS -f" to have GApps support. | |||
$ sudo waydroid init | |||
</syntaxhighlight> | |||
How to certify a waydroid device for GAPPS[https://github.com/waydroid/waydroid/issues/379#issuecomment-1152526650] | |||
Before the following steps, you might need to do some GPU adjustments. See the troubleshooting section. | |||
== Usage == | |||
Start the container and userspace Wayland session. You'll know it is finished when you see the message "Android with user 0 is ready". | |||
<syntaxhighlight lang="console"> | |||
$ sudo systemctl start waydroid-container | |||
$ waydroid session start | |||
</syntaxhighlight> | |||
General usage | |||
<syntaxhighlight lang="console"> | |||
Start Android UI | |||
$ waydroid show-full-ui | |||
List Android apps | |||
$ waydroid app list | |||
Start an Android app | |||
$ waydroid app launch <application name> | |||
Install an Android app | |||
$ waydroid app install </path/to/app.apk> | |||
Enter the LXC shell | |||
$ sudo waydroid shell | |||
Overrides the full-ui width | |||
$ waydroid prop set persist.waydroid.width 608 | |||
</syntaxhighlight> | |||
== Maintenance == | |||
=== Update Android === | |||
Use following command to upgrade Android (LineageOS) to a newer version if available | |||
<syntaxhighlight lang="console"> | |||
$ sudo waydroid upgrade | |||
</syntaxhighlight> | |||
=== Resetting Android Container === | |||
{{Warning|All files of your Android container will be lost}} | |||
<syntaxhighlight lang="console"> | |||
Stop Waydroid container | |||
$ sudo systemctl stop waydroid-container | |||
Removing images and user data | |||
$ sudo rm -r /var/lib/waydroid/* ~/.local/share/waydroid | |||
</syntaxhighlight> | |||
== Tips and tricks == | |||
=== Mount host directories === | |||
Install and configure graphical application <code>waydroid-helper</code><syntaxhighlight lang="nix"> | |||
environment.systemPackages = [ pkgs.waydroid-helper ]; | |||
systemd = { | |||
packages = [ pkgs.waydroid-helper ]; | |||
services.waydroid-mount.wantedBy = [ "multi-user.target" ]; | |||
}; | |||
<syntaxhighlight lang="bash"> | </syntaxhighlight>Enable the user service which is also required. Note that this is not persistent and needs to get started after reboot again.<syntaxhighlight lang="bash"> | ||
systemctl --user start waydroid-monitor | |||
</syntaxhighlight>Now start <code>waydroid-helper</code> application and add a shared directory. As an example, source directory could be <code>/home/myuser/Public</code> and target directory <code>/home/myuser/.local/share/waydroid/data/media/0/NixOS</code>. Ensure that both directories already exist locally. After that you might need to restart the ''Waydroid'' container which is also possible with the graphical user interface. | |||
=== GPS/Location forwarding === | |||
First enable ''geoclue2'' and ''adb'' daemon on the host<syntaxhighlight lang="nix"> | |||
services.geoclue2.enable = true; | |||
programs.adb.enable = true; | |||
</syntaxhighlight>Enable location provider in your desktop environment. For Gnome Shell you can do this<syntaxhighlight lang="bash"> | |||
gsettings set org.gnome.system.location enabled true | |||
</syntaxhighlight>To test and see location<syntaxhighlight lang="bash"> | |||
nix shell nixpkgs#geoclue2 -c $(nix eval --raw nixpkgs#geoclue2)/libexec/geoclue-2.0/demos/where-am-i | |||
</syntaxhighlight>Get IP address of the Waydroid guest and connect ''adb'' to it<syntaxhighlight lang="bash"> | |||
waydroid shell ip addr show | |||
adb connect <IP>:5555 | |||
</syntaxhighlight>Download, initialize and run geobridge script<syntaxhighlight lang="bash"> | |||
wget https://gitlab.com/papiris/geobridge/-/raw/main/geobridge.sh | |||
sh geobridge.sh --init | |||
</syntaxhighlight> | |||
=== V4L2 camera forwarding === | |||
Camera forwarding using V4L2 is broken on upstream, but can be achieved by using the Waydroid images of the [https://github.com/WayDroid-ATV Waydroid-ATV project]. You might [[Waydroid#Resetting Android Container|need to reset]] your existing Waydroid environment. Then stop the container and fetch the latest Waydroid-ATV images.<syntaxhighlight lang="bash"> | |||
# | systemctl stop waydroid-container | ||
waydroid init -f \ | |||
-c https://waydroid-atv.github.io/ota/a16-qpr2/system \ | |||
-v https://waydroid-atv.github.io/ota/a16-qpr2/vendor \ | |||
-r lineage \ | |||
-s GAPPS | |||
systemctl start waydroid-container | |||
waydroid session start | waydroid session start | ||
==GPU Adjustments== | </syntaxhighlight>In case the graphical interface wont show up or the setup wizard fails you can do<syntaxhighlight lang="bash"> | ||
waydroid shell -- am start -a android.intent.action.MAIN -c android.intent.category.HOME | |||
waydroid shell -- pm disable-user --user 0 com.google.android.setupwizard | |||
waydroid shell -- pm disable-user --user 0 com.google.android.gms.setup | |||
</syntaxhighlight>In case the camera access will crash the Waydroid container, there's a recent image which solves this on AMD GPUs. Download it and extract the contents to <code>/etc/waydroid-extra/images</code>. After that recreate the environment as mentioned above but only issue <code>waydroid init -f</code>. | |||
=== Running applications that differ from the current host architecture via libhoudini or libndk<ref>Need help with activating libhoudini for waydroid on NixOS | |||
https://www.reddit.com/r/NixOS/comments/15k2jxc/need_help_with_activating_libhoudini_for_waydroid/</ref> === | |||
Run <code>nix shell github:nix-community/NUR#repos.ataraxiasjel.waydroid-script -c sudo waydroid-script</code> | |||
Or, alternatively, add <code>nur.repos.ataraxiasjel.waydroid-script</code> from the NUR to your flake or shell or NixOS <code>environment.systemPackages</code>, or HM <code>home.packages</code> or something like that based on [https://github.com/nix-community/NUR readme] and run <code>sudo waydroid-script</code> | |||
In the TUI, select Android 13 > Install > libhoudini (or libndk, [https://github.com/casualsnek/waydroid_script/blob/fcb15624db0811615ea9800837a836c4777674bf/README.md#install-libndk-arm-translation which script author claims may be faster on AMD]) | |||
== Troubleshooting == | |||
=== GPU Adjustments === | |||
In case you have an NVIDIA card or an RX 6800 series, you'll need to disable GBM and mesa-drivers: | In case you have an NVIDIA card or an RX 6800 series, you'll need to disable GBM and mesa-drivers: | ||
{{file|/var/lib/waydroid/waydroid_base.prop|prop|<nowiki> | {{file|/var/lib/waydroid/waydroid_base.prop|prop|<nowiki> | ||
| Line 46: | Line 158: | ||
</nowiki>}} | </nowiki>}} | ||
== | ==See Also:== | ||
* [https://wiki.archlinux.org/title/Waydroid Waydroid article on the Archlinux Wiki] | |||
[https://wiki.archlinux.org/title/Waydroid | |||