LoginSignup
6
6

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-11-09

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

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

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

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

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

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

TL; DR (今北産業)

Raspberry Pi Zero W の CUI 上で CLI アプリを自動起動する方法。

  1. sudo raspi-configboot optionsConsole Autologin を自動ログイン設定にする。

  2. 自動ログイン・ユーザーの ~/.bashrc の文頭に以下を追加する。

    my_scriptは実行すると入力待ちになるスクリプトです
    if [ $(tty) == '/dev/tty1' ]; then /path/to/my_script; sudo halt; fi
    
  3. 【注意】 GUI つまりデスクトップ版でこれを設定すると起動直後に終了してしまい、詰むので注意。デスクトップ版(GUI 環境)でアプリを自動起動したい場合は、以下の記事をご覧ください。

🐒 僕とラズパイとバーコードリーダー
USB バーコードリーダーは接続すると普通の USB キーボードとして認識されます。つまり、ラズパイから見ればバーコードリーダーからのデータは、キーボード(もしくはテンキー)からの入力と同じ扱いになります。GUI であれば、入力フォームにフォーカスが当たっていれば、バーコードでピッと読み込めば入力できます。CUI の場合も STDIN からの入力待ちであれば、同じくピッと読み込めば入力できます。

TS; DR (GUI GUI くる、うざいヤツに対抗する。クイCUIッ)

とある 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 は実行されません。

参考文献

あわせて読みたい

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6