2024年9月25日水曜日

OSイメージを用いてRaspberry Pi OSをインストールする

1. はじめに

本書では、Raspberry PiのOSである Raspberry Pi OS を、Raspberry Pi Imagerというソフトウェアを用いてインストールしました。このソフトウェアは、OSをmicroSDカードに書き込む時にOSのダウンロードも同時に行ってくれます。

職場や学校などでは、この方法でのOSのインストールに失敗することがあるようです。ネットワーク環境により、OSのダウンロードに失敗するためのようです。

そこで、職場や学校などでもOSのインストールが可能な方法を紹介します。Raspberry Pi Imagerを用いて、あらかじめダウンロード済のOSイメージをmicroSDカードに書き込むという方法です。

2. 必要なものの準備

それでは、「Raspberry Pi OS のイメージで OS を インストールする」方法を解説します。まず、皆さんが普段お使いの PC で Raspberry Pi OS のイメージをダウンロードします。
にアクセスしましょう。OSのイメージをダウンロードするページにたどり着きます。

本書でインストールを推奨する OS は「64-bit、アプリケーション数は通常、OSは最新」の選択肢なのでした。
ダウンロードページでは、「Raspberry Pi OS (64-bit)」の「Raspberry Pi OS with desktop」が該当します。ページをスクロールして下図の項目を見つけましょう。見つかったら、「Download」ボタンをクリックしてダウンロードします。執筆時点では 2024-07-04-raspios-bullseye-armhf.img.xz という名前の圧縮ファイルがダウンロードされました。
その他の選択肢としては、Pi 3 B/B+ までの機種では、下図の32-bit版を選ぶのも良いでしょう。
Pi Zero 2 W のようにメモリが少ない機種では下図の Legacy (32ビット) 版が安定動作する可能性があるのでした。
さらに古いOSのイメージを選びたい場合、以下のリンクから zip ファイルまたは xz ファイルをダウンロードすると良いでしょう。
  • 古いRaspberry Pi OSイメージ (2020年5月以降~最新まで):32-bit 版 / 64-bit 版
  • 古いRaspbianイメージ (それ以前):32-bit 版
あるいは、OSのバージョンを指定してダウンロードしたい場合、以下のリンクから zip ファイルまたは xz ファイルをダウンロードすると良いでしょう。 さて、現在の Rasbperry Pi OS では、ダウンロードしたファイルの名前は「ファイル名.img.xz」となっています。

本ページのタイトルに「イメージファイルを使って」とありますが、ダウンロードしたファイルはこの「イメージファイル」を「圧縮」したファイルです。圧縮の手法が、拡張子に表示されている「xz」であるというわけです。

ですから、ここからの流れは通常ならば「圧縮ファイルを『展開』してイメージファイルを取り出す」→「イメージファイルを microSD カードに書き込む」 となります。しかし、本ページでは「展開」という作業は行わす、圧縮されたファイルのまま作業を続けます。 その理由は以下の二つです。
  • microSD カードに書き込むためのツール Raspberry Pi Imagerは、圧縮されたイメージファイルのままでmicroSDカードへの書き込みができる
  • xz で圧縮されたファイルは、Windows のデフォルト環境では展開できない
以下で、圧縮されたイメージファイルをそのまま microSD カードに書き込む方法を解説します。なお、便宜上「圧縮されたイメージファイル」のことを「イメージファイル」と呼ぶことがありますので、混乱しないようご注意ください。

3. Raspberry Pi Imager による OS イメージの microSD カードへの書き込み

ここでは、Raspberry Pi用OSのインストールソフトウェアであるRaspberry Pi Imager を用いてイメージファイルを microSD カードに書き込む方法を紹介します。
インストール済のRaspberry Pi Imagerを起動するには、検索窓で「ras」などと記入して現れるRaspberry Pi Imagerをクリックします。
さて、起動したRaspberry Pi Imagerで「OS (Operating System)」の部分の「OS を選ぶ (CHOOSE OS)」ボタンをクリックしましょう。現れた画面で下図のように「Use custom (カスタムイメージを使う)」を選択します。
すると、イメージファイルの選択画面になりますので、先ほどダウンロードしたファイルを指定します。下図は、ダウンロードフォルダにダウンロードされたファイルを指定している様子です。
次に、Raspberry Pi Imagerで、「ストレージ (SD Card)」の部分の「ストレージを選ぶ (CHOOSE SD CARD)」ボタンをクリックしましょう。microSDカードが接続済であれば下図のようにカードが現れますので、クリックして選択しましょう。

