LinuxRuLinux без лишней теории
Графика и экран

Wayland в Linux: как исправить мерцание и проблемы с экраном

Редакция LinuxRu7 мин чтенияИнструкции

Мерцание экрана в Wayland чаще всего вызывают адаптивная синхронизация, Panel Self Refresh на ноутбуках, старый драйвер NVIDIA или программа, работающая через XWayland. Сначала определите, мерцает весь экран или одно окно, а потом идите по таблице симптомов: для каждого случая ниже есть команды и способ отката.

Wayland в Linux: как исправить мерцание и проблемы с экраном
Фото: User:Psiĥedelisto (screenshot) of the following software: Kitty, a ter, GPLv3, Wikimedia Commons
Содержание
  1. Сначала диагноз
  2. Симптомы и причины
  3. VRR и частота
  4. NVIDIA
  5. Intel и AMD
  6. Параметры ядра
  7. Одно приложение
  8. Если не помогло
  9. Частые вопросы

Сначала выясните, где именно мерцает

Мерцание под Wayland почти никогда не лечится одной волшебной командой. Причины разные: переменная частота обновления, энергосбережение панели ноутбука, синхронизация в драйвере NVIDIA, отдельное приложение на XWayland. Поэтому первые пять минут уходят на диагноз, а не на правку конфигов.

# точно ли сейчас Wayland
echo $XDG_SESSION_TYPE

# какая видеокарта и какой драйвер её обслуживает
lspci -k | grep -A3 -E "VGA|3D|Display"

# версия ядра
uname -r

# ошибки графической подсистемы в текущей загрузке
journalctl -b -p err | grep -iE "drm|amdgpu|i915|xe|nvidia"

Дальше ответьте себе на три вопроса. Мерцает весь экран или одно окно? Это происходит всегда, только в полноэкранных играх и видео, или при движении мыши на неподвижной картинке? Один монитор или несколько? От ответа зависит, какой из разделов ниже вам нужен. Если не уверены, какой драйвер стоит, сначала загляните в статью Как узнать видеодрайвер и видеокарту в Linux.

Таблица симптомов: что обычно стоит за мерцанием

СимптомЧастая причинаЧто попробовать первым
Мигает весь экран в играх и полноэкранном видеоVRR, Adaptive Sync, FreeSyncВыключить адаптивную синхронизацию в настройках экрана
Ноутбук, мерцание или артефакты на статичной картинкеPanel Self Refresh у Intel и AMDОтключить PSR параметром ядра
NVIDIA, дёргаются и мигают отдельные окнаСтарый драйвер без явной синхронизацииДрайвер 555 и новее, modeset включён
Мерцает только одна программаПриложение работает через XWaylandЗапустить его в нативном режиме Wayland
Мерцание после включения ночного режимаЦветовой фильтр или HDRВыключить ночную схему и HDR, проверить снова
Второй монитор гаснет и включаетсяКабель, частота, режим HDMI или DPСнизить частоту, сменить кабель или порт
Чёрный экран или рябь после выхода из снаДрайвер и управление питаниемОбновить ядро и драйвер, проверить службы сна NVIDIA

Адаптивная синхронизация и частота обновления

Самая частая причина мерцания на игровых мониторах - VRR. Когда частота кадров падает ниже нижней границы диапазона FreeSync, многие матрицы начинают заметно менять яркость, и это выглядит как мигание. В KDE Plasma откройте Параметры системы, Экран и монитор и переключите Адаптивную синхронизацию с режима Всегда на Автоматически или Никогда. В GNOME 50 переменная частота включена по умолчанию, выключить её можно в разделе Дисплеи для конкретного монитора.

Попробуйте также зафиксировать частоту: вместо 165 Гц выставить 144 или 120. В Plasma это удобно делать из терминала, особенно если экран мерцает так, что неудобно щёлкать мышью:

# список выходов и доступных режимов
kscreen-doctor -o

