UP 接触 Termux 这款强大的 Android 虚拟终端大概已有两年半,虽相关的学习多浮于表面,但仍摸索了一些玩法,利用它运行 Linux 容器便是其中之一。由于相关的知识技巧比较零碎,故总结了这篇笔记,记录一下关键步骤和常见问题的解决办法,后面如果解决了什么新的问题也会更新在这里。
Tips: 本文仅涉及使用 Termux 运行原生 arm64 架构的 Linux 容器,不涉及跨架构模拟、图形 API 转译等内容(Windows 游戏转译可以选择 Winlator、Mobox 等)。
一、Termux 配置
Termux 利用 TMOE 部署 Linux 容器的教程很多,这里就不在赘述。UP 部署时选的是 Debian 12 的 Chroot 容器,安装了 KDE Plasma 桌面。没 Root 的话也可以选择 Proot 容器,应该也可以使用(UP 在骁龙888的 Proot 容器上测试成功)。
如果是 Android 12 及以上版本的系统,需要解除单个应用的多线程限制,在 TMOE 里可以快捷设置。
安装 Linux 容器过程中可以不安装 vnc 服务(性能不太行),因为本文用的是 Termux:X11 连接容器内的桌面环境。KDE Plasma 桌面环境在容器内使用 TMOE 安装即可。安装完成后需要挂载 tmp,关闭容器后在容器外的 TMOE 进行操作。
二、Termux:X11 配置
安装 Termux:X11 后,建议先设置 Preferences。若连接键鼠使用,建议修改图中橙色方框中的选项为图中所示配置;若需要在 Linux 容器中正常使用 Alt + Tab 等快捷键,需要在安卓设置中打开 Termux:X11 的无障碍服务,如图中绿色方框中所示。
设置好后在 Termux 中安装 X11 和 tur 社区源。
pkg install x11-repo tur-repo -y
安装好后可以通过 termux-change-repo 命令更换国内的软件源以加快下载速度,然后安装连接 Termux:X11 和硬件加速相关的软件包。
pkg update && pkg upgrade -y
pkg install termux-x11-nightly mesa-zink vulkan-loader-android -y
三、Linux 容器配置
在容器外,先启动 termux-x11 服务,再启动容器,可以参考以下脚本:
#!/bin/bash
termux-x11 :2 -dpi 96 &
tmoe ls
进入容器后,不要启动 KDE 桌面会话,先使用 vim 等工具编辑 ~/.config/kwinrc 文件,禁用 KDE 的桌面特效,在 [Compositing] 部分添加或修改以下内容:
[Compositing]
Enabled=false
然后安装相关驱动及工具(假设安装的是 Debian 系的 Linux 发行版):
sudo apt update && sudo apt upgrade -y
sudo apt install wget mesa-utils vulkan-tools -y
wget https://github.com/sabamdarif/termux-desktop/releases/download/mesa-vulkan/mesa-vulkan-kgsl_24.1.0-devel-20240120_arm64.deb
sudo apt install ./mesa-vulkan-kgsl_24.1.0-devel-20240120_arm64.deb -y
rm ./mesa-vulkan-kgsl_24.1.0-devel-20240120_arm64.deb
使用 root 权限修改 /etc/profile 文件,在文件末尾添加以下的两行内容,设置 XDG_RUNTIME_DIR (该环境变量在正常的 Linux 系统上由 systemd 自动设置,但当宿主系统为 Android 时,Linux 容器应该无法使用 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)
使用以下命令启动 KDE Plasma 的 X11 会话:
MESA_LOADER_DRIVER_OVERRIDE=zink TU_DEBUG=noconform startplasma-x11
切换到 Termux:X11 应用(注意防止 Termux 掉后台):
若图标、字体等元素太小,可以在显示设置中调整缩放倍数。调整后点击“应用”不会立即生效,需要注销后切回到 Termux 按 Ctrl + C 键结束 KDE 会话,然后使用前面的命令再次启动 KDE Plasma 的 X11 会话。
四、常见问题
1. 安装 fcitx 5 和拼音输入法
sudo apt install fcitx5 fcitx5-pinyin -y
2.在 Chromium、VS Code 等“浏览器套壳”应用无法激活 fcitx 5 输入法
在相应的应用启动器的属性里添加以下应用变量:
GTK_IM_MODULE=xim QT_IM_MODULE=xim XMODIFIERS=@im=fcitx
使用该办法后输入法候选框的位置会偏移输入框,打字速度快了还会“漏字母”(比如使用拼音输入法时个别字母会提前上屏导致原本正确的拼音残缺),但 UP 暂时没找到更好的解决方法。
【相关资源】
- Termux:https://github.com/termux/termux-app/releases
- Termux:X11:https://github.com/termux/termux-x11/releases
- TMOE文档:https://doc.tmoe.me/zh/
【参考资料】
- 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