之前玩樹莓派4B都是藉助於顯示屏利用圖形介面來控制,但是因爲暑假在家只有一臺顯示器,平時連線着筆記型電腦,每次想要偵錯都需要拔插HDMI線,很不方便;平時用SSH存取樹莓派都是藉助於putty,但是那個介面實在是太醜陋了,最近正巧又發現了Windows Terminal這個軟體屬實不錯,可以整合各種終端,介面現代化,可定製程度高,於是想到能不能藉助於SSH存取樹莓派呢?
putty可以用SSH存取樹莓派,Windows Terminal可以用SSH存取其他Linux系統,理論上應該是可以的。下午藉助於Google,加上自己的不斷偵錯,終於成功的用Windows Terminal 存取樹莓派,寫下這一篇部落格來記錄自己在這一過程中學到的新知識,以及出現的問題和問題的解決方案,供自己以後查閱以及網際網路上的廣大朋友們參考。
主要包括兩部分的學習SSH設定以及JSON的基本語法規則整理。
爲了方便記錄,本文中操控樹莓派使用的Terminal全部使用Windows Terminal完成,如圖是連線成功後的介面。
樹莓派開啓ssh的方法有很多,在無桌面系統和有桌面系統的情況下都可以開啓:
將TF卡取下,在boot目錄下建立文字文件,命名爲ssh,去掉txt檔案後綴,儲存成純檔案格式。
樹莓派通電開機之後,會自動開啓ssh。這個ssh檔案是臨時檔案,再次取下TF卡開啓boot目錄的話,檔案會自動刪除。
左面上左上角點選樹莓派LOGO>偏好設定(Preferences)>Raspberry Pi Configuration>Interfaces>SSH 服務 點選Enable。ssh服務就已經開啓。
命令列輸入
Pi@raspberry:~$ sudo rasp-config
在「5 interfacing Options」選項中將「P2 SSH」enabled,Finish之後重新啓動。這種方法也可以開啓ssh服務。
用SSH登錄樹莓派有一個問題,因爲我的樹莓派是用Wlan直接連線上網的,所以每一次關機開機之後都有可能會改變IP地址,這樣呼叫起來要每一次都開啓Windows Terminal的設定檔案修改,比較麻煩,所以這裏我修改系統檔案使樹莓派用固定IP上網。
輸入"ifconfig"可以檢視樹莓派的IP資訊。
輸入sudo nano /etc/dhcpcd.conf,用vim編輯檔案,拖到檔案最下方之後在如圖所示的地方,將#號去掉,並修改。
interface wlan0
static ip_address=192.168.1.107/24
static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.1.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
wlan0代表無線上網,ip_adress對應的是ip地址,routers代表閘道器地址。將ip地址和閘道器地址修改好,儲存之後重新啓動,ip地址就不再改變。
最近發現Windows Terminal這個軟體,可以定製外觀,整合了多個終端,確實是很不錯。設定部分沒有圖形介面,需要靠修改JSON檔案來完成。詳細調理的設定規則可以參考官方的文件,已經寫的很明白了,這裏我只寫我用到的部分。
官方GitHub連線
JSON是JavaScript物件表示法(JavaScript Object Notation)
最近除去玩樹莓派,還試着將Arduino的程式設計搬到了VScode上,於是就需要學習閱讀JSON檔案,恰巧Windows Terminal的設定是依靠JSON完成的,所以學習JSON可以同時服務於兩個地方。這裏我們只需呀用到簡單的JSON規則即可。
{
"profiles":
{
"defaults":
{
},
"list":
[
]
},
"schemes": [
],
"keybindings":
[
]
}
可以看到,整個文件是一個物件,包含三個陣列,profiles,schemes和keybindings
其中profiles是環境的設定,這裏預設已經載入了Powershell、cmd和Azure Cloudshell。如果你的系統中裝有WSL,他也會自動檢測到並且新增。除此之外,你還可以自定義終端,比如Git bash和我們今天用到的SSH遠端伺服器。
schemes可以設定配色方案,供以環境設定過程中呼叫。
keybindings則可以設定系結快捷鍵。
除此之外,在第一層大括號裏面可以新增全域性屬性。
具體的詳細說明可以參考官方的:Windows Terminal setting 修改官方說明-Github
{
"guid": "{99BA5433-DF5F-A898-C8E0-78B8BA55F251}",
"hidden": false,
"name": "RaspberryPi",
"icon" : "F:\\WindowsTerminal\\Raspi-PGB001.webp",
"commandline":"ssh [email protected] -p 22",
}
以我的設定爲例:
將這一部分新增上之後Ctrl+S,再開啓下拉式選單就能夠看到RaspberryPi環境已經被我們新增。
如果之前的設定全部都正確,沒有填錯或者漏掉什麼步驟,那麼開啓環境之後稍等片刻,可以看到terminal跳數如下字樣:
Could not create directory ‘C:\Users\\345\274\240\345\255\220\350\275\251/.ssh’.
The authenticity of host ‘192.168.1.107 (192.168.1.107)’ can’t be established.
ECDSA key fingerprint is SHA256:dSwGRWn8+5lTdmUcXLvrSbFxukMGX4hHP/r7clz3+64.
Are you sure you want to continue connecting (yes/no)?
這裏輸入「yes」之後回車,會讓你輸入密碼,輸入樹莓派的密碼,預設的是raspberry,之後就出現Linux熟悉的命令列了。
在樹莓派設定SSH的過程中可能會出現各種各樣的問題,比如連線超時Connection Timeout和拒絕存取Connection refused。
出現這個問題可能是在設定的過程中輸錯了什麼地方或者是ssh設定沒有開啓等等,可以先用cmd檔案ping一下對應的ip地址然後看一下能否正常連線,如果能夠正常連線,那就是在Windows terminal的設定過程中出錯,如果無響應,可能是ip地址已經更換或者是ssh沒能成功開啓。
出現這個問題可能是三種情況:
出現上述三種情況在網上有很多的解決的文章可以查閱,直接搜尋之後按照對應的措施去修改基本上都能夠成功解決。
完成設定之後可以根據個人喜好對Windows Terminal進行美化,同樣是在JSON檔案下進行修改,我是參考少數派的文章進行修改的,對於不同的環境,設定了不同的背景,來區分各個環境,搞完之後看起來還是蠻漂亮的,這樣偵錯起來心情也好。
最終成功的在Windows Terminal上面執行了RaspberryPi,這個過程中瞭解了SSH協定,學習了一些JSON簡單的語法,花費了一個下午,感覺收穫還是蠻大的。下午一直都ping不到我的ip,找了各種辦法無果快要放棄的時候發現原來只是自己的ip一直都打錯了,真的是太迷糊了,前幾天偵錯Arduino總是把正負極接反,最近可能是熬夜太多了哈哈哈。