目的及原理

有时身边没有额外的显示器和键盘,或者有时树莓派在另一个屋子连接着路由器,那么当我们想在树莓派上做开发时就可以使用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在本地电脑上对树莓派远程开发的更多相关文章

  1. unset是不能清除保存在本地电脑上的cookie的,用于session就可以(弄了半天原来是这样)

    unset($_COOKIE["historyWord[$wordId]"]); 这样是不行的,unset只是将变量在脚本运行时注销,但是cookie是写在客户端的,下一次还是可以 ...

  2. 使用git工具将本地电脑上的代码上传至GitHub

    本文教你如果使用git工具将本地电脑上的代码上传至GitHub 1.安装git工具 安装git链接 2.使用git工具上传自己的代码到GitHub中 安装完git工具之后,我们会得到两个命令行工具,一 ...

  3. 使用 vscode将本地项目上传到github以及删除github上的某个文件夹

    安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI是可视化图形界面 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能 ...

  4. 使用 vscode将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹

    安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI是可视化图形界面 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能 ...

  5. vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹

    一.将本地项目上传到github 1.创建本地仓库(文件夹) mkdir study//创建文件夹studycd study //进入study文件夹 2.通过命令git init把这个文件夹变成Gi ...

  6. git将本地仓库上传到远程仓库

    在已有的Git库中搭建新库,并且将本地的git仓库,上传到远程服务器的git库中,从而开始一个新的项目 首先,在本地新建文件夹abc,进入到abc里面,然后git init.这样就在本地初始化了一个g ...

  7. 怎么将本地文件上传到远程git仓库

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“ ...

  8. 使用git将本地仓库上传到远程仓库(转)

    第一步:创建一个工程目录 执行: git init 第二步:把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点".",意为添加文件夹下的所有 ...

  9. 在自己电脑上查看git远程分支列表比实际云端的远程分支要多一些

    问题 最近打开一个很久没有打开过的项目,使用git branch -a查看了一下所以分支,其中有些远程分支没有什么用了 于是准备去gitlab上删除它,结果到gitlab上发现没有这些分支,猜测是自己 ...

随机推荐

  1. 【LeetCode】326. Power of Three 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 循环 递归 取对数 判断是不是最大3的倍数的因子 日 ...

  2. 【九度OJ】题目1026:又一版 A+B 解题报告

    [九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...

  3. 【LeetCode】385. Mini Parser 解题报告(Python)

    [LeetCode]385. Mini Parser 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/mini-parser/ ...

  4. 1065 - Number Sequence &&1070 - Algebraic Problem

    1065 - Number Sequence   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...

  5. 1087 - Diablo

      1087 - Diablo    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 MB All of ...

  6. 人脸识别中的重要环节-对齐之3D变换-Java版(文末附开源地址)

    一.人脸对齐基本概念 人脸对齐通过人脸关键点检测得到人脸的关键点坐标,然后根据人脸的关键点坐标调整人脸的角度,使人脸对齐,由于输入图像的尺寸是大小不一的,人脸区域大小也不相同,角度不一样,所以要通过坐 ...

  7. 编写Java程序,创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck)。

    返回本章节 返回作业目录 需求说明: 创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck). 父类有属性品牌(brand)和颜色(color). 在父 ...

  8. 编写Java程序,使用面向接口编程模拟不同动物的吼叫声

    返回本章节 返回作业目录 需求说明: 使用面向接口编程模拟不同动物的吼叫声 实现思路: 使用面向接口编程模拟不同动物吼叫声的实现思路: 定义发声接口Voice,在其中定义抽象吼叫方法sing(). 分 ...

  9. APICloud超实用经验分享——平台功能

    从2016年开始使用APICloud进行app项目开发,到现在也有五六年了.在此过程中伴随着APICloud一起成长,踩过一些坑,自己的技术也提升不少.在APICloud 推出avm框架一年之后,ID ...

  10. pytest 一个测试类怎样使用多种fixture前置方法

    fixture()方法写在哪里? @pytest.fixture(scope="范围")写在conftest文件中,如下图 怎么使用fixture()呢?分为一个类中使用一个前置或 ...