2019年1月26日土曜日

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

はじめに

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

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

2024年8月時点で、その方法として以下の3つの方法があります。上に記したものほど、昔からある手法です。 本ページは「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に ディスプレイとキーボードを接続しておく必要があり、本末転倒です。

この問題を解決するためには、以下の2つの方法が有効です。興味のある方はトライしてみてください。
  • 「ホスト」欄に、IP アドレスではなく「raspberrypi.local」と記入する:Windows に iTunes がインストールされている必要がある(iTunes に含まれる Bonjour というソフトウェアが必要なため)。iTunesのページを少しスクロールしたところにある「ほかのバージョンをお探しですか?」項目の「Windows」項目をクリックしてファイルをダウンロードする。Miscrosoft Store 版の iTunes ではダメなようです。
  • Raspberry Pi の IP アドレスを固定し、毎回その IP アドレスを記入する:「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 でのコマンドの実行がかなり楽になるでしょう。

必要なツールのインストールと設定(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アプリケーションを実行する際の注意」を参照してください。同様に、よく使うアプリケーションのコマンド名も本ページ中ほどで紹介しています。

0 件のコメント:

コメントを投稿