Armadilloフォーラム

GUIアプリケーションでのコントラスト・輝度の動的変更に関する技術的確認のお願い

shimomura2025

2025年5月26日 11時38分

いつもお世話になっております。下村と申します。

現在、Armadillo-X2上でGUIアプリケーションの開発を進めており、アプリケーション上で動的にコントラストおよび輝度の変更を実現したいと考えております。つきましては、以下の点についてご教示いただけますと幸いです。

1. Armadillo-X2におけるHDMI接続ディスプレイのコントラスト・輝度設定について
Armadilloの別のバージョンでは、輝度設定に使用するsysfsファイルの変更が可能であったと認識しております。Armadillo-X2においても、HDMI接続されたディスプレイのコントラストや輝度を変更するためのsysfsファイルや設定項目が存在するか、またはそれらを利用する方法があるかについてご教示いただけますでしょうか。

2. weston.iniの設定変更が反映されない原因について
以下のようにweston.iniにgamma設定を追加しましたが、画面上での変化が確認できませんでした。

[core]
idle-time=0
use-g2d=1
xwayland=true
repaint-window=16
 
[shell]
panel-position=none
 
[output]
name=HDMI-A-1
mode=1920x1080
; 追加
gamma=0.8,0.8,0.8
 
[output]
name=LVDS-1
mode=off

そもそも輝度およびコントラストの変更はgammaであっているのでしょうか。また、weston.iniの設定変更が反映されない原因として、考えられるご見解をお聞かせいただけますでしょうか。

3. Waylandにおけるコントラスト・輝度の動的変更方法について
weston.iniの設定変更が変更できたとしても、コンテナ起動時のみweston.iniを参照しないため、動的に輝度やコントラストを変更できないように感じます。Wayland環境において、コントラストや輝度を動的に変更するための手段として、gamma-controlプロトコルの利用が考えられます。このプロトコルを使用した実装方法や、Armadillo-X2での対応状況についてご教示いただけますでしょうか。また、別の方法がある場合は、ご教示いただけますでしょうか。

お忙しいところ恐れ入りますが、上記の点についてご確認の上、ご回答いただけますと幸いです。

何卒よろしくお願い申し上げます。

コメント

佐藤です。

1. に関しまして、
A640やA610などの製品での sysfs による操作は HDMI を使っていなかったため固定のデバイスに対してそういった設定ファイルができていましたが、
HDMIの場合はできません。

2. に関しまして、
現在使用している weston のバージョンは sdr/hdr-gamma の weston.ini 設定を対応していません。
最新の weston でも gamma-control プロトコルは対応してないので実装する必要があります。
しかしながら実装したとしても gamma-control による輝度設定は暗くするフィルターであり、実際のディスプレイの輝度設定を操作しているわけではないため
期待通りの動きにならないと思います。
HDMIで接続されているディスプレイの輝度設定をLinuxから設定するスタンダードな方法はありません。

3. に関しまして、
申し訳ありません、動的なコントラストや輝度の変更について
こちらでは情報を持ち合わせておりません。
もしかしたら「DDC/CI」というプロトコルできる可能性はありますが Armadillo X2 で操作した実績はありませんのでサポートできない状態です。

佐藤様

丁寧なご回答ありがとうございます。
1. に関しまして
ご案内いただいた通り、画面の輝度制御は、sysfs による操作制御ができないことを承知いたしました。

そこで、armadillo-x2の取り扱い説明書(https://manual.atmark-techno.com/armadillo-x2/armadillo-x2_product_manu…)3.6.5.2.を確認すると、HDMIの画面出力の停止について
echo 1 > /sys/class/graphics/fb0/blank
コマンドを実行するとの記載があります。しかしながら、このコマンドでは映像出力が停止しない現象が発生しております。HDMI接続されたディスプレイに関しては、sysfs経由での制御が本質的に不可能であるのか、詳細をご教示いただけますでしょうか。

2.に関しまして
回答いただいたとおり、本質的な制御ではないため、ディスプレイの設定を制御する方向で開発を進めております。

3.に関しまして
DDC/CIプロトコルを用いたディスプレイの輝度制御に関して、armadillo-x2に、ddcutilというモジュールをインストールしたところ、ディスプレイ情報の取得は成功したものの、輝度の制御がうまくいかない状況です。armadillo-X2において、今後の実装において輝度を制御する機能追加などあればご教授いただければ幸いです。

お手数をおかけいたしますが、上記の点についてご確認の上、ご回答いただけますようお願い申し上げます。

佐藤です。

> そこで、armadillo-x2の取り扱い説明書(https://manual.atmark-techno.com/armadillo-x2/armadillo-x2_product_manu…)3.6.5.2.を確認すると、HDMIの画面出力の停止について
> echo 1 > /sys/class/graphics/fb0/blank
> コマンドを実行するとの記載があります。しかしながら、このコマンドでは映像出力が停止しない現象が発生しております。HDMI接続されたディスプレイに関しては、sysfs経由での制御が本質的に不可能であるのか、詳細をご教示いただけますでしょうか。
何度やっても映像出力は停止しないのでしょうか、それとも停止するときもあるし停止しないときもあるのでしょうか。

> 3.に関しまして
> DDC/CIプロトコルを用いたディスプレイの輝度制御に関して、armadillo-x2に、ddcutilというモジュールをインストールしたところ、ディスプレイ情報の取得は成功したものの、輝度の制御がうまくいかない状況です。armadillo-X2において、今後の実装において輝度を制御する機能追加などあればご教授いただければ幸いです。
大変申し訳ありません。現状では輝度を制御する機能の追加は予定しておりません。

> 何度やっても映像出力は停止しないのでしょうか、それとも停止するときもあるし停止しないときもあるのでしょうか。
現状何度試しても、映像出力を停止できていません。

> 大変申し訳ありません。現状では輝度を制御する機能の追加は予定しておりません。
承知いたしました。

佐藤です。

> > 何度やっても映像出力は停止しないのでしょうか、それとも停止するときもあるし停止しないときもあるのでしょうか。
> 現状何度試しても、映像出力を停止できていません。
すいません。
flutterアプリケーションはfbに直接描画してるわけではないので、 "echo 1 > /sys/class/graphics/fb0/blank" 実行しても効果ありません。
こちらに類似のフォーラムがありますので、これが参考になるかもしれません。
https://armadillo.atmark-techno.com/forum/armadillo/25523#comment-19836

> HDMI接続されたディスプレイに関しては、sysfs経由での制御が本質的に不可能であるのか、
はい、不可能です。
DRMを通して行う必要があります。

佐藤様

お世話になっております。度々申し訳ございません。

>>こちらに類似のフォーラムがありますので、これが参考になるかもしれません。
https://armadillo.atmark-techno.com/forum/armadillo/25523#comment-19836

HDMIのディスプレイ出力停止に関して、類似フォーラムを参考にして、armadillo-x2の環境でもwestonに--backend=fbdev-backend.soを指定して、コンテナを起動してみました。
起動したところ、以下のような挙動になり、うまくwestonを起動し、qtのアプリケーションを実行することができなかったです。

「fbdevデバイスは認識されているが、Waylandソケットが生成されていない(またはアクセスできない)ため、Qtアプリが起動できない」(Failed to create wl_display (No such file or directory))というようなログが出て、qtのアプリがWaylandサーバにつながらないため、アプリを実行できない。そのため、westonコンテナ上でecho 1 > /sys/class/graphics/fb0/blankを実行するまでに至ってないです。

コンテナのログに関して抜粋したものを添付いたします。
コンテナ上でwestonをバックエンドで起動し、HDMI出力をコンテナ上から停止できる方法についてご教授いただければ幸いです。
よろしくお願いいたします。

※以下は設定
at-weston-launch

exec weston-launch --tty "$TTY" --user "$ATUSER" -- --backend=fbdev-backend.so ←バックエンドを指定
# exec weston-launch --tty "$TTY" --user "$ATUSER" ←通常時

app.conf

add_volumes /run/udev:/run/udev:ro
add_hotplugs input
add_devices /dev/tty7
add_args --cap-add=SYS_TTY_CONFIG
add_devices /dev/fb0 ←追加
add_devices /dev/tty0 ←追加
ファイル ファイルの説明
fbdev-backend_bk.txt

佐藤です。

--backend=fbdev-backend.so を付けた場合、
westonは起動するがqtアプリが起動しないということでしょうか。
それとも weston も起動しないということでしょうか。

佐藤です。

https://github.com/akhilharihar/Weston-kiosk-shell-DPMS でディスプレイの on / off ができましたので、
以下の手順で試してみたください。

1. ATDE上で添付ファイル(weston_dpms.tar.gz)をダウンロードして展開してください。

2.flutterアプリプロジェクトディレクトリにある
container/resources_flutter/etc/xdg/weston/weston.ini に以下を追加

[core]
idle-time=0
use-g2d=1
xwayland=true
repaint-window=16
modules=systemd-notify.so,weston-shell-dpms.so # ★これを追加

3.flutterアプリプロジェクト下で追加のディレクトリ作成

[ATDE]$ mkdir -p container/resources_flutter/usr/bin
[ATDE]$ mkdir -p container/resources_flutter/usr/lib/aarch64-linux-gnu/weston

4. 添付ファイル内の "weston-shell-dpms.so" を container/resources_flutter/usr/lib/aarch64-linux-gnu/weston にコピー
添付ファイル内の "weston-dpms" を container/resources_flutter/usr/bin にコピー

5. [Generate development/release swu] を実行して swu を作成し、armadilloへインストール

6. armadillo上でflutterアプリが起動したら、コンソールからログインして以下を実行

[container]# weston-dpms -m off   # ★これでディスプレイが off になります 
[container]# weston-dpms -m on    # ★これでディスプレイが on になります

コマンドでの手動確認がとれましたら、
flutterアプリ内で "weston-dpms -m off" を実行するようにすると良いかと思います。