Waydroid template

Some additional info:

Aurora Store newer than version 4.2.5 crashes on Waydroid:

Work on Waydroid webcam support:

2 Likes

Thank @apparatus for this very good guide! Below an update proposal.

Small fix for the clipnotify zip

curl https://codeload.github.com/cdown/clipnotify/zip/refs/heads/master -o clipnotify-master.zip
unzip -j clipnotify-master.zip -d clipnotify

apt install unzip -y
curl --proxy http://127.0.0.1:8082/ --tlsv1.2 --proto =https --max-time 180 https://codeload.github.com/cdown/clipnotify/zip/refs/heads/master>
unzip -j clipnotify-master.zip -d clipnotify

When the TemplateVM created

  • create an AppVM, in Settings / Applications, refresh Applications, add Waydroid-Sway
  • create a DispsableVM, in Settings / Applications, refresh Applications, add Waydroid-Sway

Troubleshootings

  1. From Application menu, choose AppVM / Waydroid-Sway, BUT nothing displayed.
    Solution : Application menu, choose AppVM / xterm, in the displayed xterm, manually launch waydroid : /opt/bin/sway-waydroid.sh

  2. How to exit the AppVM ?
    Solution : From dom0 Qubes Domain traybar, for the AppVM, choose Shutdown.

3 Likes

update proposal : add this command to a script file and put it in /etc/skel/, something like :

cat << 'EOF' | tee /etc/skell/install-apk
WAYLAND_DISPLAY="wayland-1" XDG_SESSION_TYPE="wayland" DISPLAY=":1" waydroid app install $1
EOF

Install your first application

