使用VSCode在本地电脑上对树莓派远程开发
目的及原理
有时身边没有额外的显示器和键盘,或者有时树莓派在另一个屋子连接着路由器,那么当我们想在树莓派上做开发时就可以使用VS Code的远程开发能力。下面一张图显而易见地说明了远程开发的工作原理(来自Klaas (khz)):

该功能允许我们在本地系统(Windows、Mac或者Linux)上使用VS Code远程开发树莓派上的程序。完成该功能我们仅需要在树莓派上安装VS Code Server,剩余其他工作都是在本地系统完成的。
前期准备
这里的一步工作如果你都已经准备好了,则可以直接跳过该小节。
一块具有SSH主机端的树莓派
树莓派发展至今已经有很多型号了,我手头的版本还是很老的Raspberry Pi 2B版本。如果你的版本更高级则更应该没有问题了。
关于树莓派系统镜像的安装,我使用的是官方的Raspberry Pi Imager来写入的。由于我们最终是在本地桌面系统给开发,因此无需安装带有桌面的OS。这里我安装的是Ubuntu Server 21.10(RPI 2/3/4/400),如图:

确定自己的树莓派是否具有SSH host,如果你像我一样安装的是Ubuntu Server镜像,那么该系统是自带并开启了ssh host的。如果你不确定,可以在树莓派上ssh到本地试试:
$ ssh ubuntu@localhost
如果提示输入密码则系统已经具有ssh host功能,否则需要安装openssh-server
在树莓派端新建一个开发用户
此步非必须,但为了安全起见,我推荐在Raspberry Pi上单独建一个用户作为VS Code的远程开发账户。
在树莓派端使用以下命令添加一个新用户,并将该用户添加到sudo权限组。这里我新建的用户名是pi_dev,你可以任意编写一个名字。
$ sudo useradd -m pi_dev
$ sudo usermod -aG sudo pi_dev
为用户指定命令解释程序(通常为/bin/bash):
sudo usermod -s /bin/bash pi_dev
并创建密码:
$ sudo passwd pi_dev
切换到新建的pi_dev用户,并在/home/pi_dev目录下创建.ssh目录
$ su pi_dev
$ mkdir ~/.ssh
使用ssh key登陆到树莓派
非必须,同样为了安全起见(也避免每次连接树莓派输入密码),我推荐按将本地系统的SSH公钥配置到树莓派。
若你的本地系统没有创建过SSH公钥,可按以下步骤设置:
$ ssh-keygen -t rsa -b 4096
如果你的本地系统是macOS或者Linux,生成的公钥文件位于 ~/.ssh/id_rsa.pub,如果是Win系统则位于:C:\Users\你的用户名\.ssh\id_rsa.pub
将该.pub文件的全部内容复制到树莓派的authorized_keys文件内,该文件位于/home/pi_dev/.ssh/authorized_keys,如果没有则新建一个。
至此,便可以在本地系统的终端直接ssh到树莓派了。
安装远程扩展包(Remote Development extension pack)
本步在本地桌面系统进行,即你实际用来运行VSCode界面开发的系统。
假设你在本地系统已经安装了Visual Studio Code,接下来只需要打开VSCode并在Extensions中搜索安装Remote Development即可。

用VSCode远程连接到树莓派
确保之前已经测试过你的本地系统可以成功ssh到树莓派。
安装完扩展后,按F1键或者Ctrl+Shift+P组合键调出命令面板,然后选择 Remote-SSH: Connect to Host... 命令。
这里输入树莓派的登陆用户名和主机IP,即准备工作中新建的pi_dev用户,务必替换你的实际IP地址。

连接到远程主机时,首先会要求我们选择系统类型(Windows/Linux/macOS),根据实际情况选择即可。稍等片刻,等本地系统远程配置好VS Code Server后便完成连接了。

在等待远程连接的过程中,可以点击details来查看日志输出,以便查看安装进程。有时候进程不会顺利,我们就需要在这里具体分析出错原因了(见下文)。

连接成功后,会在VS Code界面的左下角显示当前远程开发的主机地址:

连接成功之后
打开树莓派上的工程目录
成功连接到目标树莓派后,可以像在本地开发一样打开远程服务器的任何文件夹。可以直接Get Started页面选择新建文件、打开文件、打开文件夹或者克隆一个Git仓库;如果没有打开Start页面,也可以直接在边栏的Explore功能中进行上述操作。

