Ultimate Guide to install Waydroid in any Arch-based distro(especially Garuda)

For me, after waiting a whole day and clearing the Google Play Service cache, and still waiting for my Waydroid to register correctly, was to run the following command:

sudo waydroid session stop

I then opened Waydroi and it registered correctly.
I did the same on two other different accounts on my PC, but I only waited 10 minutes, did the same thing and it worked.

2 Likes

I want to install waydroid, but would like to know if this steps are updated? cause i’m no linux master so i’m afraid of making something to exploit :stuck_out_tongue: thanks.

I have just installed Garuda on my new laptop this week, but I haven’t installed Waydroid yet. I will let you know later today…

1 Like

I was not able to register the waydroid device with Google when I installed GAPPS from Waydroid itself.
But it worked when I installed GAPPS from waydroid-extras.

Rest everything was working…
All ARM games are working as mentioned in the guide…
The instructions in the guide are still effective and applicable even today.

3 Likes

Not all games work, though.
I checked heavy games like COD and Genshin Impact…, and these didn’t work for me. I’m not sure if it will also not work for everyone.

@Austin These are no longer available. Now it is just linux-cachyos. If it’s possible, can you test if linux-cachyos-lts works too and update accordingly?

1 Like

kdesu is also deprecated now as well on the kde side.

1 Like

As, @elite has pointed out, kdesu command, which is a part of the kde-cli-tools package,

$ pkgfile kdesu
extra/kde-cli-tools

doesn’t compile with it any more.

So maybe I will remove it from the guide.

1 Like

I think the kde usecase now is dbus? But I could be wrong on that.

1 Like

Thank you @Austin for your great tutorial on how to install Waydroid. Your guide allowed me to install Waydroid on KDE without encountering any major speed bumps.

As some of my favorite programs still don’t function properly under Wayland, I’m sticking with using X11 for now. As you mentioned in your great guide, coupling Weston with Waydroid allowed me to continue to use an X11 session with KDE. Unfortunately, I found one major annoyance when using X11. The problem with this setup was that I couldn’t copy/paste between an X11 session on KDE and Waydroid. I did eventually figure out how to overcome this limitation, so I figured I’d post my solution to this problem for others benefit.

How to enable clipboard sharing between X11, Weston, and Waydroid with KDE:

Extensive online searching regarding X11/Weston/Waydroid clipboard integration suggested installing the following packages:

xclip
wl-clip-persist
python-pyperclip
python-pyclip

Even with all the above recommended packages installed (with X11 on Weston/Waydroid), the clipboard sharing was still not working for me. It wasn’t until I started testing other related packages that I finally found a working solution. The solution required installing clipboard-sync (with the above listed packages) before clipboard sharing actually started to work. The package wl-clipboard (for Wayland) was often recommended, but it didn’t seem to help. As long as xclip and the above packages were installed along with clipboard-sync, wl-clipboard was not required.

The clipboard-sync documentation stated that it could successfully synchronize clipboards across multiple X11 and Wayland instances, so I figured I’d give it a try, and it finally got clipboard sharing working. I don’t know for sure if all the other packages are strictly required to be installed along with clipboard-sync. After I finally got things working, I wasn’t about to start selectively uninstalling the other packages just in case I broke everything and had to start all over again.

Once clipboard-sync has been installed you must ensure that the clipboard-sync.service is enabled and running as well for proper operation. If the clipboard-sync.service isn’t automatically installed and enabled after installing the clipboard-sync package, you can download it separately. You can also create the service file manually yourself instead. The service file should be located in your home directory at the following location:

$HOME/.config/systemd/user/clipboard-sync.service

If the clipboard-sync.service file is not present at that location you can download the service file with the command below

wget -P "$HOME/.config/systemd/user/" https://raw.githubusercontent.com/dnut/clipboard-sync/master/clipboard-sync.service

Alternately, you can create the service $HOME/.config/systemd/user/clipboard-sync.service file yourself with the following contents:

#cat $HOME/.config/systemd/user/clipboard-sync.service
#systemctl --user enable --now clipboard-sync
#systemctl --user start clipboard-sync
#systemctl --user stop clipboard-sync
#systemctl --user  status clipboard-sync
[Unit]
Description=Synchronize clipboards across all displays
Documentation=https://github.com/dnut/clipboard-sync/
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/env clipboard-sync --hide-timestamp --log-level debug
Restart=on-failure

[Install]
WantedBy=graphical-session.target

The commented out entries in the above service are my own personal additions to help those unfamiliar with USER level systemd commands.

Be sure to enable/start the clipboard-sync.service once created in the required location with the following command:

systemctl --user enable --now clipboard-sync

After creating/enabling/starting the clipboard-sync.service, you can check if it is operating properly with the following command:

systemctl --user  status clipboard-sync

If the clipboard-sync.service is operating correctly, the command’s output should be similar to below:

