たのしい人生

【小ネタ】Ubuntu 20.04 で Radeon RX5700XT と 4K / 144 Hz / マルチディスプレイ環境など利用時に Suspend から復帰後画面が乱れる問題に対処する

表題の通り Ubuntu 20.04 で Radeon RX5700XT 利用時に Suspend から復帰後画面に乱れが発生していました。


Display glitch on Ubuntu 20.04 with Radeon RX5700XT after suspend / resume

発生環境は

  • Ubuntu 20.04
  • Radeon RX5700XT
  • マルチディスプレイ
    • Display 1 - 4K / 60 Hz / DisplayPort 接続
    • Display 2 - 1080p / 144 Hz / DisplayPort 接続

ただし、Display 2 の電源を切って接続を解除すると glitch は発生しない。他の発生例も 4K 等の高解像度ディスプレイやマルチディスプレイ環境で発生しているらしい。

解決法

Radeon の自動電源管理に現在問題が発生しているかもしれない。

glitch が発生している状態で、

$ sudo sh -c 'echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level'

で強制的に自動電源管理を無効したら直った。自動的な電源管理がなくなるため消費電力は増えるかもしれない。low に設定しても直ったのでパフォーマンスに問題ない場合は low 設定でもよいかもしれない。

この設定は永続化せず、Suspend や電源断からの復帰で再び auto に戻るため、発生のたびに実行する必要がある。また、一度 power_dpm_force_performance_levelhigh に設定してから Suspend / Resume した際には high に設定するだけでなく、一回別の値 (たとえば auto) をセットしてから再び high 等に設定し直す必要があった。

私の場合は電源断から起動時は問題なく、Suspend からの Resume 時に問題が発生していたため /usr/lib/systemd/system-sleep/amdgpu-workaround というファイルを用意して sudo chmod a+x /usr/lib/systemd/system-sleep/amdgpu-workaround で実行権限をつけて

#!/bin/sh

case $1/$2 in
  post/*)
    echo auto > /sys/class/drm/card0/device/power_dpm_force_performance_level
    echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level
    ;;
esac

という内容にして一旦は解決した。Ubuntu 19.10 では発生していなかったはずなので、修正されるまでこれでしのいで様子を見ることにした。

おしまい。

参照

Video/Display Glitch on All Kernels above 4.14
[SOLVED] KDE 75Hz screen flicker
AMDGPU - ArchWiki # Screen artifacts and frequency problem

Amazon.co.jpアソシエイト