# выставить режим для конкретного выхода
kscreen-doctor output.DP-1.mode.2560x1440@144

# выключить адаптивную синхронизацию
kscreen-doctor output.DP-1.vrrpolicy.never

Имя выхода вроде DP-1 или HDMI-A-1 берите из вывода первой команды. Если мерцание связано с HDR, выключите его там же и проверьте, не включён ли ночной режим: на некоторых связках драйвера и монитора цветовой фильтр вызывает моргание при движении курсора. Подробнее об экранах и новых параметрах в статье KDE Plasma 6.6: настройка рабочего стола без перегрузки.

NVIDIA: драйвер, modeset и явная синхронизация

Большая часть жалоб на мерцание с NVIDIA под Wayland относилась к драйверам старше 555. В них не было явной синхронизации (explicit sync), и окна XWayland, особенно браузеры и Electron-программы, дёргались и мигали. С драйвером 555 и новее, Plasma 6.1 и новее, свежим GNOME и XWayland 24.1 эта проблема в основном ушла. Значит, первый шаг - проверить версию драйвера и обновиться.

# версия драйвера
nvidia-smi --query-gpu=driver_version --format=csv,noheader

# включён ли DRM modeset, должно быть Y
cat /sys/module/nvidia_drm/parameters/modeset

В свежих сборках драйвера и пакетах дистрибутивов modeset обычно включён по умолчанию. Если видите N, включите его параметрами ядра nvidia-drm.modeset=1 nvidia-drm.fbdev=1 (как это сделать, описано ниже) или через файл модуля:

# /etc/modprobe.d/nvidia.conf
options nvidia_drm modeset=1 fbdev=1

После правки файла пересоберите initramfs: sudo update-initramfs -u в Ubuntu и Debian, sudo dracut -f в Fedora, sudo mkinitcpio -P в Arch. Если проблемы появляются после сна, проверьте, что включены службы nvidia-suspend и nvidia-resume. Установка драйвера по дистрибутивам разобрана в статье Как установить драйвер NVIDIA в Ubuntu, Fedora и Arch.

Intel и AMD: Panel Self Refresh на ноутбуках

Panel Self Refresh позволяет панели ноутбука показывать последний кадр без участия видеокарты и экономит заряд. На части ноутбуков он вызывает мерцание, рябь при прокрутке или зависание картинки на долю секунды. Проверка простая: временно отключите PSR параметром ядра и поработайте день.

# Intel, драйвер i915
i915.enable_psr=0

# AMD, драйвер amdgpu: маска 0x10 отключает PSR
amdgpu.dcdebugmask=0x10

Если помогло, оставьте параметр, но поищите в багтрекере своего дистрибутива или ядра, не исправлено ли это в более новой версии: отключённый PSR немного сокращает время работы от батареи. На новых ноутбуках Intel вместо i915 может работать драйвер xe, это видно в выводе lspci -k, у него свои параметры.

Для AMD учтите ещё одну вещь: свободный драйвер не поддерживает HDMI 2.1, поэтому 4K на 120 Гц и выше через HDMI может работать нестабильно или с пониженной цветностью. На таких мониторах используйте DisplayPort.

Как добавить и убрать параметр ядра

# Ubuntu и Debian: дописать параметр в GRUB_CMDLINE_LINUX_DEFAULT
sudo nano /etc/default/grub
sudo update-grub

# Fedora: добавить параметр ко всем ядрам и убрать его обратно
sudo grubby --update-kernel=ALL --args="i915.enable_psr=0"
sudo grubby --update-kernel=ALL --remove-args="i915.enable_psr=0"

# Arch с GRUB
sudo nano /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg

# проверить после перезагрузки
cat /proc/cmdline