なお、外付けハードディスクなどをPCに接続しているとこの選択肢が複数現れます。microSDカードを表す適切な方を選択しないと皆さんの大切なデータが壊されてしまいますので注意して選択しましょう。
あとはRaspberry Pi Imagerで「書き込む (WRITE)」ボタンをクリックしましょう。「Would you like to apply OS customization settings?」という質問に「いいえ」をクリックし、 「(中略)本当に続けますか?」に「はい」をクリックすると、書き込み (Writing)が始まります。確認 (Verifying)までが終わると、書き込みが終了します。

下図の画面が出たらmicroSDカードを取り外し、その後Raspberry Pi Imagerを終了しましょう。取り外した microSD カードを Raspberry Pi にセットして起動することになります。


ディスプレイがRaspberry Pi と相性が悪い場合の対処法

Raspberry Pi には、相性の悪いディスプレイがあるという問題があるようです。そのようなディスプレイでは、OSをインストールしたmicroSDカードを挿入してRaspberry Piに電源を入れてもディスプレイに映像が映りません。

本ページではその場合の対処法を記します。

0. 準備

Raspberry Pi 用に OS をインストールした microSD カードを PC に接続します。そして、エクスプローラーの「PC」の項目を見ると、下記のように「bootfs」というディスクが存在していることがわかります。ここをダブルクリックすると、中に「cmdline.txt」や「config.txt」というテキストファイルがあるので、用いている OS に対応するファイルをメモ帳などのテキストエディタで開きます。

1. 用いている OS が最新 (Bookworm) の場合

2023年10月にリリースされた、2024年8月時点で最新のOSである、Bookworm を用いている方は、「cmdline.txt」を編集する必要があります。 通常は、「cmdline.txt」をダブルクリックすると、メモ帳などでファイルが開かれるでしょう。その中に、下記の1行が記されています。
console=serial0,115200 console=tty1 root=PARTUUID=877fcbb5-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP
この行の末尾に、半角スペースを一文字挿入してから、「video=HDMI-A-1:1920x1200@60D」などのようにディスプレイの解像度を追記します。「1920x1200」の部分は、お使いのディスプレイに適した値に設定してください。私の場合、ここに「1280x768」と記したことがあります(参考:株式会社クリスタージュ ディスプレイ解像度・サイズ 一覧)。
console=serial0,115200 console=tty1 root=PARTUUID=877fcbb5-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP video=HDMI-A-1:1920x1200@60D
以上の記述を行ったら、ファイルを保存してテキストエディタを閉じてください。そして、microSDカードを Raspberry Pi に取り付け、電源を投入してみましょう。 うまくいけば、ディスプレイが表示されるでしょう。
なお、この設定を行ったときの副作用として、「Raspberry Pi の電源投入時にディスプレイが接続されておらず、あとから接続してもディスプレイが映る」という効果があります。

また、ディスプレイが映り起動した後、デスクトップ左上のメニューから「設定」→「Screen Configuration」を起動し、下図のように 「レイアウト」→「Screens」→「HDMI-1(または HDMI-A-1)」→「解像度」の項目を cmdline.txt に記した解像度の設定に合わせ、「Apply」ボタンを押して設定変更を適用する必要がある場合があります。
上図は、cmdline.txt に video=HDMI-A-1:1280x768@60D と記した場合の例です。

2. 用いている OS が一世代前の Legacy (Bullseys) の場合

2023年10月より前にリリースされていた OS である、Bullseye などを用いている方は、「config.txt」を編集する必要があります。 通常は、「config.txt」をダブルクリックすると、メモ帳などでファイルが開かれるでしょう。その中に、下記の1行が記されています。 すると、下図のようなファイルが開かれますので、6行目の「#hdmi_safe=1」という行の先頭の「#」を削除し、上書き保存してメモ帳を閉じてください。

なお、古い Windows を用いている方は、このファイルが正しく開けません(正しく改行されて見えない)。その場合「サクラエディタ (V2 (Unicode版))」のように改行を正しく処理できるテキストエディタをインストールし、そのサクラエディタで config.txt を開くようにしてください。
さて、「#」を削除して保存したら microSD カードを Windows から取り外し、Raspberry Pi に取り付け、電源を投入してみましょう。

ディスプレイに映像が映ったでしょうか。
ただし、映ったとしても画面の解像度は低い状態かもしません。 その場合、config.txt でさらに下記の設定を行うと、解像度を変更できる可能性があるようです(参考:ラズパイの電源を入れた後にHDMIを挿しても画面が表示される方法)。
下記の行の先頭の「#」を削除してディスプレイの幅 (width) と高さ (height) を適切に設定し、
#framebuffer_width=1280
#framebuffer_height=720
さらに、次の行の先頭に「#」を記述して無効化します。
dtoverlay=vc4-kms-v3d

3. 安価なモバイルディスプレイでのトラブルについてのコメント

さて、以上の対応でディスプレイのトラブルは解消されたでしょうか?
解消されたならば良いのですが、残念ながらそうならないケースも多いのではないかと思います。

