Skip to content

Instantly share code, notes, and snippets.

@NelloKudo
Last active December 6, 2025 15:02
Show Gist options
  • Select an option

  • Save NelloKudo/ffae4490b625eac4cca4a943d4def00f to your computer and use it in GitHub Desktop.

Select an option

Save NelloKudo/ffae4490b625eac4cca4a943d4def00f to your computer and use it in GitHub Desktop.
How to play Teamfight Tactics (TFT) on Linux (Waydroid)

Playing TFT on Linux using Waydroid

Just like many other League addicts, ever since the Vanguard incident, TFT has been a no-go....

except it isn't, since the Android 13 version works just as fine, after some tweaks!

Screenshot From 2025-01-02 22-05-49


Index


Step 1: Pre-requisites for Waydroid to work

Waydroid relies on the binder kernel module: make sure you're running a kernel supporting it if you get any issues related to it.

Some examples of working ones are Cachyos's, Nobara's, Zen or Xanmod kernels.

Wayland is also needed, but it works just fine on x11 using weston: we'll get into it later.


Step 2: Installing Waydroid (Android 13)

You can find the instructions for installing Waydroid at here: https://docs.waydro.id/usage/install-on-desktops

I'll cover the install process for Arch Linux or based distros.

yay -S waydroid

For TFT to run without issues, we'll need to replace Waydroid's default android with Android 13, we can do that with:

curl -LO https://amstel-dev.github.io/ota/android-13-ota_patch.sh && chmod +x android-13-ota_patch.sh && sudo ./android-13-ota_patch.sh

Here select Patch OTA Channels, like in the screenshot below, then quit the program.

image

Then just continue the installation by opening Waydroid from your app menu, and pressing download:

image

Intel and AMD users should have no issues overall; NVIDIA users though, read at the fixes here: https://wiki.archlinux.org/title/Waydroid#GPU_Requirements

After clicking Done, the Waydroid window will open. Let's close for now with the command below, and go on to the next step:

waydroid session stop

Step 3: Configuring Waydroid

Using the great waydroid-script repo, time to tweak our Android install.

Make sure to install lzip from your repositories before using it. For Arch users: sudo pacman -S lzip

Now follow the instructions from their repo:

git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script
python3 -m venv venv
venv/bin/pip install -r requirements.txt
sudo venv/bin/python3 main.py

