
UP 接触 Termux 这款强大的 Android 虚拟终端大概已有两年半,虽相关的学习多浮于表面,但仍摸索了一些玩法,利用它运行 Linux 容器便是其中之一。由于相关的知识技巧比较零碎,故总结了这篇笔记,记录一下关键步骤和常见问题的解决办法,后面如果解决了什么新的问题也会更新在这里。
Tips: 本文仅涉及使用 Termux 运行原生 arm64 架构的 Linux 容器,不涉及跨架构模拟、图形 API 转译等内容(Windows 游戏转译可以选择 Winlator、Mobox 等)。本文使用的驱动为 Turnip + Zink。
Termux 利用 TMOE 部署 Linux 容器的教程很多,这里就不在赘述。UP 部署时选的是 Debian 13 的 Chroot 容器,安装了 KDE Plasma 桌面。没 Root 的话也可以选择 PRoot 容器,也可以正常使用(UP 在骁龙 888 、骁龙 8+ Gen 1、骁龙 8 Elite 和 骁龙 8 Elite Gen 5 的 PRoot 容器上测试成功)。
如果是 Android 12 及以上版本的系统,需要解除单个应用的多线程限制,在 TMOE 里可以快捷设置。

安装 Linux 容器过程中可以不安装 vnc 服务(性能不太行),因为本文用的是 Termux:X11 连接容器内的桌面环境。KDE Plasma 桌面环境在容器内使用 TMOE 安装即可。安装完成后需要挂载 tmp,关闭容器后在容器外的 TMOE 进行操作。


安装 Termux:X11 后,建议先设置 Preferences。若连接键鼠使用,建议修改图中橙色方框中的选项为图中所示配置;若需要在 Linux 容器中正常使用 Alt + Tab 等快捷键,需要在安卓设置中打开 Termux:X11 的无障碍服务,如图中绿色方框中所示。



设置好后在 Termux 中安装 X11 源。
pkg install x11-repo -y 安装好后可以通过 termux-change-repo 命令更换国内的软件源以加快下载速度,然后安装连接 Termux:X11 和硬件加速相关的软件包。
pkg update && pkg upgrade -y
pkg install termux-x11-nightly -y 在容器外,先启动 termux-x11 服务,再启动容器,可以参考以下脚本:
#!/bin/bash
kill -9 $(pgrep -f "termux.x11") 2>/dev/null
termux-x11 :2 -dpi 96 &
tmoe ls 进入容器后,不要启动 KDE 桌面会话,先使用 vim 等工具编辑 ~/.config/kwinrc 文件(若用户目录下 .config 文件夹不存在需要先新建),禁用 KDE 的桌面特效,在 [Compositing] 部分添加或修改以下内容:
[Compositing]
Enabled=false 然后安装相关驱动及工具(假设安装的是 Debian 13):
sudo apt update && sudo apt upgrade -y
sudo apt install wget mesa-utils vulkan-tools -y
wget https://github.com/lfdevs/mesa-for-android-container/releases/download/debian%2F25.0.7-2-turnip/mesa-vulkan-drivers_25.0.7-2+deb13u1_arm64_unpatched.deb
sudo apt install --reinstall ./mesa-vulkan-drivers_25.0.7-2+deb13u1_arm64_unpatched.deb -y
sudo apt-mark hold mesa-vulkan-drivers:arm64
rm ./mesa-vulkan-drivers_25.0.7-2+deb13u1_arm64_unpatched.deb 注意:若手机的 SoC 为骁龙 8 Elite 等更新的处理器,则上面的驱动无法正常使用,可以前往 UP 的这个仓库下载最新的驱动(安装使用方法请查看仓库的 README):https://github.com/lfdevs/mesa-for-android-container
使用 root 权限修改 /etc/profile 文件,在文件末尾添加以下的两行内容,设置 XDG_RUNTIME_DIR (该环境变量在正常的 Linux 系统上由 systemd 自动设置,但当宿主系统为 Android 时,Linux 容器(Chroot/PRoot)一般无法使用 systemd,故需手动设置)和 DISPLAY (与上面启动 termux-x11 服务命令的“:2”相对应)全局环境变量:
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DISPLAY=':2' 使环境变量生效:
source /etc/profile 创建目录:
sudo mkdir -p /run/user/$(id -u)
sudo chown $USER:$USER /run/user/$(id -u)
chmod 700 /run/user/$(id -u) 修改 /tmp 目录的权限,避免出现因权限问题导致的桌面会话启动失败的问题:
sudo chmod -R 777 /tmp 使用以下命令启动 KDE Plasma 的 X11 会话:
sudo service dbus start
MESA_LOADER_DRIVER_OVERRIDE=zink TU_DEBUG=noconform /etc/X11/xinit/Xsession 若不希望进入桌面会话时自动启动终端,可以编辑 /etc/X11/xinit/Xsession 文件,将 open_terminal 这行注释掉。
切换到 Termux:X11 应用(注意防止 Termux 掉后台):