В Arch с systemd-boot параметры обычно лежат в /etc/kernel/cmdline или в строке options файла записи загрузчика. Если после правки система не загружается, в меню GRUB нажмите e, удалите параметр из строки linux и загрузитесь клавишами Ctrl+X. Это изменение разовое, после загрузки уберите параметр из конфига. Если повреждён сам загрузчик, поможет статья Как восстановить загрузчик GRUB.

Меняйте по одному параметру за раз и записывайте, что именно сделали. Когда одновременно выключены VRR, PSR, HDR и добавлены три опции драйвера, через месяц уже никто не помнит, что из этого помогло, а что только съедает батарею.

Мерцает одна программа: XWayland и Electron

Если весь рабочий стол в порядке, а мигает браузер, мессенджер или редактор кода, скорее всего, программа работает через XWayland. Проверить легко: запустите xeyes из пакета x11-apps (в Fedora xeyes, в Arch xorg-xeyes). Глаза следят за курсором только над окнами X11, над нативными окнами Wayland они замирают.

Программы на Chromium и Electron можно перевести в нативный режим:

# разовый запуск
chromium --ozone-platform=wayland
code --ozone-platform=wayland

# для Electron-программ через переменную окружения
ELECTRON_OZONE_PLATFORM_HINT=auto code

В Chrome и Chromium то же самое задаётся на странице chrome://flags, параметр Preferred Ozone platform. Свежие версии Electron и Chromium всё чаще сами выбирают Wayland, так что после обновления проблема может исчезнуть без ваших действий. Firefox давно работает под Wayland нативно. Если программа на Flatpak, разрешение на сокет Wayland можно проверить и выдать через Flatseal или flatpak override.

Если ничего не помогло: откат и отчёт об ошибке

Попробуйте загрузить предыдущее ядро из меню GRUB. Если с ним мерцания нет, это регрессия, и о ней стоит сообщить. В Plasma 6 сессия X11 всё ещё доступна, но ставится отдельным пакетом, обычно kwin-x11 или plasma-x11-session в зависимости от дистрибутива. Начиная с GNOME 49 сессии X11 нет, так что в GNOME 50 откатиться на неё нельзя, об этом подробнее в обзоре GNOME 50: настройка интерфейса, приватности и рабочих столов.

Для отчёта об ошибке в багтрекер KDE, GNOME, freedesktop или дистрибутива соберите:

  • модель видеокарты и монитора, способ подключения и частоту;
  • версии ядра, драйвера, Mesa или NVIDIA и окружения рабочего стола;
  • вывод journalctl -b -p warning сразу после появления мерцания;
  • что уже пробовали и что это изменило;
  • короткое видео с телефона, если мерцание видно глазом, но не попадает на скриншот.

Хорошая сводка по переменным окружения и известным проблемам композиторов есть на странице Wayland в ArchWiki.

Частые вопросы

Почему мерцает экран в Wayland на NVIDIA?

Чаще всего из-за драйвера старше 555 без явной синхронизации или выключенного DRM modeset. Обновите драйвер и проверьте, что /sys/module/nvidia_drm/parameters/modeset возвращает Y.

Как отключить FreeSync в KDE Plasma?

В Параметрах системы откройте Экран и монитор и выберите для Адаптивной синхронизации режим Никогда. Из терминала то же делает команда kscreen-doctor output.DP-1.vrrpolicy.never, где DP-1 нужно заменить на имя вашего выхода.

Как проверить, работает ли программа через XWayland?

Запустите xeyes: глаза следят за курсором только над окнами X11. Если над окном программы они двигаются, она работает через XWayland.

Что делать, если мерцает экран ноутбука с Intel?

Попробуйте отключить Panel Self Refresh параметром ядра i915.enable_psr=0. Если помогло, оставьте его, но следите за обновлениями ядра: отключение PSR немного уменьшает время работы от батареи.

Можно ли вернуться с Wayland на X11?

В KDE Plasma 6 да, X11-сессия ставится отдельным пакетом. В GNOME 50 сессии X11 больше нет.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.