alwaystest / Blog

24 stars 2 forks source link

adb shell 下使用 termux #68

Open alwaystest opened 7 years ago

alwaystest commented 7 years ago

adb shell termux htop

标签(空格分隔): shell android


玩了一下termux这个软件,记录一下经验。

首先,要在adb shell中调用termux,需要按照https://github.com/termux/termux-app/issues/77 给出的方案。

adb shell连接成功之后,我们希望在环境变量包含的PATH中直接就有一个脚本可以帮我们打开termux的bash。

所以用到mount -o rw,remount /system 重新挂载 system 为可写,然后在 xbin 文件夹下面写一个 shell脚本,一样是从Github上找到的(我的Linux基础还是比较差啊,鸟哥的书大略过了一遍还是不够的):

 #!/system/bin/sh
su $(stat -c %u /data/data/com.termux) /data/data/com.termux/files/home/bin/termux-shell.sh

最后别忘了把system重新挂载为只读 mount -o ro,remount /system

这样就可以方便的在连接上adb shell之后快速调起termux的bash,然后为所欲为了。

需要记录的一点是我在安装了htop之后发现bash里面调起的界面并没有全屏。

然后继续查,偶然在安装了fish之后,启动fish,警告提示默认的terminal的size是没有的。

顺藤摸瓜发现 stty size这个命令可以查看当前terminal中设置的行数和列数。

发现果然adb shell之后是没有配置size这个信息的。

解决方案是在 termux-shell.sh 中加入一条命令 resize,重设terminal的宽高信息。

所以最后的termux-shell.sh 的内容是这样的。

#!/system/bin/sh
resize > /dev/null
export PREFIX='/data/data/com.termux/files/usr'
export HOME='/data/data/com.termux/files/home'
export LD_LIBRARY_PATH='/data/data/com.termux/files/usr/lib'
export PATH="/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets:$PATH"
export LANG='en_US.UTF-8'
export SHELL='/data/data/com.termux/files/usr/bin/bash'
cd "$HOME"
exec "$SHELL" -l
alwaystest commented 6 years ago

标注一下,本文环境 Nexus6P Android 6.0.1 使用卡刷SuperSu 方式Root 升级到Android 7.1.2 的时候我换成了Magisk 替换Boot.img 的方式Root,发现上面的脚本不好用了。 现在临时解决方案是把 termux-shell.sh 的内容更换为:

 #!/system/bin/sh
/data/data/com.termux/files/home/bin/termux-shell.sh

使用方式:

  1. adb shell
  2. su
  3. /system/xbin/your_shell_name

对了,resize如果不是系统自带的命令的话,需要先安装BusyBox

alwaystest commented 6 years ago

Update 上次刷机升级到Android 7.1.2后进入到zsh莫名其妙backspace键不好用了,虽然有删除的效果,但是Terminal界面上光标是一直往后移动的。在.zshrc里面添加了export TERM=xterm-256color解决了这个问题。

QGB commented 5 years ago

@alwaystest 在windows下用哪个终端 adb shell 可以有较好体验

alwaystest commented 5 years ago

@QGB 最近一直用OSX,WIndows下你要不试试WSL?这个我也没试过,不过Terminal的效果上应该WSL会最接近Linux Terminal的体验吧

7heaven commented 3 years ago

其实直接termux自身启动一个sshd,然后adb port forwarding就行

QGB commented 3 years ago

@7heaven termux 跑 https://github.com/tsl0922/ttyd . 直接浏览器打开

lozn00 commented 1 year ago

这个环境没有网络咋办?? ping不痛呢.

lozn00 commented 1 year ago

adb 里面识别不到pkg,但是 app里面就可以.无语

chise0713 commented 1 year ago

标注一下,本文环境 Nexus6P Android 6.0.1 使用卡刷SuperSu 方式Root 升级到Android 7.1.2 的时候我换成了Magisk 替换Boot.img 的方式Root,发现上面的脚本不好用了。 现在临时解决方案是把 termux-shell.sh 的内容更换为:

 #!/system/bin/sh
/data/data/com.termux/files/home/bin/termux-shell.sh

使用方式:

  1. adb shell
  2. su
  3. /system/xbin/your_shell_name

对了,resize如果不是系统自带的命令的话,需要先安装BusyBox

其实可以吧丢进xbin的文件分成两个 一个termux:

  #!/system/bin/sh
su $(stat -c %u /data/data/com.termux)

一个shell:

  #!/system/bin/sh
/data/data/com.termux/files/home/bin/termux-shell.sh

termux-shell.sh脚本中不带resize指令也可以正常使用

#!/system/bin/sh
export PREFIX='/data/data/com.termux/files/usr'
export HOME='/data/data/com.termux/files/home'
export LD_LIBRARY_PATH='/data/data/com.termux/files/usr/lib'
export PATH="/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets:$PATH"
export LANG='en_US.UTF-8'
export SHELL='/data/data/com.termux/files/usr/bin/bash'
cd "$HOME"
exec "$SHELL" -l

这样脚本就可以正常运行了 使用的termux版本是0.118.0 终端是windows的uwp应用终端 一切都正常运行(除了网络,似乎是载入环境变量那里出问题了?)

qqm4son commented 1 year ago

Error: Cannot run 'pkg' command as root 不能运行pkg 这个怎么解决呢~

qqm4son commented 1 year ago

/system/xbin/termux[9]: cd: /data/data/com.termux/files/home: Permission denied /system/xbin/termux[10]: /data/data/com.termux/files/usr/bin/bash: inaccessible or not found 127|hltechn:/ $ whoami shell hltechn:/ $ pkg up /system/bin/sh: pkg: inaccessible or not found 127|hltechn:/ $

adb shell 权限下 行不通

chise0713 commented 1 year ago

/system/xbin/termux[9]: cd: /data/data/com.termux/files/home: Permission denied /system/xbin/termux[10]: /data/data/com.termux/files/usr/bin/bash: inaccessible or not found 127|hltechn:/ $ whoami shell hltechn:/ $ pkg up /system/bin/sh: pkg: inaccessible or not found 127|hltechn:/ $

adb shell 权限下 行不通

看看你楼上我发的,是可以的。但是最好还是在手机上装openssh。adb shell没办法访问网络