12. Ноутбуки#

Данный раздел описывает специфичные для пользователей ноутбуков вещи. Раздел пока не очень большой, но может дополняться.

12.1. Гибридная графика в ноутбуках#

Одной из самых больных проблем при использовании Linux на домашнем ноутбуке является гибридная графика. Конечно, в этой теме уже есть прогресс, и все не так плохо как кажется, но графическая подсистема по прежнему одна из самых (если не самая) проблемных частей любой Linux-системы.

Тема сложная и с кучей подводных камней, поэтому сначала разберемся с основными понятиями. Гибридная графика - это когда у вас есть два графических процессора, которые могут работать одновременно. Такая конфигурация чаще всего представлена в ноутбуках, когда есть интегрированный (т.е. встроенный, iGPU) в процессор видеочип и дискретная видеокарта (dGPU), которая превосходит встроенную по характеристикам и нацелена на использование в высокопроизводительных задачах.

Смысл такого разделения состоит в том, что мы можем использовать для малопрофильных задач встроенный видеочип, а когда появляется, так скажем, "рыба покрупнее", и нужно выдавать максимальный FPS - используем дискретную графику. На ноутбуках это позволяет сильно экономить энергию и, следовательно, повысить время своей работы.

Однако на практике такая система содержит много проблем. Главная из которых, это вопрос о том, как эти два GPU будут взаимодействовать между собой. И если в Windows эту проблему как-то решили, то в Linux к сожалению все не так просто. По итогу мы имеем несколько отдельных комбинаций производителей встроенных видеочипов и дискретной видеокарты. Вот три наиболее встречаемых случая (сначала встроенная графика, затем дискретная):

  1. Intel + NVIDIA

  2. AMD + NVIDIA

  3. Intel + AMD

Самыми распространенными из них являются первый и второй случай. Они же самые проблемные. Третий случай не должен вызывать у вас всяких проблем, ибо для обеих GPU могут использоваться открытые драйвера Mesa, которые должны работать из коробки. Вам нужно будет лишь использовать переменную окружения DRI_PRIME=1 чтобы форсировать использование дискретной графики для нужного вам приложения. Например для игры в Steam вам достаточно в её свойствах указать DRI_PRIME=1 %command%.

Далее мы будем рассматривать только первые два случая, имеющие между собой один и тот же алгоритм действий.

Итак, есть две возможные стратегии при связке NVIDIA + Intel, либо NVIDIA + AMD:

  1. Мы используем встроенный механизм работы с гибридной графикой драйвера NVIDIA

  2. Мы уходим от гибридной графики, отключая один из возможных GPU и используем только дискретный/встроенный видеочип.

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

  • Удостоверьтесь, что вы установили все драйвера правильно, как для встроенной видеокарты, так и для NVIDIA (обязательно для NVIDIA!)

  • Проверьте, правильно ли загружаются модули драйвера NVIDIA. Для этого выполните команду lsmod | grep nvidia. Если вывод команды НЕ пустой, то все в порядке.

  • Включите DRM KMS для драйвера NVIDIA. Сделать это можно двумя способами: добавить параметр ядра nvidia-drm.modeset=1 в конфигурацию вашего загрузчика, либо при помощи файла настройки. Создайте файл /etc/modprobe.d/nvidia.conf и пропишите в него следующее: options nvidia_drm modeset=1. И да, обязательно выполните обновление образов ядра через команду sudo mkinitcpio -P! Не забывайте об этом пожалуйста. Кроме того, вы можете целиком пропустить данный шаг, если ранее установили пакет nvidia-tweaks.

  • Отключите параметр Secure Boot в настройках UEFI если вы ещё этого не сделали. Он может мешать загрузке драйвера NVIDIA.

  • Установите утилиту XRandr: sudo pacman -S xorg-xrandr

Теперь рассмотрим первый вариант, т. е. использование встроенного механизма работы с гибридной графикой. Как ни странно, но если вы имеете дискретную видеокарту NVIDIA, у которой есть поддержка версии драйвера выше 435, то все должно работать прямо из коробки. Просто вы можете об этом не догадываться.

Тем не менее, лучше все таки проверить, что все работает правильно, и вы можете сделать это через утилиту nvidia-prime:

sudo pacman -S nvidia-prime
prime-run glxinfo | grep "OpenGL renderer"

Если вывод последней команды даёт вам упоминание вашей дискретной видеокарты, значит вы всё сделали правильно. При возникновении проблем, советуем вам перепройти шаги указанные выше.

