Help us understand the problem. What is going on with this article?

CUI の、なんちゃって Kiosk 端末をラズパイ Zero で作りたい。

CLI 版 Kiosk 端末風の1機能専用の端末をラズパイ Zero で作りたい。

つまり、GUI なし(X11 なし)のラズパイ Zero の電源を入れたら、自動で CLI アプリが立ち上がり入力待ちにさせたいのです。

CLI で動く Markdown のワープロ専用機でもいいですし、センサーの記録を確認するだけの端末だったり。

具体的には、親戚の年末の棚卸し用にヘッドレス(モニタのない状態)のラズパイに USB バーコード・リーダーとモバイル・バッテリーをつなげて、バーコードを読み取るだけの端末を作りたいのです。

だって、専用端末を買うとすごい高いんだもの。Raspberry Pi Zero WH + USB バーコードリーダーなら 5,000円を切るし。

そのためアプリはバックグラウンドでなくフォアグラウンドで自動起動させて入力待ちにさせたいのです。また、CLI アプリなので、動作の軽量化のため OS は X11 なしの CUI 版 Raspbian(Buster Lite)を使いたいのです。

TL;DR 
CUI の Raspberry Pi Zero W で CLI アプリを自動起動

  1. sudo raspi-configboot optionsConsole Autologin を自動ログイン設定にする。
  2. 自動ログイン・ユーザーの ~/.bashrc の文頭に以下を追加する。
my_scriptは実行すると入力待ちになるスクリプトです
if [ $(tty) == '/dev/tty1' ]; then /path/to/my_script; sudo halt; fi

【注意】 GUI つまりデスクトップ版でこれを設定すると起動直後に終了してしまい、詰むので注意。その場合は以下の起動方法をご覧ください。

TS;DR

Docker ベースの CLI アプリを作ったので「ラズパイの電源を入れるだけで動く俺様アプリの専用機」として使えないかと悩みました。

CLI アプリなのでデスクトップ環境も入れない Raspbian の Buster Lite を使っています。モニタとキーボードがあれば、シェル上で /path/to/my_script と打てば起動するのですが、専用機なのでそれも面倒くさい。

CUI 状態(X Window System なし)で CLI アプリをフロントエンドで待機させる方法が知りたかったのです。

ラズパイ ヘッドレス CLI アプリ 自動 起動」とググっても、サービス起動などバックグラウンドでの実行ばかり。あっても、buster では使えないタイプの autostart を使った記事ばかりで使えるタイプが異なることに気づくのに時間がかかりました。

ラズパイのフォーラムを漁っていたところ、以下の情報が。

I have a very simple solution that works with very little effort. The first thing to do is to install the OS and make it login automatically to the CLI, set your keyboard configuration, install wordgrinder. Then boot into the CLI and make sure that everything works as expected before making the next change.

Now enter the following command on the console:

筆者訳)
ごくわずかな努力で動作する、非常に簡単な方法があります。まず OS をインストールし、CLI の自動ログインとキーボード構成を(raspi-config で)設定します。wordgrinder(自動起動させたいアプリ)をインストールします。次の変更を行う前に、再起動してアプリがすべてが期待どおりに機能するか CLI から確認します。

次に下記のコマンドをコンソール上から実行します:

sed -i "1 i if [ \`tty\` == '/dev/tty1' ]; then wordgrinder;sudo halt; fi"  .bashrc

From this point a reboot will automatically start wordgrinder and the system will be halted when you exit wordgrinder.

For maintenance you can use ssh or the CLI by pressing Alt-F2 when wordgrinder is loaded.

筆者訳)
この時点から、再起動するとwordgrinder が自動的に起動し、wordgrinder を終了するとシステムが停止します。

メンテナンスをしたい場合は ssh 接続するか、wordgrinder が実行されているときに Alt-F2 を押すと CLI を使用できます。

Auto login + auto start application in Raspian Jessie Lite | forums @ RaspberryPi.org より)

.bashrcの1行目
if [ $(tty) == '/dev/tty1' ]; then /path/to/my_script; sudo halt; fi

.bashrc に上記が記載されていると、ラズパイ起動時に /path/to/my_script が実行され my_script が起動します。モニタを繋げてみるとスクリプトが自動実行され、待機しているのがわかると思います。

また、sudo halt により my_script が終了すると OS もシャットダウンを始めます。halt が気になる場合は、sudo shutdown now でもいいかもしれません。

ちなみに SSH 接続した場合は、tty(ターミナルの入出力)が /dev/tty1 ではなくなるためログインしても my_script は実行されません。

参考文献

あわせて読みたい

KEINOS
A Japanese made in Mexico with Mexican quality ;-) Who monkey around the jungle of codes.記事の日本語がおかしかったら遠慮なく編集リクください。また、記事に「LGTM」が付くたび、なるべく見直して、何かしら加筆・修正してブラッシュアップしています。更新頻度が高いためストックされても基本的に通知はお送りしません。
https://blog.keinos.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした