2016年4月18日月曜日

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

はじめに

Raspberry Piは名刺サイズの超小型コンピュータですが、ディスプレイを接続して利用するとRaspberry Piの省スペース性が犠牲になるという問題がありました。

それを解消する方法のひとつとして、本サイトでは「Raspberry Pi公式タッチディスプレイで本書の演習を実行する」というページにて、7インチの小型ディスプレイを用いる方法を紹介しました。

それでもRaspberry Piにキーボードやマウスを接続する必要はあり、ある程度のスペースが必要であることは変わりません。

そこで、本ページではタイトルにあります通り、「Raspberry Piにディスプレイ・マウス・キーボードを接続せずに利用する」ことを目指します。

具体的には、下記のように一つのネットワークにRaspberry PiとPCが属しており、PCからRaspberry Piを利用する、というスタイルになります。


この図だけ見ると、本書の9章や10章で行ったように「PCのブラウザからRaspberry Piの回路にアクセスする」方法とあまり変わらないように思えるかもしれません。

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

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

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

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


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

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

以下、順に解説していきます。

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

Tera Termのサイトよりインストールファイルをダウンロードします。ここでは、執筆時の最新版である teraterm-4.90.exe をダウンロードしました。

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

インストール後、Tera Termを起動すると、下記のようなウインドウが現れます。これは、Raspberry Piに接続するためのウインドウなのですが、接続前に設定が必要ですので、ここでは図のように「キャンセル」ボタンを押します。


その後、残ったウインドウで下記のように「設定」→「SSH転送」を選択します。


すると、下図のようなウインドウが現れますので、図のように「リモートの(X)アプリケーションをローカルのXサーバに表示する」にチェックを入れ、「OK」を押します。


その後、「設定」→「設定の保存」を選択し、今の設定を保存します。


保存するファイル名や場所は変更せず、そのまま「保存」ボタンを押せば設定が保存されます。

以上でTera Termの設定は終わりですので、一旦Tera Termのウインドウを閉じます。


VcXsrvのインストールと設定

次に、VcXsrvのインストールを行います。

まず、公式サイトよりファイルをダウンロードします。なお、ダウンロードされるファイルについては注意が必要で、こちらのダウンロードサイトより、自分に適したバージョンを選択してダウンロードする必要がある場合があります。

Windows 7以降をご利用の場合、最新版をダウンロードしますが、Windowsが64bit用か32bit用かで異なるファイルをダウンロードする必要があります。執筆時の場合、バージョン1.18.1.1の下記のようなファイルでした。
  • Windows 7以降(64bit)をご利用の場合:vcxsrv-64.1.18.1.1.installer.exe
  • Windows 7以降(32bit)をご利用の場合:vcxsrv.1.18.1.1.installer.exe
Windows XPをご利用の場合、VcXsrvの最新版ではXPは既にサポートされていませんので、旧バージョン1.14.2.1に該当する以下をダウンロードします。ただし、私はXPでの動作は確認していませんのでご注意ください。
  • Windows XP(64bit)をご利用の場合:vcxsrv-64.1.14.2.1.installer.exe
  • Windows XP(32bit)をご利用の場合:vcxsrv.1.14.2.1.installer.exe
ダウンロードが終わったら、デフォルトの設定でインストールします。

インストールが終了すると、デスクトップに以下の2つのアイコンが現れます。


VcXsrvはデフォルトの設定でVcXsrvを起動する場合に利用し、XLaunchは設定を変更しつつVcXsrvを起動する場合に利用するのですが、本ページの利用の仕方ではVcXsrvでの起動で構いません。

初回起動時に、下記のようにファイアウォールへのアクセス許可を求める警告が現れますが、そのまま「アクセスを許可する」ボタンをクリックします。チェックボックスの状態は環境により異なりますので、デフォルトのままで構いません。

なお、サードパーティ製のウイルス対策ソフトなどをインストールしている場合、そのソフトウェアのファイアウォール機能に対してVcXsrvへのアクセス許可を行う必要があるかもしれません。しかし、私はそのようなソフトウェアを持っておらず、その設定方法についての質問には答えられませんのでご了承ください。ここではWindows標準のファイアウォール機能のみを用いている場合について解説しています。



さて、VcXsrvが起動した状態では下図のようにタスクトレイに「X」というアイコンが現れます。以下で行うRaspberry Piへの接続時は、必ずこの「X」というアイコンが表示された状態で行ってください。

デフォルトではVcXsrvの起動は自動では行われませんので、Windowsを再起動するたびに手動でVcXsrvを起動する必要があります。