個人的には、amazon などで 1 万円前後で購入した安価なモバイルディスプレイが期待した動作をしない、という経験を何度かしています。
そのモニターが、「Raspberry Pi 対応」をうたっていたにも関わらず、です。

そういう場合はあきらめるしかない、と個人的には思っています。私が経験した「使い物にならなかった安価なモバイルディスプレイ」の挙動は以下の通りです。
  • [ケース1] 画面は映るのだが、モバイルディスプレイの電源がONの状態では Raspberry Pi の Wifi が切れる。モバイルディスプレイの電源がOFFのときのみ、Wifi が繋がる(電源の容量の問題?)。そのため、書籍やブログ用に画面のスクリーンショットを取るときくらいにしか役に立たない
  • [ケース2] 特定の手順での接続と電源ONをしないと画面が映らない。例えば、Raspberry Pi の電源投入時は、HDMI 接続をしておくがモバイルディスプレイの電源はOFFのままにしておく。そろそろ OS が起動しただろうな、というタイミングでモバイルディスプレイの電源をONにすると画面が映る。それ以外の手順では一切画面が映らない。画面が映った状態で Raspberry Pi を再起動すると、この特定の手順に当てはまらないので画面は映らなくなる。これもほぼ役に立たない
どちらのケースも、Windows PCに接続すると問題なく動作するので、Raspberry Pi での利用はあきらめるしかないのかな、と思っています。

ちなみに、期待通りに動作したモバイルディスプレイは下記の通りです。
  • Raspberry Pi モニター 15.6インチ: モバイルディスプレイというにはやや大きいのですが、さすがに公式だけあって問題なく動作します
  • IODATA LCD-CF161XDB-MT/E: さすがに大手メーカーだけあってしっかりしています。ただし、お値段もそれなりです
安価でなおかつ安定して動作するモバイルディスプレイははなかなか見つからないなあ、というのが個人的な印象です。

ディスプレイ・マウス・キーボードを接続せずにRaspberry Piを利用する~SSH編

はじめに

Raspberry Pi は名刺サイズの超小型コンピュータですが、ディスプレイを接続して利用すると Raspberry Pi の省スペース性が犠牲になるという問題があります。
また、低価格で人気の Raspberry Pi Zero (以下 Pi Zero) 系の機種はメモリが少なく、ディスプレイを接続してデスクトップを利用するのが年々厳しくなっているという問題があります。

これらの問題に対し、本ページでは「Raspberry Piにディスプレイ・マウス・キーボードを接続せずに利用する」ことを目指します。

2024年8月時点で、その方法として以下の3つの方法があります。上に記したものほど、昔からある手法です。
  • SSHを用いる方法
  • VNCを用いる方法
  • Raspberry Pi Connectを用いる方法
本ページは「SSHを用いる方法」を解説します。Raspberry Pi 上のデスクトップを利用しなくて済むので、メモリの少ない Pi Zero 系の機種に適しています。
また、Linuxの上級者に好まれる方法でもあり、マスターして損のない手法であると言えます。

具体的には、下記のように一つのネットワークにRaspberry PiとPCが属しており、PCからRaspberry Piを利用する、というスタイルになります。
この図だけ見ると、本書の9章や10章で行ったように「PC のブラウザから Raspberry Pi の回路にアクセスする」方法とあまり変わらないように思えるかもしれません。

9章や10章と異なるのは、Raspberry Pi にディスプレイ、マウス、キーボードを一切接続せず、「プログラムの作成」、「プログラムの実行」、「Raspberry Pi のシャットダウン」などをすべてPCから行うことが可能だ、という点です。

この際、PC のデスクトップの外観は下図のようになります。左上のアプリケーションは Tera Term という Windows 用のターミナルアプリケーション、右上は Raspberry Pi の Python 開発環境である Thonny、左下はファイルマネージャであり、 Thonny やファイルマネージャが Windows 上のウインドウとして表示されているのがポイントです。

以下、この動作を実現する方法を解説していきます。

なお、Windowsに対する解説を最初に行い、macOSに対する解説はページ末尾で行います。

必要なツールのインストールと設定(Windows編)

上図の動作をWindowsで実現するためには、下記の2つのアプリケーションをインストールする必要があります。
  • Tera Term(ターミナル)
  • VcXsrv(Xサーバー)
Tera Termは、Windows から Raspberry Pi にログインするために利用するターミナルアプリケーションです。VcXsrv は、上図のように Raspberry Pi のアプリケーションを Windows 上に表示するために必要なアプリケーションで、X サーバーと呼ばれることもあります。
以下、順に解説していきます。

Tera Termのインストールと設定

