Странное мерцание / разрывание экрана при использовании 75 Гц на AMD GPU
Я надеюсь, что это не имеет большого значения, что я публикую свой вопрос здесь, даже если я использую Pop!_OS. Проблема также возникает на живом USB Manjaro.
Я использую
- Процессор Ryzen 1500x,
- 16 ГБ ОЗУ,
- Материнская плата MSI B350m Gaming Pro с версией RX 580 8GB,
- Монитор AOC G2260VWQ6 1920x1080x75 Гц.
После загрузки и входа в систему все в порядке, однако, после выключения и последующего включения экрана, возврата из экранной заставки, изменения настроек дисплея, которые заставляют экран "перезагружаться" или что-либо подобное, при частоте обновления более 60 Гц, что ~75 Гц для моего экрана, странное мерцание начинает происходить.
Вот ссылки с видео для разных ситуаций:
Все хорошо после входа в систему: https://streamable.com/am3kp
Экран начинает мигать после блокировки (выключает экран через секунду), а затем снова входит в систему: https://streamable.com/meeiz
Устранение мерцания путем изменения разрешения и возврата: https://streamable.com/5l5z2
Иногда все равно работает нормально, но это происходило только один раз, перезагрузка экрана несколько раз не начинала мерцать, пока не перезагрузилась.
Я протестировал его, используя DisplayPort и HDMI, с более высокой частотой обновления при более низких разрешениях проблема все еще возникает. При переключении на другое разрешение и использовании ~75 Гц мерцание не исчезает.
Это происходит как в Mesa версии 18, так и в 19, в Manjaro это все еще происходило даже при переходе на версию ядра 5. Конечно, проблема не возникает в Windows.
Я не настолько продвинут в Linux, поэтому я действительно не знаю, как это исправить. Пожалуйста помоги.
РЕДАКТИРОВАТЬ: После поиска немного больше, я нашел обходной путь. Мне пришлось изменить "авто" на "высокий" в файле /sys/class/drm/card0/device/power_dpm_force_performance_level. Ссылка на тему, на которой я нашел решение: https://bbs.archlinux.org/viewtopic.php?id=244398
0 ответов
Хорошее объяснение в Arch wiki: https://wiki.archlinux.org/index.php/AMDGPU#Screen_artifacts_and_frequency_problem
Чтобы исправить это навсегда (это будет работать даже после перезагрузки):
1) Запускаем в терминале:
echo '[Unit]
Description=Fix amd flickering on high Hz monitors.
[Service]
ExecStart=/usr/bin/amdfix_script.sh
[Install]
WantedBy=multi-user.target' | sudo tee /etc/systemd/system/amdfix_service.service
2) Запускаем в терминале:
sudo chmod 644 /etc/systemd/system/amdfix_service.service
3) Запустите терминал (измените "низкий" на "высокий", если хотите. Лично я выбираю "низкий": графический процессор менее шумный, и я не вижу снижения производительности.):
echo '#!/bin/bash
echo 'low' | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level' | sudo tee /usr/bin/amdfix_script.sh
4) Запускаем в терминале:
sudo chmod +x /usr/bin/amdfix_script.sh
5) Запускаем в терминале:
sudo systemctl enable amdfix_service.service
6) Запускаем в терминале:
sudo systemctl start amdfix_service.service
Чтобы проверить, работает ли он в терминале:
sudo systemctl status amdfix_service.service
в выводе должен быть текст "amdfix_service.service: Succeeded".
Все сделано.
Чтобы изменить уровень производительности после того, как вы выполнили все шаги, снова запустите команду внутри шага "3)" с желаемым уровнем производительности "низкий" или "высокий", а затем запустите
sudo systemctl restart amdfix_service.service
Чтобы быстро временно (вам нужно запускать команду при каждой загрузке) исправить проблему, запустите в терминале:
echo 'low' | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level
ИЛИ
echo 'high' | sudo tee sys/class/drm/card0/device/power_dpm_force_performance_level
Я совершенно новичок в Linux, но у меня такая же проблема... Я использую Ubuntu 20.04, а мой графический процессор - ADM Radeon rx 5700 xt.
Скрипт работает, если я запускаю его с
sudo systemctl start amdfix_service.service
Но после перезагрузки не работает. Мне всегда нужно запускать команду после загрузки. Если я проверю статус с помощью
sudo systemctl status amdfix_service.service
перед запуском скрипта я получаю следующий вывод:
mdfix_service.service - Fix amd flickering on high Hz monitors.
Loaded: loaded (/etc/systemd/system/amdfix_service.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2020-05-17 12:32:19 CEST; 1min 45s ago
Process: 779 ExecStart=/usr/bin/amdfix_script.sh (code=exited, status=1/FAILURE)
Main PID: 779 (code=exited, status=1/FAILURE)
Mai 17 12:32:19 leonPC sudo[792]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/tee /sys/class/drm/card0/device/power_dpm_force_performance_level
Mai 17 12:32:19 leonPC sudo[792]: pam_unix(sudo:session): session opened for user root by (uid=0)
Mai 17 12:32:19 leonPC amdfix_script.sh[808]: tee: /sys/class/drm/card0/device/power_dpm_force_performance_level: Permission denied
Mai 17 12:32:19 leonPC amdfix_script.sh[808]: low
Mai 17 12:32:19 leonPC sudo[792]: pam_unix(sudo:session): session closed for user root
Mai 17 12:32:19 leonPC systemd[1]: amdfix_service.service: Main process exited, code=exited, status=1/FAILURE
Mai 17 12:32:19 leonPC systemd[1]: amdfix_service.service: Failed with result 'exit-code'.
Похоже, у amdfix_script.sh нет разрешения на запись
sys/class/drm/card0/device/power_dpm_force_performance_level
Вы знаете, как это исправить?