2016年4月13日 星期三

樹莓派的 "無頭存取" (headless access)

所謂 "無頭存取 (headless access)" 是指透過網路 (乙太網或 wifi) 存取樹莓派, 板子不需要接螢幕, 鍵盤, 以及滑鼠, 只需要一條網路線或 wifi 網卡, 利用筆電或桌電的鍵盤滑鼠與顯示器來操作樹莓派. 這對 Raspberry Pi A/A+ 以及 Zero 特別有用, 因為這三款板子都只有一個 USB 埠, 接了鍵盤就沒辦法接滑鼠或 wifi, 甚至於 B 雖然有兩個 USB 埠, 都必須使用無線鍵盤滑鼠組 (只須一個鍵鼠 dongle), 才能同時使用 wifi 上網.

如果將樹莓派 SD 卡的 wifi 連線, SSH, 以及 VNC 事先設定好, 就可以讓樹莓派在開機後立即連上網路, 這樣就可以用其他電腦透過網路遠端存取樹莓派, 文字模式可以使用 putty 以 SSH 連線樹莓派; 桌面模式則可以使用 VNC, 如此則樹莓派就不需要外接 HDMI 顯示器, 不需要鍵盤滑鼠, 也不需要乙太網路線, 樹莓派只要一顆 wifi 網卡, 這就是所謂 "無頭存取".

我先將樹莓派 B+ 以網路線連接寬頻分享器, 以 HDMI 連接顯示器或液晶電視, 然後插上滑鼠與鍵盤以及 wifi 網卡, 因為 B+ 有四個 USB 埠, 因此要插這三個 USB 周邊是綽綽有餘. 將作業系統 Raspbian 安裝好後便設定區域, 鍵盤與語系, 以及打開 SSH, 然後安裝 VNC Server, 並設定好 wifi 連線, 最後備份系統映像檔, 這樣就大功告成了, 可以將網路線與鍵盤滑鼠拔掉, 只剩下 wifi 網卡, 關機後就可以將樹莓派放在家中任何位置, 重開機就會透過 wifi 連上網路, 然後打開筆電便可以用 SSH 或 VNC 遠端操控樹莓派了.

但問題是, 我的 wifi 設定是透過路由器的 DHCP 自動分派 IP, 每次樹莓派重開機後就可能被指派不同的 IP, 如此一來要用 SSH/VNC 遠端存取樹莓派就必須知道現在的 IP 是多少, 這該怎麼做呢? 當然也可以在之前設定 wifi 時不要使用 DHCP, 改為指定一個特定 IP (例如區網 IP 最後面的位址), 但我想讓 wifi 設定單純些, 就只是 ssid 與密碼即可, 反正板子運轉後就不關機, IP 也不會改變 (除非遇到停電). 那該怎麼做才能遠端 (區網內) 查詢樹莓派的 IP 呢? 其實只要在設定 wifi 網卡時用 ifconfig 指令記下網卡的 MAC 位址, 連線到寬頻分享器管理網頁查詢即可.

登入寬頻分享器的管理網頁後, 切到無線網路頁籤, 按 "無線客戶端設備" 後面那個 "顯示列表" 按鈕 :


這時會顯示目前已經連線到這無線寬頻分享器的所有設備, 下圖是樹莓派尚未開機前查詢結果, 並沒有我插在樹莓派的 wifi 網卡 MAC 位址 :


樹莓派開機連上無線網路後, 再查詢一次, 就可看到網卡的 MAC 已在列表中了 :


這時切換到 "區域網路" 頁籤, 勾選底下的 "開啟已配置的 IP 使用列表", 找尋網卡 MAC 就可以知道目前的 IP 了 :


知道 IP 後就可以從筆電用 Putty 以 SSH 連線樹莓派了 :


開啟連線時會出現警告視窗, 按 "是" 即可 :



總之, A+ 或 Zero 的無頭存取最重的是在使用 B/B+ 設定 A+/Zero 要用的 SD 卡 wifi 時, 要用 ifconfig 記下其 wifi 網卡的 MAC 位址, 這樣把 SD 卡與 wifi 網卡移到 A+/Zero 時才能透過路由器管理頁面查詢到 DHCP 所分派的 IP.

參考 :

# Headless setup: no keyboard, display or frustration
# 雄 : Raspberry PI : wireless network 無線網路
Raspberry Pi:查詢IP位址
# PI 指令(筆記)

2 則留言 :

Unknown 提到...

您好,請問欲從電腦使用VNC viewer去進行遠端操控我Raspberry Pi3的情況下,
若是電腦用乙太網路,Raspberry Pi3由手機分享Wifi連結,
在這種情況下(即是以不同網域情況)有辦法進行遠端操控嗎?
嘗試了很久最後都顯示
"Timed out waiting for a response from the host computer"這項結果,
不知道能不能請教是出現甚麼情況,或是有甚麼解決方法呢,
萬分感謝!

小狐狸事務所 提到...

您好, PC 與 RPI 在不同網域, 必須知道 RPI 透過手機上網的外部 IP, 且須設定 PORT FORWARDING, 但手機無法做此設定. 我是將 RPI 透過 ADLS 無線路由器上網, 在路由器上設定 PORT FORWARDING 至 RPI, 且用程式定期偵測外部 IP 以 EMAIL 通知, 即可從遠端連線此外部 IP. 參考 :
http://yhhuang1966.blogspot.com/2017/12/vnc.html