Tera Termのサイトよりインストールファイルをダウンロードします。最新版をダウンロードして下さい。2024年8月における最新版のファイル名は teraterm-5.2.exe でした。

ダウンロード後はファイルをダブルクリックしてインストールします。デフォルトの設定のままインストールを終えて構いません。

インストール後、Tera Term を起動すると、下記のようなウインドウが現れます。これは、Raspberry Pi に接続するためのウインドウなのですが、ウインドウを PC に表示するための設定が接続前に必要ですので、ここでは図のように「キャンセル」ボタンを押します。
その後、残ったウインドウで下記のように「設定」→「SSH転送」を選択します。
すると、下図のようなウインドウが現れますので、図のように「リモートのXアプリケーションをローカルのXサーバに表示する」にチェックを入れ、「OK」を押します。
その後、「設定」→「設定の保存」を選択し、今の設定を保存します。
保存するファイル名や場所は変更せず、そのまま「保存」ボタンを押せば設定が保存されます。
以上の設定は、初回のみの実行でよく、次回からは実行する必要がありません。
以上でTera Termの設定は終わりですので、一旦Tera Termのウインドウを閉じます。

VcXsrvのインストールと設定

次に、VcXsrvのインストールを行います。X サーバーと呼ばれる機能を Windows 上に実現するソフトウェアです。

まず、公式サイトよりファイルをダウンロードします。
ダウンロードするファイル名は、vcxsrv-64.X.X.X.X.installer.exe の形式のものを選びましょう。64ビット版のリリースファイルです。
ただし、2024年8月現在、最新版はファイルにウィルスが含まれていると Windows Defender に誤検出され、ファイルがダウンロードされませんでした。
Windows Defender を使っているとこのような誤検出の問題がときどき起こります。
そのような場合、一つ前の古いバージョンをダウンロードするなどすると良いでしょう。私の場合、vcxsrv-64.21.1.13.0.installer.exe ではなく、vcxsrv-64.21.1.10.0.installer.exe をダウンロードしました。

さて、インストール用のファイルのダウンロードが終わったら、デフォルトの設定でインストールします。インストール時に青い画面の警告が出た場合、「詳細情報」リンクをクリックしてから実行します。

インストールが終了すると、デスクトップに下図のように XLaunch と書かれたアイコンが現れます。
このアイコンをダブルクリックして X サーバーを起動してみましょう。幾つかウインドウで設定を求められますが、デフォルトのままで構いません。すなわち、
  • 「Multiple windows」にチェックが入った状態で「次へ」
  • 「Start no client」にチェックが入った状態で「次へ」
  • 「Clipboard」、「Primary Selection」、「Native opengl」にチェックが入った状態で「次へ」
  • 「完了」をクリックする前に「Save configuration」を押すと、そこまでの設定が保存できますので、場所を選んで保存しましょう。デスクトップ上でも構いません。「config.xlaunch」というファイルが保存されます
  • 最後に「完了」で X サーバーが起動されます
初回起動時に、下記のようにファイアウォールへのアクセス許可を求める警告が現れますが、そのまま「許可」ボタンをクリックします。 なお、サードパーティ製のウイルス対策ソフトなどをインストールしている場合、そのソフトウェアのファイアウォール機能に対してVcXsrvへのアクセス許可を行う必要があるかもしれません。しかし、私はそのようなソフトウェアを持っておらず、その設定方法についての質問には答えられませんのでご了承ください。ここではWindows標準のファイアウォール機能のみを用いている場合について解説しています。
さて、X サーバーが起動した状態では下図のようにタスクトレイに「X」というアイコンが現れます。以下で行うRaspberry Piへの接続時は、必ずこの「X」というアイコンが表示された状態で行ってください。
なお、デフォルトでは X サーバーの起動は自動では行われませんので、Windows を再起動するたびに手動で起動する必要があります。
そのような場合、初回起動時に保存した「config.xlaunch」をダブルクリックすると、その時の設定で X サーバーが起動されますので、次回からは「XLaunch」ではなく「config.xlaunch」をダブルクリックして X サーバーを起動するようにしましょう。
なお、「config.xlaunch」をダブルクリックしてXを起動できることを確認したら、デスクトップ上の XLaunch のアイコンは削除してしまっても構いません。

Raspberry Piでの準備

現在の Raspberry Pi OS では、デフォルトで ssh というソフトウェアが無効になっていますので、これをあらかじめ有効にしておく必要があります。

Raspberry Pi のデスクトップ左上にあるメニューから「設定」→「RaspberryPiの設定」と進み、下図のように「インターフェイス」タブの「SSH」を有効にしてください。これでsshが有効になります。

Windows から Raspberry Pi への接続

以上の準備が終わったら、Raspberry Pi へ接続してみましょう。あらかじめ Raspberry Pi を起動しておきます。慣れないうちは、これまで通り Raspberry Pi にディスプレイ、キーボード、マウスを接続しておいてもよいでしょう。