Raspberry Piでの準備

NOOBS 2.0.0までは、Raspberry Pi側の準備は必要なかったのですが、2016年11月29日にリリースされたNOOBS 2.1.0以降では、sshというソフトウェアが無効になったので、これをあらかじめ有効にしておく必要がでてきました。

Raspberry Piのデスクトップ左上にあるメニューから「設定」→「RaspberryPiの設定」と進み、下図のように「インターフェイス」タブの「SSH」を「有効」にしてから、Raspberry Piを再起動します。


これでsshが有効になり、以下の手順に進むことができるのですが、デスクトップに下記のように、パスワードを変更するよう警告が出るようになっています。


ユーザーpiのパスワードをデフォルトである「raspberry」のままにしておくと、外部から誰でもログインできてしまいセキュリティ上危険があるので、自分にしかわからないパスワードに変更するよう促されているわけです。

先ほどと同様に「RaspberryPiの設定」アプリケーションでパスワードを変更するとよいでしょう。旧パスワードである「raspberry」を1回、新パスワードを2回入力する必要があります。

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つの方法が有効です。興味のある方はトライしてみてください。
  • Raspberry PiのIPアドレスを固定する:別ページにその方法をまとめました
  • 「ホスト」欄に、IPアドレスではなく「raspberrypi.local」と記入する:RaspbianのバージョンがJessieであり、WindowsにiTunesがインストールされている必要がある(iTunesに含まれるBonjourというソフトウェアが必要なため)

さて、何らかの方法でRaspberry Piを「ホスト」欄に指定して「OK」を押すと、下記のようにユーザー名とパスワードが求められます。これらのデフォルト値は下記のようでした。
  • ユーザー名:pi
  • パスワード:raspberry
入力したら「OK」を押します。


なお、初回起動時に、上記プロセスの途中で下図のようなセキュリティ警告が現れますが、そのまま「続行」をクリックしてください。



最終的に下図のような状態になります。Raspberry PiでLXTerminalを起動した状態に似ていますね。これが、Windows上のターミナルソフトウェアTera TermでRaspberry Piに接続した状態になります。


このTera Term上でRaspberry Piのコマンドを実行してみます。例えば、LXTerminalを起動するためのコマンド「lxterminal」(すべて小文字であることに注意)を実行した様子が下図になります。本書で多く行ったように、末尾に「&」をつけて「lxterminal &」でももちろん構いません。

別ウインドウでLXTerminalが起動していることがわかります。これは、VcXservをあらかじめ動作させたことの効果です。


さらに、このLXTerminal上で「idle」コマンドでPythonの開発環境IDLEを起動したのが下図です。もちろん「idle &」でも構いません。このように、ターミナルからアプリを起動して利用できる、というのがポイントです。

そのため、よく使うアプリケーションのコマンド名を知っておくと便利です。本書に関連するのは下記のアプリやコマンドです。
  • ファイルマネージャ:pcmanfm
  • ブラウザ(epiphany):epiphany
  • ブラウザ(chromium):chromium-browser
  • テキストエディタ:leafpad
  • 設定アプリケーション(Jessie以降):rc_gui
  • シャットダウン:sudo poweroff
  • 再起動:sudo reboot

日本語入力は?

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

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

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

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

上記の方法でWindowsからRaspberry Piのアプリケーションを実行できるようになったのですが、管理者権限でウインドウのあるGUIアプリケーションを実行しようとすると、エラーが出て実行に失敗します。例えば管理者権限でのテキストエディタの起動「sudo leafpad」などです(本書ではこれをしばしば用いました)。

本ページの方法でGUIアプリケーションを管理者権限で実行するには、例えばleafpadの場合、下記のコマンドで実行しなければなりません。
XAUTHORITY=/home/pi/.Xauthority sudo leafpad
これを毎回実行するのは非常に面倒ですね。

下記の手順に従うと、この長い実行コマンドを簡略化できますので、試してみると良いでしょう。

まず、.bashrcという設定ファイルをテキストエディタleafpadで開きます。ターミナルで下記を実行するのでした。
leafpad .bashrc
このファイルの末尾に、下記の1行を追加します。これは「XAUTHORITY=/home/pi/.Xauthority sudo」という長い命令を「xsudo」で置き換える、という設定です。
alias xsudo="XAUTHORITY=/home/pi/.Xauthority sudo"
追加したらファイルを保存してleafpadを閉じます。

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

