利用termux实现免root的code-server

很多小伙伴由于各种原因无法在自己的安卓设备上获取root权限,从而无法配置chroot容器,不过,虽然没有chroot环境,但我们仍然可以配置一个code-server,以下是配置过程。

测试机: 华为matepad 11.5s灵动版, Android 12

Code-server

code-server运行截图

1. 硬件要求

一台Android 10及以上系统的手机。

2. 系统要求

已安装 Termux

3. Termux换源

图形界面(TUI)替换

在较新版的 Termux 中,官方提供了图形界面(TUI)来半自动替换镜像,推荐使用该种方式以规避其他风险。
在 Termux 中执行如下命令

1
2
termux-change-repo
apt update&&apt upgrade

在图形界面引导下,使用自带方向键可上下移动。
第一步使用空格选择需要更换的仓库,之后在第二步选择国内镜像源,如清华大学开源镜像站。确认无误后回车,镜像源会自动完成更换。

4. 安装Node.js

1
2
3
4
5
6
apt install -y \
build-essential \
binutils \
pkg-config \
python3 \
nodejs-lts

5. 安装code-server

配置android_ndk_path

1
vim ~/../usr/etc/bash.bashrc

加入一行如下内容并保存

1
2
3
4
5
6
export GYP_DEFINES="android_ndk_path=''"

export NODE_OPTIONS="--require /data/data/com.termux/files/home/android-as-linux.js"

export EXTENSIONS_GALLERY='{"serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery","itemUrl": "https://marketplace.visualstudio.com/items"}'

第一个环境变量是为了顺利通过code-server的编译

第二个则是将termux伪装成Linux

第三个是替换code-server的marketplace为微软官方marketplace

创建android-as-linux.js

1
2
touch ~/android-as-linux.js
vim ~/android-as-linux.js

输入如下内容并保存

1
2
3
4
5
6
// android-as-linux.js
Object.defineProperty(process, "platform", {
get() {
return "linux"
},
})

应用环境变量

1
source ~/../usr/etc/bash.bashrc

安装code-server

注意⚠️:此操作可能需要梯子🪜,请自备

1
npm install --global code-server

6.配置code-server

  1. 先启动code-server以自动创建配置文件

    1
    code-server
  2. 修改code-server监听地址和密码

    1
    vim ~/.config/code-server/config.yaml

    改为如下内容

    1
    2
    3
    bind-addr: 0.0.0.0:8080 //0.0.0.0是允许局域网设备访问的ip地址
    auth: none //无密码,不建议为它设置密码,由于使用环境较为安全,密码没有什么意义
    cert: false //无加密,局域网SSL证书过于麻烦
  3. 启动code-server并用浏览器访问

    1
    code-server

    此时可以在本机浏览器测试,输入localhost:8080即可

    其他局域网设备则输入ip:8080

  4. (可选)配置Chrome/Edge浏览器以完全启用网页端code-server功能
    访问Chrome://flags或Edge://flags,并搜索Insecure origins treated as secure,在下面输入http://ip:8080,此后再访问就不会提示不安全和部分js脚本无法正常执行

  5. 具体vscode的配置过程这里暂时不介绍了

7.设置一键启动脚本

Termux有一个好用的插件,叫作 Termux:Widget,这个插件可以在桌面创建启动脚本的快捷方式,按如下步骤操作

  1. 先安装Termux:Widget

  2. 为Termux授权 [显示在其他应用上方] 权限

  3. 编辑启动脚本

    1
    sudo vim /data/local/tmp/Code-Server
  4. 将 busybox chroot $UBUNTUPATH /bin/su - root 中的root改成你的用户名。

  5. 新建快捷方式脚本

    1
    2
    3
    touch ~/.shortcuts/Code-Server
    chmod +x ~/.shortcuts/Code-Server
    vim ~/.shortcuts/Code-Server

    填入如下内容

    1
    code-server
  6. 修复shebang以便termux:widget能够识别

    1
    termux-fix-shebang ~/bin/code-server
  7. 回到手机桌面,拖动Termux:Widget小部件到桌面

8. 参考资料

code-server

termux 使用 npm 拉取出现 gyp: Undefined variable android_ndk_path in binding.gyp while trying to load binding.gyp