2020-11-05 更新

vscode很早之前就支持aarch64, 不需要再下载VSCode Insiders.

初衷

自从VSCode增加了remote功能后, 可以把界面和后端分离, 而且只需要通过ssh协议连接, 最近突发奇想, 能不能在Android手机上建立一个ssh端口, 然后使用VSCode在手机上跑一个server, 出门的时候可以通过连接Android来编写和阅读代码, 毕竟手机性能也不差.

我的手机是OnePlus7 Pro 官方系统, 没有root.

Android sshd准备 - Termux

Termux我已经在DevOps的苦楚与Termux的使用这篇博客中介绍过了, 在了解过termux 的功能后, 我了解到了可以使用termux开启一个ssh服务器, 具体的方法就就是:

1
2
$ pkg install openssh-server
$ sshd

你可以使用telnet来检查ssh服务的开启情况.

而后, 我们需要创建一个ssh密钥对, 或是使用原有的ssh密钥, 将公钥拷贝到手机上, 可以通过adb push将密钥传递至手机, 以下命令第一次运行需要手打, 注意不要写错.

1
2
3
4
5
6
$ termux-setup-storage
$ mkdir -pv ~/.ssh
$ cat /sdcard/id_rsa_raspberry.pub >> .ssh/authorized_keys
$
$ whoami # 看看whoami, 获取当前的用户
u0_a177

然后, 你就可以在自己的机器中连接了:

1
2
3
4
5
~ ❤  ssh u0_a177@10.249.131.26 -p 8022 -i ~/.ssh/id_rsa_raspberry

Welcome to Termux!

...

我也保存了一份ssh的配置文件, 大致如下

1
2
3
4
5
Host oneplus
User u0_a177
HostName 10.249.131.26
Port 8022
IdentityFile ~/.ssh/id_rsa_raspberry

VSCode第一次试连接

注意看下面的错误, aarch64仅在 VS Code Insiders 中支持,

大家可以在这里下载https://code.visualstudio.com/insiders/.

VSCode Insiders第一次试连接

这次的错误是node没有办法跑起来:

我直接跑node程序, 发现也无法运行.

这次猜想应该是Android运行时库缺少了某些文件, 我没有死心, 转而想要寻找Android上的容器.

Android容器使用

我找到一个可以跑的Android容器https://github.com/nmilosev/anyfed 原理的话, 是利用proot, 用户空间的chroot, 没有root权限也可以.

可以看到它下载了一个Fedora镜像.

  1. 设置cpu

  1. 下载完成

  1. 配置sudo与proot

直接启动会有报错,

需要:

1
2
$ unset LD_PRELOAD 
$ /data/data/com.termux/files/home/.anyfed/anyfed

在anyfed中直接启动sshd会提示没有这条命令, 因此需要安装openssh-server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@anyfed home]$ sshd
bash: sshd: command not found
[root@anyfed home]$ yum install openssh-server

# 记得要修改sshd_config, 22端口肯定是不能用的, 我为了与termux统一, 改用8122端口
[root@anyfed home]$ vi /etc/ssh/sshd_config

# 需要使用绝对路径启动, 缺少密钥的话, 用下面的命令生成
[root@anyfed home]$ /usr/sbin/sshd
[root@anyfed home]$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@anyfed home]$ ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
[root@anyfed home]$ ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

# 把公钥拷贝过去
[root@anyfed home]$ mkdir ~/.ssh
[root@anyfed home]$ cp /data/data/com.termux/files/home/.ssh/authorized_keys ~/.ssh/

创建好相应的ssh config文件就可以登录了, 注意, 这里是root用户:

1
2
3
4
5
Host oneplus2
User root
HostName 10.249.131.26
Port 8122
IdentityFile ~/.ssh/id_rsa_raspberry
1
~ ❤  ssh oneplus2

VSCode Insiders第二次试连接

这次再运行就成功了

我直接clone一份代码, 用VSCode打开

会提示我们安装Python插件

我觉得编码体验还是可以的, 相比于我的8G x1c, 手机的硬件配置可以说相当不错了.

总结

这篇文章其实就是探索了一下VSCode Remote在手机上运行的情况, 虽然不能直接运行, 但是我们可以在手机上起一个容器, 通过容器中的Linux运行node, 目前来看, 运行VSCode Remote的后端 是完全没有问题的.