2016/08/01

Raspberry Piのことはじめ - 02 開発のためのリモート環境整備

Raspberry PiにOSをインストールしてふと思ったのが、実際にこれをどう操作していこうか、ということだった。
とりあえずミニキーボード、ミニマウス、ミニHDMIディスプレイを手に入れてインストール作業していたが思ったより面倒。
モニタが小さいと運びやすいが見づらいし、キーボード、マウスも普段使いでないものなので、実装にストレスがかかる。

これから開発を行うにあたって、どのような環境で開発を行うかを選択する必要がある。
用途によって幾つかのケースが考えられるので、今回はこれをまとめた。



操作方法考


まずはじめに思いつくのは、Raspberry Piにマウス、キーボード、ディスプレイをつないで開発を行うことだと思われる。
ただ、開発環境と実行環境が一致している必要はない。
Web開発などは、PCで開発して、サーバにアップロードして実行することが一般的だろう。
組み込みの場合、ホストPCでクロス開発を行って、デバイスで後ほどテストする、ということもよくある開発方法だ。
何より使い慣れている環境で実装を行いたい要望は大きいだろう。

やっぱり普段使いのPCからリモート接続して開発したい。
そうすると、基本的にキーボードとかマウスとか、ディスプレイとかも持ち歩かずに済むしね。

Wifi接続


Raspberry Pi3は有線、無線LANのどちらも付いているので、ケーブルをつないでもいいが、やはり無線だと開発が楽だ。

Wifiの設定は、「Menu->Preferences->Raspberry Pi Configuration」から設定可能。
まず「System」のタブの「Change Password」からパスワードを変えておく。
その後、「Localisation」のタブの「Set Wifi Country」から「JP Japan」を」選択する。



再起動後、画面右上のWifiアイコンからAPを選択して接続する。

ホスト名アクセス


現段階では、IPアドレスでアクセスするしかなく、自動割り当てのDHCPを使っている場合、毎回IPを調べなければいけない。
つまり、毎回本体にディスプレイをつないで確認する必要がある。なんという本末転倒。
これを避ける為、ホスト名アクセスを行う。

ホスト名はRaspbian内に設定されているが、これはあくまでRaspbianがそのホストで認識されたい、と主張しているだけで、ルータに情報がないと意味がない。
ルータにホスト名を設定するには、「Avahi」というソフトを使用する。(Macなんかじゃ「Bonjour」が担っている機能)これはデフォルトで入っているので、ホスト名を設定するだけでいい。
設定方法は「Menu->Preferences->Raspberry Pi Configuration」を選択して、「System」のタブの「Hostname」を設定する。

設定したホストがraspberrypiだとすると、アクセスはraspberrypi.localでアクセスすることが可能になる。
ただ、デフォルトは一部のポートでしか変換しないようになっている為、pingなどでは導通確認ができない。

インターフェイス考


インストールしたRaspbianはLinuxである。
LinuxはCUIとGUIが選択できる。これはXというシステムを立ち上げるか立ち上げないかで切り替えるが、
一般的には動作時のモードであるRun Levelで切り替えを行う。
詳細の説明は省略するが、Run Level 3でCUI、Run Level 5でGUIとするのが一般的か。

このRaspberry Piの用途はなんだろうか?
例えば、サーバーやデバイスの制御基板の役割だったら、とくにGUIはいらない。CUIの方が負荷が少なくていい。
広告媒体のメイン基板だったり、ゲームの基板だったら、GUIは必須。
(Raspberry PiはHDMI出力が売りの一つなので、GUIの需要も高い)

用途によってインターフェイスが変わるので、今回はCUI、GUIそれぞれで便利そうな環境を構築した。


リモート操作:CUIの場合(※GUIを考えている人も読んでね)


Raspberry PiがCUIで動作している場合には、SSHで接続して開発して構わないだろう。
Linuxサーバを作ったことがある人なら慣れている手法かと思われる。

SSHはデフォルトでONになっていた。
(立ち上げサービスの設定は、Wifi設定と同じく「Menu->Preferences->Raspberry Pi Configuration」から可能)
つまり、もう接続できる環境にある。

他PCから
$ ssh pi@raspberrypi.local
などとするとアクセス可能。簡単簡単。

リモート操作:GUIの場合


