RaspberryPiでLXDE(GUI OS)の起動時にSORACOM接続を行うメモ

RaspberryPiでLXDE(GUI OS)の起動時にSORACOM接続を行うメモです。

前回のSORACOM Air(データ通信のみ)をRaspberry Piにつなげた記事で、再起動するたびにSORACOMの接続を行うのを自動化したくなったのでやってみます。

LXDE – Wikipedia

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

raspberrypi_lxde_autostart_soracom_recconnect_1

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が通信しています。

raspberrypi_lxde_autostart_soracom_recconnect_2

いざ起動してから画面を見てみます。

raspberrypi_lxde_autostart_soracom_recconnect_3

無事、autostart.sh,autostart2.shの両方のLXTerminalが起動して、SORACOMが接続されているようです!

余談:LXDEのautostartスクリプトの挙動

LXDEのautostartスクリプトの挙動ですが「先の行(=スクリプト)が実行しきってから次が実行される」というルールで動いています。

ですので、先のスクリプトが動かない場合、レアなケースではありますが以下のようになります。

SORACOMが接続されていない場合(autostart.shで止まる)

  • autostart.shがそもそも動作しない
    • つまり、autostart.shで止まる

となるので、その時の起動時は以下のようになります。

raspberrypi_lxde_autostart_soracom_recconnect_4

autostart.shが動かないのでNodeJSサーバーを動かすautostart2.shのLXTerminalまで動かないんですね。何もでません。

SORACOMは接続されているがNodeJSサーバーが動かない状態(autostart2.shで止まる)

raspberrypi_lxde_autostart_soracom_recconnect_5

雰囲気としてわかりにくいですが、もしもSORACOMは接続されているがNodeJSサーバーが動かない状態ですと、

  • SORACOMは接続されている
    • autostart.shは動く=LXTerminal(autostart.shぶん)は起動する
  • NodeJSサーバーがなんらかの理由で動かない状態
    • LXTerminal(NodeJSサーバーぶん)は起動しない

という状態なので、以下のようになります。

raspberrypi_lxde_autostart_soracom_recconnect_6

LXTerminal(autostart.shぶん)は起動しているので、LXTerminalはひとつです。

どちらのケースも、求めている挙動を満たしてないので、この挙動のくせは注意が必要です。

おわりに

ということで、無事LXDE(GUI OS)の起動時にSORACOM接続できました。

これを発展させれば、VNCなどで遠隔操作をせず、ただ起動するだけでSORACOMに接続しセンサー用のNodeJSサーバーにすることができそうです。

それでは、よきNodeJS & SORACOM & RaspberryPi Lifeを!