はじめに
私は、ラズパイに関しては雑誌に何度も記事を掲載しているほど使い込んでいるのですが、何を隠そうディスプレーもキーボードも持っていません。
ラズパイは、本体は3000円程度と安価なのですが、キーボードとディスプレイをそろえるとなると、費用的な負担もそれなりだし、大きさ的にもかざばってしまい、結構その点のハードルが高いと思います。
しかし、パソコンがMacだとイーサケーブルとイーサアダプタだけでGUIを含めて使えるようになるのです。その手順をきれいにまとめた記事は意外とないので、自分の備忘録を兼ねて手順をアップしておきます。
アーキテクチャ
「アーキテクチャ」というほどおおげさなものではないのですが、どういう仕組みでキーボードもディスプレーもいらなくできるかを概念的に示します。
物理接続レベル
上の図が物理接続レベルでのラズパイとMACの関係です。
ラズパイとMAC間はイーサネットでピア接続(スイッチなしにケーブルだけで直接つなぐ)します。Macはイーサアダプタを持っていないので、Mac側でサンダーボルトかUSB接続のイーサネットアダプタは必要です。ケーブルと、このアダプタが今回説明するラズパイの使い方を行う際、必要なハードウェアとなります。それ以外は一切不要です。普段Macを使っている人ならさすがにイーサのアダプタぐらいは持っているかと思います。そういう人はほとんど追加投資なしにラズパイが使えることになります。
Macから先は、普通の使い方通りWiFi接続でインターネットにつながっていることも前提です。
IP接続レベル
では、IPレベルではどのようになっているのか示したのが上の図です。ラズパイとMac間はDHCPでつながっています。MacはNATサーバーの役割もになっており、ラズパイからインターネット接続要求があった場合、Mac経由でそのリクエストは対応されます。
このような動きをするのに唯一必要な設定は、MAC側で**「インターネット共有」**を行うことになります。具体的な手順は後ほど説明します。
XWindowsレベル
IP層までつながったとして、ディスプレーもキーボードもなしでラズパイのGUIアプリを使うためにはXWindowsが使える必要があります。この課題に対応するのがVNCプロトコルです。
ここで、一つ注意すべきことがあります。
ラズパイには、デフォルトでReal VNCサーバーが導入済みです。またMacにはOSに最初からVNCクライアント機能が含まれています。普通に考えるとソフトの導入なしにVNCプロトコルでラズパイ・MAC間がつながりそうなのですが、ラズパイ側のReal VNCにクセがある関係でこのまま接続することはできません。
ネット上によく出ている情報で「ラズパイにTigerVNCサーバーを導入すべし」というものがありますが、この情報は間違っています。確かにTigerVNCにするとMac側はOSで使えるVNCクライアントとつながるのですが、ラズパイ側で使えないアプリ(例えばMatehmeticaとか)がでてしまうのです。
正しい対応は、Mac側にReal VNCクライアントを導入することとなります。これから説明する手順はこの方針に沿ったものとなります。
おまけ 名前解決
私が基盤系をやっていた20年くらい前は、IP的に接続できてもその後でhostsやDNSの設定をしないと、ホストを名前で参照できないという問題がありました。
しかし、今や便利な時代になって、mDNSというプロトコルを使うと、hostsファイルやDNSの設定なしに相手先サーバーをホスト名で参照可能です。幸いにしてラズパイもMACもこのmDNSのプロトコルに対応しているので、IP的に接続さえできてしまえば、接続相手のラズパイは自動的にraspberrypi.local
という名前で参照可能になります。これもラズパイ使うならPCはMACがお勧めである理由の一つです。
買い物編
それでは、実際に必要なものをそろえるところから説明します。
ラズパイ本体とマイクロSDカード
当たり前ですが、この2つは必須です。
ラズパイ本体に関しては、写真のようにケースを買った方が持ち運びに便利だと思います。
マイクロSDカードは選択がちょっと難しいです。私が1度やってしまった初歩的なミスとして、マイクロでないSDカードを買ってしまい、パソコンには入るのですが、ラズパイで使えなくて泣いたことがあります。上の写真のように本体が小さくなっているタイプである必要があります。
SDカードのスペックを決める属性としてCLASSと呼ばれる伝送速度の仕様と、容量があります。
伝送速度はCLASS 10にした方がいいようです。容量は初めて試してみるなら8GBで十分、いろいろな用途で使い込みたいなら16GBという感じでしょうか?
あと、上の仕様を満たしていてもメーカーにより相性の問題がいろいろあるみたいです。私はいつも東芝を使うことにしています。このあたりの話はネットでいろいろ調べている人がいるみたいなので、そちらで研究することをお勧めします。
イーサネットアダプタ、ケーブル
写真に写っているのはサンダーボルト接続の純正アダプタです。私はもう一つ、サードパーティ製のUSB接続アダプタも持っていてこちらでも普通に使えています。
私が基盤系の仕事をしていた20年前はイーサケーブルにもストレートとクロスというものがあり、用途で使い分ける必要があっていつもカバンには2種類持ち運んでいたのですが、今は自動的にスイッチしてくれるので、そういう必要はなくなりました。イーサケーブルにも規格があり、私が普段使っているのはカテゴリ6という一番品質のいいものです。カテゴリ6だと、ケーブルが太くて曲がりにくく持ち運びに不便なものが多いのですが、写真のものはケーブルが柔らかいところが気にいっています。(ケーブルの印字を見てみたらエレコム製のようです)
電源アダプタ、ケーブル
こちらに関しては特に語るところもないので解説は省略します。
導入編
材料が全部そろったらいよいよ導入です。MAC側の準備から始めます。
ラズパイOSダウンロード
最初にラズパイOSのダウンロードをします。
ダウンロードサイトにアクセスします。
上のトップ画面でRaspbianを選びます。
次の画面では、左上の「Raspbian Stretch with desktop and recommended software」(ソフト全部入りという意味)を選択します。ダウンロードファイルは2019年4月7日時点では2018-11-13-raspbian-stretch-full.zip
という名前でした。
Real VNCクライアント導入
使うことになるのは一番最後なのですが、ラズパイOSのダウンロードには相当時間がかかるはずなので、待っている間に次の作業を行っておきます。
Real VNCダウンロードサイト
こちらはあっという間にダウンロードが終わるはずですので、ダウンロードしたdmgファイルをダブルクリックし、下記のガイドに従ってアプリをアプリケーションフォルダーにdrag & dropするだけで、導入は完了です。
SDカードのフォーマット
ダウンロード中のラズパイOSをSDカードにコピーするのですが、その前にSDカードのフォーマットをしておく必要があります。
まず、MacにSDカードを挿入します。挿入後の様子は私のMacの場合だと次の写真のような感じです。
次に「アプリケーション」->「ユーティリティー」の配下の「ディスクユーティリティ」を起動します。
上の図のように「APPLE SD Card Reader Media」が選択されていることを確認した上で**(注意:選択先を間違えると大変なことになってしまいますので十分注意してください)**、画面上部の「消去」アイコンを選択します・
上のようなパネルが出たら、
名前: RASPI
フォーマット: MS-DOS(FAT)
方式: マスター・ブート・レコード
を入力・選択し、「消去」ボタンをクリックします。
(再度注意 対象が自分のハードディスクでなく、SD Cardであることを確認してください)
フォーマットが無事終わると、下のような画面がでてくるはずですので、指示に従い「完了」ボタンをクリックします。
ラズパイOSの導入
他のことをやっているうちにラズパイOSのダウンロードも終わったことかと思います。最初に始めたラズパイOSのダウンロードが完了したら、それをSD Cardにコピーします。コピーはMacの場合ddコマンドが一番簡単です。次の例を参考にddコマンドを実行してください。
zipファイルの解凍
まず、先ほどダウンロードしたファイルを解凍します。方法はFinderからダブルクリックでも、unzipコマンドでもいいです。
ターミナルをひらく
ターミナルアプリを開いて、カレントディレクトリはファイルをダウンロードした場所にしてください。
lsコマンドの実行結果は下記のように、解凍後のラズパイOSイメージファイルが含まれているはずです。
$ ls -lt
total 14211072
-rwxrwxrwx@ 1 makaishi staff 1978611497 4 7 11:53 2018-11-13-raspbian-stretch-full.zip
-rwxrwxrwx@ 1 makaishi staff 5297405952 11 13 14:24 2018-11-13-raspbian-stretch-full.img
デバイス名の確認
dfコマンドを実行し、SD Cardのデバイス名を確認します。/Volumes/RASPI
のあるところがSD Cardのデバイスです。下の例だと、/dev/disk2
になります。うしろのs1
は取った名前で考えます。
$ df
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk1s1 489825072 422363096 59851376 88% 1943807 9223372036852832000 0% /
devfs 394 394 0 100% 682 0 100% /dev
/dev/disk1s4 489825072 6291552 59851376 10% 5 9223372036854775802 0% /private/var/vm
map -hosts 0 0 0 100% 0 0 100% /net
map auto_home 0 0 0 100% 0 0 100% /home
/dev/disk2s1 15184192 4928 15179264 1% 0 0 100% /Volumes/RASPI
ディスクのumount
ローレベルのddコマンドでコピーするので、コピー時には対象ディスクはOSから見えない状態にします。そのため次のコマンドを発行してください。デバイス名は環境によって変わりますので、上の結果次第で/dev/disk3
などと読み替えてください。
$ diskutil umountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
OSファイルのコピー
次の例を参考にOSファイルのコピーを行います。コマンド実行はルート権限が必要なので、sudoコマンドで実行します。
ここでもof
デバイス番号を間違えると大変なことになりますので注意して下さい。
if=
の後には入力ファイル名を指定します。
of=
の後には、先ほど調べたデバイス名の頭に'r'をつけます。
conv=sync
のオプションを忘れないようにしてください。これをつけないと、コピー途中でエラーになってしまうことがあります。
$ sudo dd bs=1m if=2018-11-13-raspbian-stretch-full.img of=/dev/rdisk2 conv=sync
このコマンドは途中経過を全然出してくれないですが、ctrl+T
で状況を表示してくれるので、それで適宜確認をしてみてください。
ssh ファイルの作成(重要)
これからラズパイOSを起動して初期設定を行うに際して一番最初はsshコマンドでラズパイに入ります。しかし、最新のラズパイOSはデフォルトでリモートからのsshアクセスを認めていません。これを可能にするのが次のコマンドとなります。
上のddコマンドが正常に終わると、/Volumes/boot ディレクトリがMac側から見えるようになっているはずです。
その点を確認した上で、次のコマンドを実行します。
$ touch /Volumes/boot/ssh
このおまじないが終わったら、umountコマンドで、bootディレクトリをOSから見えないようにします。
$ sudo umount /Volumes/boot
$ diskutil umountDisk /dev/disk2
2つめのコマンドが正常終了したら、SD Cardを安全に抜き取ることができます。
ラズパイの初期起動
これでラズパイを初期起動するための準備はすべて整いました。まず、先ほどMacから抜き取ったSD Cardをラズパイに入れます。入れる場所は下の写真を参考にしてください。
上の写真は挿入途中の状態です。SD Cardは一番奥まで押し込んだ状態にします。
カード挿入が終わったら、電源を入れ、イーサネットはパソコン(Mac)とピア接続にします(ハブを経由せず、直接つなぐ方法です)。全部つなぎ終わった状態の写真が下のものになります。
Mac側のネットワーク設定
いよいよラズパイにログインするのですが、その前にMac側で設定が必要です。それは冒頭のアーキテクチャのところで説明したMacをNATサーバーとして機能させるための設定です。
まず、Macの「システム環境設定」を選んで、その中から「共有」のアイコンをダブルクリックします。
(1) 「共有する接続経路」にはどのインターフェースでインターネットに接続するかを指定します。冒頭のアーキテクチャの図のケースの場合「Wi-Fi」になります。
(2) 「相手側のコンピュータのポート」は、Mac側から見た場合、どのインターフェイスからNAT先につながるかを指定します。今のケースでは「Thunderbolt Ethernet」になります。
(3) (1)と(2)の設定が終わったら「インターネット共有」のチェックをつけます。下のような画面がでてくるので、「開始」で答えます。
正しく設定ができたら、システム環境設定の画面を閉じます。
ラズパイへ最初のログイン
これで全部の準備は整いました。すべての設定が正しければ、sshコマンドでログインができるはずです。
先ほど開いたターミナルから次のコマンドを実行してみてください。
$ ssh pi@raspberrypi.local
もし、パスワードを聞かれたら接続に成功しています。初期パスワードraspberry
を入力してログインしてください。
なぜ、いきなりraspberrypi.local
という名前でつながるかについては、アーキテクチャのところで説明しておきました。
下記のようなメッセージが出る場合もあります。これは、違うRASPI OSに同じMACから接続したことがある場合のメッセージです。
$ ssh pi@raspberrypi.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address fe80::62c8:c501:d5b1:8d0e%bridge100
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:0gX3UzG8gNlBiljncte9n65Vgi+sVE5RO0868mScqt8.
Please contact your system administrator.
Add correct host key in /Users/makaishi/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/makaishi/.ssh/known_hosts:2
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
pi@raspberrypi.local: Permission denied (publickey,password).
この場合、次のようにエディタでknown_hosts
ファイルを開いて、raspberrypi.local
のエントリを削除すると、ssh接続できるようになります。
$ vi ~/.ssh/known_hosts
ラズパイ初期設定
ラズパイ初期設定のお作法で、次の一連のコマンドを実行してOSを最新版にアップデートしてください。(ここからのコマンドは、先ほどログインに成功したsshコマンドで接続したラズパイ側のコマンドになります)
sudo apt upgrade
コマンドは導入を続けるかを聞いてきますので、y
で答えます。
最新版のモジュールはインターネット経由でダウンロードされるのですが、アーキテクチャで説明したNAT機能が有効なため、これらのコマンドが使えることになります。
pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt upgrade
pi@raspberrypi:~ $ sudo apt dist-upgrade
VNC接続の準備
Real VNCサーバーはラズパイOSにデフォルトで含まれています。そこで設定を有効化するだけで使えるようになります。以下の手順にしたがって有効化してください。
pi@raspberrypi:~ $ sudo raspi-config
-> 5. Interfacing Options
-> P3 VNC
上の画面にはYes
で答えます。
メインの画面に戻ったらFinish
を選択します。
日本語化手順を含め、これ以外にもラズパイとしてやっておくべき初期設定はあるのですが、それは今回の記事の本題からはずれるので省略します。他の記事などを参考にするようにして下さい。
この設定が完了したら、次のコマンドでラズパイをいったん再起動します。
pi@raspberrypi:~ $ sudo reboot
VNC接続
ラズパイの再起動が完了したら、Mac側ですでに導入済みのReal VNCクライアントを起動します。
下の画面が出てきたらraspberrypi.local
と入力してEnterキーを押します。
ラズパイ側のVNCサーバーが有効な場合、下のような画面が出てきますので、「Continue」で答えます。
この画面が出てこない場合は、VNCサーバーの機能が有効でないことが考えられますので、ラズパイ側の設定を確認してください。
続いて下のようなログイン画面がでてきます。
Username: pi
Password: raspberry
で、Remember passwordにチェックをつけて「OK」をクリックします。
下のような画面がでてくれば、VNC接続に成功しています。
画面設定変更
デフォルトの設定では画面の解像度が低く使いにくいので、次の設定変更を行います。
デスクトップ左上のアイコンをクリック、「Preference」->「Raspberry Pi Configuration」
システムタブから「Resolution」をクリックして解像度を1024x768に変更します。
リブートするかの質問にはYes
で答えます。
リブート後に再度VNC接続をした様子は下記のとおり。解像度が大きく、使いやすくなりました。
おまけ Mathematicaの利用例
あまりみんなに知られていないのですが、普通に買うと10万円程度する数式処理ソフトMathematicaがラズパイなら無料で利用可能です。
上の設定をすれば、Macからこんなこともできます。
メニューから「Programming」->「Mathematica」
二次方程式を解いたり、三次元グラフを描いた例。
おまけその2 Mathematicaの紹介記事
実は、ラズパイマガジン2018年10月号〜2019年6月号に、「Mathematicaで学ぶ機械学習超入門」という記事を連載しています。
Mathematicaについてもっと詳しく知りたい・ラズパイで機械学習を勉強したいという方はこちらも是非よろしくお願いします。
ラズパイマガジン2018年10月号
ラズパイマガジン2018年12月号
ラズパイマガジン2019年2月号
ラズパイマガジン2019年4月号