Linuxは古くからリモートデスクトップ環境を意識して開発実装されてきた。
「xrdp」というソフトをインストールすることで、リモートデスクトップ環境が使用できる。

インストールはaptで行う。
$ sudo apt-get install xrdp

デフォルトで起動しているっぽい。

キーボードのレイアウトを日本語に対応したいなら、日本xrdpユーザ会で紹介されている設定を行う。
下記のコマンドで設定可能。

$ cd /etc/xrdp/
$ sudo wget http://w.vmeta.jp/temp/km-0411.ini
$ sudo ln -s km-0411.ini km-e0010411.ini
$ sudo ln -s km-0411.ini km-e0200411.ini
$ sudo ln -s km-0411.ini km-e0210411.ini


Avahiでホスト名を周知しているのはSSHのポートのみなので、xrdpのポートもこれで周知する必要がある。
Avahiのホスト名公開の設定は
/etc/avahi/services/
内にxxxxx.serviceというXMLを置くことで設定可能。

xrdp.serviceというファイルを作る。内容はこんな感じ。
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
 <name replace-wildcards="yes">%h</name>
 <service protocol="ipv4">
  <type>_xrdp._tcp</type>
  <port>3389</port>
 </service>
 <service protocol="ipv4">
  <type>_xrdp._udp</type>
  <port>3350</port>
 </service>
</service-group>

重要なのは、xrdpがipv4しか対応していないらしいので、ipv4指定を行う。
これを行わないと、Macからは接続できなかった...

Avahiをリスタートしておこう。コマンドで
$ sudo /etc/init.d/avahi-daemon restart
とすると再起動できる。ログを見て再起動に成功していることを確認。


ホストPCのクライアントはなんでもいいんだろうけど、良さげなソフトでの接続例を記載する。

Windowsの場合

Windows7が手元にあるので、これで接続してみます。

スタートメニューの「アクセサリ->リモートデスクトップ接続」を起動する。
警告が出るが、手続きを進めるとユーザ名とパスワードを入力するダイアログが表示される。
ユーザ名にpi、パスワードには設定したものを入力して接続すると、Raspbianのデスクトップが表示される。

次回からはホスト名が保存されている為、接続操作が楽になる。

Macの場合

Microsoft Remote DesktopをAppStoreからインストールして実行する。

Newボタンを押したらRemote先を追加できる。
PC nameにホスト名を入れ、User nameにはpiを、パスワードも設定したものを入力する。
あとはとりあえず編集なしで。
ダイアログを閉じると自動的に設定が保存される。

「My Desktops」に先ほど追加したホストが追加されているので、これを選択し「Start」ボタンを押すとデスクトップが表示できる。


1024 x 768とかだと、レイテンシも軽減されていい感じ。
(Raspberry Pi自体が若干のレイテンシがあるのもあり多少カクつく)

Sambaのインストール


ホストマシンからRaspberry Piにファイルを転送する方法が何かしら必要になる。
SCPやFTP、SFTPなども使われているようだが、今回は一番シンプルにSambaでファイル共有機能をつける。

インストールは例のごとくaptで行う。
$ sudo apt-get install samba

Sambaの設定は/etc/samba/smb.confを編集して行う。

修正したところのみ記載すると
[homes]
...
browseable = yes
read only = no
create mask = 0775
directory mask = 0775
...

と修正する。まあ、セキュリティ的には微妙だが、パスワード付きなのでとりあえずこれでよしとする。

その後、sambaにユーザpiを追加する。
$ sudo smbpasswd -a pi
パスワードも聞かれるので入力してね。

最後にsambaをリスタートする。
$ sudo /etc/init.d/samba restart

ここまでやったら、あとはホストPCで接続する。ゲストではなくpiユーザで接続すると、ファイルの追加、削除などが可能。
上記の設定だったら、piユーザのホームディレクトリ(/home/pi/)につながる。


とりあえず、これでRaspberry Piに電源をつなぐだけで、あとは別PCから開発ができるようになった。
初めて接続するルータに対しては無線設定ができていないので、その際には有線でつないでやると同様にホスト名でアクセス可能。
無線設定を行ったのちにケーブルを外して開発できる。

次回こそ開発について書く予定。

0 件のコメント:

コメントを投稿