使用VSCode在本地電腦上對樹莓派遠程開發
- 2022 年 1 月 28 日
- 筆記
- raspberry pi, VS Code, 樹莓派
目的及原理
有時身邊沒有額外的顯示器和鍵盤,或者有時樹莓派在另一個屋子連接著路由器,那麼當我們想在樹莓派上做開發時就可以使用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