четверг, 7 сентября 2017 г.

Запуск GNOME on Wayland с проприетарным драйвером Nvidia: История успеха

Итак, свершилось! Мне наконец-то удалось запустить Wayland-сессию GNOME на проприетарном драйвере Nvidia (далее по тексту "блоб"). Для тех, кто не в теме: начиная с версии драйвера 364.12, Nvidia реализовала в нём начальную поддержку Wayland, однако несовместимую с тем, что используется в Mesa. В Mesa применяется библиотека GBM - Generic Buffer Manager, аллокатор буферов изображений. Реализация Nvidia основана на расширениях EGLStreams и EGLDevice, являющихся кроссплатформенным открытым стандартом Khronos (консорциума, разрабатывающего OpenGL, OpenCL, Vulkan и так далее). В списке рассылки разработчиков Wayland, Nvidia представила патчи для композитного менеджера Weston, однако разработчики их не приняли и, можно сказать, послали Nvidia подальше. Зато эти патчи адаптировали для Mutter и Sway, но о качестве работы будет ниже. Nvidia же в прошлом году анонсировала новый аллокатор, разрабатываемый совместно с разработчиками Mesa, уже готов начальный прототип, но работы ещё много. Nvidia не хочет создавать что-то платформоспецифичное, так как ей проще поддерживать единую кодовую базу для всех ОС.


Поддержка EGLStreams обеспечена в GNOME 3.24, однако для этого, оконный менеджер Mutter должен быть собран с --enable-egl-device Как оказалось, в Fedora 26 он собран без этой опции, также из-за применения библиотеки GLvnd, получаются лютые тормоза и лаги мышки. Аналогично в Arch Linux.

Поэтому для тестов я выбрал альфа-версию Ubuntu 17.10. Итак, что для этого нужно проделать:


  • 1) установить драйвер Nvidia (sudo apt install nvidia-375)
  • 2) включить DRM/KMS (по умолчанию в блобе он выключен из-за недоделанности и проблем со SLI-конфигурациями). Для этого в /etc/default/grub, в секцию параметров ядра, добавляем строку nvidia-375-drm.modeset=1 Номер драйвера указывать только для Ubuntu! Признаком успешного запуска DRM/KMS является Xorg, запущенный от юзера (в этом можно убедиться в менеджере процессов)


По идее, если всё сделано правильно, то сразу после перезагрузки Гном должен запуститься на Wayland, однако меня встречало окно входа в систему, и сеанс с Wayland никак не грузился. Поэтому я переключился на пятую tty-консоль (Ctrl+Alt+F5), и стартанул сессию командой dbus-run-session -- gnome-shell --display-server --wayland



И о чудо! Оно запустилось! Начну с приятных моментов. Отрисовка значительно быстрее, чем с блобом на иксах. Курсор не отстаёт от окна ни на пиксель, анимации плавненькие, изменение размера окон не тормозит. Может немного лагануть меню приложений, но я грешу на старый тормозной HDD, на котором я всё тестировал. Flatpak-приложения работают, но не все. Видео работает без проблем.




Собственно, на этом приятное заканчивается. Далее оглашаю список ограничений:

1) Первое и самое главное - не работает Xwayland. В большинстве приложений. Из иксовых приложений успешно запустились лишь Firefox, Clementine и Chromium, остальные падают с ошибкой Could not initialize GLX Потому запуск возможен только нативных Wayland-приложений. Чтобы запустить что-то на Qt5, нужно добавить переменную окружения export QT_QPA_PLATFORM=wayland, но тут тоже есть неприятные моменты, связанные с тем что GNOME не поддерживает серверные декорации окон, и потому Qt5-приложения будут рисовать рамку окна своими силами - та самая синяя и убогая рамка окна, без теней и каких-либо отличий активного окна от неактивного, которую вы возможно наблюдали на скриншотах. Поддержка Xwayland не планируется.





2) Не запускается панель управления Nvidia (потому на скриншотах её нет), не работают приложения, использующие веб-камеру (правда я только Cheese запускал), и как следствие предыдущего пункта - не работает ни одна игра (кроме встроенных гномовских) или эмулятор игровых консолей.

3) Иногда грузит CPU на 100%. Баг широко известен в сети, но я не знаю что думает на этот счёт Nvidia. От апстрима Гнома ответа не дождался.

4) KMS работает частично, в частности переключение между виртуальным консолями происходит секунды 2, а возврат в графическую может проходить и все 5. На свободном драйвере всё происходит мгновенно. Да, если вдруг кто спросит - нет, KMS в блобе не даёт высокое разрешение в консоли. Нету драйвера для fbdev, хотя с efifb (на материнских платах с UEFI) вроде как разрешение высокое.

5) Родная панель управления Гнома не работает в такой конфигурации, потому запускается её сильно кастрированный вариант



Итог: по сути Нвидию, по сути, обвинить не в чем. В кое-то веки смогла в стандарты. Вот только сделала она это слишком поздно. Когда в Linux только начиналось появление и становление Wayland, Nvidia от него отвернулась, сказав что поддерживать это в её планы не входит. Как только сообщество всё отладило и реализовало поддержку в свободных драйверах и оконных менеджерах - Nvidia примчалась и сказала что "есть вариант лучше". Вот только лучше не стало, даже наоборот - всплыли многие косяки. Я не думаю что будут какие-либо серьёзные улучшения как работы блоба с EGLStreams, так и оконных менеджеров куда эти патчи добавили, ибо апстрим не принял, и тестировать некому. Хотя посмотрим как оно будет. На данный момент вердикт - неюзабельно.

Комментариев нет:

Отправить комментарий