Raspberry Pi 5のHDMIモニターをオフにする方法。思ったほど簡単ではありません
AC/DC を一緒に歌いましょう…
tvserviceを試しました
cec-clientを試しました
dtparamを試しました
vcenvcmdを試しました
皆さんに言います、見た目よりも難しいのです
約6年前、家族用のデジタルフォトフレームを作りました。Pi 3をコンピューターのモニターに接続し、何千枚もの家族写真に加え、インスピレーションを与える画像や名言などを保存していました。操作は非常に簡単でした。
- 1時間ごとに120枚の画像を生成します。これらの画像は、ランダムな順序で写真を選び、ImageMagickを使用して抽象的な背景に配置することと、事前に用意されたインスピレーションを与える画像、引用文、その他のフルスクリーン写真を組み合わせたものです。
- このリストをfbi(フレームバッファインターフェース)に渡し、各項目を30秒間停止して表示するように指示します。毎時00分ごとにfbiを終了し、新しいリストで再起動します。
- 真夜中にディスプレイをオフにし(私たちは寝ているので)、午前6時に再びオンにします
驚くべきことに、同じメモリカードを搭載したPi3は、長年にわたり動作し続けました。時折、不具合が発生して電源を入れ直す必要もありましたが、何年もかけて大量の画像を生成するために、毎時間膨大な計算処理とI/O処理を実行していたことを考えると、非常に堅牢な動作でした。
バージョン2.0
最近、このシステムを拡張したいと思っています。去年は休暇までのカウントダウン機能を作って、1時間ごとに目的地の写真と「あと___日」というメッセージが表示されるようにしました(ImageMagickは本当に素晴らしいです)。スポーツのスコアや順位、天気、株式市場情報なども追加しようかと考えています。
しかし、以前のシステムは完全にPERLで書かれており、そろそろ古さを感じ始めています。よりモジュール化されたシステムを作り直したいと思い、次回はPythonを使うことにしました。RPi 3は32ビットで、Raspbian(Debianのスキンを変更したもの)Jessieしかサポートしていません。Python 3をサポートする最新のOSに移行するには、アップグレードが必要になります。
そこでR Pi 5 (4GB) を購入しました…そして、そこから楽しいことが始まりました。画像生成と表示はすべて問題なく動作しましたが、夜間にモニターをオフにするのは冒険でした。
tvservice、あなたがいなくて寂しいです
私は tvservice コマンドを使用して、モニター (正確には HDMI 出力) のオン/オフを切り替えていました。オフにすると、モニターは入力がないことを感知し、省電力モードになりました。
しかし、このコマンドはBookwormにはもう存在しません。グーグルで調べた後、cec-clientを見つけましたが、すぐに私が求めているものではないと分かりました。
次は vcgencmd です。マニュアル ページには次のように記載されています。
display_power 0|1|-1
display_power 0|1|-1 display
Show current display power state, or set the display power state. vc‐
gencmd display_power 0 will turn off power to the current display. vc‐
gencmd display_power 1 will turn on power to the display. If no parameter
is set, this will display the current power state. The final parameter is
an optional display ID, as returned by tvservice -l or from the table be‐
low, which allows a specific display to be turned on or off.
完璧!ただし:
# vcgencmd commands
commands="commands, set_logging, bootloader_config, bootloader_version, cache_flush, codec_enabled, get_mem, get_rsts, measure_clock, measure_temp, measure_volts, get_hvs_asserts, get_config, get_throttled, pmicrd, pmicwr, read_ring_osc, version, readmr, otp_dump, pmic_read_adc, power_monitor"
# vcgencmd display_power 0
vc_gencmd_read_response returned -1
error=1 error_msg="Command not registered"なるほど。それで行き止まりですね。他に何かありますか?
ああ、dtparamがあります:
# dtparam -h hdmi
hdmi Set to "off" to disable the HDMI interface
(default "on")
Except:
# dtparam hdmi=off
* Unknown parameter 'hdmi'
さて、R Pi プロジェクトにはもう少し QA が必要だと判断されました。
解決策
このプロジェクトではX Windowを全く使用していませんでした。コンソールへの自動ログインを起動し、fbiを起動しただけです。実際の解決策は、X Windowデスクトップへの自動ログインです。fbiは引き続き実行可能です(X Windowの動作を上書きします)。
モニターの電源を切るときは、まずfbiを終了し、Xに戻るまで数秒待ちます(スクリプトではsleep 10を使用します)。その後、以下の操作を行います。
xrandr --display :0 --output HDMI-1 --off「X の下へ移動」して HDMI ポートを直接オフにする方法はないと思います。
2.0 では、fbi を捨てて、 fehのようなものを使い、スライドショーを X だけで実行するつもりです。
将来Googleを使う皆さん、Raspberry PiのHDMIモニターをオフにする方法を知りたいなら、この記事が役に立ちます。少なくともOS 13ですべてが変わるまでは。