2017年1月7日土曜日

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

はじめに

Raspberry Piの起動時にアプリケーションを自動起動(自動実行)したい場合、設定ファイル /etc/rc.local に実行したいコマンドを記述する方法がよく知られています。 

しかし、この方法で自動起動できるのはターミナル上で実行するCUIアプリケーションのみであり、GUIアプリケーションの場合は別の方法を用いる必要があります。ここではその方法を紹介します。

本書の場合、7章「OpenCVによる画像処理と対象物追跡を行ってみよう」で紹介したプログラムが該当します。 なお、GUIアプリケーションであっても、ターミナルからどのようなコマンドで起動するかを知っておく必要があります。例えば、Chromiumブラウザなら「chromium-browser」などです。

方法

LXTerminalを起動し、下記のコマンドを実行します。
この2つのコマンドは、「自動実行に必要なautostartというファイル」をデフォルトの場所からユーザーの場所にコピーするためのコマンドです。
mkdir -p .config/lxsession/LXDE-pi
cp /etc/xdg/lxsession/LXDE-pi/autostart .config/lxsession/LXDE-pi
次に、コピーしてきたautostartというファイルを編集します。
下記のコマンドを実行しましょう。
テキストエディタleafpadにより、自動起動するアプリケーションが列挙されたファイルが開きます。
leafpad .config/lxsession/LXDE-pi/autostart
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad .config/lxsession/LXDE-pi/autostart
中身は下記のようになっているはずです(2018年11月にリリースされたNOOBS3.0.0で確認しました)。
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi 
この末尾に、起動したいアプリケーションのコマンドを追記します。例えば、本書7章で用いたbb2-07-01-preview.pyなら、下記のようになるでしょう。
@python /home/pi/bb2-07-01-preview.py
先頭に「@」つけることに注意してください。さらに、サンプルファイルの保存位置が異なるなら、適宜編集しましょう。

さらに、wiringpiを用いるbb2-07-06-tracking-circle.pyやbb2-07-06-tracking-face.pyなら先頭にsudoをつける必要があることにも注意してください。