systemctl --user  status clipboard-sync
● clipboard-sync.service - Synchronize clipboards across all displays
     Loaded: loaded (/home/htpc/.config/systemd/user/clipboard-sync.service; en>
     Active: active (running) since Wed 2025-04-09 01:13:37 PDT; 37min ago
 Invocation: 8ae4a41d49674bc5a82ea5e5a9eeb12f
       Docs: https://github.com/dnut/clipboard-sync/
   Main PID: 38548 (clipboard-sync)
      Tasks: 5 (limit: 37544)
     Memory: 944K (peak: 3.9M)
        CPU: 3.061s
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/clipboard->
             ├─38548 clipboard-sync --hide-timestamp --log-level debug
             └─41875 clipboard-sync --hide-timestamp --log-level debug

Hopefully my above tips can help others get their clipboards synchronized between X11, Weston, and Waydroid.

5 Likes

Back again, just FYI, for anyone who’s interested.

My current setup for running Waydroid is in a KDE X Session using the Weston compositor, (to avoid having to use Wayland).

Just for fun, I put together a mega one-liner to use in a Waydroid desktop launcher. This one-liner will kill any active instances of Weston and Waydroid prior to starting Weston and Waydroid in fullscreen mode @3840x2160 resolution. To select another resolution simply adjust the parameters --width 3840 --height 2160 to reflect your screen resolution.

Here’s the one-liner to test running Waydroid in fullscreen mode:

pkill weston; unset WAYLAND_DISPLAY; sudo waydroid container stop; waydroid session stop && weston --width 3840 --height 2160 --fullscreen --shell=kiosk-shell.so --socket=wayland-1 &>/dev/null & sleep 5 && WAYLAND_DISPLAY=wayland-1 XDG_SESSION_TYPE=wayland waydroid show-full-ui

Below is the desktop file that can be used with a slightly modified version of my above one-liner. It will first ensure that no other instances are running, then it will launch Weston, and then start Waydroid in fullscreen mode:

[Desktop Entry]
Categories=X-WayDroid-App;
Comment[en_US]=Start Waydroid (fullscreen)
Comment=Start Waydroid (fullscreen)
Exec=/usr/bin/bash -c 'pkill weston; unset WAYLAND_DISPLAY; sudo waydroid container stop; waydroid session stop && weston --width 3840 --height 2160 --fullscreen --shell=kiosk-shell.so --socket=wayland-1 &>/dev/null & sleep 5 && WAYLAND_DISPLAY=wayland-1 XDG_SESSION_TYPE=wayland waydroid show-full-ui > /dev/null 2>&1 & disown; sleep 2; exit'
GenericName[en_US]=Start Waydroid (fullscreen)
GenericName=Start Waydroid (fullscreen)
Icon=waydroid
MimeType=
Name[en_US]=Waydroid
Name=Waydroid
NoDisplay=false
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-KDE-SubstituteUID=false
X-KDE-Username=
X-Purism-FormFactor=Workstation;Mobile;

You can save the launcher as waydoid.desktop, then be sure to make the file executable.

Here’s my ~/.config/weston.ini:

[core]
xwayland=true

[shell]
background-image=/usr/share/wallpapers/garuda-wallpapers/Garuda Broadwing.png
background-type=scale-crop
background-color=0xff000000
#background-color=0xff002244
#panel-color=0x90ff0000
panel-color=0x00ffffff
panel-position=top
clock-format=none
animation=zoom
#startup-animation=none
close-animation=none
focus-animation=dim-layer
#binding-modifier=ctrl
num-workspaces=6
locking=false
cursor-theme=Breeze
cursor-size=24

[keyboard]
keymap_layout=us

# for Laptop displays
#[output]
#name=LVDS1
#mode=1920x1080
#transform=rotate-90

[input-method]
# on screen keyboard input method
path=/usr/lib/weston/weston-keyboard

[terminal]
font=monospace
font-size=24

[launcher]
icon=/usr/share/icons/AdwaitaLegacy/24x24/legacy/utilities-terminal.png
path=/usr/bin/weston-terminal --shell=/usr/bin/bash

[launcher]
icon=/usr/share/icons/hicolor/24x24/apps/firefox.png
path=/usr/bin/firefox

[launcher]
icon=//usr/share/icons/AdwaitaLegacy/24x24/legacy/utilities-terminal.png
path=/usr/bin/konsole

[launcher]
icon=/usr/share/icons/hicolor/24x24/apps/chromium.png
path=//usr/bin/chromium

[screensaver]
# Uncomment path to disable screensaver
path=/usr/libexec/weston-screensaver
duration=600

I haven’t used Waydroid very much, so I can’t say if my methods are the best way of doing things, but they seem to get the job done.

4 Likes

You can now enjoy Android 13 in Waydroid!

To upgrade to the latest Waydroid image run,
sudo waydroid upgrade

Now, you will have to install versions of GApps, ARM translation libraries and other
software compatible with Android 13 ROMs. Refer to the new additions to the
guide I have given below.

New additions and refinements to the guide:

4 Likes

If your game or maybe any other app is not rendering properly on an AMD graphics card, commenting out the property ro.hardware.vulkan=radeon in /var/lib/waydroid/waydroid_base.prop could solve the issue.
It worked for me when Among Us was showing this issue. Replacing radeon with amdgpu gave me an error library "vulkan.amdgpu.so" not found. This is a crude solution for probably a niche issue I couldn’t find a proper answer for.

It would be nice if someone could look into this issue.

3 Likes