RaspberryPiでLXDE(GUI OS)の起動時にSORACOM接続を行うメモです。
前回のSORACOM Air(データ通信のみ)をRaspberry Piにつなげた記事で、再起動するたびにSORACOMの接続を行うのを自動化したくなったのでやってみます。
LXDE (Lightweight X11 Desktop Environment) はUNIXおよびLinuxやBSDのようなPOSIXプラットフォーム上で動作する、GPL下で配布されるオープンソースのデスクトップ環境である。ミニノート・サブノートのように比較的処理能力の低いパソコンでもスムーズに動くように設計され、「省エネ」且つ「高速に動く」デスクトップ環境のソリューションであるとされている[1] [2]。
LXDEは、Ubuntu、Debian、Fedora、openSUSE、Mandriva LinuxなどのLinuxディストリビューションで利用できる。また、KNOPPIX、Lubuntuという、LXDEを標準で採用したLinuxディストリビューションがある。
今回やりたいこと
今回やりたいことは以下のとおりです。
- SORACOMの再接続をRaspberryPiのGUI OSであるLXDEの起動するときに実行する
- /home/pi/Desktop/autostart.sh
- その後うまく行えたら、/home/pi/Desktop/node_sample/index.jsのnodeサーバーもスタートさせる
- /home/pi/Desktop/autostart2.sh
- 自動実行させるファイルをまずデスクトップにスクリプトを配置します。
まずデスクトップにスクリプトを配置
自動実行させるファイルをまずデスクトップにスクリプトを配置します。
SORACOMの再接続 autostart.sh
以下のように、デスクトップにおいてあるautostart.shに接続するスクリプトを書きます。
/home/pi/Desktop/autostart.sh
sudo modprobe usbserial vendor=0x1c9e product=0x6801 sudo wvdial
こちらを、RaspberryPiのGUI OSであるLXDEの起動するときに実行させます。
2015/12/08追記
autostart.shの中に#!/bin/shのようなものを含めなくても、.shはshellとして実行されるようです。
2015/12/08追記おわり
nodeを起動するスクリプト autostart2.sh
今回は/home/pi/Desktop/node_sampleフォルダにNodeJSサーバーとなるindex.js置かれていることとします。
/home/pi/Desktop/autostart2.sh
cd /home/pi/Desktop/node_sample node index.js
/home/pi/Desktopに2ファイルを配置します。
以下のように配置しておきます。
- /home/pi/Desktop/autostart.sh
- /home/pi/Desktop/autostart2.sh
2015/12/08追記
また、2ファイルに実行権限を加えておきましょう。
chmod +x /home/pi/Desktop/autostart.sh chmod +x /home/pi/Desktop/autostart2.sh
2015/12/08追記おわり
LXDE起動時に実行させる
さてこちらをLXDE起動時に実行してみましょう。
こちらの記事にあるように、
How To Autostart Apps In Rasbian LXDE Desktop
/etc/xdg/lxsessionフォルダ内にautostart設定をファイルとしておいておくと実行されるようなのでやってみます。
/etc/xdg/lxsessionフォルダの中は
/etc/xdg/lxsessionフォルダの中は2つフォルダがあるかもしれません。
/etc/xdg/lxsession/LXDE-pi
/etc/xdg/lxsession/LXDE
先ほどの引用先にもこう書いてありました。
Note : The newer Raspbian image changed the folder “LXDE” to “LXDE-pi” so the line above has been updated.
ですので、私の場合はLXDE-piフォルダにautostartファイルを置くことで動作しました。
sudo leafpad /etc/xdg/lxsession/LXDE-pi/autostart
autostartの中身
autostartの中身は以下のように書いてありました。
@lxpanel --profile LXDE-pi @pcmanfm --desktop --profile LXDE-pi @xscreensaver -no-splash
ですので、以下のようにコードを加えます。
@lxpanel --profile LXDE-pi @pcmanfm --desktop --profile LXDE-pi @xscreensaver -no-splash @lxterminal -e "bash -il /home/pi/Desktop/autostart.sh" @lxterminal -e "bash -il /home/pi/Desktop/autostart2.sh"
なぜ、bash -il で実行しているかというと、
Raspberry PiのLXTerminalで~/.bash_profileが読まれないのでなんとかするメモ | 1ft-seabass.jp.MEMO
にあるように、NodeJSを読み込み済みで実行したいための配慮です。
いざ再起動してみます
ということで、再起動してちゃんとSORACOMを再接続して、NodeJSサーバーが起動するか試してみましょう。今回はnodeサーバーがArduinoをつなげるもので、SORACOMが通信しています。
いざ起動してから画面を見てみます。
無事、autostart.sh,autostart2.shの両方のLXTerminalが起動して、SORACOMが接続されているようです!
余談:LXDEのautostartスクリプトの挙動
LXDEのautostartスクリプトの挙動ですが「先の行(=スクリプト)が実行しきってから次が実行される」というルールで動いています。
ですので、先のスクリプトが動かない場合、レアなケースではありますが以下のようになります。
SORACOMが接続されていない場合(autostart.shで止まる)
- autostart.shがそもそも動作しない
- つまり、autostart.shで止まる
となるので、その時の起動時は以下のようになります。
autostart.shが動かないのでNodeJSサーバーを動かすautostart2.shのLXTerminalまで動かないんですね。何もでません。
SORACOMは接続されているがNodeJSサーバーが動かない状態(autostart2.shで止まる)
雰囲気としてわかりにくいですが、もしもSORACOMは接続されているがNodeJSサーバーが動かない状態ですと、
- SORACOMは接続されている
- autostart.shは動く=LXTerminal(autostart.shぶん)は起動する
- NodeJSサーバーがなんらかの理由で動かない状態
- LXTerminal(NodeJSサーバーぶん)は起動しない
という状態なので、以下のようになります。
LXTerminal(autostart.shぶん)は起動しているので、LXTerminalはひとつです。
どちらのケースも、求めている挙動を満たしてないので、この挙動のくせは注意が必要です。
おわりに
ということで、無事LXDE(GUI OS)の起動時にSORACOM接続できました。
これを発展させれば、VNCなどで遠隔操作をせず、ただ起動するだけでSORACOMに接続しセンサー用のNodeJSサーバーにすることができそうです。
それでは、よきNodeJS & SORACOM & RaspberryPi Lifeを!