#実行はできたけど
[Unity] Intel Edison で Unity を実行する
にて Unity のプログラムを実行することができました。が、これはログインして実行コマンドを入力しています。
つまりこういう状態で、
ログインして、シェルから実行コマンドを入力しているわけです。これはいただけません。
ガジェットならガジェットらしく、独立で起動してくれないと夢が広がらないですね。
というわけで、Unity プログラムを自動起動させます。
#サービスを設定する
作成した実行ファイルが /var/linux.x86
だとして、
/lib/systemd/system/unityplayer.service
というファイルを、以下の内容で作成します。
[Unit]
Description=Unity Player
Requires=wpa_supplicant.service
After=wpa_supplicant.service
[Service]
Environment="HOME=/usr/root"
ExecStart=/var/linux.x86 -batchmode -nographics
#ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
まだ systemctl の理解が浅くて、この記述が最適なのか自信がありません。(rc.init の頃と比べて洗練された気はしますが、どうも難しいですね)
実際、wifi の接続を待ってから起動するようにしたかったのですが、効いてないようです。なので
After=wpa_supplicant.service
このあたりの記述には意味がないかも。
そしてこの設定ファイルでは、自動実行(非ログイン実行)する際の Unity の問題をひとつクリアしています。
Environment="HOME=/usr/root"
これです。どうやら Unity Player は、環境変数 HOME が未定義だと落ちてしまうようです。この事実を見つける難易度が高かったのですが、わかってしまえばこのように、回避は容易です。
#サービスを登録する
/lib/systemd/
で、
systemctl enable unityplayer.service
を実行します。
root@yuji-edison:/lib/systemd/system# systemctl enable unityplayer.service
ln -s '/lib/systemd/system/unityplayer.service' '/etc/systemd/system/multi-user.target.wants/unityplayer.service'
これで自動起動に登録されました。準備完了です。
#単体で起動してみる
PC ではなく壁に刺します。
さあ、どうだ!前回使用した受信プログラムを走らせます。
動作しています。めでたしめでたし。
送信プログラムでアドレスを送っているので、そのアドレスに ssh でログインすることもできます。
#今後
これで、電源さえ供給すれば、Break Out Board すら外した状態で Unity で作ったプログラムを動作させられるはずです。何ができますかねー