Python独習!

習得したPython知識をペイフォワード

ラズパイ4でスライドショーを自動起動させる!

Raspberry PiにかまけてPython学習が進んでいませんが、今回もハマったことの忘備録として残しておきます。

やりたいこと

流行りのデジタルサイネージをやってみる。壁掛けモニターにラズパイを指すだけの簡単な構成で実現したい。
raspberry_pi_4_digital_signage

実現方法はおおまかに、表示する内容を予めPDF形式で用意しておき、ラズパイに移す。そして、PDFをスライドショーとして流すためにOkularを使う。あとラズパイが起動したのと同時にスライドショーが流れるように自動起動の設定をする。
以下でそれぞれ詳細に説明していく。
パーミッション関係はまだよく分かっていないので記載を割愛する。とりあえず『すべて許可』にしておけば動く。

環境

バイスバージョン : Raspberry Pi 4 Model B Rev
Raspbianのバージョン : 10.7

PDFファイルをラズパイに送る

詳細は↓↓の記事を参考に。
greenhornprofessional.hatenablog.com

スライドショー表示できるようにする

Okularのインストール

Okularは数あるPDFビューワーソフトの内の一つ。
以下のコマンドでインストールする。

sudo apt-get update
sudo apt-get install okular

Okularの起動

以下のコマンドで起動する。もしくは、スライドショーで流したいPDFファイルを右クリックしてコンテキストメニューからOkularを選択する。

okular

Okularの設定

PDFの1ページ目から5秒おきにページ進めていき、最終ページの次はまた1ページ目に戻るというようにループさせる。

  1. >設定 >Okularを設定 >全般 >外観 >"ヒントと情報メッセージを表示する" ⇒ OFF
  2. >設定 >Okularを設定 >全般 >外観 >"Display document title in titlebar if available" ⇒ OFF
  3. >設定 >Okularを設定 >プレゼンテーション >ナビゲーション >"一定時間ごとに進む" ⇒ 5秒
  4. >設定 >Okularを設定 >プレゼンテーション >ナビゲーション >"最後まで行ったら最初のページに戻る" ⇒ ON
  5. >設定 >Okularを設定 >プレゼンテーション >外観 >"進捗インジケータを表示する" ⇒ OFF

XScreenSaverのインストール

XScreenSaverはディスプレイをコントロールするソフト。ディスプレイが省エネモードに入って消えないようにする。
以下のコマンドでインストールする。

sudo apt-get update
sudo apt-get install xscreensaver

XScreenSaverの設定

ラズパイのスタートメニュー >設定 >スクリーンセイバー >表示モード >モード >"セーバーを無効にする" を選択

スライドショーが自動起動するようにする

ラズパイが起動するのと同時にスライドショーも自動で起動されるようにする。

シェルスクリプトの作成

Okularの起動からスライドショー実行までをスクリプトで記述する。スクリプトファイルの保存場所は /opt が良い、らしい。

以下のコマンドでスクリプトファイルを新規作成する。

sudo touch /opt/slideshow.sh

テキストエディタで開く。

sudo mousepad /opt/slideshow.sh

スクリプトを以下の通り記述して保存する。
※/home/pi/share に対象となるPDFファイル(ここではslide.pdf)が置かれているものとする。

#!/bin/bash

export DISPLAY=:0.0

export XAUTHORITY="/home/pi/.Xauthority"

okular --presentation /home/pi/share/slide.pdf

サービス設定ファイルの作成

上記のスクリプトファイルを自動実行させるための設定ファイルを作成する。同じく、これの保存場所は /opt が良い、らしい。

以下のコマンドで設定ファイルを新規作成する。

sudo touch /opt/autoslideshow.service

テキストエディタで開く。

sudo mousepad /opt/autoslideshow.service

設定ファイルを以下の通り記述して保存する。

[Unit]
Description=run slideshow.sh

[Service]
ExecStart=/opt/slideshow.sh

Type=simple

[Install]
WantedBy=multi-user.target

自動実行サービスとして登録

以下のコマンドで登録する。

sudo systemctl enable /opt/autoslideshow.service

登録を解除したい時は以下のコマンドで。

sudo systemctl disable /opt/autoslideshow.service

動作確認

ラズパイを再起動して、スライドショーが自動実行されれば成功!
上手く行かないときは以下のサイトを参考のこと。
Raspberry PiでプログラムをOS起動時に実行させる [Systemd] - チカラの技術
Python - raspiでsystemdを使っての自動実行ができない|teratail
QXcbConnection: Could not connect to display | Qt Forum

/* -----codeの行番号----- */