その状況で、Windows で Tera Term を起動し、Raspberry Pi に接続します。

下図のように、Tera Term の「新しい接続」ウインドウの「ホスト」欄に、Raspberry Pi の IP アドレスを記入して「OK」を押します。
なお、本書10章で注意したように、ここで Raspberry Pi に接続するためには、IPアドレスを知る必要があります。そのためには、Raspberry Piに ディスプレイとキーボードを接続しておく必要があり、本末転倒です。

この問題を解決するためには、本書では以下の方法を紹介しました。興味のある方はトライしてみてください。
  • 「ホスト」欄に、IP アドレスではなく「raspberrypi.local」と記入する:Windows に iTunes がインストールされている必要がある(iTunes に含まれる Bonjour というソフトウェアが必要なため)。iTunesのページを少しスクロールしたところにある「ほかのバージョンをお探しですか?」項目の「Windows」項目をクリックしてファイルをダウンロードする。Miscrosoft Store 版の iTunes ではダメなようです。
  • iTunes をインストールしたくない場合、Android スマートフォンをお持ちの方なら、Android アプリ「.Local Finder (mDNSによるIP検索)」をインストールし、このアプリで raspberrypi という名前を検索すると、Raspberry Pi の IP アドレスを知ることができます。
さて、「IP アドレス」または「raspberrypi.local」を「ホスト」欄に記述して「OK」を押すと、 初回起動時にのみ、下図のようなセキュリティ警告が現れますが、そのまま「続行」をクリックしてください。
下記のようにユーザー名とパスワードが求められます。Raspberry Pi OS のインストール時に 決定したユーザー名とパスワードを入力します。図中の「kanamaru」は私の場合の例です。入力したら「OK」を押します。
最終的に下図のような状態になります。Raspberry Pi で LXTerminal を起動した状態に似ていますね。これが、Windows 上のターミナルソフトウェア Tera Term で Raspberry Pi に接続した状態になります。
この Tera Term 上で Raspberry Pi のコマンドを実行してみます。例えば、Thonny を起動するためのコマンド「thonny」(すべて小文字であることに注意)を実行した様子が下図になります。末尾に「&」をつけて「thonny &」とすると、そのコマンドの実行後、同じ Tera Term でさらに別のコマンドを実行できるようになります。

別ウインドウでLXTerminal が起動していることがわかります。これは、X サーバーである Vcxsrv をあらかじめ実行しておいたことの効果です。

なお、ターミナルから Thonny を起動すると、図に示されているように警告やメッセージがたくさん表示されますが、気にする必要はありません。
さらに、この Tera Term 上で「pcmanfm &」コマンドでファイルマネージャ起動したのが下図です。

以上の例から想像できるように、よく使うアプリケーションのコマンド名を知っておくと便利です。本書に関連するのは下記のアプリやコマンドです。
  • Thonny:thonny
  • ファイルマネージャ:pcmanfm
  • テキストエディタ:mousepad
  • 設定アプリケーション:rc_gui
  • Raspberry Pi のシャットダウン:sudo poweroff
  • Raspberry Pi の再起動:sudo reboot
  • ブラウザ(chromium):chromium-browser (ただし、「さらなる発展」で後述するように Raspberry Pi 上でブラウザを使う理由はほとんどありません)

日本語入力は?

以上の方法では、テキストエディタなどに日本語を直接入力する方法がないように思えます。

ただし、Windows アプリから文字をコピーして Raspberry Pi のアプリケーションに貼り付けることはできますので、Windows のメモ帳などで日本語を書いて Raspberry Pi のアプリケーションに貼り付けるという手はあります。

もし、よりスマートな方法をご存知の方はお知らせ頂けると幸いです。

管理者権限で GUI アプリケーションを実行する際の注意

上記の方法で Windowsから Raspberry Pi のアプリケーションを実行できるようになったのですが、管理者権限でウインドウのある GUI アプリケーションを実行しようとすると、エラーが出て実行に失敗します。例えば管理者権限でのテキストエディタの起動「sudo mousepad」などです(本書ではこれをしばしば用いました)。
本ページの方法で GUI アプリケーションを管理者権限で実行するには、例えば mousepad の場合、下記のコマンドで実行しなければなりません。
XAUTHORITY=/home/$USER/.Xauthority sudo mousepad
これを毎回実行するのは非常に面倒ですね。
下記の手順に従うと、この長い実行コマンドを簡略化できますので、試してみると良いでしょう。
まず、.bashrcという設定ファイルをテキストエディタmousepadで開きます。ターミナルで下記を実行するのでした。
mousepad .bashrc
このファイルの末尾に、下記の1行を追加します。これは「XAUTHORITY=/home/$USER/.Xauthority sudo」という長い命令を「xsudo」で置き換える、という設定です。
alias xsudo="XAUTHORITY=/home/$USER/.Xauthority sudo"
追加したらファイルを保存してテキストエディタを閉じます。

