Raspberry Pi で「bookworm」を 使ってWindows11 や Macから OTG 接続する 

Raspberry Pi で「bookworm」を 使ってWindows11 や Macから OTG 接続する手順を解説します

(2025.04.10追記）
Raspberry Pi 5＋bookwormでDHCPにてOTG接続でVNCで接続しようとすると昨年より時間が掛かったりタイムアウトして上手くいかなくなっています。（私のimageだけかも知れませんが）
そこで、OTG接続時のIPアドレス固定にしてその時間を短縮できましたのでその方法を追記します。
```
 sudo nano /etc/NetworkManager/system-connections/ethernet-usb0.nmconnection
```

 でファイルを開き
 method=autoをコメントアウトして
 マニュアルでIPアドレスを指定する。
 （例は192.168.137.164にする場合）
```ethernet-usb0.nmconnectionの[ipv4]の部分

[ipv4]
#method=auto
address1=192.168.137.164/24,192.168.137.1
dns=8.8.8.8;
method=manual
```
これで私の環境（WIndows11）でもOTG接続（有線LANやWi-Fi接続無し）でupdateやupgrade出来る様になりました。

(2024.07.07追記）
Raspberry Pi 4 でも「bookworm」を使う場合はこのページの手順を使わないとOTG接続出来ません。

bookwormを使用する場合、PI4、Pi5などでOTG接続する時はこの方法を使用してください

タイトルにRaspberry Pi 5だけ記載していると誤解を招く可能性があるのでタイトルを少し変更しました。
（以上）


![IMG_3520.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827298/a98eb01f-3c1e-7623-d8cd-7c1756c31ad6.jpeg)



![IMG_8150.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827298/5ee66685-3708-eccc-8d4e-b3b44ad4a283.jpeg)




Raspberry Pi 4やRaspberry Pi Zero 2 W 等でOTG接続(USBケーブルで接続する方法）を行った事がある事を前提条件としています
初めてOTG接続に挑戦する場合は、そこの所は各自ネット検索等で必要なドライバーやソフトを先にPCへインストールしておいてください

参考URL　https://jun3010.me/raspberry-pi5-usbotg-gether.html
　　　　（Raspberry Pi5とiPad ProをUSB-OTGで繋ぐ方法）

（重要）
PC（Win or Mac）をRaspberry Pi 5へ接続する場合Thunderbolt4以上（コネクタ形状がType-C）のケーブルを使用してください(強く推奨　ほぼ必須と言ってもいいかも知れません）　100均等のC to C ケーブルでもWindowsなら接続出来ましたが、IPアドレス取得に失敗することが多く接続完了までに時間が掛かります（私の環境で2分以上）

手順1　config.txtとcmdline.txtの編集

/boot/firmware/config.txt に

```config.txt
dtoverlay=dwc2
```
を追加する

/boot/firmware/cmdline.txt のrootwait と quiet の間に下記の文字列を挿入
```cmdline.txt
modules-load=dwc2,g_ether g_ether.host_addr=02:22:82:ff:ff:01 g_ether.dev_addr=02:22:82:ff:ff:11
```
（rootwait  の後と quiet  の前には半角スペースを入れること）


手順2　usb0 というネットワークインターフェイスを作る
LXTerminal で
```
sudo nmcli con add type ethernet con-name ethernet-usb0
```
を実行する

手順3　nmconnectionの編集

手順2 のコマンドを実行後に作られた ethernet-usb0.nmconnection ファイルを次のように編集する
LXTerminal で
```
 sudo nano /etc/NetworkManager/system-connections/ethernet-usb0.nmconnection
```
とethernet-usb0.nmconnectionを開き
```ethernet-usb0.nmconnection
[connection]
id=ethernet-usb0
uuid=<random group of characters here>
type=ethernet
autoconnect=true          #この行を追加
interface-name=usb0       #この行を追加
    
[ethernet]
    
[ipv4]
method=auto               #この行が  auto  であることを確認しておくこと
    
[ipv6]
addr-gen-mode=default
method=auto
    
[proxy]
```
手順4　起動時に usb0 を up するサービスを作る
ラズパイ起動時に usb0 を有効化するためのサービスを作って、enable にする
LXTerminal で
```
sudo nano /usr/local/sbin/usb-gadget.sh
```
と入力しusb0 を起動するためのシェルスクリプトを作成するusb-gadget.shのは下記の様にする
```
#!/bin/bash
nmcli con up ethernet-usb0
```
作成出来たら読み取りと実行の権利を与える（LXTerminal で）
```
sudo chmod a+rx /usr/local/sbin/usb-gadget.sh
```
手順5　起動時に usb-gadget.sh を実行するための専用サービスを作成
LXTerminal で下記のコマンドを実行する
```
sudo nano /lib/systemd/system/usbgadget.service
```

usbgadget.service の中は以下の様にする
```usbgadget.service
[Unit]
Description=My USB gadget
After=NetworkManager.service
Wants=NetworkManager.service
    
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/usb-gadget.sh
    
[Install]
WantedBy=sysinit.target
```

手順6　OS が起動する際、NetworkManager.service が起動した後に usbgadget.service が起動するようにする
LXTerminal で下記コマンドを実行する
```
sudo systemctl enable usbgadget.service
```
以上で service が enable になります

手順7　Raspberry Pi 5 を reboot する。
 以上で OTG 接続出来る様になります。
  IP アドレスは Windows11 なら  192.168.137.XX  （XX は自動で割り振られます）
                Mac なら          192.168.X.2  で繋がります。（通常は 192.168.2.2）

Windows11での実行例
![Win OTG 30cm  2024-06-26 143837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827298/71968f0d-ad79-6fd1-4f7a-fcdf57504452.png)



Macでの実行例
![Mac OGT  2024-06-25 22.09.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827298/6464593b-8de8-bbc0-3cdd-705d61efdf0d.png)


OTG接続が出来たかの確認は
LXTerminal で
```
sudo apt update
```
を実行してみるのが一番手っ取り早いかと思います（Raspberry Pi 5のWi-Fiは切ってから）