おつむにごはん

勉強会のこととか読んだ本とか気づいたこととか

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>

f:id:powmana02:20150207231327j:plain
おしまい。超簡単!

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ドライブにしたことで、ファイル書き込みが速くなったはず。今度測定してみようかな。