Termux 试玩

2022/7/24 linux

今天看到一个介绍在旧安卓手机上搭建 Web 服务器的文章,其中提到的 Termux 感觉挺有意思的,去尝试一把感觉还可以的。

Termux (opens new window) 是一款 Android 终端模拟器和 Linux 环境运用程序,无需 root,安装后无需额外设置即可直接运行。自动安装最小的基本系统,使用 APT 包管理工具。

# 安装

如果是可以访问应用商店的手机可以直接从应用商店下载安装。如果不能访问也可以从 官网 (opens new window) 提供的地址下载下载安装,直接访问 Github (opens new window)F-Droid (opens new window) 进行下载。

下载 APK

上图为在 F-Droid 下载的界面,注意不要下错了,具体下载的地方还会有版本、安卓版本以及权限的描述。下载完成后直接安装就行,默认情况下软件基本上不需要什么权限。

# 使用

打开 Termux 以后,就是一个全屏的命令行界面,底部键盘有些常用的快捷键。试着输入了几个命令发现基本上都是可以的,手机也支持一些会话管理或者快捷操作,不过在手机上操作不太方便就没有过多使用。后面的都是配置 ssh 服务器后远程访问使用的。

安装后打开

# 更换国内源

使用默认源的有些情况下网络状况会不太好,建议换成国内的镜像在更新和安装软件的时候更方便。

在较新版的 Termux 中,官方提供了图形界面(TUI)来半自动替换镜像,推荐使用该种方式以规避其他风险。 在 Termux 中执行命令 termux-change-repo 会出现一个图形界面。

更换国内源

在出现的界面上进行操作,第一步使用空格选择需要更换的仓库,之后在第二步选择 TUNA/BFSU 镜像源。确认无误后回车,镜像源会自动选择最优的线路完成更换。

如果不方便或者不支持使用图形界面,也可以使用命令行或者编辑 source 文件进行替换,需要注意的是请使用内置或安装在 Termux 里的文本编辑器,例如 vi / vim / nano 等,不要使用 RE 管理器等其他具有 ROOT 权限的外部 APP 来修改 Termux 的文件。

# 命令行替换
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable main@' $PREFIX/etc/apt/sources.list
apt update && apt upgrade

# 编辑 $PREFIX/etc/apt/sources.list 修改为如下内容
# The termux repository mirror from TUNA:
deb https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable main
1
2
3
4
5
6
7

上述操作的镜像仅适用于 Android 7.0 (API 24) 及以上版本,旧版本系统使用本镜像可能导致程序错误。

# 安装 ssh

和在普通 Linux 服务器上操作类似也是安装 openssh 配置后访问,需要注意的是,默认情况下端口是 8022 而不是 22。

# 安装OpenSSH
$ pkg install openssh

# 运行SSH Server,默认端口8022
$ sshd

# 查看当前用户
$ whoami

# 设置密码
$ passwd

# 获得 IP
$ ifconfig

# 客户端连接ssh服务器
$ ssh user@xxx.xxx.xxx.xxx -p 8022
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 安装软件

部分工具可以看需求进行安装

# 更新
$ pkg update

# 安装
$ pkg install vim curl wget git nodejs-lts
1
2
3
4
5

# 管理员

# 虚拟管理员 (未 root)

使用 PRoot (opens new window) 可以为手机没有 root 的用户来模拟一个 root 的环境,主要是对 Linux 文件系统进行的一个模拟,比如开启前文件路径是 /data/data/com.termux/file/home,开启后对应的文件路径为 /home

$ pkg install proot

 # 启动命令,进入proot环境
$ termux-chroot

# 推出proot环境
$ exit
1
2
3
4
5
6
7

需要注意的是这个并不是真正的 root,所以如果需要真正 root 权限的操作还是无法执行的。

# 真实管理员 (已 root)(没有实际使用)

tsu (opens new window) 是 su 的 Termux 版本,是一个真正的 root 权限,用来在 Termux 上替代 su 的工具。由于具有 root 权限,使用的时候需要注意,而且还可以进入手机的任意一个目录进行操作。类似的还有 Chroot (opens new window)

$ pkg install tsu

# 进入root环境
$ tsu
1
2
3
4

本文没有对这种场景进行实际使用,建议各位也慎重考虑是否需要使用。一般的操作无需 root 权限都可以完成,除非知道自己要 root 做什么,否则 不建议使用 root

