Pages

raspberry pi アプリケーションの自動起動

2014年11月18日火曜日

ラズベリーパイを起動した時にアプリケーションが自動起動するように。
Auto Login and Auto Start in Raspberry Pi と Auto running programs を参考にしました。

まずは、自動ログイン
/etc/inittab の
1:2345:respawn:/sbin/getty --noclear 38400 tty1 をコメントアウトして、
1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1 に変更
再起動したら自動ログインできるようになってました。

次に、自動起動の設定
/etc/rc.local に、
sudo python /home/pi/hoge.py
を書いただけ。
このやり方が正しいのかかなり怪しいのですが、一応起動はします。

そして、今、Enterキー問題に悩まされています。(linux上では、returnキーとenterキーが違うものらしい…?)



raspberry pi と ログ出力(logrotate)

2014年11月17日月曜日

先日、raspberry pi と vnc を書いた所、
研究室の教授に「組み込み単機能コンピュータでx11を起動させるのは重すぎてあまりスマートではない」と指摘を受けたので、
アプリケーションの自動起動+ファイルへのログ出力
を行うことにしました。

今回は、logrotateを利用したログ出力に成功したので、それのメモ。
手探り状態でなんとか動いたという感じなので、おかしい所が多々あるかもしれないです…。

まずログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 )を参考に、logrotateがインストールされているか確認。
私の使用しているraspbianでは、デフォルトで入っていました。

/etc/logrotate.d/hogeというファイルを作成
中身はこんな感じ
1日毎にファイルを新しくして、(そういうわけじゃなかった(´・ω・`))4日分or1M分のファイルを残すようにしています。
詳しくは、上のサイトや、logrotateの設定ファイルで指定できる主なコマンドを参照してください。

私は、syslog経由でログを送ったので、
/etc/rsyslog.confの中身を書き換えました。

最後の行の
local0.*    -/var/log/hoge.log
を付け加えただけです。
local0については、システム管理の基礎 syslogdの設定をマスターしよう (2/3)のFacilityを参考に決めました。
私の理解が正しいのかわからないのですが、おそらくlocal0〜local7は任意のアプリケーションのために使えるのではないかと…。

ここで再起動。

pythonからログを出力するには、

>>> import syslog
>>> syslog.openlog('test', syslog.LOG_PID | syslog.LOG_PERROR, syslog.LOG_LOCAL0)
>>> syslog.syslog('test test test')
test[3227]: test test test
>>> syslog.closelog()

としました。
参考にしたのは、以下のサイト

ここで送ったログが/var/log/hoge.logに
Nov 17 18:34:31 raspberrypi test[3227]: test test test
というような感じで入ります。
めでたい。

あとは、自動起動。
明日がんばるー。


raspberry pi と vnc

2014年11月14日金曜日

久しぶりの更新!

raspberry pi と vnc の話。
ちょっと苦労したのでメモ。

やりたいこと
・ラズベリーパイの中にあるプログラムをディスプレイ無しで実行したい
・プログラムは、ラズベリーパイに繋いだキーボードの入力を受け取りたい
・手元のMacからラズベリーパイで動いているプログラムの様子を見たい。(どんな入力を受け取っているか。どんなログが出てるか。)

で、今まではMacで同じことをしていて、その時は、
・手元のMacから、プログラムを動かすMacに、vnc接続する
・手元のMacから、プログラムを動かすMac上のプログラムを実行する
・プログラムを動かすMacに繋いでいるキーボードから値を入力をする
という感じで、何の苦労もなく動かすことができていた。

まぁラズベリーパイでも同じことが簡単にできるだろうなんて考えていたのですが、ちょっと大変でした。

まず、“raspberry pi vnc”みたいな感じで検索をするとTightVNCというものの情報ばかり出てくる。
で、linuxの知識が全くない私は、何の迷いもなくTightVNCをapt-getしちゃったわけなのですが、これがMacのvncと全然違う。
Macにvnc接続すると、接続先と接続元で同じ画面が表示されて、どっちからでも操作できるーみたいな状態になって私の“やりたいこと”が簡単にできたのですが、TightVNC経由だと、全く別の画面が表示される。
つまり、手元のMacから見えている画面でプログラムを実行しても、ラズベリーパイに接続しているキーボードから入力は受け取れない。(頑張ったらできるのかな…)

で、色々検索していたら、x11vncというものを発見。
こっちだと、同じ画面が見えるらしい。
(TightVNCとx11vncの違い:Linuxでディスプレイに表示中のXに対してVNCする(X11VNC)
ということで入れてみた。
インストールは、
$ sudo apt-get install x11vnc
するだけです。
で、パスワードを設定したりするらしい。
多くのサイトでは、
$ x11vnc -storepasswd
を実行するみたいだけど、私は、これで設定しても上手く接続できなかったので、
このページ『パスワードを設定する』を参考にしました。(結局やっていることは同じように見えるけど…)
$ mkdir ~/.x11vnc
$ x11vnc -storepasswd <password> ~/.x11vnc/passwd

そして、
$  x11vnc -display :0 -rfbauth ~/.x11vnc/passwd 
を実行すると、ポート5900番でvnc接続が出来るようになるので、vnc://<address>:5900で接続できます。
常に動作させるようにするには、オプションとして、 -forever を付けてください。
 x11vnc -forever -display :0 -rfbauth ~/.x11vnc/passwd 

ただし、ターミナルモード(???)だと、繋げないので、
 startx
をお忘れなく。
startxは、sshじゃ行えないので、ラズベリーパイにディスプレイを繋いで、行う必要があります。多分。
でも、ラズベリーパイはディスプレイに繋がないつもりなので、毎回行うのは無理です。
なので、最初からGUI画面が出るように設定しました。
設定の仕方は、Raspberry Piを別のPCからリモート操作の『自動起動』のあたりを参照してください。

ここまでできれば、私のやりたかったことは全てできるのですが、
毎回sshで繋いで、x11vncを起動して、というのは非常に面倒なので、自動起動の設定。
多くのページで、~/.config/autostart/x11vnc.configに以下の内容を書けと書かれています。(ちなみに、私は、.configの下にautostartがなかったので、作りました。)

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc -forever -display :0 -ultrafilexfer
StartupNotify=false
Terminal=false
Hidden=false

ただ、私は、これだとうまく起動していないような感じだったので、

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc -forever -display :0 -rfbauth /home/pi/.x11vnc/passwd
StartupNotify=false
Terminal=false
Hidden=false

としました。
これで、めでたく自動起動もできるように!

本当は、ラズベリーパイを起動した時に、プログラムを実行とかもやりたいけど、面倒なので、後回し。