樹莓派因其體積小易攜帶的特性,很適合帶出門搭配iPad使用,當作隨身小電腦,作為一種sidecar。雖然它的處理器性能比iPad弱,但是能做的比iPad多,比如跑許多Linux的軟體,像 架設AltStore伺服器,用於給iPad側載的第三方APP重簽;或者跑 libimobiledevice指令備份iPad檔案;以及用 UxPlay接受來自AirPlay的投放。
我們就來討論用iPad螢幕存取樹莓派桌面的方案。
1. 方案探討#
需不需要給樹莓派額外準備電源線呢?其實iPad就可以給樹莓派供電了。iPad的USB-C電流輸出足夠給樹莓派開機的,畢竟它都能給手機充電了。
要讓iPad當樹莓派螢幕,最簡單的方式是買個USB擷取卡, 將樹莓派HDMI畫面輸出到iPad的擷取卡APP,然後用藍芽滑鼠控制樹莓派的桌面。
但是,我想要從iPad直接SSH到樹莓派,並且用VNC客戶端遠端控制樹莓派的桌面,所以讓樹莓派與iPad有線連接。
要如何連線到樹莓派,有兩種方式。
一是Wifi連線,也就是樹莓派連著iPad的USB-C開機,樹莓派自己連線到Wifi或者Wifi熱點,iPad再透過區域網路的IP登入樹莓派。
二是透過乙太網路,把樹莓派變成乙太網路卡,參考我之前寫過的 透過USB傳輸線,從Linux電腦登入樹莓派系統。在樹莓派連著iPad的USB-C開機之後,iPad會把它當成乙太網路連線,我們就可以透過RNDIS乙太網路IP登入樹莓派。由於是有線連接,VNC遠端桌面延遲非常低,也方便我們把iPad檔案傳到樹莓派。
iPad是允許同時使用Wifi與以太網路連線的。但是,把樹莓派變成乙太網路卡會導致其無法上網,變成只有iPad跟樹莓派之間能夠連線,樹莓派還是得另外連Wifi才能上網。
最終,我的解決方案就是:讓樹莓派連著iPad開機,並透過以太網路IP登入樹莓派以取得最低延遲,並讓樹莓派連線到Wifi。
如果出門在外,提供Wifi熱點的裝置為何?我的iPad沒有行動網路,自然就是用我的Android手機了。
啊,如果你覺得都有Wifi了還用乙太網路連線是脫褲子放屁,太搞剛,那麼不設定乙太網路,單純把iPad當成樹莓派的行動電源就行。
2. 環境#
- iPad Air 6
- iPad OS 17.6.1
- Raspberry Pi 5
- Raspberry Pi OS Debian 12 Bookworm
搭配APP:
- a-shell,開源SSH客戶端,因為iSH Shell有認不到DNS的問題
- RealVNC Viewer,閉源的VNC客戶端
3. 安裝樹莓派系統#
這步驟建議用電腦操作。
在電腦安裝 RPI Imager,刷入系統到SD卡,設定開機自動連線到Wifi
樹莓派開機之後,測試使指令
ssh 使用者名稱@raspberrypi.local
登入系統。
4. 將樹莓派調整為USB乙太網路#
如果要直接使用Wifi連線登入樹莓派的,這段可以跳過。
透過Wifi登入樹莓派
編輯:
sudo vim /boot/firmware/cmdline.txt
,啟用dwc2核心模組
modules-load=dwc2,g_ether
- 編輯:
sudo vim /boot/firmware/config.txt
,關閉otg mode,新增dtoverlay
#otg_mode=1
dtoverlay=dwc2
- 用nmcli新增ethernet網路
sudo nmcli con add type ethernet con-name ethernet-usb0
5.編輯網路設定:sudo vim /etc/NetworkManager/system-connections/ethernet-usb0.nmconnection
,新增以下內容
[connection]
id=ethernet-usb0
uuid=uuid
type=ethernet
autoconnect=true
interface-name=usb0
[ethernet]
[ipv4]
method=shared
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
- 由於上述網路開機不會自動啟動,所以得新增Systemd service:
sudo vim /lib/systemd/system/usbgadget.service
[Unit]
Description=My USB gadget
After=NetworkManager.service
Wants=NetworkManager.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/nmcli con up ethernet-usb0
[Install]
WantedBy=sysinit.target
- 設定開機自動啟動
sudo systemctl reload-daemon
sudo systemctl enable usbgadget.service
5. 架設VNC服務#
雖然樹莓派有內建RealVNC伺服器,不過我比較喜歡 TigerVNC
6. iPad端的設定#
將樹莓派接上iPad,iPad的設定應該會出現「乙太網路」連線
點進去會看到樹莓派已經自動分配了一個IP
接下來要暫時把iPad的Wifi關掉,這樣才能強迫iPad從乙太網路登入樹莓派
開啟a-shell,用
ssh 使用者名稱@raspberrypi.local
指令連線。VNC比照辦理,RealVNC Viewer輸入
raspberrypi.local:5900
應該能連線到TigerVNC成功登入樹莓派後就可以把iPad的Wifi開啟了。
7. 樹莓派網路問題#
作為乙太網路卡情況下,樹莓派沒辦法上網
請執行sudo nmtui connect
指令,讓樹莓派連上其他Wifi。
8. 樹莓派音訊問題#
大部分開源VNC都不支援音訊
樹莓派5又拔掉了耳機孔
只好利用樹莓派的藍芽連接喇叭輸出音訊了。下圖為Blueman GTK