termux试用

Posted by wyj on November 3, 2019

在成功运行了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也很正常,至少达到了我手机编程的梦想。 1 2 3

自动化

前面的操作流程太过繁复,我很不满意。于是我一开始写了个tsu.sh,然后想起来sh不能setuid。问题不大,我之前写过一个sudo,于是我只要/sudo /su即可。(问候nosuid全家)

感悟

  • vim是最好的编辑器,没有vim的话手机上压根就没有办法正常文本编辑(有谁能忍受按音量上键+WASD?)
  • ESC键这个设计真的人性化,与vim完美配合
  • clang是最好的编译器,据说Google的整个Linux内核都是clang编译的
  • 有了root权限走遍天下,没有root权限寸步难行(shell用户没有权限开启termux!)