
Raspberry PiにThunderboltケーブル1本で初回接続からSSH/VNC接続できる設定を作ってみた(Bookworm対応版)
製造ビジネステクノロジー部の新澤です。
Raspberry Pi を初回起動した時点で、Thunderboltケーブル(USB-C)1本で PC と直結し、SSH および VNC で接続できるようにしようとしたところ、ネット上の多くの記事は Bullseye での内容が多く、Bookworm では挙動が異なりうまくいかないケースがあったり、Raspberry Piに外部モニターとキーボードを使えない状況では作業が進められない手順などもあったため、本記事では Bookworm でヘッドレス環境での設定手順をまとめました。
対象の機器
- Raspberry Pi 4 Model B (8GB)
- Raspberry Pi OS 64bit (Bookworm)
- Macbook Pro (M3)
- macOS 15.6
概要
Raspberry Pi Imagerでカスタム設定した際に作成される Raspberry Pi OS の初期設定スクリプト firstrun.sh
に以下のような設定を追記し、初回起動時に自動で適用されるようにします。
- Raspberry Pi を PC から USB Ethernet ガジェットとして認識させる設定
- OTG ドライバの有効化
- カーネルモジュール
g_ether
のロード usb0
インターフェースを NetworkManager で設定・有効化
- VNC サービス(
wayvnc
)の有効化 - PC と Thunderbolt ケーブル(Thunderbolt 3 以上対応の USB-C ケーブル)で接続
- PC 側で USB Ether インターフェースに対してインターネット共有を設定
手順
1. OS イメージ書き込み
Raspberry Pi Imager で microSDカードにOSイメージを書込みます。
以下のように選択して、「次へ」をクリックします。
- Raspberry Piデバイス: RASPBERRY PI 4
- OS: RAPBERRY PI OS (64-BIT)
- ストレージ: 書込み先の microSD を選択
「設定を編集する」をクリックします。
以下の内容で設定します。
- 「ホスト名」を有効化
- ホスト名は今回はデフォルトのまま
- 「ユーザー名とパスワードを設定する」を有効化
- 任意の値で設定(本記事ではpi/piで設定)
- 「ロケール設定をする」を有効化
- タイムゾーン: Asia/Tokyo
- キーボードレイアウト: お使いのキーボードに合わせて設定
「サービス」タブをクリックして、「SSHを有効化する」を有効化し、「パスワード認証を使う」を選択して、「保存」をクリックします。
書込み先のメディアが間違っていなければ、「はい」をクリックして、書込みが終了するのを待ちます。
firstrun.sh
を変更
2. 初回起動スクリプト Imagerでカスタム設定を行った場合、Raspberry Pi起動時にLinuxカーネルに渡されるコマンドパラメータを指定するファイル cmdline.txt
に初期設定スクリプト firstrun.sh
が実行されるように設定されます。
今回は、その firstrun.sh
から各設定をまとめて実行してしまうように変更します。
microSD のフォルダ内にある firstrun.sh
をエディタで開きます。
最終行から2行前あたりに rm -f /boot/firstrun.sh
という行が見つかると思いますので、その行の前に以下の内容を挿入して保存します。
# USB Ethernetインターフェースの設定スクリプトを作成
cat >/usr/local/sbin/usb-gadget.sh <<'EOF'
#!/bin/bash
# ethernet-usb0が存在しない場合は作成
if ! nmcli con show ethernet-usb0 >/dev/null 2>&1; then
nmcli con add type ethernet con-name ethernet-usb0 ifname usb0
fi
# 固定IPで設定(ネットワークアドレスがLAN/WiFiと重複するなら変更すること)
nmcli con modify ethernet-usb0 ipv4.method manual ipv4.addresses 10.255.255.2/24
nmcli con modify ethernet-usb0 ipv4.gateway 10.255.255.1
nmcli con modify ethernet-usb0 ipv4.dns 8.8.8.8
nmcli con modify ethernet-usb0 autoconnect true
nmcli con up ethernet-usb0
EOF
chmod a+rx /usr/local/sbin/usb-gadget.sh
# USB Ethernetインターフェースサービス設定ファイルの作成
cat >/lib/systemd/system/usbgadget.service <<'EOF'
[Unit]
Description=My USB gadget
After=NetworkManager.service
Wants=NetworkManager.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/usb-gadget.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=sysinit.target
EOF
# USB Ethernetインターフェースサービスを有効化
systemctl enable usbgadget.service
# Raspberry Pi 設定ファイルで USB OTG を有効化
echo "dtoverlay=dwc2" >>/boot/firmware/config.txt
# Linux カーネルコマンドラインパラメータファイルで USB OTG と USB Ether ガジェットのモジュールを読み込む設定を追加
sed -i 's| rootwait | rootwait modules-load=dwc2,g_ether |g' /boot/firmware/cmdline.txt
# VNC サービスを有効化
ln -s /etc/systemd/system/multi-user.target.wants/wayvnc.service /lib/systemd/system/wayvnc.service
systemctl enable wayvnc.service
3. 初回起動
Raspberry Pi に microSD を挿入し、Thunderbolt3 (or 4) ケーブルで PC と直結します。
( USB ハブを経由すると、ハブの性能によっては電力不足で動作が不安定になることがあるので直結がお勧めです)
前述の通り、初回は firstrun.sh
が実行され、実行後に自動で再起動しますので、しばらく待ちます。
再起動後に、PC 側で以下のように認識されていれば大丈夫です。
- 「設定」の「ネットワーク」に
RNDIS/Ethernet Gadget
が追加されていることを確認
4. PC 側ネットワーク設定
RNDIS/Ethernet Gadget
の TCP/IP
設定を以下のように固定IPアドレスを設定します。
5. 接続テスト
PC 側から設定した Raspberry Pi の ホスト名に ping を実行して疎通確認を行います。
応答がない場合は IP アドレスに対して疎通確認してください。
(ホスト名で応答がない場合は、 OS で mDNS が無効化されている可能性が高いですが、ここではホスト名か IP アドレスのどちらかでアクセスできればよいものとします)
# ホスト名
ping raspberrypi.local
PING raspberrypi.local (10.255.255.2): 56 data bytes
64 bytes from 10.255.255.2: icmp_seq=0 ttl=64 time=1.180 ms
64 bytes from 10.255.255.2: icmp_seq=1 ttl=64 time=0.589 ms
# IPアドレス
$ ping 10.255.255.2
PING 10.255.255.2 (10.255.255.2): 56 data bytes
64 bytes from 10.255.255.2: icmp_seq=0 ttl=64 time=1.402 ms
64 bytes from 10.255.255.2: icmp_seq=1 ttl=64 time=0.736 ms
疎通が確認できたら、 SSH 接続を行います。
ホスト名での疎通ができなかった場合は IP アドレスで接続してください。
ユーザー名/パスワードは、Raspberry Pi Imager で設定したものを使います。
次は VNC 接続を確認します。
Bookworm で採用されている VNC サーバー wayvnc には、現状、 macOS 標準のサーバ接続や RealVNC での接続には対応していないため、 TigerVNC Viewer
を利用します。
インストールされていない場合は、こちらから最新版のリリースページからお使いの環境のインストーラをダウンロードしてインストールするか、Homebrewでインストールします。
$ brew install tigervnc-viewer
TigerVNC Viewer で raspberrypi.local
(または IPアドレス)に接続します。
Yes
をクリックします。
SSH 接続と同じユーザー名/パスワードでログインします。
接続できました!
最後に
Raspberry Pi を Thunderbolt/USB-C ケーブル1本で PC と直結し、初回起動から SSH/VNC が使えるヘッドレス環境を構築しました。
どなたかのお役に立てば幸いです。