若图标、字体等元素太小,可以在显示设置中调整缩放倍数。调整后点击“应用”不会立即生效,需要注销后切回到 Termux 按 Enter 或 Ctrl + C 键结束 KDE 会话,然后使用前面的命令再次启动 KDE Plasma 的 X11 会话。
sudo apt install fcitx5 fcitx5-pinyin fcitx5-module-cloudpinyin fcitx5-frontend-all fcitx5-chinese-addons -y 按照本文的启动命令启动 KDE Plasma 一般不会出现此问题,若仍出现此问题,可尝试使用 root 权限修改 /etc/environment 文件,添加以下的四行内容:
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx 注销用户,切回到 Termux 按 Enter 或 Ctrl + C 键结束 KDE 会话,然后使用前面的命令再次启动 KDE Plasma 的 X11 会话。
(由于改进了 KDE Plasma 的启动命令,以下方法不再适用)
在相应的应用启动器的属性里添加以下环境变量:
GTK_IM_MODULE=xim QT_IM_MODULE=xim XMODIFIERS=@im=fcitx
使用该办法后输入法候选框的位置会偏移输入框,打字速度快了还会“漏字母”(比如使用拼音输入法时个别字母会提前上屏导致原本正确的拼音残缺),但 UP 暂时没找到更好的解决方法。
这个疑似是 arm64 架构独有的 KDE 桌面问题,可以先将要选择的文件夹改为其他名称,然后再新建一个与文件夹原名称同名的空文件,选择完成后再删除空文件,将文件夹的名称改回来。
注意:请谨慎修改系统文件夹(如 /usr/bin 等)的名称,以免出现不可预知的问题。
开启 Termux:X11 Preferences 的 Keyboard -> Enforce char based input 选项。
这是进程 xwaylandvideobridge 导致的,使用以下命令结束它即可(Termux 容器中它没用)。
pkill -f xwaylandvideobridge 如果需要在启动桌面的时候自动结束这个进程,则可以新建一个 Shell 脚本,填入以下内容,并赋予它执行权限。然后在“系统设置 -> 系统 -> 自动启动”中添加它为登录脚本,添加后点击该项的“查看属性”图标,选择属性窗口的“权限”选项卡,勾选“允许将文件作为程序执行”。可以根据桌面启动的实际情况调整延时执行该命令的秒数(即 sleep 5 一行)。
#!/bin/bash
sleep 5
pkill -f xwaylandvideobridge Termux:https://github.com/termux/termux-app
Termux:X11:https://github.com/termux/termux-x11
TMOE 文档:https://doc.tmoe.me/zh/
Arch Linux 中文维基:https://wiki.archlinuxcn.org/wiki/
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21570
https://github.com/termux/termux-packages/pull/17561
https://github.com/termux/termux-packages/pull/24840
https://gitee.com/mo2/linux/issues/IAZWYG
https://github.com/LinuxDroidMaster/Termux-Desktops/blob/main/Documentation/HardwareAcceleration.md
https://github.com/sabamdarif/termux-desktop/blob/main/hw-acceleration.md
https://www.reddit.com/r/termux/comments/1g799ey/i_cant_control_minecraft_in_termuxx11_with_mouse/
https://www.reddit.com/r/termux/comments/19dpqas/proot_linux_only_dri3_patch_mesa_turnip_driver/
https://blog.csdn.net/wyw1749750673/article/details/144372483