This was tested on a Galaxy Tab S3 9.7", but it should go for most other Android devices. Regardless, this is my workflow to turn a good ol' tablet lying around into a Linux-based tablet PC.
If you have an older device, see my Droid Pro chroot tutorial for an example, but you may need to adapt the steps to your specific needs. If you have a non-rooted device, use Termux and install a distro via proot-distro, but it won't be as performant as chroot.
Prerequisites:
- A rooted device with Android 5.0+
- A terminal, whether it be local, ADB, or Termux
- VNC viewing software, such as MultiVNC or bVNC Free
- (optional) BusyBox (if you're using a stock ROM; in my testing with LineageOS 14.1 and 18.1 this wasn't necessary)
- (optional) A hacker-friendly keyboard, like Hacker's Keyboard or Unexpected Keyboard
3. Set the installation type and path to whatever you want. It installs to external storage by default, but you can use `/sdcard/linux.img` for internal storage on most devices I've tested. If you choose the installation type to be a whole partition, be careful not to format your internal storage. While you're here, set your username and user password; it'll create a user account for you. Also, when given the ability to choose your filesystem, I make sure to pick ext2, a journal-less filesystem, to minimize read/write cycles on the flash storage.
4. Go to the three dots; in the dropdown menu, select "Install" to start installation.
5. After it's done installing, you can enter the environment. I personally enter the environment via Termux, ADB, or local terminal since I haven't found any other way, by running this command as root:
"/data/data/ru.meefik.linuxdeploy/files/bin/linuxdeploy shell"
6. (if you chose oldstable) Upgrade Debian if you haven't already.
- run "apt update && apt upgrade && apt full-upgrade"
- Open "/etc/apt/sources.list" with a text editor (i.e. nano) and change these lines:
8. Log into your user account via "su - <username>". The username you use is the same one you've put in Linux Deploy earlier. (You can also take this opportunity to add a password to your root account via the "passwd" command, and change the shell to proper "/bin/bash" using chsh...)

9. Start a VNC session, like so:
vncserver :0 -localhost -geometry 2048x1536
Feel free to replace "2048x1536" with your mobile device's resolution, or any resolution you want to stick to. It might ask you for a password; give it one and use it in the next step.
10. Connect to the VNC session through a VNC client you've downloaded earlier. The IP should be localhost, the port should be 5900, and the password should be whatever you set it to earlier.
11. That should be it. I'll consider extending this tutorial with instructions on how to set up PulseAudio.
If you have an older device, see my Droid Pro chroot tutorial for an example, but you may need to adapt the steps to your specific needs. If you have a non-rooted device, use Termux and install a distro via proot-distro, but it won't be as performant as chroot.
Prerequisites:
- A rooted device with Android 5.0+
- A terminal, whether it be local, ADB, or Termux
- VNC viewing software, such as MultiVNC or bVNC Free
- (optional) BusyBox (if you're using a stock ROM; in my testing with LineageOS 14.1 and 18.1 this wasn't necessary)
- (optional) A hacker-friendly keyboard, like Hacker's Keyboard or Unexpected Keyboard
1. Install Linux Deploy. You have the choice of using meefik's original or lateautumn233's fork. I've seen a bug in both of them:
- meefik's Linux Deploy has an issue where "stable" (Debian 12)'s installation stops halfway due to a usrmerge error. To work around this, install an older version first (in this case, "oldstable") and then upgrade. This might not work once Debian 12 takes oldstable's place in the near future.
- lateautumn233's Linux Deploy has an issue where the screen is spammed with "Retrieving InRelease". Installation was flawless on my Galaxy Tab S3 but faced this bug on my Kindle HDX.
- meefik's Linux Deploy has an issue where "stable" (Debian 12)'s installation stops halfway due to a usrmerge error. To work around this, install an older version first (in this case, "oldstable") and then upgrade. This might not work once Debian 12 takes oldstable's place in the near future.
- lateautumn233's Linux Deploy has an issue where the screen is spammed with "Retrieving InRelease". Installation was flawless on my Galaxy Tab S3 but faced this bug on my Kindle HDX.
2. Press the icon with the sliders/switches. It may be top-right or bottom-right depending on your display. Go to Debian, set the architecture to your mobile device's (armhf if 32-bit, arm64 if 64-bit), and set the distribution suite to whatever you want; I choose "stable". I personally keep all of the extra stuff (i.e. init, VNC) off since we can do that ourselves, but feel free to enable them (which may make some of these steps unnecessary).
3. Set the installation type and path to whatever you want. It installs to external storage by default, but you can use `/sdcard/linux.img` for internal storage on most devices I've tested. If you choose the installation type to be a whole partition, be careful not to format your internal storage. While you're here, set your username and user password; it'll create a user account for you. Also, when given the ability to choose your filesystem, I make sure to pick ext2, a journal-less filesystem, to minimize read/write cycles on the flash storage.
4. Go to the three dots; in the dropdown menu, select "Install" to start installation.
5. After it's done installing, you can enter the environment. I personally enter the environment via Termux, ADB, or local terminal since I haven't found any other way, by running this command as root:
"/data/data/ru.meefik.linuxdeploy/files/bin/linuxdeploy shell"
6. (if you chose oldstable) Upgrade Debian if you haven't already.
- run "apt update && apt upgrade && apt full-upgrade"
- Open "/etc/apt/sources.list" with a text editor (i.e. nano) and change these lines:
deb http://ftp.debian.org/debian/ oldstable main contrib non-free
deb-src http://ftp.debian.org/debian/ oldstable main contrib non-free
to these, making sure to replace "oldstable" with "stable" and add "non-free-firmware" to the end of both lines:
to these, making sure to replace "oldstable" with "stable" and add "non-free-firmware" to the end of both lines:
deb http://ftp.debian.org/debian/ stable main contrib non-free non-free-firmware
deb-src http://ftp.debian.org/debian/ stable main contrib non-free non-free-firmware
- run "apt clean && apt update && apt upgrade && apt full-upgrade" to perform your upgrade. You can, optionally, "apt autoremove" afterwards to clean up any unused packages, if there are any.
Now here comes the fun part.
7. Install the graphical environment. Any should be fine, but I personally choose XFCE:
apt install xfce4 xfce4-goodies tigervnc-standalone-server dbus-x11
- run "apt clean && apt update && apt upgrade && apt full-upgrade" to perform your upgrade. You can, optionally, "apt autoremove" afterwards to clean up any unused packages, if there are any.
Now here comes the fun part.
7. Install the graphical environment. Any should be fine, but I personally choose XFCE:
apt install xfce4 xfce4-goodies tigervnc-standalone-server dbus-x11
8. Log into your user account via "su - <username>". The username you use is the same one you've put in Linux Deploy earlier. (You can also take this opportunity to add a password to your root account via the "passwd" command, and change the shell to proper "/bin/bash" using chsh...)

9. Start a VNC session, like so:
vncserver :0 -localhost -geometry 2048x1536
Feel free to replace "2048x1536" with your mobile device's resolution, or any resolution you want to stick to. It might ask you for a password; give it one and use it in the next step.
10. Connect to the VNC session through a VNC client you've downloaded earlier. The IP should be localhost, the port should be 5900, and the password should be whatever you set it to earlier.
11. That should be it. I'll consider extending this tutorial with instructions on how to set up PulseAudio.