LinuxでIntel製CPU内蔵のGPUを使うと動画再生時に画面がちらつく問題の対策

カテゴリ: linux

この1、2ヶ月ほどmanjaroで動画を再生する時、画面がちらつくようになったのが気になっていました。ググったところ、Intel製GPUの場合はちらつき防止のオプションがあるので有効化するといいみたいですね。

https://wiki.archlinux.org/title/intel_graphics#Tearing

/etc/X11/xorg.conf.d/20-intel.conf に以下を書き込むだけ。簡単。

Section "Device"
  Identifier "Intel Graphics"
  Driver "intel"
  Option "TearFree" "true"
EndSection

Option "TearFree" "true"がポイントですね。ちらつきというと英語でflickerかなと思いがちなのですが、ここではtearです。この場合のtearは涙ではなく引き裂くの意。どうもこの「ちらつき」は垂直同期に関係していて、画面が上下に「引き裂かれる」結果だからみたいですね。

某所で教えて頂いたのですが、ちゃんと用語としてあるみたいですね。

ティアリングとは

1 枚の画像の中に複数フレームの画像が描画されてしまい、映像が途中で左右にずれたように見える現象のこと

http://faq3.dospara.co.jp/faq/show/8398?site_domain=default

さすがArchWikiは情報がよく纏まってるなあとか、トラブル調査すると英語も含め勉強になるなと思った次第でした。

ちなみに垂直同期は画面の更新度合いに合わせて自動でオンオフされるっぽいのですが、今回の設定を行ったら文字列などもくっきり読めるようになった気がします。

あと、この設定を行う際、xrandrなどを使って解像度などの変更をしている人はディスプレイの指定方法が変わる場合がある点に注意してください。なぜかわかりませんが、私の環境では以下のようにハイフンを使わない名前に変わってました。

  • DP-1 -> DP1
  • HDMI-1 -> HDMI1

思えば、このちらつきが発生するようになった直前くらいに、丁度逆方向の名前の変更が発生してxrandrの設定が効かなくなるトラブルに見舞われたのでした。その頃になにかあったんだろうなあ……。

別解

そもそもこの問題はドライバにxf86-video-intelを使うせいらしいです。非推奨なので、modesettingを使うといいとか。先の設定を使っている場合は、以下の手順でいける模様。

  1. xf86-video-intelをアンインストール
  2. /etc/X11/xorg.conf.d/20-intel.confを削除
  3. mesaをインストール
  4. /etc/mkinitcpio.confMODULES=(i915)と記述
  5. mkinitcpio -Pを実行

ただし私の環境ではティアリングが復活してしまいました。 4K + WUXGAなのが原因かも知れず、EDIDなるものを手動で指定する必要があるのではと議論してます。

If you are using a custom EDID file (not applicable for the built-in resolutions), you should embed it into initramfs as well:

https://wiki.archlinux.org/title/Kernel_mode_setting#mkinitcpio

ちょっとダルいしxf86-video-intelでとりあえず問題は解決したので先送りにします。