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.20.1.1の下記のようなファイルでした。
  • Windows 7以降(64bit)をご利用の場合:vcxsrv-64.1.20.1.1.installer.exe
  • Windows 7以降(32bit)をご利用の場合:vcxsrv.1.20.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ではXLaunchアイコン一つしか現れません。


XLaunchアイコンをダブルクリックして起動してみましょう。幾つかウインドウで設定を求められますが、デフォルトのままで構いません。すなわち、
  • 「Multiple windows」にチェックが入った状態で「次へ」
  • 「Start no client」にチェックが入った状態で「次へ」
  • 「Clipboard」、「Primary Selection」、「Native opengl」にチェックが入った状態で「次へ」
  • 「完了」をクリックする前に「Save configuration」を押すと、そこまでの設定が保存できますので、場所を選んで保存しましょう。デスクトップ上でも構いません。「config.xlaunch」というファイルが保存されます
  • 最後に「完了」でXが起動されます
なお、保存された「config.xlaunch」をダブルクリックすると、その時の設定でXが起動されますので、次回からは「config.xlaunch」をダブルクリックしてXを起動するようにしましょう。

なお、「config.xlaunch」をダブルクリックしてXを起動できることを確認したら、デスクトップ上のXLaunchのアイコンは削除してしまっても構いません。

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

