Fedora 40, KDE, Wayland и NVIDIA: Как избавиться от глитчей и лагов в VS Code, Chrome, Spotify и других приложениях

Fedora 40, KDE, Wayland и NVIDIA: Как избавиться от глитчей и лагов в VS Code, Chrome, Spotify и других приложениях

Кофмортная работа в Linux с Wayland даже на системах с видеокартами NVIDIA всё ближе. Но всё ещё не здесь и сейчас. Делюсь опытом, как избавлялся от проблем в некоторых капризных приложениях.

Новая версия проприетарного драйвера NVIDIA для GNU/Linux

Недавно NVIDIA выпустила релизную версию проприетарного драйвера версии 555.хх.хх (точный номер версии варьируется в разных репозиториях). Вместе с новой версией KDE Plasma 6.1, которая уже доступна на большинстве дистрибутивов, в том числе и на Fedora, ситуация с приложениями при использовании Wayland резко улучшилась. Так что после установки всех обновлений вы не должны испытывать неприятные ощущения из-за глитчей и статтеров. Но тем не менее многие приложения всё ещё не готовы к Wayland, поэтому инструкция ниже может оказаться актуальной и для вашего случая.

Хочу сразу же поделиться хорошей новостью для всех любителей Linux, которые страдают с видеокартами NVIDIA. 21 мая была вупущена бета-версия проприетарного драйвера с номером 555.42.02. Он содержит множество улучшений для поддержки Wayland, включая интеграцию явной синхронизации (explicit sync) через протокол linux-drm-syncobj-v1, который будет полноценно реализован в KDE Plasma 6.1 и GNOME 46.1. Это позволит всем компонентам системы работать согласованно, что даст ещё большую плавность и отзывчивость, а также избавит пользователей от множества неприятностей.

Я попробовал этот драйвер и могу подтвердить, что серьёзные проблемы с графическими багами в большинстве приложений ушли. Но следует отметить, что я тестировал это на текущей стабильной версии KDE Plasma 6.0.5, а не на новом релизе 6.1. Не советую устанавливать как бета-версию драйвера, так и бета-версии DE. Все релизы должны состояться летом, а это значит, что совсем скоро будет сделан огромный шаг вперёд для использования GNU/Linux на обычных компьютерах как для работы, так и для развлечений. Ну а пока возвращаемся к костылям :)

[ Установка проприетарного драйвера NVIDIA на Fedora Linux 40 ]

Конечно же, совершенно отвратительно видеть в одном предложении фразы "проприетарный драйвер" и GNU/Linux. Но что поделать, хочется же современные и приятные в использование технологии. Для этого нужно установить официальный драйвер NVIDIA в систему на замену откротому драйверу Nouveau. Моя инструкция не оригинальна, я воспроизвожу в сжатом виде наиболее простой вариант иструкции от TecMint. Важно выполнить все команды последовательно. Что делает каждая команда, я указал в комментарии над ней.

Bash
# Сначала проверим, есть ли обновления для ядра и всех пакетов. Если такие есть, установим их, перезагрузимся и продолжим.
sudo dnf update --refresh

# Чтобы корректно установливать и обновлять проприетарный драйвер NVIDIA, нужно установить необходимые зависимости.
sudo dnf install kernel-devel kernel-headers gcc make dkms acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig

# Теперь пришло время для включения свободного и не очень свободного RPM Fusion репозиториев. Лучше выполнять все три команды последовательно.
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf makecache

# Пришло время установить сам драйверы и набор улитил CUDA.
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda

# Когда всё закончится хорошо, нужно будет перезагрузиться. 
sudo reboot
# Сначала проверим, есть ли обновления для ядра и всех пакетов. Если такие есть, установим их, перезагрузимся и продолжим.
sudo dnf update --refresh

# Чтобы корректно установливать и обновлять проприетарный драйвер NVIDIA, нужно установить необходимые зависимости.
sudo dnf install kernel-devel kernel-headers gcc make dkms acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig

# Теперь пришло время для включения свободного и не очень свободного RPM Fusion репозиториев. Лучше выполнять все три команды последовательно.
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf makecache

# Пришло время установить сам драйверы и набор улитил CUDA.
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda

# Когда всё закончится хорошо, нужно будет перезагрузиться. 
sudo reboot

Первый запуск может быть очень долгим. Не переживайте, так и должно быть. Если же возникли проблемы, особенно в том случае, если вы устанавливали не в таком "ламерском" режиме, а со всей серьёзностью в ручном режим со скачиванием *.run с официального сайта, то просто необходимо немного исправить конфигурацию GRUB. На экране входа, даже если просто на чёрном экране висит курсор или какой-то неприятный артефакт, переключитесь на сессию без GUI с помощью комбинации Ctl+Alt+F3. Она может отличаться в зависимости от дистрибутива и интерфейса входа. В режиме без GUI войдите в сессию своего пользователя с помощью логина и пароля, а затем выполните команды.

