Termux—安卓上的 Linux 环境

2020-04-12

Termux 是一个安卓上的终端模拟器,可以很方便地在手机上模拟 Linux 环境并实现绝大部分操作。

开始

由于 Google Play 上的 Termux 应用已经很久没有更新了,所以更推荐去 F-droid 下载。

Termux 第一次启动需要一定时间加载,特别是较早期的版本,启动后的样子是这样的:

为了更方便在国内使用,首先要为 Termux 更换国内的镜像源,比如清华源,如果你的 Termux 版本高于 v0.118,可以执行 termux-change-repo 或者手动更换:

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

接着可以先安装一些必要的软件:

pkg update
pkg install vim curl wget git -y

可以为 Termux 创建常用文件软连接:

# ln -s [Source path] [Your path]
ln -s target/path my/path

可以通过 termux-setup-storage 赋予 Termux 存储权限

终端设置

Termux 的初始面板不太好看,我们可以用 zsh 代替原本的 shell,毕竟颜值是第一生产力。

Tmoe 集成了一个 zsh 脚本,能很方便地安装 zsh 并设置默认 shell:

curl -LO --compressed https://raw.githubusercontent.com/2moe/tmoe/2/2.awk
awk -f 2.awk

或者从 gitee 访问:

curl -LO https://gitee.com/mo2/linux/raw/2/2.awk
awk -f 2.awk

按照提示可以选择字体、配色和主题。

  • 终端字体使用自带各种图标的 NerdFont ,推荐使用 Fire Code 因为它带有许多针对编程的连字效果。

  • 可以逐一尝试终端的配色方案,选择一款符合自己审美的配色方案,我个人比较喜欢的配色方案是 tango 和 google dark。

  • 至于主题,我之前一直用的是 ys,直到尝试了 p10k,这个主题的自定义程度很高,很值得一试。

如果在手机上操作 Termux,自带的键盘输入一些特殊字符会比较困难,不过 Termux 的软键盘可以自定义,可以通过编辑 ~/.termux/termux.properties 文件自定义,如下是我的软键盘配置:

# key 后面的是单击键,popup 是向上滑动的键
extra-keys = [[ \
  {key: ESC, popup: "`"}, \
  {key: TAB, popup: "!"}, \
  {key: "~", popup: "|"}, \
  {key: UP, popup: "^"}, \
  {key: "/", popup: BACKSLASH}, \
  {key: "+", popup: "{}"}, \
  {key: DEL, popup: BKSP} \
  ], [ \
  {key: CTRL, popup: ALT}, \
  {key: ":", popup: ";"}, \
  {key: LEFT, popup: "<"}, \
  {key: DOWN, popup: "[]"}, \
  {key: RIGHT, popup: ">"}, \
  {key: "-", popup: "="}, \
  {key: KEYBOARD, popup: {macro: "CTRL d", display: exit}} \
]]

termux.properties 内还有大量自定义设置,例如 use-black-ui = true 设置夜间模式等,具体可以查看官方 wiki。 修改配置文件后别忘了执行 termux-reload-settings 使配置生效。

每次启动 Termux,都会在顶端显示一段新手友好的提示,你也可以通过新建 ~/.termux/motd.sh 文件可以输出为你指定的内容:

vim ~/.termux/motd.sh

完成上述操作之后的终端将会变成这样:

“似乎还不错”

备份与恢复

当你的环境配置准备好了,请记得及时备份:

cd /data/data/com.termux/files
tar -zcf /sdcard/termux-backup.tar.gz home usr

备份完成后你可以在手机的根目录下找到这个备份压缩包,通过下面的命令你可以恢复备份:

cd /data/data/com.termux/files
tar -zxf /sdcard/termux-backup.tar.gz --recursive-unlink --preserve-permissions

SSH Remote

Termux 作为移动端应用的一大优势就是可以随时使用 ssh 协议远程控制其他设备。

SSH 连接的方式分密码连接和公钥连接,密码连接方式不在此赘述,公钥连接需如下几步:

  1. pkg in OpenSSH 安装 OpenSSH;

  2. 使用 ssh-keygen~/.ssh 目录下生成对应私钥文件 id_rsa 和公钥文件 id_rsa.pub

  3. 将公钥粘贴到目标电脑的信任列表 authorized_keys 中。

这样你就能通过公钥连接对方电脑了,连接形式如 ssh ip@name -p port。 上面的连接命令还能进一步简化,在 ~/.ssh 目录中新建 config 文件,并写入:

# 统一设置
Host *
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# 具体设置
Host PC
    HostName 192.168.1.1
    Port 8022
    User root

这样就能将命令简化为 ssh PC 了.

导入私钥后可以将 $PREFIX/etc/ssh/sshd_config 中的 PasswordAuthentication 项改为 no 关闭密码验证,只允许获得许可的设备连接。

配置好了 SSH 后,就能用 SFTP 协议的 getput 命令在不同终端间方便地传输文件了。

Linux 容器

由于安卓沙盒的限制,Termux 只是模拟出了 Linux 的目录结构,并不能在没有 root 权限的条件下访问根路径, 如果我们打印 $HOME 就会发现路径其实是 /data/data/com.termux/files/home 而非我们所熟悉的 Home 路径,那是因为 Termux 用一个前缀值 $PREFIX 也就是 /data/data/com.termux/files/, 替代了根路径, 这样一般脚本里的 shenbang 也就无法被正常识别了, Termux 提供了一个内置命令 termux-fix-shebang 用于快速修正 shenbang.

修正前:
#!/usr/bin/env bash
修正后:
#/data/data/com.termux/files/usr/bin/env bash

尽管可以通过 termux-chrootproot 等进一步模拟 root 环境,但一些需要 root 权限的应用如 docker 仍无法在 Termux 上运行,解决办法之一就是在 Termux 内部再套娃一个 Linux 容器。

官方的 Termux 文档给出的 Linux 容器部署方案是使用 proot-distro 库,但这对网络条件要求较高。另一个更为简单的方案是使用上面提到的 Tmoe 脚本。

Tmoe 提供两种部署方案,第一种 proot 方式适合没有 root 的设备,第二种 chroot 模式需要宿主的 root。

Tmoe 的操作对小白极其友好,还针对国内网络给出了 DNS 选择

![](images/dns.png “选择 DNS”)

接下来需要挂载目录,选择一个合适的位置用做容器访问外部资源的目录

挂载完目录后,选择一个你喜欢的 arm 64 架构发行版,之后只需要按照提示完成操作就能完成容器的安装。

proot 容器安装完成后,在宿主终端输入 debian 就能进入对应的 Linux 容器。

实际上 Tmoe 还提供了一些常用软件如 code-server 的安装。选择脚本的 Tool 类别

如有必要你也可以在里面安装图形化界面的支持,然后用在软件外使用 VNC 连接 Termux 来显示图形界面。

[ Software ]