なお、サードパーティ製のウイルス対策ソフトなどをインストールしている場合、そのソフトウェアのファイアウォール機能に対して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の設定」アプリケーションでパスワードを変更するとよいでしょう。

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
  • ブラウザ(chromium):chromium-browser
  • ブラウザ(epiphany):epiphany
  • テキストエディタ:leafpad (NOOBS 3.2.1以降では mousepad)
  • 設定アプリケーション(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
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad .bashrc
このファイルの末尾に、下記の1行を追加します。これは「XAUTHORITY=/home/pi/.Xauthority sudo」という長い命令を「xsudo」で置き換える、という設定です。
alias xsudo="XAUTHORITY=/home/pi/.Xauthority sudo"
追加したらファイルを保存してleafpadを閉じます。

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

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

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


2016年4月13日水曜日

Raspberry PiのIPアドレスを固定する

はじめに

本書の9章および10章では、下図のようにRaspberry PiとPC(またはスマートフォン)とをルーター機器に接続したネットワークを構成し、PC(またはスマートフォン)からRaspberry Piにアクセスしました。

その際、Raspberry Piに振られるIPアドレスはルーター機器から自動的に割り当てれるものを利用しました。

例えば、下の図ではRaspberry PiのIPアドレスが「192.168.10.3」、PCのIPアドレスが「192.168.10.2」と示されています。「IPアドレスが自動的に割り当てられる」ということは、このIPアドレスが逆になることや、「192.168.10.4」以降のIPアドレスが割り当てられることもある、ということを意味します。

そのため、10章でRaspberry Piを搭載したキャタピラ式模型を作成した際、どのようなIPアドレスがRaspberry Piに割り当てられたかを知る方法が必要でした。本書ではLCDをキャタピラ式模型に搭載し、そこにIPアドレスを表示することでその問題を解決しました。

しかし、Raspberry PiのIPアドレスがルーターから自動的に割り当てられるものではなく、最初から固定されたものであったら、IPアドレスを知るための工夫は不要になります。

本ページではそれを実現するために必要な予備知識と、具体的な方法について解説します。


どのようなIPアドレスに固定すれば良いかを知ろう

Raspberry PiのIPアドレスを固定したい場合、まずはどのようなIPアドレスを利用してよいのかを知るところから始めます。そのためには、お使いのルーター機器の設定を確認する必要があります。

何故でしょうか。例えば、Raspberry Piに「192.168.10.2」というIPアドレスを固定アドレスとして(勝手に)割り当てたとします。しかし、「192.168.10.2」というIPアドレスはWifiルーターによって管理されていますので、そのIPアドレスがPCに割り当てられることがあり得ます。

すると、ネットワーク内に同じIPアドレスの機器が2台存在することになり、ネットワークが正常に機能しなくなります。

そのため、固定アドレスとして利用するためには、Wifiルーターにより自動的に割り当てられるアドレスを避けなければいけないわけです。

以下、本ページでは、高度な解説をさけるため、家庭用の一般的なルーター機器のデフォルトの設定に基づいて解説を進めます。例としてNECとBuffaloのルーター機器を取り上げます。

学校や職場のような環境の場合、本ページの解説が当てはまらないことがありますので、詳細はネットワーク管理者にお尋ねください。

1. NEC Aterm WG600HPの場合

まず、WifiルーターであるNEC Aterm WG600HPを例に解説します。NEC社のWifiルーターであれば、似た手順で設定を確認できると思います。

まず、上の図のようにRaspberry Piに192.168.10.3のようなIPアドレスが自動的に割り当てられているとします。このアドレスは、メーカーや機種によって異なりますので、適切に読み替えてください。

このとき、実はルーター機器(のLAN側)にもIPアドレスが割り当てられています。多くの家庭用ルーター機器のデフォルト設定では、Raspberry PiのIPアドレスの3つめのピリオドの右側の数値を「1」に置き換えたIPアドレスとなります。すなわち、上図では「192.168.10.1」です。
(繰り返しますが、学校や職場などでは必ずしもそうはなっておりませんのでご注意ください)

そのIPアドレスに対してブラウザでアクセスすると、ルーター機器の設定画面に入ることができます。上図の状況の場合、ブラウザのアドレス欄に「 http://192.168.10.1/ 」を記入します。

NEC Aterm WG600HPの場合、ユーザーadminに対し、購入時の初回設定で決めたパスワードを入力する必要があります。詳細はルーター機器の説明書をご覧ください。本ページでは、ルーター機器の一般的な設定方法についてのご質問には回答できません。

設定画面において、下図のように「詳細設定」→「LAN側設定」のページを見ると、ここで知りたい情報が記されています。

まず、「IPアドレス」欄に「192.168.10.1」と記されています。これがこのルーターのIPアドレスです。機種によって異なることも多いでしょう。

その横に記されている「24」という数字は、「このネットワークでは192.168.10.0~192.168.10.255のIPアドレスが使える」、ということを示すネットマスクと呼ばれる数値に関連するのですが、ここでの解説は省略します。ほとんどの機種で「24」となっているのではないでしょうか。

さらに、赤い四角で囲われた以下の情報に着目してください。
  • アドレス割当パターン:自動指定
  • 割当先頭アドレス:(指定なし)
  • 割当数:32
最初の2つの項目によって「PCやRaspberry Piに割り当てられるIPアドレスは192.168.10.2を先頭とする」ということが示されています。これは、設定ページ上の「?(ヘルプ)」マークをクリックすることでわかります。

さらに3つ目の項目も合わせると、「PCやRaspberry Piに割り当てられるIPアドレスは192.168.10.2~192.168.10.33の32個」であることがわかります。

以上をまとめると、このネットワークにおけるアドレスの利用のされ方は下図のようになります。 192.168.10.0と192.168.10.255はそれぞれネットワークアドレス、ブロードキャストアドレスと呼ばれる特別なアドレスなので利用できません。また、192.168.10.1はルーターのIPアドレス、192.168.10.2~192.168.10.33はルーターから割り当てられるアドレスなのでやはり利用できません。

その結果、このルーターでは、固定するIPアドレスとして利用可能なのは192.168.10.34以降であることがわかりました。
なお、上のルーターの設定画面で設定を変更すると、ルーターによって割り当てられるIPアドレスの先頭アドレスを後方にずらすことも可能です。そうすると192.168.10.2などの若いIPアドレスを固定IPアドレス用として利用可能になりますが、ルーターの設定変更が必要になりますので、適用は自己責任でお願いします。

2. Buffalo WHR-1166DHP2の場合

次に、BuffaloのWifiルーター WHR-1166DHP2の場合の解説を行います。Buffalo社のルーターならば、似たような手順で設定を確認できるでしょう。

NEC社のWifiルーターで解説したのと同様に、ルーターのIPアドレスを知る必要があります。WHR-1166DHP2の場合、Raspberry PiやPCにはデフォルトで192.168.11.XというIPアドレスが振られていました。そのため、ルーターのIPアドレスは192.168.11.1と考えられます。

そこで、PCのブラウザで、アドレス欄に「 http://192.168.11.1/ 」を記入し、ルーターにアクセスします。

WHR-1166DHP2の場合、ユーザーadminに対し、出荷時のパスワードを入力する必要があります。詳細はルーター機器の説明書をご覧ください。本ページでは、ルーター機器の一般的な設定方法についてのご質問には回答できません。

設定画面において、「詳細設定」→「LAN」→「LAN」と辿ると、下図のように知りたい情報が記されています。

まず、「LAN側IPアドレス」欄に「192.168.11.1」と記されています。これがこのルーターの(LAN側の)IPアドレスです。機種によって異なることも多いでしょう。

その下の「255.255.255.0」という数字はネットマスクと呼ばれ、「このネットワークでは192.168.11.0~192.168.11.255のIPアドレスが使える」、ということを示します。NECのルーターで書かれていた「/24」と同じ意味です。多くのルーターでこの値となっているでしょう。

「割り当てIPアドレス」に書かれているように『「192.168.11.2」から64個』がこのWifiルーターにより自動的に割り当てられるIPアドレスです。

以上をまとめると、このネットワークにおけるアドレスの利用のされ方は下図のようになります。 192.168.11.0と192.168.11.255はそれぞれネットワークアドレス、ブロードキャストアドレスと呼ばれる特別なアドレスなので利用できません。また、192.168.11.1はルーターのIPアドレス、192.168.11.2~192.168.11.65はルーターから割り当てられるアドレスなのでやはり利用できません。

その結果、このルーターでは、固定するIPアドレスとして利用可能なのは192.168.11.66以降であることがわかりました。

IPアドレスを固定する

さて、以上で固定するIPアドレスを決めることができました。ここから、実際に設定を行っていきましょう。NECのルーターの例で示したように、192.168.10.34に固定する場合を例に解説します。

RaspbianのバージョンはJessie系列(NOOBS 1.9.0)とWheezy系列(NOOBS 1.4.1)の両方で動作を確認しました。

まず、ターミナル上で下記のコマンドを実行し、設定ファイル /etc/dhcpcd.conf を管理者権限で編集します。
  • sudo leafpad /etc/dhcpcd.conf
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
  • sudo mousepad /etc/dhcpcd.conf
このファイルの末尾に、下記のような4行を追加します。
interface wlan0
static ip_address=192.168.10.34/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1
これらの行は、環境に応じて変更が必要ですので、順に解説します。
  • 1行目:無線LANについての設定であることを示します。有線LANの場合、「wlan0」を「eth0」に変更してください。
  • 2行目:「192.168.10.34」がRaspberry Piに固定するIPアドレスを表します。
  • 2行目:「/24」はNECのルーターの解説で少し触れたように、利用可能なIPアドレスの範囲を指定するための数値です。多くのルーターのデフォルト状態では、「/24」のままで良いでしょう。
  • 3行目と4行目:ここはルーターのIPアドレスを記します。
以上を記述した後ファイルを保存し、Raspberry Piを再起動してください。指定したIPアドレスが割り当てられていれば成功です。

2016年4月11日月曜日

据置きのルーター機器を介さずキャタピラ式模型を操作してみた

はじめに

本書の最終章において、Raspberry Piを搭載したキャタピラ式の模型を作成し、PCやスマートフォンから操作するという演習を行ないました。

その際、Raspberry Piとスマートフォンの間の通信は、下図のようにルーター機器(典型的にはWifiルーター)を介しました。

この方法では、Wifiルーターから離れた場所ではキャタピラ式模型を操作することはできません。キャタピラ式模型を家から持ち出して操作したい場合などです。

本ページでは、そのような場合の対処法を記します。いくつか方法はあるのですが、実現が簡単な方法を紹介します。

方法1~ポータブルWifiルーターを用いる

まず、最も簡単なのは、上図の「ルーター機器」を「ポータブルWifiルーター」にそのまま置き換えることです。これにより、「キャタピラ式模型」、「スマートフォン」、「ポータブルWifiルーター」の3点を持ち出せば、外出先でキャタピラ式模型の操作ができます。

ただし、多くの場合、これはdocomoなどの通信業者との契約が必要なので、既に「ポータブルWifiルーター」をお持ちの方向けの方法となるでしょう。

方法2~スマートフォンのテザリング機能を用いる

2つめの方法は、上図の「ルーター機器」の機能をスマートフォンに肩代わりさせる方法です。図で示すと下図のようになるでしょう。

図から分かるとおり、据置きのルーター機器が不要になり、構成がシンプルになるのがメリットです。ただし、スマートフォンの電池の消費が速くなるという欠点もあります。

Androidスマートフォンではこの機能は「Wi-Fiテザリング」や「ポータブルWi-Fiアクセスポイント」などと呼ばれます。iPhoneでは「インターネット共有機能」と呼ばれます。


この機能を用いるには、お持ちのスマートフォンに対して、下記の制限があります。
  • テザリング機能に対応した機種をもち、さらに対応した契約をしていること。なお、以下に各通信会社へのリンクを貼りますが、これらの契約についての質問には答えられませんのでご了承ください。
  • SIM契約のないiPadの場合、この機能は利用できません(私のiPad mini Wi-Fiでは利用できませんでした)
条件を満たしている場合、利用はそれほど難しくありません。Androidスマートフォンの場合の例を以下に示します。機種やOSのバージョンにより異なる可能性がありますのでご了承ください。

まず、Wi-Fiアクセスポイントの初期設定を行なう必要があります。
  • ネットワーク名(任意。下図ではspnetとしています)
  • パスワード(任意。8文字以上)
を入力して保存します。この設定は一度行なえば二度目は必要ありません。

設定が終わったら、右図のようにポータブルアクセスポイントを有効にします。やはり機種やOSのバージョンにより異なりますが、通知領域にポータブルアクセスポイントが有効であることを示すアイコンが現れるでしょう。

この状態で、Raspberry PiにてWifiの設定を行い、スマートフォンによるネットワークに接続します。その際、ネットワーク名は上で設定したものを選択し、パスワードも上で決めたパスワードを入力します。この操作は通常のルーターに接続する場合と同じです。

なお、キャタピラ式模型の操作が終わったら、「ポータブルアクセスポイントをOFFにする」ことを忘れないでください。OFFにしないとスマートフォンの電池の消費が速くなりますので、必要なときのみ有効にする、という使い方をします。


なお、iPhoneにおける設定はAppleによる「インターネット共有」の解説をご覧ください。私のSIM契約のないiPad miniでは、インターネット共有機能を利用できず、解説を作成できないためです。iPhoneによるインターネット共有でうまく動作した、という方はお知らせいただけると幸いです。

方法3~Raspberry Pi側にルーター機能を持たせる

最後の方法は、スマートフォンにではなくRaspberry Pi側にルーター機能を持たせるという方法です。

しかし、今回のようにキャタピラ式模型を動かすという目的では、この方法には以下の欠点があります。
  • 初期設定が複雑である
  • アクセスポイント化したRaspberry PiにスマートフォンをWifi接続すると、その間スマートフォンがインターネットに接続できなくなる
そのため、本ページではこの方法の解説は省略します。興味のある方はコメント欄に少し情報を記しましたのでご覧ください。

2016年2月10日水曜日

キーボードのCaps LockキーとCtrlキーを入れ替える

Raspberry PiはLinux系OSをインストールして用いられることが多いのですが、Linux系OSではキーボードの「Ctrl」キーを多用します(Windowsでも「コピー」と「貼り付け」の機能に「Ctrl」キーを使いますね)。

そのため、Ctrlキーが押しやすい位置に配置されたキーボードが好まれる傾向があります。典型的には「A」キーの左隣にCtrlキーが配置されたものです。

古くはSunワークステーション用のキーボード、最近では
などでは「A」キーの左隣にCtrlキーが配置されています。

一般的には「A」キーの左隣に「Caps Lock」キーが配置されたキーボードが広く流通しています。そのようなキーボードを用いる場合も、この「Caps Lock」キーを「Ctrl」キーと入れ替えて「Ctrl」を「A」の左隣に配置する、という設定が、Linux系OSのユーザーに好まれています。

ここではその設定を紹介します(参考にしたサイト)。なお、Raspbianのバージョンにより方法が異なりますので、順に解説します。

まずは、NOOBS 2.8.2 以降のRaspbian (Stretch) の場合について解説します。なお、この解説はかなり古いNOOBS 1.4.1より以前のRaspbian(Wheezy)についても当てはまります。

これらのバージョンのRaspbianの場合、キーボードの設定ファイルは /etc/default/keyboard です。ターミナルソフトウェアLXTerminalで下記のコマンドを実行し、テキストエディタleafpadで設定ファイル /etc/default/keyboard を開きます。
sudo leafpad /etc/default/keyboard
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo mousepad /etc/default/keyboard
このファイルは10行程度が記されていますが、 この中にXKBOPTIONSを設定する「XKBOPTIONS=」という1行があるはずです。これに以下のように「ctrl:swapcaps」という設定を追記します。
XKBOPTIONS=ctrl:swapcaps
編集が終わったら、保存してleafpadを閉じます。その後Raspberry Piを再起動すると「Caps Lock」と「Ctrl」が入れ替えられ、「A」キーの左隣が「Ctrl」キーとなっているはずです。

なお、XKBOPTIONSに既存の設定があった場合、例えば下記のような設定が既にあった場合は…、
XKBOPTIONS=terminate:ctrl_alt_bksp
「,」で区切ってctrl:swapcapsを追記すればOKです。
XKBOPTIONS=terminate:ctrl_alt_bksp,ctrl:swapcaps

なお、「Caps Lock」キーは不要と言う場合、下記のようにnocapsを指定すると、「Caps Lock」キーと「Ctrl」キーがどちらも「Ctrl」キーとして機能するようになりますので、お好みの設定を用いてください。
XKBOPTIONS=ctrl:nocaps
XKBOPTIONSに設定できる内容は「/usr/share/doc/keyboard-configuration/xorg.lst」というファイルに列挙されていますので、興味のある方は参照してください。

次に、NOOBS 1.5.0~2.8.1 のRaspbian(Jessie/Stretch)でGUIの設定アプリケーションを用いた場合の解説です。これらのバージョンのRaspbianでは、設定ファイルは /home/pi/.config/lxkeymap.cfg でした。このファイルは、GUIのRapsberry Piの設定アプリケーションでキーボードの設定を一回行うと、自動的に生成されています。

ターミナルソフトウェアLXTerminalで下記のコマンドを実行し、テキストエディタleafpadで設定ファイル .config/lxkeymap.cfg を開きましょう。
leafpad .config/lxkeymap.cfg
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad .config/lxkeymap.cfg
このファイルの中に、「option =」という、optionを設定した行があるはずです。この右辺に「ctrl:swapcaps」を追記ましょう。
option = ctrl:swapcaps
Raspbianのバージョンによっては、右辺に既存の設定が書かれていることがあります。
option = lv3:ralt_switch
その場合、「,」で区切って設定を追加すればOKです。
option = lv3:ralt_switch,ctrl:swapcaps
編集が終わったら、保存してleafpadを閉じます。その後Raspberry Piを再起動すると「Caps Lock」と「Ctrl」が入れ替えられ、「A」キーの左隣が「Ctrl」キーとなっているはずです。

なお、このバージョンのRaspbianにおけるキーボードの設定ファイルは、Raspberry Piの起動時は /home/pi/.config/lxkeymap.cfg であり、Raspberry Piの起動後にキーボードを抜き差しすると /etc/default/keyboard が読まれるようになっていますので注意しましょう。