目的及原理

有时身边没有额外的显示器和键盘,或者有时树莓派在另一个屋子连接着路由器,那么当我们想在树莓派上做开发时就可以使用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】581. Shortest Unsorted Continuous Subarray 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:排序比较 日期 题目地址:https://leetco ...

  2. Codeforces A. Orchestra

    A. Orchestra time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. [Guide]Google Python Style Guide

    扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...

  4. 使用所学Spring知识,实现简易的图书查询系统功能。实现查询全部图书。 根据书籍编号查询信息。 根据书名查询书籍信息。 根据状态查询书籍信息。

    相关 知识 >>> 相关 练习 >>> 实现要求: 使用所学Spring知识,实现简易的图书查询系统功能. 要求如下: 查询全部图书. 根据书籍编号查询信息. 根据 ...

  5. 物联网大赛 - Android学习笔记(二)Andriod 应用界面编程

    学习目标: Android的程序界面和View组件 View组件和ViewGroup组件 常见的布局管理器 文本框组件TextView和EditView 按钮组件Button 和ImageButton ...

  6. Centos8 设置中文

    1.一般情况 1.1 进入设置选择 Region&Language 1.2 点击 加号 1.3 点击 汉语(中国) 1.4 选择 汉语(智能拼音) 2.特殊情况 有些虚拟机可能没有 汉语(智能 ...

  7. Spring第一个程序

    目录 1.利用Maven导入jar包 2.编写一个实体类 3.编写Spring文件 4.测试 1.利用Maven导入jar包 <dependency> <groupId>org ...

  8. Log4j2进阶使用(Pattern Layout详细设置)

    1.进阶说明 通过配置Layout打印格式化的日志, Log4j2支持很多的Layouts: CSV GELF HTML JSON Pattern Serialized Syslog XML YAML ...

  9. 带你认识FusionInsight Flink:既能批处理,又能流处理

    摘要:本文主要介绍了FusionInsight Flink组件的基本原理.Flink任务提交的常见问题.以及最佳实践FAQ. 本文分享自华为云社区<FusionInsight HD Flink组 ...

  10. web.xml文件配置模板

    直接贴完整代码,当然,spring的核心控制器依赖包需要通过mean提前配置 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.// ...