この設定を有効にするには、Raspberry Pi を再起動してしまうのが簡単です。

その後、Tera Term にて、
xsudo mousepad
を実行すると、管理者権限のテキストエディタがWindows上に開く、というわけです。
なお、この方法が必要なのは、GUIアプリケーションを管理者権限で実行する場合のみです。例えば、シャットダウンコマンド「sudo poweroff」は管理者権限ですが、GUI がないのでこれまで通りの実行方法でエラーはでません。

さらなる発展

以上で、Raspberry Piにディスプレイ、マウス、キーボードを接続せずに運用できるようになりました。

しかし、実際に使ってみると、Raspberry Pi 上の GUI アプリケーションの動作がやや緩慢であることに不満を覚える方が多いかもしれません。これは、GUI の描画をネットワーク経由で行っていることが原因です。

実際のところ、より Linux に慣れている上級者の方で、上記のように Raspberry Pi の GUI アプリケーションを Windows 上に表示して用いている、という方は多くはないと思います。

彼らがどうしているかというと、Raspberry Pi 上で行う全ての処理を、上記のターミナルソフトウェア Tera Term 上で行ってしまうのです。Tera Term は Raspberry Pi とコマンド(文字)のやりとりしかしませんから、ネットワーク経由でも動作が軽快なわけです。

しかし、そのためには、例えば下記のような操作をすべてターミナル上で行えなければいけません。
  • ファイルの編集(プログラムや設定ファイルの記述)
  • ファイルの操作(ファイルの削除、ファイルの移動、ファイル名の変更など)
  • プログラムの実行
一つ目の「ファイルの編集」について、本書では mousepad というアプリケーションを用いましたが、これはターミナル外で動作するGUIアプリケーションなので、ターミナル上で動作するという条件を満たしません。

ターミナル内のみでファイルを編集できるアプリケーションとして良く知られているのは、
  • nano(起動したら、終了するにはCtrl-X)
  • vi
  • emacs
などです。vi や emacs は、利用法の解説で一冊の本が書けるくらい奥が深いものなので、初めての方が試すならnanoでしょうか。
二つ目の「ファイルの操作」についてはamazonなどの書店で「Linux コマンド」などのキーワードで検索すると、参考書が多数見つかるでしょう。
三つ目の「プログラムの実行」については本書付録Cに少し解説があります。

なお、本書では「ブラウザで補足ページを開いてコマンドなどをコピーしてターミナルで貼り付け」という方法を覚えると演習が楽になります。 今回の場合のように Tera Term で Raspberry Pi にログインしている場合、このブラウザとして Raspberry Pi 上のブラウザを用いる理由はほとんどありません。
Windows 上のブラウザで本書の補足ページを開き、コマンドを (Ctrl-C などで)コピーして Tera Term へ貼り付ければ良いのです。 Tera Term へのコマンドの貼り付けは Alt+V またはマウスの右ボタンをクリック、です。この手法を用いると、Tera Term でのコマンドの実行がかなり楽になるでしょう。

なお、この状態は、「Raspberry Pi に SSH 接続して運用しているが、OS は GUI モードで起動した状態」になっています。
SSH 接続しかしていないのに OS が GUI モードで起動しているのはメモリの無駄づかいとなっていますので、CUI モードに切り替えることを検討しても良いでしょう。
「sudo raspi-config」を実行することで raspi-config を起動し、「1. System Options」→「S5 Boot」→「B1 Console Text console」の順に選択すればよいです(その後はTABキー2回で「Finish」にフォーカスを合わせEnter)。

ここまでの手法をマスターすると、Raspberry Pi に電源ケーブルだけを接続し、ディスプレイ、キーボード、マウスを接続しない「ヘッドレス(headless)」での運用が可能になります。その状態に慣れると、 OS のインストールもヘッドレス状態で実行したくなります。すなわち、ユーザーの作成、Wifi への接続、SSH の有効化などをディスプレイ、キーボード、マウスの接続なしで実行したくなる、ということです。 その方法の解説を「Raspberry Pi をヘッドレスで運用する」にまとめましたので、さらなる発展としてご活用ください。

必要なツールのインストールと設定(macOS 編)

さてここからは、macOS で同じことを行う方法を記していきます。私は M1 チップ搭載の MacBookPro (Sonoma) で行いましたが、他のバージョンでも同様に動作すると思います。Windowsと同様、
  • ターミナル
  • Xサーバー
の2つが必要になります。macOS には「アプリケーション / ユーティリティ / ターミナル」としてターミナルが既に含まれていますので、Xサーバーのインストールから行います。

