使用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上发现没有这些分支,猜测是自己 ...
随机推荐
- 【LeetCode】581. Shortest Unsorted Continuous Subarray 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:排序比较 日期 题目地址:https://leetco ...
- Codeforces A. Orchestra
A. Orchestra time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- [Guide]Google Python Style Guide
扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...
- 使用所学Spring知识,实现简易的图书查询系统功能。实现查询全部图书。 根据书籍编号查询信息。 根据书名查询书籍信息。 根据状态查询书籍信息。
相关 知识 >>> 相关 练习 >>> 实现要求: 使用所学Spring知识,实现简易的图书查询系统功能. 要求如下: 查询全部图书. 根据书籍编号查询信息. 根据 ...
- 物联网大赛 - Android学习笔记(二)Andriod 应用界面编程
学习目标: Android的程序界面和View组件 View组件和ViewGroup组件 常见的布局管理器 文本框组件TextView和EditView 按钮组件Button 和ImageButton ...
- Centos8 设置中文
1.一般情况 1.1 进入设置选择 Region&Language 1.2 点击 加号 1.3 点击 汉语(中国) 1.4 选择 汉语(智能拼音) 2.特殊情况 有些虚拟机可能没有 汉语(智能 ...
- Spring第一个程序
目录 1.利用Maven导入jar包 2.编写一个实体类 3.编写Spring文件 4.测试 1.利用Maven导入jar包 <dependency> <groupId>org ...
- Log4j2进阶使用(Pattern Layout详细设置)
1.进阶说明 通过配置Layout打印格式化的日志, Log4j2支持很多的Layouts: CSV GELF HTML JSON Pattern Serialized Syslog XML YAML ...
- 带你认识FusionInsight Flink:既能批处理,又能流处理
摘要:本文主要介绍了FusionInsight Flink组件的基本原理.Flink任务提交的常见问题.以及最佳实践FAQ. 本文分享自华为云社区<FusionInsight HD Flink组 ...
- web.xml文件配置模板
直接贴完整代码,当然,spring的核心控制器依赖包需要通过mean提前配置 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.// ...