その後、ターミナル(Tera TermでもLXTerminalでも可)にて、
xsudo leafpad
を実行すると、管理者権限のテキストエディタがWindows上に開く、というわけです。コマンドがかなり簡略化されたことがわかるでしょうか。

なお、この方法が必要なのは、GUIアプリケーションを管理者権限で実行する場合のみです。例えば、シャットダウンコマンド「sudo poweroff」は管理者権限ですが、GUIがないのでこれまで通りの実行方法でエラーはでません。

さらなる発展

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

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

実際、よりLinuxに慣れている方は、上記のようにRaspberry PiのGUIアプリケーションをWindows上に表示して用いる、ということはほとんど行いません。

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

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

ターミナル内のみでファイルを編集できるアプリケーションとして良く知られているのは、
  • nano(起動したら、終了するにはCtrl-x)
  • vi
  • emacs
などです。viやemacsは、利用法の解説で一冊の本が書けるくらい奥が深いものなので、初めての方が試すならnanoでしょうか。

二つ目の「ファイルの操作」についてはamazonなどの書店で「Linux コマンド」などのキーワードで検索すると、参考書が多数見つかるでしょう。 ブルーバックスでもLinuxの入門書が出ましたね。とてもわかりやすいので、本書の読者の方にはお勧めです。

三つ目の「プログラムの実行」については本書付録Cに少し解説があります。


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

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

XQuartzのインストールと起動

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

ダウンロード後はdmgファイルをダブルクリック→現れたpkgファイルをダブルクリック、という流れでインストールを行います。

インストール後は下記のようにアプリケーション→ユーティリティに「XQuartz」アイコンが現れます。また、本ページで多用する「ターミナル」も存在するのがわかるでしょう。


XQuartzをダブルクリックして起動すると、下記のようにドックにXQuartzのアイコンが現れます。下記でRaspberry Piに接続するときは、このアイコンが現れているときに行います(ただし、必要な時にXQuartzが自動的に起動するようですので、手動での起動は必ずしも必要ないかもしれません)。


なお、XQuartzを手動で起動すると、下記のような「xterm」というアプリケーションも同時に起動するのですが、これは用いませんので閉じてしまって構いません。以上で、XQuartzのインストールと起動は完了です。


sshの設定

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

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

まず、OS X上で「アプリケーション→ユーティリティ→ターミナル」を起動しましょう。そして、下図のようにターミナル上で
sudo nano /etc/ssh_config
を実行しましょう。すると、OS Xにログインする際のパスワードを聞かれますので、入力してください。その際、パスワード記入欄のカーソルは変化しませんが、気にせずに入力してEnterキーを押してください。

パスワードの入力に成功すると、下図のようにターミナル上でテキストエディタnanoが管理者権限で起動します。矢印キーでカーソルを移動できますので、操作はそれほど難しくないでしょう。

そして、下図のように「#    ForwardX11 no」という行を見つけ、その下に
ForwardX11 yes
という行を一行追記します。


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

OS XからRaspberry Piへの接続

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

なお、Windows編で注意したように、2016年11月29日にリリースされたNOOBS 2.1.0以降では、sshというソフトウェアが無効になったので、Raspberry Pi上でこれをあらかじめ有効にしておく必要がでてきました。Windows編の「Raspberry Piでの準備」を参考に、Raspberry Pi上でsshを有効にしてから先に進んでください。

準備ができたら、OS X上で「アプリケーション→ユーティリティ→ターミナル」を起動し、下図のように
ssh pi@raspberrypi.local
と入力してEnterキーを押しましょう。

なお、これは「raspberrypi.localというホストにユーザーpiでログインする」という意味になります。IPアドレスで指定したい場合、例えば「ssh pi@192.168.1.3」などとなります。


すると、パスワードの入力を求められますので、ユーザーpiのパスワード(デフォルトで「raspberry」)を入力してEnterキーを押します。その際、パスワード記入欄のカーソルは変化しませんが、気にせずに入力してEnterキーを押してください。

パスワードの入力に成功すると、下図のようにログインに成功します。


あとは自由にアプリケーションを起動してみましょう。下図は、Windowsで行ったように
  • ターミナルからlxterminalを起動
  • lxterminalからidleを起動
を実行した様子です。

なお、管理者権限でGUIアプリケーションの実行するとそのままではエラーが出ますので、本ページ中ほどにある「管理者権限でGUIアプリケーションを実行する際の注意」を参照してください。同様に、よく使うアプリケーションのコマンド名も本ページ中ほどで紹介しています。


0 件のコメント:

コメントを投稿