【Root】Android使用Termux安装Chroot环境跑Linux容器和桌面环境
系统只因家 Lv114514

文章代号:androidinstallchroot 

本教程部分内容来自[Root] 手機Termux建立chroot Ubuntu 22.04環境,免Linux Deploy | Ivon的部落格

前言

相信大家都知道Android是基于Linux内核的,那么可以用来跑Linux环境吗?

答案是可以的,我们所熟悉的Termux就是利用了这点实现的。

Termux提供的类Ubuntu环境是十分残缺的,甚至可以说是残废的,只能运行一些简单的软件,相较于复杂的软件都无法运行,它的软件源也是缺斤少两。

于是,有人在Termux中使用了软件包proot-distro来勉强地运行原始Linux发行版,可是这个软件包也并不是原生地让容器中的Linux直接操纵根目录的文件,如/dev/proc,并且它也是寄生于Termux中,在用户空间内运行,效率就十分的低下,它唯一的好处可能就是可以免Root运行和输入exit就能一键关闭容器内跑的所有软件了。

那么,有什么东西可以解决proot-distro的缺点呢,有!就是Chroot。在Root环境下,我们可以原生地在系统空间内运行Chroot,而不寄生于Termux,这就是为什么Chroot可以提高运行效率,也不会被轻易地杀后台(因为Chroot容器内运行的的每个软件的进程是分开的,你甚至可以在Scene的进程管理中直接搜到这个软件,如nginxxmrig

这个教程我将教大家如何运行。

前提条件

  • 手机需要Root

  • 系统版本大于等于Android6.0

  • 配置不能太烂,否则很容易黑屏死机(我的山寨平板就这样)

  • Linux内核版本最好大于等于3.x

  • 有一个GitHub账号

  • 有魔法上网能力(可选)

正式部分

安装并配置Termux

下载安装Termux

点击这里进入Termux的官方开源地址

Releases中下载apk包,这里要根据你手机的架构选择apk包,如何你不清楚就下载带有universal字样的全架构apk包

安装之后,弹窗授权框全允许,你将看到这个界面:

image

更换软件源

输入并回车:

1
termux-change-repo

然后你就会看到一个窗口,因为Termux是终端纯文本输出,所以我可以直接用把窗口放上来:

┌───────────termux-change-repo─────────────┐
│ Which repositories do you want to edit?  │
│ Select with space.                       │
│ ┌──────────────────────────────────────┐ │
│ │ [*] Main repository  termux-packages │ │
│ │                                      │ │
│ │                                      │ │
│ └──────────────────────────────────────┘ │
├──────────────────────────────────────────┤
│         <  OK  >     <Cancel>            │
└──────────────────────────────────────────┘

直接点击回车,然后你会看到下一个窗口:

┌─────────────────termux-change-repo────────────────────┐
│ Which mirror do you want to use?                      │
│ ┌───────────────────────────────────────────────────┐ │
│ │(*) Default repositories Default host              │ │
│ │( ) Default repositories Default host with CloudFla│ │
│ │( ) GH Mirrors by KcubeteHosted on Github Release  │ │
│ │( ) Mirrors by A1batross Hosted on termux.mentality│ │
│ │( ) Mirrors by Astra ISP Hosted on termux.astra.in.│ │
│ │( ) Mirrors by Bardia MosHosted on mirror.bardia.te│ │
│ │( ) Mirrors by Grimler   Hosted on grimler.se      │ │
│ │( ) Mirrors by Librehat  Hosted on termux.librehat.│ │
│ │( ) Mirrors by Tsinghua UHosted on mirrors.tuna.tsi│ │
│ │( ) Mirrors by BFSU      Hosted on mirrors.bfsu.edu│ │
│ │( ) Mirrors by NJU       Hosted on mirror.nju.edu.c│ │
│ │( ) Mirrors by USTC      Hosted on mirrors.ustc.edu│ │
│ │                                                   │ │
│ │                                                   │ │
│ │                                                   │ │
│ └───────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────┤
│               <  OK  >        <Cancel>                │
└───────────────────────────────────────────────────────┘

使用底部小键盘的按键,将光标移到

│( ) Mirrors by BFSU      Hosted on mirrors.bfsu.edu│

这个是北外源,如果你想要用清华源就移到

│( ) Mirrors by Tsinghua UHosted on mirrors.tuna.tsi│

将光标移到你想要的软件源,点击一下空格,*就会移到你选中的软件源上:

┌─────────────────termux-change-repo────────────────────┐
│ Which mirror do you want to use?                      │
│ ┌───────────────────────────────────────────────────┐ │
│ │( ) Default repositories Default host              │ │
│ │( ) Default repositories Default host with CloudFla│ │
│ │( ) GH Mirrors by KcubeteHosted on Github Release  │ │
│ │( ) Mirrors by A1batross Hosted on termux.mentality│ │
│ │( ) Mirrors by Astra ISP Hosted on termux.astra.in.│ │
│ │( ) Mirrors by Bardia MosHosted on mirror.bardia.te│ │
│ │( ) Mirrors by Grimler   Hosted on grimler.se      │ │
│ │( ) Mirrors by Librehat  Hosted on termux.librehat.│ │
│ │( ) Mirrors by Tsinghua UHosted on mirrors.tuna.tsi│ │
│ │(*) Mirrors by BFSU      Hosted on mirrors.bfsu.edu│ │
│ │( ) Mirrors by NJU       Hosted on mirror.nju.edu.c│ │
│ │( ) Mirrors by USTC      Hosted on mirrors.ustc.edu│ │
│ │                                                   │ │
│ │                                                   │ │
│ │                                                   │ │
│ └───────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────┤
│               <  OK  >        <Cancel>                │
└───────────────────────────────────────────────────────┘

然后点击回车,代其跑完命令就代表成功换源。

更新全部软件包:

1
pkg upgrade -y

中间如果有什么要让你选的直接回车不用管

更新完之后要再换一次软件源,输入termux-change-repo后界面变成这个样子:

┌─────────────────termux-change-repo────────────────────┐
│ Do you want to choose a mirror group or a single      │
│ mirror? Select with space.                            │
│ ┌───────────────────────────────────────────────────┐ │
│ │(*) Mirror group Rotate between several mirrors (re│ │
│ │( ) Single mirrorChoose a single mirror to use     │ │
│ │                                                   │ │
│ │                                                   │ │
│ │                                                   │ │
│ └───────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────┤
│               <  OK  >        <Cancel>                │
└───────────────────────────────────────────────────────┘

选择第二项Single mirror,还是一样用空格选中,然后回车

┌─────────────────termux-change-repo────────────────────┐
│ Which mirror do you want to use? Select with space.   │
│ ┌───────────────────────────────────────────────────┐ │
│ │(*) default       Cached (by cloudflare) variant of│ │
│ │( ) packages.termuTermux's origin repo, hosted in F│ │
│ │( ) mirror.bardia.Mirror by Bardia Moshiri, hosted │ │
│ │( ) mirrors.cbrx.iMirror by cyberrex0, hosted in Ja│ │
│ │( ) mirror.textcorMirror by Dev-Nergis, hosted in R│ │
│ │( ) mirror.albony.Mirror by Albonycal, hosted in In│ │
│ │( ) mirror.nevacloMirror by Nevacloud, hosted in In│ │
│ │( ) linux.domainesMirror by DomaiNesia, hosted in I│ │
│ │( ) mirror.sjtu.edMirror by SJTUG, Shanghai Jiao To│ │
│ │( ) mirrors.bfsu.eMirror by Beijing Foreign Studies│ │
│ │( ) mirrors.njupt.Mirror by Nanjing University of P│ │
│ │( ) mirror.nyist.eMirror by Nanyang Institute of Te│ │
│ │( ) mirrors.zju.edMirror by Information Technology │ │
│ │( ) mirrors.nju.edMirror by eScience Center, Nanjin│ │
│ │( ) mirrors.pku.edMirror by Peking University      │ │
│ │( ) mirrors.sustecMirror by Southern University of │ │
│ │( ) mirrors.cqupt.Mirror by CQUPT - Chongqing Unive│ │
│ │( ) mirrors.hit.edMirror by Harbin Institute of Tec│ │
│ │( ) mirrors.dgut.eMirror by Dongguan University of │ │
│ │( ) mirror.iscas.aMirror by ISCAS - Institute of So│ │
│ │( ) mirrors.tuna.tMirror by Tsinghua University TUN│ │
│ │( ) mirrors.sdu.edMirror by Shandong University    │ │
│ │( ) mirrors.ustc.eMirror by University of Science a│ │
│ │( ) mirrors.aliyunMirror by Alibaba Open Source Mir│ │
│ │( ) mirrors.scau.eMirror by South China Agricultura│ │
│ │( ) ftp.fau.de    Mirror by FAU, Hosted in Erlange.│ │
│ └────↓(+)───────────────────────────────────53%─────┘ │
├───────────────────────────────────────────────────────┤
│               <  OK  >        <Cancel>                │
└───────────────────────────────────────────────────────┘

找到mirrors.bfsu.edu.cn(北外源)或mirrors.tuna.tsinghua.edu.cn(清华源),空格选中,回车

软件源就更新完了

安装必要软件

安装以下软件包,等会会用,执行:

1
pkg install vim tsu busybox mount-utils -y

如果你等会要安装桌面环境,还需要安装以下软件包。执行:

1
2
pkg install x11-repo -y
pkg install termux-x11-nightly pulseaudio -y

在安装x11-repo时有可能报错403 Forbidden,不用管

赋予Termux文件读写权限

1
termux-setup-storage

接着会弹出系统的权限授予弹窗,允许即可

开启Termux的唤醒锁

此操作可以防止系统限制后台

打开系统通知栏,找到Termux的通知(MIUI系统要长按一下Termux通知)

image

点击Acquire wakelock,会弹出系统的电源设置,以MIUI为例改成无限制即可

至此Termux配置完毕。

安装并配置Termux-x11

如果你不想安装桌面环境可以跳过这步

Termux-x11是一个跑在手机上的x11服务器,比起XSDL XServer它有一个优势就是支持virgl硬件加速

下载安装Termux-x11

登录你的GitHub账号,点击这里进入Termux-x11的开源项目,然后找到并点击上方的Actions

点击最新的一次构建并进入

Artifacts中下载Termux-x11apk包,也是根据你的手机架构选择,如果不清楚就下载带有universal的全架构apk包(如果没有Artifacts就点击上一次构建,直到进入了有Artifacts的构建为止)

安装后授予弹出的全部权限,就可以看到这个界面:

image

配置Termux-x11

点击PREFERENCES进入设置页面

怎么设置没有特定要求,这里可以参考我的:

(如果你想要原生触控就将Touchscreen input mode改为Direct touch