XQuartzのインストールと起動

ここでは、macOS 用の X サーバーである XQuartz をインストールします。XQuartz の公式サイトよりファイルをダウンロードします。執筆時は XQuartz-2.8.5.dmg が最新版でした。

ダウンロード後はインストールを行ってください。

インストール後は下記のようにアプリケーション→ユーティリティに「XQuartz」アイコンが現れます。また、本ページで多用する「ターミナル」も存在するのがわかるでしょう。
XQuartz をダブルクリックして起動すると、下記のようにドックに XQuartz のアイコンが現れます。下記で Raspberry Pi に接続するときは、このアイコンが現れているときに行います。実際には、次回からは macOS が起動するときに同時に XQuartz も自動的に起動するようです。
なお、XQuartz を手動で起動すると、下記のような「xterm」というアプリケーションも同時に起動するのですが、これは用いませんので閉じてしまって構いません。以上で、XQuartz のインストールと起動は完了です。

sshの設定

次に、Raspberry Piに接続してGUIアプリケーションを表示するための設定を行います。

macOS 上にある /etc/ssh/ssh_config という設定ファイルを管理者権限で編集する必要があります。ここでは nano というテキストエディタで行います。

まず、macOS 上で「アプリケーション→ユーティリティ→ターミナル」を起動しましょう。そして、下図のようにターミナル上で
sudo nano /etc/ssh/ssh_config
を実行しましょう。すると、macOS にログインする際のパスワードを聞かれますので、入力してください。その際、パスワード記入欄のカーソルは変化しませんが、気にせずに入力してEnterキーを押してください。
パスワードの入力に成功すると、下図のようにターミナル上でテキストエディタnanoが管理者権限で起動します。矢印キーでカーソルを移動できますので、操作はそれほど難しくないでしょう。

そして、下図のように「#    ForwardX11 no」という行を見つけ、その下に
ForwardX11 yes
という行を一行追記します。
追記が終わったら、保存してnanoを閉じます。以下の流れで行いましょう。
  • Ctrl-X(Ctrl キーを押しながら X キー)を入力
  • 変更を保存するか?(Save modified buffer?)と聞かれるので「y」を入力
  • ファイル名(File Name to Write)を聞かれるので、変更せずそのままEnterを入力
以上で変更が保存されnanoが終了するはずです。

macOS からRaspberry Piへの接続

以上で準備が整いましたので、macOS から Raspberry Pi に接続しましょう。

なお、Windows 編で注意したように、ssh というソフトウェアを Raspberry P i上であらかじめ有効にしておく必要があります。Windows 編の「Raspberry Pi での準備」を参考に、Raspberry Pi 上で ssh を有効にしてから先に進んでください。

準備ができたら、macOS 上で「アプリケーション→ユーティリティ→ターミナル」を起動し、下図のように
ssh kanamaru@raspberrypi.local
と入力してEnterキーを押しましょう。もちろん、「kanamaru」の部分は皆さんが Raspberry Pi OS のインストール時に決めた自分の ID で置き換えてください。

なお、これは「raspberrypi.local というホストにユーザー kanamaru でログインする」という意味になります。IPアドレスで指定したい場合、例えば「ssh kanamaru@192.168.1.3」などとなります。
まず、「本当に接続するか?」と聞かれますので、「yes」とタイプして Enter キーを押します。
次に、パスワードの入力を求められますので、Raspberry Pi OS のインストール時に決めたパスワードを入力します。その際、パスワード記入欄のカーソルは変化しませんが、気にせずに入力してEnterキーを押してください。
パスワードの入力に成功すると、下図のようにログインに成功します。
あとは自由にアプリケーションを起動してみましょう。下図は、Windowsで行ったように
  • ターミナルから「thonny &」により Thonny を起動
  • ターミナルから「pcmanfm &」によりファイルマネージャを起動
を実行した様子です。
なお、管理者権限でGUIアプリケーションの実行するとそのままではエラーが出ますので、本ページ中ほどにある「管理者権限でGUIアプリケーションを実行する際の注意」を参照してください。同様に、よく使うアプリケーションのコマンド名も本ページ中ほどで紹介しています。

プロキシ(Proxy)環境下での本書の演習の実行

はじめに

職場や学校などでは、ネットワークに接続するためにプロキシ(Proxy)サーバーと呼ばれるものを介する場合が多いと思います。そのような環境下では、本書でネットワーク接続を必要とする演習をそのままでは実行できません。

下記の設定を行えば、全ての演習を実行できるようになりますが、上級者向けの内容ですので、職場や学校のネットワーク管理者など、ネットワークに詳しい方と一緒に作業することをお勧めします。

aptコマンド

