起因
几个月前学了python,写了几个练手的爬虫,要运行很久才能下载到足够的数据,挂机一夜似乎有点费电,我还心疼我的电脑呢。就一直想拿一个安卓手机来跑,当时只当个想法,并没有动手实施。结果最近恰逢老爸换手机,于是旧手机,一个红米note2被我拿来了,于是开始了我的折腾之旅。我从未接触过linux,但幸好这方面的教程已经很多,通过大量搜索和实践,走了很多弯路,总算能完成预期目标了。
开始前
最好把手机root,虽然Termux不需要root权限也可以运行,但root后可以用管理员权限,cd
进入手机存储目录,后面可以干的事更多。
我把手机刷了miui7的开发版,反正也不会拿来用,随便刷。
root后,推荐装一个re explorer,用来和电脑传文件。因为电脑没法直接访问手机内置空间。
为什么是Termux
Termux是我们的主角,相当于安卓上的linux虚拟机(这样说肯定不对,但权且这么理解吧),下载地址Google Play-Termux。
一开始我听说GNU Root Debian功能更加强大,尝试安装这个花了很长时间。在google play上下载apk安装后,每次打开都闪退,底下提醒GNU Root not yet installed...我按照提示,以为还要安装GNU Root,正好google play上也有一个这名字的app,但安装上后仍无法运行。后来搜索发现,有人称此app无法在联发科CPU的手机上运行(贴吧-实战红米手机安装Debian系统),不巧红米note2就是联发科的,倒霉...
所以我就选择了Termux,可以说是因为没办法,但事实证明,Termux很强大,绝对够用。
Termux的安装
我是按照知乎-如何让自己在电脑上写的python脚本在手机或安卓系统上运行呢?上的回答来安装并配置Termux和python环境的。基本就是:
1. 更新包
apt update
apt upgrade
2. 修改源
export EDITOR=vi
apt edit-sources
在vi编辑器里把第二行替换成以下内容(清华镜像源)
deb [arch=all,arm] http://mirrors.tuna.tsinghua.edu.cn/termux stable main
在vi编辑器里,输入第一个i
进入编辑模式(插入),下面会给出提示“INSERT”,此时再打字就是在光标左边插入字符。等修改完毕后,按住音量上,同时输入e
,即可退出编辑模式。再输入:wq
保存并退出vi。
3. 安装python3与相关模块
# 安装python3.6
apt install python python-dev
我目前仅会爬虫,因此暂时只安装了几个用得到的模块。
# 安装爬虫相关模块
# beautifulsoup, requests
pip install BeautifulSoup4 requests
# lxml
apt-get install clang
apt-get install libxml2 libxml2-dev libxslt libxslt-dev
pip install lxml
使用Termux
安装成功后就可以正常使用python了,有几点技巧记下来。
1. 管理员身份
默认是没有管理员权限的,在执行一些敏感操作时会提示Permission denied,或者在cd到一些目录时会提示无此文件夹。
输入su
进入管理员身份,第一次进入时仍会提示Permission denied,但此时Termux已经申请了获取手机的root权限,进入安全中心的root权限管理,给Termux通过即可。此时再次su
就可以成功了。
在管理员身份下,输入
exit
可回到普通用户身份。
但Termux环境的根目录是/data/data/com.termux/files,而在
su
后的PATH环境变量是/sbin/su:/system/bin,很多命令就用不了( 贴吧-Termux下root权限问题的解决办法),比如此时就无法进入python。
但按照上个网页的说法,
tsu
命令修复了PATH变量,但需要先安装。
# 安装tsu
pkg install tsu
但我尝试了一下,tsu
后执行python
仍提示未安装,我没有继续往下试,也许能行?
2. 终止程序运行
我们都知道用Ctrl+C终止程序,在Termux中,需要使用音量下+c
。
3. 输入法
我用的谷歌输入法,一些常用的特殊符号可以在qwerty键盘上长按得到,比较方便。也有人推荐黑客键盘,试了下,不能输入中文,在别的地方还得切换,麻烦。
但不管用什么输入法,手机上敲代码都太反人类了,下面介绍一下通过笔记本键盘连接Termux的方法。
远程键盘
我个人试验成功了两种方法,都无需在电脑上安装软件,可以在命令行中运行。但为了简便起见,推荐安装XShell5。
1. Remote Keyboard
通过Telnet方式与电脑通讯,下载地址Google Play-Remote Keyboard,几乎无需配置,极为简便。
软件安装后打开,即显示以下界面
此时点击上方Select Keyboard,将默认输入法选为Remote Keyboard。
然后在电脑上进入命令行,输入telnet [host] [port]。比如按照上图,在命令行输入:
telnet 192.168.1.103 2323
即可进入telnet界面,此时在该窗口按下的任何字符都可以在手机的输入界面上显示。
如果上句报错telnet不是有效命令,按照百度经验-Win7如何开启Telnet服务所说开启服务。
但此方法有几个严重缺点:
- 最重要的,会掉线,而且有时掉线后无论如何都无法重新连接上。
- 有延迟,偶尔掉包。
- 不支持组合键。
2. SSH
这个方法比较高级,但配置很麻烦,我弄了一天。当然有linux基础的人能很快上手,不懂的按照我的步骤,也能很快配置完成。
手机上操作:
# 安装openssh
apt install openssh
安装完成后会在手机的data\data\com.termux\files\home下创建.ssh文件夹,里面有文件authorized_keys,用于储存可以通过验证的机器公钥。
电脑上操作:
在电脑命令行输入ssh,看是否报错。如果报错,下载并安装OpenSSH,配置环境变量。确保命令行输入ssh后正常运行。
命令行输入
ssh-keygen -t rsa
执行完成后,会在C:\Users\username\.ssh文件夹下创建三个文件id_rsa, id_rsa.pub, known_hosts。分别是私钥、公钥和连接记录,第一个文件不要泄露。
然后通过各种方式将id_rsa.pub文件复制到手机的data\data\com.termux\files\home\.ssh文件夹内。有人用adb push,我不会,用的复制粘贴大法...复制到电脑能访问到的sd卡中,再在手机上用re explorer移动到目标文件夹(手机必须root才可以做到)。
手机上操作:
首先cd
到.ssh文件夹,然后将公钥内容复制到验证文件中
# 复制公钥内容到验证文件
cat ./id_rsa.pub >> authorized_keys
再获取用户名,比如说u0_a118
whoami
还需要保证.ssh文件夹的权限为700(即rwx------),而且用户为u0_a118。
通过执行ll -a
命令可以查看当前路径下的所有文件和文件夹权限,但不能在普通用户权限下执行该命令。
# 获取管理员权限
su
# 进入home目录
cd data\data\com.termux\files\home
# 查看当前路径文件和文件夹权限
ll -a
若结果不对,则需要修改
# 修改权限
chmod 700 .ssh
# 修改用户和组
chown u0_a118:u0_a118 .ssh
同样查看authorized_keys文件权限是否是600(rw-------),用户是否正确。不是的话按上述方法修改。
此时已经设置完成,通过sshd
命令即可开启ssh服务器。
# 指定端口9000
sshd -p 9000
电脑上操作:
命令行输入ssh [username]@[host] -p [port]
即可连接,比如
ssh [email protected] -p 9000
此后,在电脑命令行输入指令,手机即可执行(但无任何显示),甚至手机可以熄屏。完美!
最后,以成功运行以前写的爬虫程序图结尾。