Bash
# В этом файле нужно найти строку, которая начинается с GRUB_CMDLINE_LINUX и добавить внутри значения в кавычках nvidia-drm.modeset=1.
sudo nano /etc/default/grub

# Потом нужно обязательно выполнить создать новый файл конфигурации GRUB. 
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# И как всегда, нужно перезагрузиться. После этого вы должны увидеть привычный для вашего DE интерфейс авторизации.
sudo reboot
# В этом файле нужно найти строку, которая начинается с GRUB_CMDLINE_LINUX и добавить внутри значения в кавычках nvidia-drm.modeset=1.
sudo nano /etc/default/grub

# Потом нужно обязательно выполнить создать новый файл конфигурации GRUB. 
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# И как всегда, нужно перезагрузиться. После этого вы должны увидеть привычный для вашего DE интерфейс авторизации.
sudo reboot

[ Заставляем Chrome, VS Code, Spotify и другие приложения работать корректно в Wayland ]

С браузером Google Chrome (тоже очень неприятно видеть его в контексте GNU/Linux) наиболее легко. В самом браузере просто открываем через адресную строку интерфейс тонкий настроек через chrome://flags/. Ищем нужную настройку через поиск по фразе Preferred Ozone platform. Выбираем там Auto. Можно выбрать явно Wayland, но в моём случае это заканчивалось крашем при запуске по неизвестной причине. После изменения настройки нужно просто перезапустить браузер и забыть о косяках с вводом и рендерингом.

С VS Code и большинством других приложений на Electron всё также несложно. Для исправления ситуации нужно просто создать файл .config/environment.d/electron-ozone-wayland.conf (и директорию, если её ещё нет), а потом добавить туда одну строку и перезагрузиться.

Text
ELECTRON_OZONE_PLATFORM_HINT=auto
ELECTRON_OZONE_PLATFORM_HINT=auto

Это справедливо для приложений, которые не устанавливаются в свои "песочницы" через flatpak или snap, так как внутри "песочниц" свои правила и переменные среды. Для таких приложений придётся редактировать имеющиеся файлы Desktop Entry или же создавать новые. Для примера покажу исправленный файл для запуска Spotify, который был установлен через flatpak в приложении Discover из KDE. Но в целом направление должно быть понятно: для запуска приложения в режиме работы в Wayland нужно просто попробовать запускать его с параметрами

Вот мой исправленный файл .local/share/applications/com.spotify.Client.desktop.

TOML
[Desktop Entry]
Type=Application
Name=Spotify
GenericName=Online music streaming service
Comment=Access all of your favorite music
Icon=com.spotify.Client
# Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=spotify --file-forwarding com.spotify.Client @@u %U @@
Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=spotify --file-forwarding --no-sandbox com.spotify.Client --enable-features=UseOzonePlatform --ozone-platform=wayland @@u %U @@
Terminal=false
MimeType=x-scheme-handler/spotify;
Categories=Audio;Music;AudioVideo;
Keywords=Music;Player;Streaming;Online;
StartupWMClass=Spotify
X-GNOME-UsesNotifications=true
X-Flatpak-Tags=proprietary;
X-Flatpak=com.spotify.Client
[Desktop Entry]
Type=Application
Name=Spotify
GenericName=Online music streaming service
Comment=Access all of your favorite music
Icon=com.spotify.Client
# Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=spotify --file-forwarding com.spotify.Client @@u %U @@
Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=spotify --file-forwarding --no-sandbox com.spotify.Client --enable-features=UseOzonePlatform --ozone-platform=wayland @@u %U @@
Terminal=false
MimeType=x-scheme-handler/spotify;
Categories=Audio;Music;AudioVideo;
Keywords=Music;Player;Streaming;Online;
StartupWMClass=Spotify
X-GNOME-UsesNotifications=true
X-Flatpak-Tags=proprietary;
X-Flatpak=com.spotify.Client

После этого интерфейс приложения перестал фликерить, хотя отзывчивость всё равно не такая приятная глазу, как хотелось бы.

[ Тактическое отступление ]

Надеюсь, что мой скромный опыт, которым я поделился, поможет кому-то разобраться со своими проблемами и начать приобщаться к Wayland уже сегодня. Даже если в вашем случае проблемы возникают не на Fedora Linux и не на KDE.

Ну а я отправляюсь ждать релизной версии драйвера NVIDIA версии 555, а также KDE Plasma 6.1.