ソフトウェアのインストールの際などに実行するaptコマンドを用いるための方法です。この設定を行うことで、OSの更新も可能になります。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタmousepadで設定ファイル/etc/apt/apt.confを作成します。
$ sudo mousepad /etc/apt/apt.conf
このファイルに下記の内容を記述します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
Acquire::http::proxy "http://プロキシサーバー名:ポート番号/";
Acquire::https::proxy "https://プロキシサーバー名:ポート番号/";
Acquire::ftp::proxy "ftp://プロキシサーバー名:ポート番号/";
Acquire::socks::proxy "socks://プロキシサーバー名:ポート番号/";
記述が終わったら、ファイルを保存してからmousepadを閉じてかまいません。

以上で、「sudo apt -y install (パッケージ名)」、「sudo apt update」などのコマンドが実行できるようになります。

ブラウザやwgetコマンドどなど

次に、ブラウザや、ファイルのダウンロードなどで用いるwgetコマンドを利用するための方法です。
(wget コマンドは、本書の旧バージョンでは用いましたが、最新バージョンでは用いません)

ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタmousepadで設定ファイル/etc/environmentを編集用に開きます。
$ sudo mousepad /etc/environment
多くの場合 /etc/environment は何も書かれていない空のファイルですので、そのまま以下の3行を記入してください。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。もし何かが書かれていた場合も、その内容を壊さないように注意しながら、ファイルの末尾に以下の内容を記します。
http_proxy=http://プロキシサーバー名:ポート番号/
https_proxy=http://プロキシサーバー名:ポート番号/
ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述したらファイルを保存してテキストエディタを閉じます。この設定を読み込むためにRaspberry Piを再起動してください。再起動後、ブラウザでインターネット上のウェブサイトを閲覧できるようになっているはずです。

時刻合わせ

プロキシ環境下ではRaspberry Piの時刻合わせが機能しない場合が多いと思います。そのような場合、もし職場や学校内に時刻合わせサーバーが存在すれば、下記の方法で時刻を合わせることができます。

ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタmousepadで設定ファイル/etc/systemd/timesyncd.confを開きます。
$ sudo mousepad /etc/systemd/timesyncd.conf
ファイル内で下記のような箇所を見つけます。
(略)
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3
.debian.pool.ntp.org
このうち、NTPに関する行の先頭の「#」を削除し、「=」の右辺にお使いの時刻合わせサーバーを記述します。 時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
記述後、Raspberry Piを再起動すれば時刻が合うようになります。

プロキシ環境下で時刻合わせサーバーが提供されていない場合、Raspberry Piの時計を自動で合わせることができません。
その場合、下記のコマンドで手動で時計を合わせるのが良いでしょう。
例えば、2024年8月6日23:07に合わせたい場合、下記のコマンドで実現できます。
sudo date 080623072024

下記の省略形も可
sudo date 0806230724
sudo date 08062307


プロキシ(Proxy)環境下での本書9章と10章の実行

さて、以上で本書の内容をプロキシ環境下で学べるようになりましたが、9章と10章を学ぶ際にはもう一点、注意すべきことがあります。

これらの章では、PCやスマートフォンのブラウザを通して、同一ネットワーク内のRaspberry Piにアクセスし、回路を制御します。この際の模式図が下図です。このPCやスマートフォンでは、通常のインターネットへのアクセスの際にプロキシサーバを経由しなければなりませんが、同一ネットワーク内のRaspberry Piへアクセスする場合は、プロキシサーバーを経由せず直接アクセスせねばなりません。
そのために、Raspberry PiのIPアドレス(ここでは192.168.1.3とします)を「プロキシの例外サイト」としてあらかじめ登録しておく必要があります。


Windowsの場合の例外サイトの設定法を示したのが下図です。「設定」から「ネットワークとインターネット」→「プロキシ」と辿り、「手動プロキシ セットアップ」の「編集」ボタンをクリックするとプロキシサーバーおよび例外サイトを設定できます。図ではセミコロン(;)で区切ったうしろに、192.168.1.3が例外サイトとして登録されていることがわかるでしょう。
この「例外サイト」の設定はmacOSにも存在します。「システム環境設定」→「ネットワーク」
→「詳細」→「プロキシ」です。

しかし、iOS(iPhoneやiPad)の場合、この例外サイトの設定は存在しないため、iOSでプロキシの設定自体を無効にする(すなわち、上の図でインターネットへのアクセスができない状態にする)しかありません(pacファイルと呼ばれるものをサーバーに設置してこの問題を回避する方法もありますが、ここでは割愛します)。

androidの場合、Wifiの設定に例外サイトの設定があるのですが、この設定が存在しない場合(あるいは機能しない場合)は、やはりプロキシの設定を無効にしてRaspberry Piにアクセスせざるを得ないことがあります。