Waydroid: Difference between revisions

Onny (talk | contribs)
Restructuring and cleanup
Onny (talk | contribs)
 
(5 intermediate revisions by the same user not shown)
Line 2: Line 2:


{{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].}}
{{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].}}
{{Warning|Installing Waydroid on your system before running nixos-generate-config will create unnecessary fstab entries that may interfere with system functionality.}}


== Installation ==
== 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:
Enable Waydroid in your system configuration:
Line 31: Line 32:
== Usage ==
== Usage ==


Start the container
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">
<syntaxhighlight lang="console">
Start the Waydroid LXC container
$ sudo systemctl start waydroid-container
$ sudo systemctl start waydroid-container
You'll know it worked by checking the journal You should see "Started Waydroid Container".
$ sudo journalctl -u waydroid-container -e
Start Waydroid session
You'll know it is finished when you see the message "Android with user 0 is ready".
$ waydroid session start
$ waydroid session start
</syntaxhighlight>
</syntaxhighlight>
Line 66: Line 60:
$ waydroid prop set persist.waydroid.width 608
$ waydroid prop set persist.waydroid.width 608
</syntaxhighlight>
</syntaxhighlight>


== Maintenance  ==
== Maintenance  ==
Line 124: Line 117:
</syntaxhighlight>
</syntaxhighlight>


=== Notification forwarding ===
=== V4L2 camera forwarding ===
 
To forward notifications from the Waydroid container to the host system, [[KDE Connect]] can be used.


On a Gnome-desktop, add following to your system config and enable:<syntaxhighlight lang="nix">
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]. Further we also need an unstable Waydroid version (>1.6.2) for running it.<syntaxhighlight lang="nix">
programs.kdeconnect = {
disabledModules = [
   enable = true;
   "virtualisation/waydroid.nix"
  package = pkgs.gnomeExtensions.gsconnect;
];
};
imports = [
</syntaxhighlight>Open the application ''Extensions'' and enable ''Gsconnect'' plugin there.
"${inputs.nixpkgs-unstable}/nixos/modules/virtualisation/waydroid.nix"
];


Inside the Waydroid container, follow these steps:
nixpkgs.overlays = [
  (self: super: {
    waydroid = (inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.waydroid.overrideAttrs (old: rec {
      version = "0-unstable-2026-04-26";
      src = pkgs.fetchFromGitHub {
        owner = "waydroid";
        repo = "waydroid";
        rev = "9478d59ad5c83b22478594e73d5879b93200fcb2";
        hash = "sha256-L4qU5TSWavxvyPUqVV00NCd0YZqAaKPWTe3dR/q15LE=";
      };
    }));
  })
];
</syntaxhighlight>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


* Download and install the [https://f-droid.org/en/packages/org.kde.kdeconnect_tp/ KDE Connect app]
</syntaxhighlight>In case the graphical interface wont show up or the setup wizard fails you can do<syntaxhighlight lang="bash">
* Open the app and and start pairing with the host machine
waydroid shell -- am start -a android.intent.action.MAIN -c android.intent.category.HOME 
* You'll have to enable access to notifications by clicking on the corresponding entry in the permissions list inside the app
waydroid shell -- pm disable-user --user 0 com.google.android.setupwizard
* If you get the system message "''Restricted setting / For your security, this setting is currently unavailable''", you'll have to enable restricted settings. Go to Android settings app, in the apps list select KDE connect and click in the upper right corner on the three dot menu to ''Allow restricted settings''
waydroid shell -- pm disable-user --user 0 com.google.android.gms.setup
* You may have to reboot the Waydroid container for notification forward to work.
</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
=== Running applications that differ from the current host architecture via libhoudini or libndk<ref>Need help with activating libhoudini for waydroid on NixOS