【2019年12月版】ラズパイとMacの接続はUSB-C ケーブルだけでOK？！→ラズパイ七変化

# Macからラズパイに、USB-Cケーブルで接続するだけでログインできる。しかもネットにもつながる、だと？！

ラズパイでいろいろやろうと思い、ネットを徘徊していると以下の記事にぶち当たりました。

- [Raspberry Pi 4とMacをUSB type Cケーブルで接続してMacのインターネット接続を共有する手順 #RaspberryPi](https://dev.classmethod.jp/hardware/raspberry-pi-4-develop-with-mac-using-usb-c-cable/)

いや、えっと…これまでだいぶ苦労してつないできたけど([【2019年12月版】祝！ラズパイ4 到着！！だが周辺機器はゼロだ！](https://qiita.com/koinori/items/8fdf5e753e10e840b02b)、[【2019年12月版】ラズパイ奮戦記。Macbook経由でネットにつなぐには](https://qiita.com/koinori/items/52b17c1823978855e78a)の記事をご覧ください。。。)、USB-Cケーブルだけでつながるならそれ**めっちゃ楽**じゃん！
また記事をざっと眺めると、USB-Cケーブルで繋ぐだけでインターネット共有とかSSHのログインとかできてるじゃないか・・・？

**どいうことだ・・・？**

というわけでここらの情報について他の情報も漁ってみました。

- [Raspberry Pi Zero v1.3をUbuntu PCとUSBケーブル1本で接続セットアップ](https://yomon.hatenablog.com/entry/2018/09/raspberrypizeroinit)
- [Raspberry Pi Zero Wをアダプタ不要でセットアップする](https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00)

…つまり、Raspberry Piはそれ自身がUSBの機器側として動作する=`スレーブ`側になれる、という機能="USB On The Go"を使って、ラズパイそのものを`ネットーワークアダプタ`として認識させることができる、ということな訳ですか！

また USB-OTGが使えるUSBポートは歴代のラズパイでも"給電用のUSB"と決まっているようです。

- [Where is the USB2 OTG port on the RPi 4 Model B located?](https://raspberrypi.stackexchange.com/questions/100583/where-is-the-usb2-otg-port-on-the-rpi-4-model-b-located)

ちなみに、USB 2.0規格で対応している模様です。

ところが元々、給電用のUSB-Cポートには不具合があることが分かっています。

- [Raspberry Pi 4のUSB Type-Cポートが規格通りでない話の詳細](https://hanpenblog.com/11049)
- [Raspberry Pi 4の電源周りの不具合の解消版について](https://raspi.taneyats.com/entry/about-raspi4-power-supply)

それは11月出荷の"技適対応版"で不具合が直っている、とのことですがどこまでどうなのでしょう？試してみないとですね！
それでは、設定している内容がなんとなくわかってきたところで、実際に設定をしてみましょう。

## 1. Raspberryの設定

`boot`イメージは Etcherで書き込み済み、とします。またRaspbianは"Raspbian Buster Lite"

その他、SSHの設定については[前回の記事をご覧ください](https://qiita.com/koinori/items/8fdf5e753e10e840b02b)！

### 1-1. USB OTG の有効化

まず、USB OTGはデフォルトでは有効になっていない模様です。これを有効にするには"デバイスツリー"にUSB OTG用の機器、というかモジュールを追加します。

`/boot/config.txt` の末尾にUSB 2.0ドライバである `dcw2`を追加します。

```
...

dtoverlay=dwc2
```
この "デバイスツリー"については本家サイトの以下のページに詳しく書いてあります。

- [Device Trees, overlays, and parameters](https://www.raspberrypi.org/documentation/configuration/device-tree.md)

ところがここには個別のデバイスについては詳しく述べられておりません。以下の記事でやっとわかりました。

- [Raspberrypi3のデバイスツリーについて](https://qiita.com/cello_piano_violin/items/90e417123e7e026b190e)

この記事で初めて`dwc2`がUSB 2.0ドライバであることが判明いたしました。

### 1-2. USBとLANアダプタモジュールの読み込みを追加

`/boot/cmdline.txt`の起動オプションの末尾にモジュールのロード指定を追加します。

```txt:/boot/cmdline.txt
... modules-load=dwc2,g_ether
```
これは改行なしで追加します。

dwc2、そして`g_ether`。

これが多分 `Ethernetカード`的な機能の指定なのでしょう。`g_ether` については後ほど深掘りいたします。

ラズパイ側の設定としては以上です。これだけでUSBのLANアダプタになってしまう、らしいです？！

## 2. Raspberry Piの起動

Macbook Pro と ラズパイを USB-Cケーブルで接続いたします。Macbook Proの給電によりラズパイは起動すると思います。Macbook Proから何ワットの給電がされているか不安ですが、USB-CのPDは自動で調整してくれるらしいので、信じましょう。(というか、その不具合が直っているはず。)

しばらくしてコンパネからネットワークを確認すると…

`RNDIS/Ethernet Gadget` と言うLANアダプターとして認識されています!

<img width="647" alt="スクリーンショット 2019-12-21 18.57.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/62948de0-4453-18eb-fc5b-8e4fd5e2fdc2.png">

共有メニューでも経路に表示されました。

<img width="647" alt="スクリーンショット 2019-12-21 18.56.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/4c1af803-ea8b-e2ba-e9bf-e9489240bd88.png">

ここからインターネット共有を有効にします。

<img width="647" alt="スクリーンショット 2019-12-21 18.58.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/fd0c52d2-c382-db43-1601-8cd00f728d57.png">

それではログインしてみましょう！

## 3. ログイン！

`ssh pi@raspberrypi.local` でログインしてみます。MacOSなど"Bonjour"がインストール済みのOSであれば `raspberrypi.local` で即座に名前解決ができるらしいです。

```shell
$ ssh pi@raspberrypi.local
Warning: Permanently added the ECDSA host key for IP address 'fe80::f0e2:419d:bb5b:c536%bridge100' to the list of known hosts.
pi@raspberrypi.local's password: 
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Dec 20 12:10:18 2019 from fe80::e2:7215:4fd5:a99d%usb0

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $ 
```

おホォぉ…ログインできた。。。
続いて、`apt update` してみます。

```
$ sudo apt update
Hit:1 https://deb.nodesource.com/node_12.x buster InRelease
Hit:2 http://archive.raspberrypi.org/debian buster InRelease                   
Get:3 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]      
Get:4 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13.0 MB]
Fetched 13.0 MB in 4min 22s (49.6 kB/s)                                        
Reading package lists... Done
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.
```
めっちゃ取得できてる… これは簡単だわ…
自分の Macbook ProはUSB-Cポートしかないのでこれだけで済むとありがたいですね〜！
前回のチャレンジでは USBハブにLANアダプタさしてLANケーブルで繋いでましたので、このあたりの機材がいらないだけでだいぶ楽でございます！

# 他のモジュールはどうなっているのか？

さて、今回は `g_ether` というモジュールを使って、Macにラズパイが"USBのLANアダプター"として認識させたわけですが、他にどのようなモジュールがあるのか？ということが気になりますよね？！

ラズパイ4 固有の設定についての情報は見つけられませんでしたが、Pi Zero の OTG モジュールについてのドキュメントを発見いたしました！

- [Raspberry Pi Zero OTG](https://gist.github.com/gbaman/50b6cca61dd1c3f88f41)

これによると、以下のモード、モジュールがある模様です。

- Serial (g_serial)
- Ethernet (g_ether)
- Mass storage (g_mass_storage)
- MIDI (g_midi)
- Audio (g_audio)
- Keyboard/Mouse (g_hid)
- Mass storage and Serial (g_acm_ms)
- Ethernet and Serial (g_cdc)
- Multi (g_multi) - Allows you to configure 2 from Ethernet, Mass storage and - Serial
In addition to the above modules, a few other (less useful) modules are included.
- Webcam (g_webcam)
- Printer (g_printer)
- Gadget tester (g_zero)

最後の `g_zero` というのはちょっとよくわかりませんが、あとはなんとなくわかりますね！
シリアルポート、LANアダプタ、外部ストレージ、 MIDI、オーディオ、入力機器、Webカメラ、プリンタなどの機器として機能することが可能なようです。
ちょっと…**ラズパイ、万能じゃないですか**...

`g_serial`を使っている記事を発見いたしました。

- [[メモ] Raspberry Pi ZeroをUSB COMポートデバイスとして使う](https://qiita.com/mt08/items/84d3d3053bee92609c2d)

このスクショではWindows上でもちゃんと、USBのシリアル機器としてCOMポートが認識されています。
また、それ以外のモードをいろいろ試しているスライドを発見いたしました。

- [Raspberry PiのUSB OTGを試す](https://www.slideshare.net/matoken/raspberry-piusb-otg)

シリアルやストレージは**あるある**なので、"外部オーディオ"をちょっと試してみましょうか。
`cmdline.txt`で`g_audio`を指定してみましょう。

```txt:/boot/cmdline.txt
... modules-load=dwc2,g_audio
```
改行なしで、末尾を修正です！

で、起動してMacOSのコンパネで"サウンド"の項目を見ていると…

出力では..."Playback Inactive"が出現いたしました！
![スクリーンショット 2019-12-21 20 24 28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/d9ffa884-8a01-d6ca-1d0b-2e59feef80dc.png)

入力では..."Capture Inactive"が出てきています！
![スクリーンショット 2019-12-21 20 24 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/8a3c5f70-22e8-c364-6a0a-6afdc8095013.png)

今は特に内部のサウンド系の設定などしていないのでどちらも"Inactive"となっておりますが、"USBのオーディオ装置"としては認識ができているようです！！

もちろんこの状態ではLANアダプタではないので直接、SSHできませんからWifiなどを経由してログインする必要あります。

また、起動中は１つのモードしか有効にならないとのことです。まぁ、十分ですけども。。。

**ラズパイ、万能じゃないか！**

だいたい、SSHで繋がってしまえばただのLinux(ほぼUbuntu)ですからね…これからSSHキー仕込んで、VSCodeからリモートでいろいろやってみたいと思います！！

本日は以上です！