1
0

要約

sudo apt update
sudo apt install unclutter
browser.service
[Unit]
Description=browser
Wants=display-manager.service
After=display-manager.service

[Service]
User=hoge
Environment=DISPLAY=:0
ExecStartPre=sleep 5
ExecStart=bash -c "unclutter -idle 0.5 -root -display :0 & /usr/bin/chromium-browser --noerrdialogs --disable-infobars --enable-logging --log-level=0 --start-maximized --kiosk https://google.com"

[Install]
WantedBy=multi-user.target
sudo cp browser.service /etc/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable browser.service

概要

RaspberryPiというコンピュータは、いわゆるマイコンの中でも特に有名な部類でしょう。インターフェースも充実していて、最近の機種であればHDMIの映像出力Wi-Fiへの接続、有線LANが繋げるものもあります。それに消費電力も少ないため、常時起動しておくような形でもあまり気になることはありません。

これを使えば、ダッシュボードや情報源などを常時ディスプレイに表示する、いわばデジタルサイネージのようなものが簡単に作れるのではないかと想いやってみることにしました。

ディスプレイでの表示方法は、独自アプリを作るとかの選択肢もあるかと思いますが、Webページを開いておくというのが一番シンプルで済みそうです。ネットワークに接続しておけば、ブラウザをリロードしたり背後のスクリプトで情報を更新することで、リアルタイムに表示内容を変化させられます

また、データ表示系のライブラリやCSS、WebGLなどの技術で多様なグラフィック表現も可能です。何事もブラウザのWebサイトでというのは、今の世の中のサービスの多くを見ても感じる潮流です。

求められる要件としては、ラズベリーパイの起動時に任意のWebページをブラウザで開くことです。できれば、ウィンドの枠やタブなどが見えない全画面でブラウザを表示したいです。

実装

はじめにラズベリーパイの起動時にブラウザを開くということを目指します。ブラウザを開くと言っても、要は任意のブラウザソフト(この記事ではChromium)をコマンドで実行できればいいです。

起動時のコマンドの実行については、参考に挙げた記事などをもとに、最終的にはsystemdを用いた方法で実装をしました。はじめはautostartを使おうと考えていましたが、バージョンの都合かどうもうまく動作しませんでした。

この実装をしていたのが2024年の3月ごろで、その前の2023年10月にRaspberryPi OSの大きめなアップデートがあったようです。それが故でしょうか…。

なお、systemd自体私はこの開発で初めて実際に設定したもので、まだ稚拙な点もあるのかと思います。より良い形があればぜひコメントなどで教えてください。

unclutterのインストール

実際にsystemdを設定する前に、使用するツールとしてunclutterのインストールを行いました。unclutterマウスカーソルを非表示にするツールです。全画面表示の際にマウスカーソルが表示されたままだと見栄えが悪いので、このツールで消えるように設定します。

インストールは一般的なツールと同様にaptで実行しました。

sudo apt update
sudo apt install unclutter

systemdの設定

本題のsystemdについては、Unitファイルを以下のように記述しました。ここではUnit名をbrowserとしてファイル名もbrowser.serviceにしていますが、この名称は任意です。必要に応じて他のUnit名にし、コマンドも読み替えてください。

browser.service
[Unit]
Description=browser
Wants=display-manager.service
After=display-manager.service

[Service]
User=hoge
Environment=DISPLAY=:0
ExecStartPre=sleep 5
ExecStart=bash -c "unclutter -idle 0.5 -root -display :0 & /usr/bin/chromium-browser --noerrdialogs --disable-infobars --enable-logging --log-level=0 --start-maximized --kiosk https://google.com"

[Install]
WantedBy=multi-user.target

記述内容は私自身も自信を持って理解できている部分が少なかったり、ChatGPTとの問答の末の記述だったりするので、間違いや無駄な記述もある可能性にご留意ください

Wants=display-manager.serviceAfter=display-manager.serviceの箇所では、このUnitが依存するUnitを指定しています。今回はGUIでブラウザのウィンドウを開くという処理ですので、先にGUIの環境をセットアップするdisplay-manager.serviceが実行されるのを待っています。

ただそれでもその他のGUI関係のセットアップ処理とのずれが生じてしまうのか、displayが見つからないというようなエラーで起動が失敗してしまいました。そこで、力技ですがセットアップを待つためにExecStartPre=sleep 5というのを設定しました。ブラウザの起動前に5秒待ち、セットアップの処理と思われるものを待機しています。

そして実際にブラウザを起動するコマンドがExecStart=bash -c "unclutter -idle 0.5 -root -display :0 & /usr/bin/chromium-browser --noerrdialogs --disable-infobars --enable-logging --log-level=0 --start-maximized --kiosk https://google.com"にあたります。

まず、先にインストールしたunclutterを用い、一定時間(ここでは0.5秒)マウスが動かなかった場合にカーソルを非表示とするようにしています。それがunclutter -idle 0.5 -root -display :0 &の部分です。

そしてその後のコマンドでブラウザとしてchromium-browserを起動しています。開かれるWebページは、最後に指定しているhttps://google.comの部分です。ここのURLを書き換えれば任意のサイトを開くことが可能になります。

オプションとして色々指定していますが、特に大事そうなものはChromiumをKioskモードで起動する--kiosk、全画面で表示する--start-maximizedのあたりかと思います。このオプションについても、私自信まだあまり理解できていないところも多くあります。参考にオプションの一覧ページのリンクも載せましたので、こちらも合わせてご参照ください。

systemdへの登録と有効化

上記でUnitの定義ファイルが書けたので、これをsystemdに登録します。以下の手順でファイルを/etc/systemd/system以下におき、対象のUnitを有効化させます。

sudo cp browser.service /etc/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable browser.service

これでブラウザの起動が有効化されたので、一度ラズパイを再起動してみます。そうすると、ラズパイの起動後デスクトップが表示されて少しして、ブラウザが表示されるかと思います。

実際の動作

実際に動作したものをTwitterの方に動画でアップロードしています。なお、この動画を撮影したタイミングでは、マウスカーソルの非表示が設定できていませんでした🙇

おそらくsleepを設定しているためですが、ブラウザの起動までラグがあるなど、まだまだ改善が必要な箇所もあるのかなと思っています。ただ、最低限、ブラウザを起動し任意のホームページを全画面で表示するといったことはできたのかなと思っています。

おわりに

主にsystemdの部分ですが、まだまだ私自身も自信を持って説明の出来かなった内容も多くありました。それらは今後も治してみて、その都度記事の方でも修正・補足していけたらなと思っています。

より良い設定方法がありましたら、ぜひコメントなどでいただければ幸いです。

参考

1
0
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
1
0