让你的手机变身 Linux — Termux 设置

Termux 是一款在 Android 上运行的终端模拟器,其中内含了一个非常轻量的 Linux 环境,并且使用 apt 做包管理器。最新的 Termux 已经不在 Play Store 上更新了,安装需要去 Github 或者官网。旧版本的 Termux 在使用 apt 的时候可能会碰到问题。

近来因为买了 Surface Duo,在手机上稍微折腾了一下 Termux,尝试是否能把手机变成 Linux 级别的生产力工具。结论当然是不可以,一方面性能不够,另一方面 Termux 上的包还是太少了,不过还是记录一下一些环境设置方法,供之后查阅。

另外,Termux 支持通过 proot 包来安装完整的 Linux 系统,最有名的是 TermuxArch。在安装完完整系统之后,理论上你的手机就已经变成完整的 Linux 电脑了!不过由于我并不需要那么多功能,我没有走这一条路线。

ssh 客户端

在手机上使用 ssh 客户端还是非常实用的,这样可以随时随地监控各个电脑的情况,并且不怎么耗流量。在 Termux 里面安装 ssh 非常简单,直接

1
pkg install openssh # or apt install openssh, pkg=apt in Termux

如果你像我一样主要通过 SSH Key 连接各主机,那么你可能需要安装 Termux:API 以便于从手机中拷入密钥到 Termux 中,还需要手动开一下 ssh-agent 服务。建议直接在.bashrc(可能需要新建)中加入以下内容

1
2
eval "$(ssh-agent -s)"
# ssh-add your_key

然后如果你在服务器上有像我一样配置 Powerline 的话(可参考 Post not found: BeatifyTerminal 我之前的美化 terminal 的博客),你可以安装 Termux:Styling 这个 app,然后在 Termux 中就可以选择 Nerd Font 了,非常不错!

Rust 环境配置

Termux 的仓库中直接有提供 rust,因此可以直接

1
pkg install rustc-dev

这个命令会顺带装上 Clang 编译器。

Python 环境配置

我尝试的另一大内容就是在 Termux 里面搭建基本的 Python 环境。Termux 只提供了 Python 的包,几乎没有提供其他任何包,因此需要手动安装。你可以直接选择安装 Anaconda,但是目前由于兼容性的问题,Termux 中无法运行很多给 aarch64 架构编译的文件,这个问题在之后也许会被 Termux 解决。

首先是安装 python,直接 pkg install python 即可。在我这次安装的时候,Python 已经直接是 3.10 的版本了,很不错。然后用 get-pip.py 脚本可以安装上 pip:

1
2
3
pkg install wget
wget bootstrap.pypa.io/get-pip.py
python get-pip.py

有了 pip 之后纯 Python 的包就可以直接装了,而用到 Python 扩展的包(如 numpy)则需要编译器和对应的依赖项。编译器我在之前装 Rust 的时候顺便装上了,也可以直接通过 pkg 安装 Clang(Termux 仓库里只有 Clang 没有 GCC)。

安装 Numpy 时如果系统里没有 BLAS 包,安装可以成功完成,但是会有警告,并且性能欠佳。这次我尝试给安装了一下 OpenBLAS,过程还挺顺利的,命令如下

1
2
3
4
5
6
7
wget https://github.com/xianyi/OpenBLAS/releases/download/v0.3.18/OpenBLAS-0.3.18.tar.gz # choose your version
tar -xzf OpenBLAS-0.3.18.tar.gz
cd OpenBLAS-0.3.18

pkg install perl binutils # install dependencies
make -j4
make PREFIX=/data/data/com.termux/files/usr install

安装好 OpenBLAS 之后再 pip install numpy,这时 Numpy 会自动找到 OpenBLAS。在有了 Numpy 之后,许多依赖于 Numpy 的包也很容易能装上了(如 Cython、Pandas,但是 Scipy 装不了,因为 Scipy 需要 Lapack 和 gfortran,这意味着需要把 GCC 的工具链导进来,这里我就懒得弄了。如果有需要的话一位 Github 老哥自己搭建了一个 apt 仓库,可以从那里安装)

之后我还尝试了安装 Jupyter Notebook 和 matploblib /plotly

1
2
3
4
5
6
7
8
# install jupyter notebook
pkg install libzmq # dependency for jupyter notebook kernel
pip install notebook

# install pillow, and then matploblib / plotly
pkg install libjpeg-turbo libtiff freetype libwebp tcl tk libraqm littlecms zstd
LDFLAGS=-L/system/lib64 pip install pillow
pip install matplotlib plotly

值得一提的是就如前文所说,Termux 好像无法正常运行通常给 aarch64 编译的包,有可能是因为没有 glibc,或者其他依赖项。因此在 Termux 中尽量使用官方仓库提供的包,保证没有问题,如果要用其他未提供的包则很有可能需要重新用 Clang 编译。这也是我尝试安装 Anaconda 和.Net Core 但是都失败了的原因。

Termux 好像还支持 X11,因此你可以在手机上运行 GUI 程序!简直牛逼!不过我也没有需求,所以没有试。要实现这个功能需要安装 X11 服务器,可选的有 XServer XSDL 和 Termux 团队正在开发的 Termux:X11。用 XServer XSDL 运行 TermuxArch 可以参考这个教程

最后虽然我把需要环境弄得差不多了,甚至成功在手机上运行了 Jupyter Notebook 并且试着画了几张图,但是最后我其实还是发现,Termux 最好的归宿还是 SSH 客户端,毕竟手机的性能限制摆在那里。不过这些工具(尤其是 Python)在有时候想随手做点或者算点什么东西的时候还是非常有用的。仅供参考~