在成功运行了Binding of Isaac: Afterbirth+之后,我心情极度舒爽,于是开始了另一项渴望已久的实验:安装termux。
下载termux
这个从f-droid.org上下载一个即可。不开SSR的话相当慢。然后使用adb install
装到手机上。
初级配置
首先adb push
了我的.bashrc
和.inputrc
。作为一个功能完整的bash(而不是busybox bash),termux完整的支持了我ubuntu的配置文件。于是就拥有了一个相当易于使用的shell,比之前用的c4droid的Terminal Emulator好太多了。
软件安装
termux使用熟悉得不能再熟悉的apt作为软件包管理器。于是先二话不说装个vim。然后再用vim换源。注意此处snz母校的源会404,我最后试出来是这样(这里是adb su
的shell)。
M6Note:/data/data/com.termux/files # cat usr/etc/apt/sources.list
# The main termux repository:
deb https://mirrors.ustc.edu.cn/termux stable main
下面是一个运行截图。
然后反手一个apt update && apt upgrade -y
。
这个vim的功能貌似还算完整,我push过去的/etc/vim/vimrc
没有引发一堆错误。
然而貌似没有gcc和g++,不是很满意。
root权限
作为一个开放root权限的手机,当然是要root的。我利用qemu里面跑的树莓派的g++编译,使用静态链接,就可以让一个我自己写的程序在手机里跑起来。比如说我之前写了一个sudo
,省却了su
每次都要手工授权的苦恼。
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
char cmd[1010];
int main(int argc,char **argv){
setuid(0);
for(int i=1;i<argc;i++)strcat(cmd,argv[i]),strcat(cmd," ");
system(cmd);
return 0;
}
(我多么希望世界上所有的sudo程序都长这样啊\(\ldots\))
然而c4droid还是得装的,不然每做一个小小尝试都要如此折腾也太烦了。
此时我回过头来,发现好像不太对劲:我试过gcc和g++,为什么不试试clang呢?一试就成功了。看来clang果然比gcc优越多了。
ssh
adb shell
只能访问普通的shell。为了访问美观而强大的termux bash,需要apt install openssh
。
这一和前一步的clang
运行出现了同样的问题:找不到某个.so,然而它的确在$PREFIX/usr/lib
里。然后重启termux,整个termux都无法运行了。。。
应该是没有export LD_LIBRARY_PATH=$PREFIX/usr/lib
的锅。因为我加上这一行之后所有的东西都正常了(除了clang无法-lm之外)。所以卸载重来。
2nd Installation
转了一圈才发现,gnome-terminal
永远是最好用的终端,待在里面比在手机上打字舒适太多了。
所以我放弃了termux,虽然他正常了,转而用
adb shell
su
export LD_LIBRARY_PATH=xxx/usr/lib
xxx/usr/bin/bash --login
export PATH=xxx/usr/bin:$PATH
来代替。(因为我手机上的su是个残废,不能用termux的tsu)还是root用户怎么看怎么爽。然而普通用户可就吃苦了,连跑个clang的权限都没有。于是我一个chmod -R a+rx
。
然而就算我chmod 777了,可怜的普通用户还是找不到.so文件。我放弃了。
然后发现这个vim虽然健全,clang++是个残废,没有各种GNU的拓展,比如说bits/stdc++.h
。然而编译还是很成功,lm也很正常,至少达到了我手机编程的梦想。
自动化
前面的操作流程太过繁复,我很不满意。于是我一开始写了个tsu.sh,然后想起来sh不能setuid。问题不大,我之前写过一个sudo,于是我只要/sudo /su
即可。(问候nosuid全家)
感悟
- vim是最好的编辑器,没有vim的话手机上压根就没有办法正常文本编辑(有谁能忍受按音量上键+WASD?)
- ESC键这个设计真的人性化,与vim完美配合
- clang是最好的编译器,据说Google的整个Linux内核都是clang编译的
- 有了root权限走遍天下,没有root权限寸步难行(shell用户没有权限开启termux!)