# 安装 Linux 发行版

Termux 提供了一个叫 proot-distro (opens new window) 的包,负责管理 Termux 中的 Linux 发行版。

PRoot Distro 不是虚拟机,也不是传统的 chroot。它与您的 Android 系统共享相同的内核,因此甚至不要尝试通过包管理器对其进行更新 - 这将不起作用。

# 安装proot-distro
$ pkg install proot-distro

# 查看支持的发行版
$ proot-distro list

# 安装某个发行版
$ proot-distro install <alias>

# 连接连接到发行版
$ proot-distro login <alias>

# 卸载
$ proot-distro remove <alias>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

安装 Ubuntu 的过程

进入Linux发行版之后就是一个近乎全功能的系统了,具体部分限制可以参考 proot-distro (opens new window) 的描述。

除了使用官方提供的 proot-distro 进行安装外,也可以使用社区的第三方脚本 (opens new window) 进行安装,需要自行鉴别其中的利弊。

# Termux:API

Termux:API 提供一些 API 让 Termux 可以调用手机原生的一些功能的插件,支持比如查看电池状态、打电话等功能。 需要先从 F-Droid (opens new window) 或应用商店下载 Termux: API 用来运行提供的 API,安装完成之后不会显示在手机桌面上,需要在 App 列表里面找到。注意:Termux 和其插件要么都从 F-Droid 下载,要么都从应用商店下载,不能混用。 然后在 Termux 中安装 pkg install termux-api,安装完成后就可以使用,完整支持的 API 可以参考 文档 (opens new window)

$ termux-battery-status # 获取电池信息
$ termux-camera-info # 获取相机信息
$ termux-clipboard-get # 获取剪切板数据
$ termux-clipboard-set Hello # 设置新的剪切板数据
$ termux-contact-list # 获取通讯录列表
$ termux-sms-inbox # 获取短信内容列表
$ termux-sms-send # 发送短信
# 多号码群发
$ termux-sms-send -n number(s) recipient number(s) - separate multiple numbers by commas 
# 举例
$ termux-sms-send -n 10086 ceshi
$ termux-telephony-call # 拨打电话
# 举例
$ termux-telephony-call 10086
$ termux-wifi-connectioninfo # 获取当前wifi链接信息
$ termux-wifi-scaninfo # 获取最近一次wifi扫描信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

API 执行结果

试了几个 api,发现效果都很不错,如果是没有给权限的会提示权限问题,手机上会弹出需要权限的提示。

# 备份

一般情况下搞这个是为了折腾一番,那很可能就在过程中直接搞崩了,所以我们在使用虚拟机的时候经常会用快照或者备份一份来防止无法还原的问题,Termux 官方也提供了 备份的方法 (opens new window),执行后续操作之前 要了解每步的作用,如果误操作可能会造成 数据的丢失。具体可以参考官方的 Backing up Termux (opens new window),下面简单描述一下大致过程。

# 手动备份恢复

# 确保授予了存储权限
$ termux-setup-storage

# 备份文件
$ tar -zcf /sdcard/termux-backup.tar.gz -C /data/data/com.termux/files ./home ./usr
1
2
3
4
5

在没有滥用 root 的情况下,不会出现权限相关问题,备份会很快就完成(实测需要的时间还是挺长的,可能是手机比较渣渣)。 警告: 不要将备份存储在 Termux 私有目录中。

# 确保授予了存储权限
$ termux-setup-storage

# 使用备份文件覆盖所有内容
$ tar -zxf /sdcard/termux-backup.tar.gz -C /data/data/com.termux/files --recursive-unlink --preserve-permissions
# 重启Termux即可生效
1
2
3
4
5
6

# 使用提供的脚本

最新版本的 termux-tools 提供了用于备份和恢复的脚本,详细信息参考 Using supplied scripts (opens new window)

# 备份
$ termux-backup /sdcard/backup.tar.xz
# 恢复
$ termux-restore /sdcard/backup.tar.xz
1
2
3
4

执行备份前也需要确保有存储权限。

整个过程玩下来感觉还是挺有意思的,在这个智能手机更新换代很快的时候,很多人手上都会有淘换下来的旧手机在边上吃灰,实际上很多手机的配置都挺不错的,虽然在架构上面对 PC 有天生的劣势,但是顶不住配置比便宜的云服务器要高不少,所以折腾一下还是挺不错的。