RaspberryPiがようやく届いたので触ってみる(4)
Raspberry Piへの追加設定をちょこちょこやった。
使っていて不便だなと思ったことを気がついた順にやっているので、最初にやったらいいことも混ざっています。
- USBカメラをつないで手抜き監視カメラをつくる
- avahiを入れて、IPアドレス検索の手間を減らす
- CtrlとCapsを入れ替える
- ディスプレイの解像度変更
- RAMドライブを使う
USBカメラをつないで手抜き監視カメラをつくる
ラズパイでやりたいのは、ちょこっとした監視/計測装置を常時稼動させておくことかなと思っていたので、まずは監視カメラ。
自作プログラムで実現する人もいますが(ハンズオンでやったのもこれ)、motionコマンドがお手軽そうでした。手持ちのUSBカメラだけで超簡単監視カメラシステムが作れます
USBは挿すだけで認識されました。確認はlsusbコマンドで。
lsusb
motionコマンドをインストールします。今回やらないですが、webカメラを使うには、fswebcamとかguvcviewが必要なので、ついでに入れておきます。
sudo apt-get install motion sudo apt-get install fswebcam sudo apt-get install guvcview
motionの設定ファイルを変更します。この3箇所だけ確認。
sudo cat /etc/motion/motion.conf output_normal first webcam_localhost off # "localhostのみ"の表示アクセス制限をoffにする control_localhost off # "localhostのみ"の操作アクセス制限をoffにする
起動させます。sudo忘れると上記の設定ファイルを見てくれないので注意。
sudo motion -n
写っているところを見ます。(http://[ラズパイのIPアドレス]:8081)
ただし、google chromeはURL直接指定だとアクセスできないそうなので、以下のようなHTMLファイルを作ってブラウザで開きます。
cat pi.html <html><body> <img src="http://192.168.xx.xx:8081"> </body></html>
おしまい。超簡単!
motionコマンドは、カメラに写った映像に動きがあるとスナップショットを保存します。SDカードはあまり書き込むとすぐ寿命がくるので、遊んでみるだけならば、設定ファイルを変えて画像を保存しない設定にするか、RAMドライブ設定をしてSDカードに書き込まなくするといいです。RAMドライブ設定は後述。
avahiを入れて、IPアドレス検索の手間を減らす
この設定を最初にやれ、と書いてあるサイトが多いのですが、MacとWinの違いがどうとか書いてあってよく分からなかったので跳ばしてました。
avahiはローカルネットワークのDNSサービス情報をを検出できる=よそのホストで稼動するサービスへのアクセスが簡単になる、ということみたいです。なので、ラズパイとPC(Win)にavahiをインストールして、ラズパイへのアクセスをホスト名で行えるようにしました。(MacPCは最初からavahiが入っているので不要)
インストールすると、「ホスト名.local」でラズパイにアクセスできるようになります。
#ラズパイ側
sudo apt-get avahi-daemon ##確認 ping raspberrypi.local
#PC側(Windows)
Appleから、Boujour Print Serviceをインストールします(ここにavahiの実装が含まれている。)インストールexeを実行するだけです。
http://support.apple.com/kb/DL999?viewlocale=ja_JP
こじ研が詳しいです。
http://www.myu.ac.jp/~xkozima/lab/raspTutorial1.html
インストールできたら、コマンドプロンプトからpingを実行します。失敗する場合は、UDP 5353を開ける設定が必要です。
##確認(pingが返ってきたら成功) ping raspberrypi.local
これで、毎回IPアドレスを探さずにラズパイにアクセスできるようになりました。IPアドレスは、MAC情報をもとに計算するのである程度固定された値が振られるようなのですが(ルーターによるけど)自宅NWはIPがすぐ変わるので結構面倒くさかったのです。
CtrlキーとCapsキーを入れ替える
(これないと左手が死ぬ。)
Debianの設定でXKBOPTIONSを書き換えます。参考にしたのはここ。
[Debian] Ctrl と Caps Lock を入れ替える | Keep the Light Alive
#Ctrl入れ替え sudo cat /etc/default/keyboard #XKBOPTIONS="" XKBOPTIONS="ctrl:swapcaps"
#適用 /etc/init.d/kayboard-setup reload
ディスプレイの解像度変更
テレビをディスプレイ代わりにしているけれど、字が横につぶれて読むのがつらいので、設定を変えて文字を大きくしました。
ここを参考に/boot/conig.txtを変更します。
RPiconfig - eLinux.org
#現在の設定確認 /opt/vc/bin/tvservice -s #モードの一覧確認 /opt/vc/bin/tvservice -m CEA /opt/vc/bin/tvservice -m DMT #モードの変更 sudo cat /boot/config.txt # uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=1 hdmi_mode=3
再起動して終了。
RAMドライブを使う
RaspberryPiの記憶装置はSDカードですが、これは書き込み回数制限のあるデバイスなので、HDDとおなじ気軽さで使っているとすぐ壊れてしまうようです。対策として、不要なデータはフラッシュメモリに書き込みます。フラッシュメモリに書いたデータは電源を切ると消えるので、消えてほしくないデータは、SDカードや、USBでつないだHDDとかに書き込むようにします。
フラッシュメモリは"tmpfs"という名前で定義されているので、この上に新しいファイルシステムを作成します。
参考にしたのはこのへん
Raspberry PiのSDカード/マイクロSDカードの寿命を延ばす | ものづくりエクスペリメント
Raspberry PiのSDカード書き込み回数抑制対策を行なってみた ( UNIX ) - ロードバイクときどきiPad/Airなblog - Yahoo!ブログ
swap無効化
swap自体役に立っていないので無効化します。
dphys-swapfileを削除するのが乱暴な気もしましたが、あっても使わないコマンドなので消すのが確実だそうです。
#swap確認 free -m #今回だけoffにする(再起動するとonに戻る) sudo dphys-swapfile swapoff #dphys-swapfileを削除(永久にoff) sudo apt-get remove dphys-swapfile
RAM driveを使う(tmpfsを使う)
以下の3つをRAM drive上のファイルシステムとして定義します
/tmp
/var/tmp
/var/log
/etc/fstabを編集する
ファイルシステムは、/etc/fstabに記述します。(ここに書いておくと自動マウントされる)
最後の4行を追加。
sudo cat /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that # tmp files are on RAM drive tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,size=16m,noatime,mode=1777 0 0
4列目のマウントオプションは、noatime(アクセスサイズ不要)、サイズは32m、mode=1777 (stickey bitつき777)としました。パーミッションゆるめならひとまず安心。
マウントする
作成したファイルシステムをマウントします。マウントするとすでにマウントポイントにあったファイルが隠れてしまうのですが、ファイル量が少ないので削除はしませんでした。
#マウント sudo mount -a #マウント済み確認 mount df -h
マウントしたファイルシステムに不足するディレクトリを自動作成する設定を書く
tmpfsに作ったものは毎回起動時に空っぽになります。ツールによっては作業用ディレクトリが存在しないとエラーになるので、初期化ロジックにディレクトリ作成を含めます。
マウントするファイルシステムにあるディレクトリ(ls -laRF /tmp とか)と、/etc/rsyslog.conf の中身を見て作成するディレクトリを決めました。
sudo cat /etc/rc.local # create directory at startup mkdir -p /var/log/apt mkdir -p /var/log/ConsoleKit mkdir -p /var/log/fsck mkdir -p /var/log/news mkdir -p /var/log/ntpstats chown root.ntp /var/log/ntpstats mkdir -p /var/log/samba chown root.adm /var/log/samba # create empty file at startup touch /var/log/btmp touch /var/log/lastlog touch /var/log/wtmp chown root.utmp /var/log/btmp chown root.utmp /var/log/lastlog chown root.utmp /var/log/wtmp
RAMドライブにしたことで、ファイル書き込みが速くなったはず。今度測定してみようかな。