In an DisposableVM:

  • download an application apk (for example F-Droid from https://f-droid.org/)
  • qvm-copy it to your Waydroid AppVM or DisposableVM

In your Waydroid AppVM or DisposableVM:

  • Run install-apk (see above) with the apk file (for example : ./install-apk QubesIncoming/disp1629/F-Droid.apk)
1 Like

I’ve thought about it as well but in the end I’ve decided that instead of installing unzip/git in the Waydroid template just to download the sources only once and then never use it again it’d be better to keep the template minimal and just download it in another qube instead.
I’ve added both options so users can choose what fits them best.

Thanks, I’ve added them as well.
Just with some correction to start the waydroid script manually with debug output by removing &>/dev/null from the commands.

1 Like

Thanks, I’ve added this change as well.
With the correction that it’s better to place the script in /opt/bin instead of /etc/skel/ because if you change the script later in your template then this change won’t be propagated to the existing AppVMs based on this template.
The /opt/bin is already in the PATH so you can call it without specifying the full path to the script.

1 Like

Proposal update for sound:

To get sound in the Waydroid AppVM or DisposableVM, in the TemplateVM you should install pipewire-qubes (for Qubes-OS 4.2):

apt install pipewire-qubes -y

Note: to avoid a too big default template (and so a bigger attack surface), I cloned d12m-waydroid to d12m-waydroid-sound and added the above package only in d12m-waydroid-sound. So I choose for an AppVM if I want sound or not.

2 Likes

Thanks, it’s worth mentioning. I’ve added this info to the guide.

1 Like

Thanks for the great guide, have Waydroid all set up in a Template and AppVM.

EDIT: Below was due to being on Qubes 4.1, anyone on 4.2+ shouldn’t have this same problem. Thanks to @apparatus for the reminder.

I did have a problem with no internet connectivity in Waydroid itself. TemplateVM and AppVMs had connectivity just fine, and running ip addr show in terminal showed all the interfaces and assigned IPs. But the Waydroid container itself wasn’t getting any network, and wasn’t showing any assigned IPV4 address.

Solution was found here, in the post by rustyx on April 25th 2023:

No worky in Ubuntu 22.04.

The script /usr/lib/waydroid/data/scripts/waydroid-net.sh prefers nft, iptables-legacy, iptables, in that order.

There are 2 problems with that logic:

  • nftables doesn’t work in combination with iptables rules (which I have on due to Docker)
  • iptables-legacy doesn’t work at all

So the script has no chance of ever working.

With the following patch that disables nft and iptables-legacy I was able to get Internet working:

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

Now Waydroid is working pretty great!

Do you have Qubes OS 4.1?
It isn’t mentioned in the guide but it is for Qubes OS 4.2 and it’s using nftables because Qubes OS replaced iptables with nftables in Qubes OS 4.2.

2 Likes

Yes you’re right I’m still on 4.1! Completely forgot about the 4.2 switch to nftables. Will edit my post to add.

You can try to replace this:

ExecStart=/usr/bin/bash -c "if (nft create chain ip qubes waydroid-input) &>/dev/null; then nft add rule ip qubes custom-input jump waydroid-input; fi"
ExecStart=/usr/bin/bash -c "if (nft create chain ip qubes waydroid-forward) &>/dev/null; then nft add rule ip qubes custom-forward jump waydroid-forward; fi"
ExecStart=/usr/sbin/nft add rule ip qubes waydroid-input iifname "waydroid0" meta l4proto {tcp, udp} th dport { 53, 67 } accept
ExecStart=/usr/sbin/nft add rule ip qubes waydroid-forward iifname "waydroid0" oifgroup 1 accept
ExecStart=/usr/sbin/nft add rule ip qubes waydroid-forward oifname "waydroid0" iifgroup 1 accept
ExecStop=/usr/sbin/nft flush chain ip qubes waydroid-input
ExecStop=/usr/sbin/nft flush chain ip qubes waydroid-forward

with this:

ExecStart=/usr/sbin/iptables -I INPUT -i waydroid0 -p tcp -m multiport --dports 53,67 -j ACCEPT
ExecStart=/usr/sbin/iptables -I INPUT -i waydroid0 -p udp -m multiport --dports 53,67 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD 2 -o eth0 -i waydroid0 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD 2 -i eth0 -o waydroid0 -j ACCEPT
ExecStop=/usr/sbin/iptables -D INPUT -i waydroid0 -p tcp -m multiport --dports 53,67 -j ACCEPT
ExecStop=/usr/sbin/iptables -D INPUT -i waydroid0 -p udp -m multiport --dports 53,67 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -o eth0 -i waydroid0 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -i eth0 -o waydroid0 -j ACCEPT

untested

1 Like

Confirming that these iptables-version firewall rules work for Waydroid in Qubes 4.1!
Thank you for taking care of us poor souls who haven’t been able to make the jump to 4.2 yet :smiling_face_with_tear:

Qubes os is still handle to Wayland, so I was thinking to use Wayland on Qubes OS, user shall make sys-gui and after separate between X11 and Wayland.
My solution is making two sys-gui, one is managing gui on X11 server of dom0 and normal templates, other one manage Wayland compositor.

But I understood to be able to use Wayland on Qubes os, this solution is greatest!
User can use safely Android apps without Google service, thank you!

Hey There,

  1. ‘create an AppVM, in Settings / Applications, refresh Applications, add Waydroid-Sway’

I have refreshed the apps but i cant find waydroid-sway. Only waydroid. Are they the same thing?

  1. I went ahead and tried opening waydroid. It opened ‘initialize waydroid’ and I chose my android type and downloaded it.

when i try waydroid-install-apk /home/user/QubesIncoming/disp1629/F-Droid.apk it says WayDroid session is stopped

What am i doing wrong here?

It seems that you’ve missed some of the guides steps or there was an error somewhere that you didn’t notice.
Try to create Waydroid template from the beginning.

It seems that you don’t have .desktop file that should’ve been created here:

1 Like

okay, waydroid-sway shows app in qubes settings apps now. I think i had an error on the sway install.

How do I get aurora store 4.2.5? Their gitlab keeps redirecting to their main site where they only have 4.3.5. F-droid doesnt have 4.2.5 either.

You can download it from here:

And verify the signature:

1 Like

I think Droid-ify is privacy safely than F-Droid as client.
So first I install apk of Droid-ify, after I enable F-Droid Archive repository in Droid-ify, Aurora Store v4.2.5 is existing in F-Droid Archive repository, so it can install from here.
And Aurora Store use Exodus for monitor packet of apps, user should install Exodus.

Thanks for making android research and devolpment more easy than ever on qubes with low resource overhead!

Everything seems to work so far only issue i have left is changing size of the output window for highres screens:
Scaling settings in /etc/sway/config seem to have an effect on waydroid but the window size stays the same so the visible part of the screen is about 1/5…
if i resize the window android ist dynamicly rescaling, is that possible to configure? on chromebooks the rescaling works kinda.
I tried also the command waydroid shell wm density 320 and that helped also with with scaling but again the window size is too small.
I also found out that there is a Multi-Window-Mode any expierience with it?

You can set the sway window size in /etc/sway/config like this:

output X11-1 resolution 1280x720 position 1280,0

Home · swaywm/sway Wiki · GitHub

You can change the DPI like this:

# Remove ro.sf.lcd_density properly if exist
grep ro.sf.lcd_density /var/lib/waydroid/waydroid_base.prop && \
sudo sed -i '/ro.sf.lcd_density/d' /var/lib/waydroid/waydroid_base.prop

# Append ro.sf.lcd_density property
echo "ro.sf.lcd_density=320" | sudo tee -a /var/lib/waydroid/waydroid_base.prop

Please add an scale setting (HIDPI support) · Issue #407 · waydroid/waydroid · GitHub

But I don’t think that dynamic resizing is possible:
Dynamic resolution · Issue #1053 · waydroid/waydroid · GitHub
add ability to run full ui mode in a resizable window · Issue #720 · waydroid/waydroid · GitHub