シンプルな目標
Debian Bookwormを実行しているRaspberry Pi 5で、シンプルな目標を立てました。HDMI接続の画面とそのバックライトを夜に自動でオフにし、朝になったら再びオンにすることです。小さなディスプレイ管理作業で済むと思っていましたが、結果的にはRaspberry Piのディスプレイドライバを少し巡ることになりました。
初期段階
当初、私のRaspberry Piでは /boot/config.txt に特定のディスプレイドライバ設定を有効にしていませんでした。最初の試みでは、一般的なデスクトップ向けのディスプレイコマンドを使いました。
xsetを使う: 画面をブランクにするためにxset dpms force offを試しました。表示出力はブランクになりましたが、モニターのバックライトは点いたままでした。xrandrに切り替える: 次にxrandr --output HDMI-1 --offを使いました。これは画面出力を無効にしましたが、バックライトの問題はまだ残りました。
参考までに、現在有効な出力名は次のコマンドで確認できます。
DISPLAY=:0 xrandr --query
私の環境では出力名は HDMI-1 でしたが、別のインストール環境では異なる名前になっているかもしれません。
さらに調べる
ddcutil ならモニターの電源状態や輝度設定を直接制御できるかもしれないと思いました。私の場合、この方法は使えませんでした。必要な /dev/i2c デバイスが環境上公開されていなかったためです。
これらのデバイスを手早く確認するには、次のようにします。
ls /dev/i2c*
一致するデバイスが表示されない場合、ddcutil にはディスプレイと通信するための利用可能なI2Cバスがありません。
ドライバの発見
Fake KMSを試す
バックライトの問題に対処するため、/boot/config.txt でFake KMSドライバを有効にしました。
dtoverlay=vc4-fkms-v3d
再起動後も、HDMI出力を無効にしたときにバックライトはオフになりませんでした。
Full KMSで成功
転機になったのは、代わりにFull KMSドライバへ切り替えたときでした。
dtoverlay=vc4-kms-v3d
もう一度再起動すると、xrandr --output HDMI-1 --off が表示画像だけでなく、ついにモニターのバックライトも制御できるようになりました。
実際の手順は次のとおりです。
/boot/config.txtを編集する。dtoverlay=vc4-fkms-v3dの代わりにdtoverlay=vc4-kms-v3dを使う。- Raspberry Piを再起動する。
DISPLAY=:0 xrandr --queryで出力名を確認する。xrandrでモニターのオフとオンをテストする。
最終的な設定
日常利用を簡単にする
手動制御を簡単にするため、.profile にエイリアスを追加しました。
alias mon='DISPLAY=:0 xrandr --output HDMI-1 --auto'
alias moff='DISPLAY=:0 xrandr --output HDMI-1 --off'
シェルプロファイルを再読み込みするか、新しいログインシェルを開いた後、次のように使えるようになりました。
moff
mon
ルーチンを自動化する
手動操作なしで画面を管理するため、cron ジョブを設定しました。
# Turn off the monitor in the evening.
0 22 * * * DISPLAY=:0 xrandr --output HDMI-1 --off
0 23 * * * DISPLAY=:0 xrandr --output HDMI-1 --off
0 0 * * * DISPLAY=:0 xrandr --output HDMI-1 --off
# Turn on the monitor in the morning.
0 8 * * * DISPLAY=:0 xrandr --output HDMI-1 --auto
夜のエントリを複数入れているのは意図的です。手動操作や別のプロセスによってディスプレイが起こされた場合に備えて、後でもう一度オフコマンドを実行するためです。また、cronでは深夜0時に 0 0 を使う点にも注意してください。一般的なシステムでは 0 24 は有効なcron構文ではありません。
まとめ
これは単なるディスプレイの切り替え以上の作業でした。Debian Bookwormを実行する私のRaspberry Pi 5では、鍵になったのはFake KMSからFull KMSへ切り替えることでした。dtoverlay=vc4-kms-v3d が有効になると、xrandr でHDMI出力とモニターのバックライトの両方をオフにできるようになり、夜間の自動化が意図どおりに動作しました。