Вот и всё. Данный вариант ещё называют "Reverse PRIME" (обратный PRIME). После этого у вас будет использоваться встроенная графика по умолчанию, а использовать дискретную графику вы можете выборочно, указав перед командой запуска желаемой программы уже упомянутую команду prime-run. Например: prime-run glxgears. Для игр в Steam добавляете команду в "Свойствах" игры: prime-run %command%. В рабочем окружении GNOME, начиная с версии 3.36 есть дополнительный пункт в контекстном меню, который также позволяет вам запускать приложения с использованием дискретной графики.

Предупреждение

Обращаем ваше внимание, что некоторые возможности дискретной графики в таком режиме несколько урезаны. Так, вы не сможете настроить ваши мониторы через nvidia-settings как это было указано в предыдущем разделе, ибо за подключение и обслуживание внешних мониторов отвечает встроенная графика. Исключается возможность разгона и ручного управления питанием дискретной видеокарты.

Теперь второй вариант. Его я могу порекомендовать всем тем, кто:

а) не хочет возни и возможных проблем с предыдущем вариантом б) хочет получить максимальную производительность

По сути, здесь мы делаем все тоже самое, что и в прошлом в варианте, просто меняя дискретную графику со встроенной местами. Для этого необходимо создать конфигурационный файл sudo nano /etc/X11/xorg.conf.d/10-gpu.conf и прописать в него следующее:

Section "ServerLayout"
  Identifier "layout"
  Screen 0 "nvidia"
  Inactive "intel"
EndSection

Section "Device"
    Identifier  "nvidia"
    Driver      "nvidia"
    BusID       "PCI:x:x:x" # Например: "PCI:1:0:0"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier  "intel"
    Driver      "modesetting"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

В полях "BusID" вы должны указать собственные значения PCI ID в том формате, в котором они указаны в примере. Их вы можете узнать при помощи следующей команды: lspci | grep VGA (PCI ID будет первым набором цифр в строке).

Перезагружаемся, и снова смотрим выхлоп: glxinfo | grep "OpenGL renderer" (в этот раз без nvidia-prime). У вас так же должно появиться упоминание вашей дискретной видеокарты.

В этом случае вся графика будет на плечах дискретной видеокарты, благодаря чему достигается максимальная производительность и снимаются ряд ограничений (панель nvidia-settings должна прибавить в возможностях).

Стоит отметить, что всё, что мы проделали выше - работает только для версии драйвера 435.17 и выше. При использовании драйвера ниже этой версии у вас по умолчанию должна использоваться только дискретная графика (?).

Внимание

Да, многие на этом моменте могут сказать, что есть Bumblebee. Однако он признан морально устаревшим и более неподдерживаемым. Потому он имеет целый ряд проблем, в частности с производительностью. Автор не советует его использовать при любом раскладе. Лучше поиграться с частотами вашей дискретной видеокарты, дабы снизить энергопотребление.

12.1.1. Альтернатива попроще: optimus-manager#

Если вы не хотите разбираться в этой теме подробно, и хотите просто поставить и забыть, то есть специальный помощник в этом - optimus-manager, а также графическая обертка для него optimus-manager-qt.

Эта программа позволит вам быстро переключаться между различными режимами описанными выше и без танцев с бубном. Программа работает как для новых версий драйвера (выше 435.17), так и для старых (правда без гибридного режима).

https://raw.githubusercontent.com/Shatur95/optimus-manager-qt/master/screenshots/tray-menu.png

Установка

Для правильной работы перед установкой выполните ряд шагов:

  • Вы должны использовать один из популярных менеджеров входа: LightDM, SDDM или GDM (подробнее о нем ниже).

  • Если ваше рабочее окружение это GNOME, то вам необходимо установить модифицированный пакет gdm-prime из AUR. Не забудьте отредактировать sudo nano /etc/gdm/custom.conf и добавить строку WaylandEnable=false чтобы форсировать отключение Wayland сессии. Напоминаю, что режим гибридной графики на данный момент не работает в Wayland. Совсем. Вообще.

  • Полностью удалите /etc/X11/xorg.conf или удалите в нем все строки связанные с настройкой GPU. Optimus-manager использует собственные настройки Xorg для правильной работы всех доступных режимов.

Перейдем непосредственно к установке:

git clone https://aur.archlinux.org/optimus-manager.git # Скачивание исходников
cd optimus-manager                                      # Переход в директорию
makepkg -sric                                           # Сборка и установка

sudo systemctl enable optimus-manager.service # Запускаем службу

Дополнительно советуем установить графическую обертку:

git clone https://github.com/Shatur/optimus-manager-qt  # Скачивание исходников
cd optimus-manager-qt                                   # Переход в директорию
# Перед сборкой можете отредактировать PKGBUILD, заменив строку _plasma=false на _plasma=true.
# Это улучшит совместимость с Plasma (если вы её используете).
makepkg -sric                                           # Сборка и установка

После этого перезагрузитесь и запустив optimus-manager-qt выполните переключение в нужный вам режим.