Terminal
远程连接状态下的所有操作都相当于在树莓派上,比如打开一个终端Terminal。相当于直接在树莓派的系统上使用bash。
管理扩展Extensions
正如在本地安装扩展一样,在远程状态下的Extensions界面中,你可以直接将扩展安装到远程主机(树莓派端)。例如,在LOCAL - INSTALLED组别下,这里显示了我已经在本地安装Extension Pack for Java这个扩展,也可以马上安装到远程主机上。

在SSH: x.x.x.x INSTALLED组别下显示的是已经在远程主机上安装的扩展,也可以点击旁边的Install Local Extensions in 'Remote'按钮直接将所有本地扩展远程安装的树莓派端。

遇到的问题
提示启动VS Code Server失败
该问题是在首次连接树莓派并自动安装Server时出现的。提示以下错误:
error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory

解决方案是尝试在树莓派系统上安装libatomic1,重新在VS Code连接到远程主机即可。
$ sudo apt-get install libatomic1
本文参考
使用VSCode在本地电脑上对树莓派远程开发的更多相关文章
- unset是不能清除保存在本地电脑上的cookie的,用于session就可以(弄了半天原来是这样)
unset($_COOKIE["historyWord[$wordId]"]); 这样是不行的,unset只是将变量在脚本运行时注销,但是cookie是写在客户端的,下一次还是可以 ...
- 使用git工具将本地电脑上的代码上传至GitHub
本文教你如果使用git工具将本地电脑上的代码上传至GitHub 1.安装git工具 安装git链接 2.使用git工具上传自己的代码到GitHub中 安装完git工具之后,我们会得到两个命令行工具,一 ...
- 使用 vscode将本地项目上传到github以及删除github上的某个文件夹
安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI是可视化图形界面 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能 ...
- 使用 vscode将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI是可视化图形界面 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能 ...
- vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
一.将本地项目上传到github 1.创建本地仓库(文件夹) mkdir study//创建文件夹studycd study //进入study文件夹 2.通过命令git init把这个文件夹变成Gi ...
- git将本地仓库上传到远程仓库
在已有的Git库中搭建新库,并且将本地的git仓库,上传到远程服务器的git库中,从而开始一个新的项目 首先,在本地新建文件夹abc,进入到abc里面,然后git init.这样就在本地初始化了一个g ...
- 怎么将本地文件上传到远程git仓库
1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“ ...
- 使用git将本地仓库上传到远程仓库(转)
第一步:创建一个工程目录 执行: git init 第二步:把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点".",意为添加文件夹下的所有 ...
- 在自己电脑上查看git远程分支列表比实际云端的远程分支要多一些
问题 最近打开一个很久没有打开过的项目,使用git branch -a查看了一下所以分支,其中有些远程分支没有什么用了 于是准备去gitlab上删除它,结果到gitlab上发现没有这些分支,猜测是自己 ...
随机推荐
- python学习第四天:python基础(字符编码和乱码到底咋回事儿)
字符编码 这得从字符编码开始说起: 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题.因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理. 最早的计算机在设计时采 ...
- isEmpty 和 isBlank 的区别
一般使用Apache commons-lang3 工具包: commons-lang3 是专业的工具包,功能非常齐全.强大. 1.isEmpty 判断字符串是否为空字符串,只要有一个任意字符(包括空白 ...
- Proximal Algorithms 3 Interpretation
目录 Moreau-Yosida regularization 与次梯度的联系 改进的梯度路径 信赖域问题 Proximal Algorithms 这一节,作者总结了一些关于proximal的一些直观 ...
- vue安装使用v-chart时报错解决方案
npm i v-charts echarts -S 1.在main.js中使用报以下错 liquidFill echarts/lib/visual/dataColor 找不到 出现此原因是因为版本问题 ...
- <数据结构>拓扑排序
有向无环图 有向无环图(Directed Acycilc Graph, DAG):从任意顶点出发都无法回到自身的有向图. 拓扑排序 定义 任一两个顶点u,v间,如果存在边u->v,则排序后u一定 ...
- linux(CentOS7) 之 克隆虚拟机并配置网络(固定ip)
克隆机器 原机关机状态下,克隆. 下一步 选择当前状态,下一步 选择创建完整克隆,下一步 设置虚拟机名称(完成后可以修改).克隆机安装位置,下一步 等待克隆完成 克隆完成 配置网络 添加网卡(因为物理 ...
- scp 文件传输
1.推送 scp -r imageAPP/ root@ip:/data/soft/ 本地当前文件下的 imageAPP文件 推送到ip服务器 /data/soft/ 目录下 2.拉取 scp -r r ...
- 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践
前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...
- 查看磁盘I/O命令iostat详解
iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.iostat也有一个弱 ...
- js知识框架图