Here select Android 13 > Install and choose the following just like in the image, but depending on your GPU:

  • Select libndk if on AMD
  • Select libhoudini if on Intel (switch to libndk in case it's not working!)

In my case:

image

Once done, press Enter, and then we're ready to launch Waydroid!


Step 4: Launching Waydroid

I'll divide the guide between X11 and Wayland.


X11:

You'll first need to install weston from your repos. Arch users: sudo pacman -S weston

You can run Waydroid within weston with this little script:

unset WAYLAND_DISPLAY && waydroid session stop && weston --width 1600 --height 900 --socket=wayland-1 &>/dev/null & sleep 1 && WAYLAND_DISPLAY=wayland-1 XDG_SESSION_TYPE=wayland waydroid show-full-ui && pkill -x weston 

Adjust the resolution to your needs like 1920x1080 or add the --fullscreen parameter if you want it!

You can also save it to a script to launch from terminal or edit with:

echo "unset WAYLAND_DISPLAY && waydroid session stop && weston --width 1600 --height 900 --socket=wayland-1 &>/dev/null & sleep 1 && WAYLAND_DISPLAY=wayland-1 XDG_SESSION_TYPE=wayland waydroid show-full-ui && pkill -x weston" | sudo tee /usr/local/bin/waydroid-x11
sudo chmod +x /usr/local/bin/waydroid-x11

Now running waydroid-x11 should be all!


Wayland:

waydroid show-full-ui

...and it should be all up and running!

You can also customize the window's size if needed:

waydroid prop set persist.waydroid.width 1920
waydroid prop set persist.waydroid.height 1024
sudo systemctl restart waydroid-container.service

Or, if you prefer Windowed mode to fullscreen, you can set it with:

waydroid prop set persist.waydroid.multi_windows true
sudo systemctl restart waydroid-container.service

Step 5: Enabling Google apps and Installing TFT

Once in Waydroid, check if your internet is working by opening Play Store.

If it doesn't work, run the following or check the Arch wiki.

sudo ufw allow 67
sudo ufw allow 53
sudo ufw default allow FORWARD
  • Docker is also known to create issues with Waydroid's net script, solution's here.

Restart Waydroid and once Play Store is open, try to login and...you'll get upon a This device isn't Play Protect certified notification. A classic.

Let's fix it real quick according to Waydroid's instructions:

sudo waydroid shell

And then:

ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"

Copy the number string after "android_id|" and paste it at the following link: https://www.google.com/android/uncertified

Wait a few minutes, restart Waydroid and you'll have an up-and-running Play Store. Login as usual, and download TFT!


Step 6: Playing TFT and optimizing it!

Open TFT like usual, login and let it download its things. Upon finish, close it as it's time to optimize it!

TFT's config file is hidden in ~/.local/share/waydroid/..., here's how to edit it:

sudo nano /home/$USER/.local/share/waydroid/data/data/com.riotgames.league.teamfighttactics/no_backup/Config/Game.cfg

Here there's a LOT of stuff you can customize (even resolution, if it lags) but what we're looking for is:

  • WaitForVerticalSync: change it to 1 in order to unlock fps (it's needed, apparently)
  • FrameCapType: change it to 0, again, to unlock fps.

Now save and exit with CTRL+X.

And finally, that's pretty much it! Enjoy playing TFT!

image


Further optimizations - UI:

If you run TFT in fullscreen on a 1920x1080 monitor, you might notice that the UI appears excessively largeโ€”almost as if it's been upscaled for mobile. This happens because the game has hardcoded resolution checks, and if the display resolution is within some pixel from 1920x1080, it assumes it's running on a phone, forcing a mobile-optimized UI.

After testing for weeks, I found an incredibly simple fix: slightly increasing the resolution by 5, 10 or 20 pixels.

sudo waydroid shell
wm size 1920x1085

This small tweak makes a huge difference in usability, making it way closer to the original UI for the PC version :')

2025-02-12_15-30 2025-02-12_15-50

Some bugs I noticed xd

  • The carousel and some arenas looks.... black. You can still see champions and items above, but for some reason it stays black xd. Not really sure whether it depends on video drivers or what..
@Joelangelo
Copy link

I've managed to get waydroid up and running, tft installed and the OpenGL version trick done as per @LifeAO comment. The TFT app now crashes when starting the initial patch download. Any thoughts on what might be the problem?

@NelloKudo
Copy link
Author

NelloKudo commented Jun 25, 2025

I'm unsure if this helps Waydroid use the correct OpenGL version or just tricks it. This may solve the OpenGL issue if confirmed to have effect. This also reminds me of overriding graphic profiles on Linux.

1. Solution In /var/lib/waydroid/waydroid_base.prop, set ro.opengles.version from 196609 (OpenGL ES 3.1) to 196610 (OpenGL ES 3.2) with root privilege. Then launch a Waydroid session; no need to stop or restart the container service.

OpenGL ES numbering reference taken from android_device_HighScreen_PowerFiveMax and incrementing the value resulted to OpenGL ES 3.2 reported by AIDA64 app.

2. Reapply when Waydroid Image updates When I manually updated a custom Android 13 / LineageOS 20 image with waydroid init -f, the process seem to have reset the prop value. Simply re-editing it fixes it. Do check if manual forced init or waydroid upgrade resets your prop file.

Thanks for the solution!!! I'll also have to try Android 13 sooner or later.

I've managed to get waydroid up and running, tft installed and the OpenGL version trick done as per @LifeAO comment. The TFT app now crashes when starting the initial patch download. Any thoughts on what might be the problem?

Yeah I'm aware of the issue and the only "solution" I found is to just... retry. The game will occasionally keep crashing, but the download will pick up from where it left earlier, so after ~30mins of messing it should be done.
I hope Android 13 fixes that, it's genuinely soo random.

I've also been getting issues with the cursor disappearing, on both Sway and Weston and with subsurface as well. I'll have to see what's up with all this..

@LivResonata
Copy link

LivResonata commented Jun 27, 2025

I've also been getting issues with the cursor disappearing, on both Sway and Weston and with subsurface as well. I'll have to see what's up with all this..

I can say the Android 13 builds fixes this. I need not force the system cursor to always appear anymore. I must say that these builds are not yet in the official wiki as a default install and is still in active development. Follow this issue from a fork to see the progress.

Firstly, if you want to backup your Android 11 / LineageOS 18 apps and files, simply rename $HOME/.local/share/waydroid to $HOME/.local/share/waydroid-bck.
You can then try the new builds early by following instructions in Waydroid's custom image wiki page; and downloading system and vendor imgs of LineageOS 20 from their Sourceforge page. Ensure the dates match for both images and the CPU architecture matches your hardware (most likely x86_64).

Only three issues I got were trying to get Google Play Store to not give me DF-DFERH-01 error by messing with how and when to install MicroG; which am unsure it's a known bug internally. Second, Flutter-build apps or some rending libraries may have visual glitches which is a known upstream bug not due to Waydroid, if I understood correctly.

And the third which is something one might find often, don't interact with an app that's still loading or 'appears frozen'. Android will indefinitely show a choice pop-up to wait or terminate/kill the app-- even when the app becomes responsive. The only solution is to close the app to get rid of it. TFT match found to loading match transition is a good trigger point for this issue.

I've managed to get waydroid up and running, tft installed and the OpenGL version trick done as per @LifeAO comment. The TFT app now crashes when starting the initial patch download. Any thoughts on what might be the problem?

Sadly, I don't recall facing this, but I do agree to attempt to keep relaunching until it somehow succeeds as mentioned by @NelloKudo. It should not crash thereafter. If it crashes after download, then there is something wrong and require further digging.

I made an edit to my previous comment on tweaking OpenGL. Perhaps it may give you an idea.

@NelloKudo
Copy link
Author

I can say the Android 13 builds fixes this. I need not force the system cursor to always appear anymore. I must say that these builds are not yet in the official wiki as a default install and is still in active development. Follow this issue from a fork to see the progress.

Can confirm Android 13 fixes the issue! Had 0 issues overall through the process.
All I did was:

  • Delete previous Waydroid install
  • Install Android 13's unofficial build from here
  • Install waydroid_script again, choosing Android 13 > gapps and libndk
  • Changed OpenGL version with @LivResonata's solution
  • Usual steps to enable Play Protect, then installed the game.
2025-06-27.19-30-27.mp4

@mmikkelsenm-op
Copy link

I can't get the Android 13's build to work. It won't let me use the system and vendor https's How do i do that?

@NelloKudo
Copy link
Author

I can't get the Android 13's build to work. It won't let me use the system and vendor https's How do i do that?

Just updated the guide with the instruction for Android 13, try following it now.

@mmikkelsenm-op
Copy link

I can't get the Android 13's build to work. It won't let me use the system and vendor https's How do i do that?

Just updated the guide with the instruction for Android 13, try following it now.

Thanks for the quick response mate. I read yesterday that playing on emulators/third party programs will get your account perma banned? If it is true, you might want to add that to the guide so that people can decide on the risk or creatin a burner account.
Thanks for all the work that went into this guide

@NelloKudo
Copy link
Author

I can't get the Android 13's build to work. It won't let me use the system and vendor https's How do i do that?

Just updated the guide with the instruction for Android 13, try following it now.

Thanks for the quick response mate. I read yesterday that playing on emulators/third party programs will get your account perma banned? If it is true, you might want to add that to the guide so that people can decide on the risk or creatin a burner account. Thanks for all the work that went into this guide

I found out about the BlueStacks bans today myself, yeah it does look quite concerningโ€ฆ Iโ€™ll update the guide tomorrow if I find some sources. No idea why Riot would be so strict with an auto-chess game where you canโ€™t cheat at all.

@mrvictory1
Copy link

mrvictory1 commented Sep 9, 2025

Maybe the accounts playing on Bluestacks were automated?

@mmikkelsenm-op
Copy link

mmikkelsenm-op commented Sep 9, 2025

Maybe the accounts playing on Bluestacks were automated?

Close, I found a guy who used a script for think fast so it would autoroll a desired comp for him making sure he got the 3* super quick. But yearh real special case. I don't know how Else you can cheat ๐Ÿ˜…

@Caofre
Copy link

Caofre commented Sep 11, 2025

Hey folks, im running an intel igpu and im struggling to make the game run, whenever i click play it enlargens the icon and the screen goes black with the game icon and stays stuck like that forever, anyone know what that can be?

@mrvictory1
Copy link

@Caofre Do you have libhoudini or libndk installed?

@Lyssa112
Copy link

Lyssa112 commented Sep 20, 2025

stupid question but for me it says in the playstore: This app won't work for your device.

I've installed it now three times and every time the same error and I haven't found anyone else having the same problem and hence why am here. Does anyone have a solution to this? Thanks! ๐Ÿ‘

It's such a struggle with TFT I don't know why a multi million company isn't able to get TFT separated to league itself

image image

@NelloKudo
Copy link
Author

stupid question but for me it says in the playstore: This app won't work for your device.

I've installed it now three times and every time the same error and I haven't found anyone else having the same problem and hence why am here. Does anyone have a solution to this? Thanks! ๐Ÿ‘

It's such a struggle with TFT I don't know why a multi million company isn't able to get TFT separated to league itself

image image

That should only happen if installing libndk or libhoudini from waydroid-script failed, I suggest trying one of the two again.

@Lyssa112
Copy link

@NelloKudo thanks for the quick reply, works now

@Kenny11423
Copy link

anyone know exactly where to increase resolution in game.cfs?

@noxteon-stack
Copy link

Is this method now not working? When I get to the part where I start TFT for the 1st time it just crashes. I've tried with Hill Climb Racing and it is the same "APP_NAME keeps crashing". Installed firefox to see if all installed apps are not working but this time it worked without a problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment