けさらんぱの自由帳

とあるFF14プレイヤーがFF14のこととか関係ないことを書いていく予定のブログです。記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

IntelのGPUとWaylandの組み合わせでBroadcast RGBをFullに設定する

IntelGPUとWaylandの組み合わせでは、Broadcast RGBがLimitedに設定されて色が正しく表示されないことがあります。というか自分のPCのLinuxがそうでした。Xを使っている場合は、 xrandr --output DP-1 --set "Broadcast RGB" "Full" みたいにすればいいのですが、 xrandr が使えないWaylandでは結構苦労しました。

症状

Xで xrandr を使ってBroadcast RGBをFullに設定したときと比べ、Waylandの画面では黒が薄く見える。Waylandでは当然 xrandr が使えない。

対処

proptestの入手

まず、libdrmのソースコードを入手して展開する。 ダウンロードはこのURL から。そして下記のようにしてビルドする。

$ meson libdrm-2.4.105
$ ninja

ビルドするだけでインストールはしない。ビルドが終わると ./tests/proptest/proptest というバイナリができているので、これを /usr/local/bin/proptest にコピーする。

proptestの実行

/usr/local/bin/proptest を実行すると下記のような出力が得られる。この場合、コネクタが95、Broadcast RGBのIDが101、その値は0 (Automatic)になっている。

trying to open device 'i915'...done
Connector 95 (DP-1)
        1 EDID:
...(略)...
        101 Broadcast RGB:
                flags: enum
                enums: Automatic=0 Full=1 Limited 16:235=2
                value: 0
...(略)...

値を1 (Full)に設定するには、 /usr/local/bin/proptest -M i915 -D /dev/dri/card0 95 connector 101 1Waylandの起動前 に実行すればいい。

proptestの自動実行の設定

上記をGDMの起動時に自動的に実行する設定を行う。具体的には sudo EDITOR=rvim systemctl edit gdm.service でsystemdの設定を編集する。3行目あたりにある空行に、下記を追記して保存する。

[Service]
ExecStartPre=/usr/local/bin/proptest -M i915 -D /dev/dri/card0 95 connector 101 1

Linuxを再起動して /usr/local/bin/proptest を実行し、出力が下記のようになっていることを確認する。

trying to open device 'i915'...done
Connector 95 (DP-1)
        1 EDID:
...(略)...
        101 Broadcast RGB:
                flags: enum
                enums: Automatic=0 Full=1 Limited 16:235=2
                value: 1
...(略)...

記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。