zaLinux.ru

Как включить дискретную видеокарту на Linux


В этой заметке мы рассмотрим следующие вопросы:

  • Как узнать, какая видеокарта используется в Linux
  • Как переключиться с интегрированной графики на видеокарту NVidia
  • Как установить и пользоваться Bumblebee для автоматического переключения между интегрированной и дискретной видеокартами (как включить NVIDIA Optimus в Linux)

Установлен проприетарный драйвер NVIDIA, но видеокарта не используется

К сожалению, вопросы установки проприетарных драйверов для видеокарт на Linux до сих пор не так безболезненны, как на Windows. Но я столкнулся с ещё более запутанной ситуацией: после успешной установки драйверов, не получается задействовать, использовать видеокарту NVidia.

Симптомы проблемы следующие:

  • драйвера для видеокарты NVidia успешно установились
  • система загружается и прекрасно работает
  • но используется видео ядро центрального процессора Intel, а видеокарта NVidia не используется
  • попытки переключиться на NVidia либо не приносят успеха, либо приводят к чёрному экрану (когда иксы, графическая оболочка, не могут загрузиться)
  • программы использующие CUDA (например, Hashcat) прекрасно работают

Чуть подробнее о последнем пункте. Для меня видеокарта представляет главный интерес для брут-форса (взлома) хешей паролей. И эта функция работает, видеокарта нагружена, Hashcat показывает устройство видеокарты как успешно используемое, высокая скорость брут-форса паролей. Именно по этой причине я уже полтора года (!) после установки проприетарного драйвера NVidia не догадывался, что у меня какие-либо проблемы.

И всё-таки драйвер NVidia работает

Я могу убедиться в этом, поскольку срабатывала команда

nvidia-smi

А также успешно работали приложения, использующие CUDA. Для всех других задач я не мог задействовать видеокарту NVidia.

Какую видеокарту, встроенную в центральный процессор или выделенную выбирает Linux?

Некоторые видеокарты от NVidia поддерживают технологию NVIDIA Optimus. Суть этой технологии в том, что программное обеспечение автоматически переключается на интегрированную (Intel) или выделенную (NVidia) видеокарту. На таких системах всё довольно просто — по крайней мере в теории. Нужная видеокарта может выбираться множество раз во время работы Linux.

Но на компьютерах без NVIDIA Optimus видеокарта выбирается настройками пользователя, либо по умолчанию используется графика Intel.

Как узнать, какая видеокарта используется в Linux

Есть несколько команд, которые покажут, какая видео карта используется:

glxinfo|egrep "OpenGL vendor|OpenGL renderer"

Пример вывода:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2)

Эта же самая команда, но запущенная через optirun из пакета Bumblebee:

optirun glxinfo|egrep "OpenGL vendor|OpenGL renderer"

Пример вывода, в котором показано, что задействована видеокарта NVIDIA:

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 1050 Ti/PCIe/SSE2

Подробнее о optirun и Bumblebee будет позже.

Ещё одна команда, которая выводит информацию об используемой видеокарте (и прикольный треугольник в качестве бонуса):

glxheads

С помощью команды lspci и определённых опций можно вывести информацию об устройствах, на конце строки с используемой видеокартой должно быть [VGA controller]. Команда для фильтрации данных:

lspci -vnnn | perl -lne 'print if /^\d+\:.+(\[\S+\:\S+\])/' | grep '\[VGA controller\]'

Пример вывода:

00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 630 (Mobile) [8086:3e9b] (prog-if 00 [VGA controller])

Как проверить, используется ли видеокарта NVIDIA

Следующая команда покажет процессы, которые использует видеокарта NVIDIA (если процессов нет, значит видеоадаптер не используется):

sudo lsof /dev/nvidia*

Ещё одна команда, которая показывает процессы, потребляющие ресурсы видеокарты NVIDIA, а также уровень её загруженности, температуру и другие метрики:

nvidia-smi

Как установить видео драйвер NVidia в Linux

Для установки проприетарного драйвера NVidia в Kali Linux выполните команды:


echo -e "blacklist nouveau\noptions nouveau modeset=0\nalias nouveau off" | sudo tee --append /etc/modprobe.d/blacklist-nouveau.conf
sudo apt update
sudo apt dist-upgrade -y
sudo update-initramfs -u
sudo reboot
sudo apt install -y ocl-icd-libopencl1 nvidia-driver nvidia-cuda-toolkit

Возможно, этот же способ будет работать и для Debain и других производных.

Для установки драйвера NVidia в Arch Linux, BlackArch и их производные выполните команду:

sudo pacman -S nvidia cuda nvidia-settings

Кроме указанных, дополнительно будут установлены пакеты nvidia-utils и opencl-nvidia. Если вам не нужен CUDA, то не устанавливайте пакет cuda.

Как установить и пользоваться Bumblebee (как включить NVIDIA Optimus в Linux)

Пакет Bumblebee нужен для автоматического переключения между интегрированной и дискретной видеокартами. Ваша карта должна поддерживать технологию NVidia Optimus, список поддерживающих карт вы можете найти на этой странице: https://www.geforce.com/hardware/technology/optimus/supported-gpus

Если ваша карта там есть, то переходите к выполнению следующих команд. У вас уже должен быть установлен проприетарный драйвер NVIDIA, как это показано выше.

На Kali Linux, Debian и их производных выполните:

В ПРОЦЕССЕ ПОДГОТОВКИ

На Arch Linux, BlackArch и их производных выполните:

sudo pacman -S bumblebee virtualgl bbswitch acpid mesa
sudo systemctl enable bumblebeed.service
sudo systemctl enable acpid.service
sudo usermod -a -G bumblebee $USER

Система зависает после установки Bumblebee

Я столкнулся с проблемой, что Bumblebee в принципе работает, но при использовании некоторых команд, которые задействуют CUDA или обращаются к модулям ядра, система зависала. Чтобы проверить, есть ли у вас эта проблема, выполните команду lspci, например:

lspci -k

Если система полностью зависнет, то перезагрузитесь и удалите пакет bbswitch.



Вместо удаления bbswitch вы можете попробовать в опции загрузки ядра добавить строку:

acpi_osi="!Windows 2015"

Для этого создайте файл /etc/modprobe.d/options.conf:

sudo gedit /etc/modprobe.d/options.conf

и скопируйте в него:

acpi_osi="!Windows 2015"

Но у меня сработало только удаление bbswitch.

Как пользоваться Bumblebee / NVIDIA Optimus в Linux

Теперь любую программу, которая должна использовать видеокарту NVIDIA, можно запустить командой вида:

optirun ПРОГРАММА

Когда optirun не используется, то карта NVIDIA должна находиться в отключённом состоянии, что должно сберегать электричество.

Как проверить Bumblebee / NVIDIA Optimus в Linux

Запустите тест видеокарты обычной командой:

glxgears

А также с помощью optirun:

optirun glxgears

Обратите внимание, что FPS вырос примерно в 20 раз.

Ещё один вариант теста работы видеокарты:

glxspheres64

А также с помощью optirun:

optirun glxspheres64

Вы должны увидеть прирост производительности при использовании optirun.

Во время работы этих тестов, выполните команду:

nvidia-smi

Вы должны увидеть процессы, которые используют дискретную видеокарту.

Если у вас установлен веб-браузер Chromium, то запустите его двумя способами:


chromium
optirun chromium

В обоих случаях откройте вкладку:

chrome://gpu/

Там вы увидите информацию об используемом графическом чипе:

И:

Заключение

Даже после написания этой инструкции, после того, как я разобрался во многих вопросах, всё ещё осталось много непонятного.

Например, как использовать постоянно только карту NVidia? Ниже я покажу что именно пробовал — абсолютно всё не сработало.

Также открыт вопрос, как установить Bumblebee в Debian и производные дистрибутивы? Все команды, которые я пробовал, приводят к чёрному экрану, либо неработоспособности Bumblebee.

БОНУС. Как сделать видеокарту NVidia используемой по умолчанию в Linux

В этом разделе я перечислил то, что у меня не сработало — поэтому можете пропускать этот раздел.

Предупреждение: если после указанных в этом разделе действий вы не можете загрузиться — появляется чёрный экран, то во время неудачной загрузки нажмите Ctrl+Alt+F*, где вместо звёздочки пробуйте указать разные цифры, например, Ctrl+Alt+F1, Ctrl+Alt+F2 и т. д., пока не появится консоль. Введите ваш логин и пароль и откатите изменения, которые привели к неудачной загрузке. Для удаления пакетов используйте стандартные менеджеры пакетов вашего дистрибутива, а для редактирования файлов в командной строке используйте vim или nano. Если вы не знакомы с vim или nano, то пропустите этот раздел!

Если драйвер NVidia установлен, то, вроде бы, видеокарта NVidia должна использоваться по умолчанию. У меня это никогда не происходило, всегда используется интегрированная графика Intel.

Начните с проверки настроек БИОСа — там может быть возможность отключить одну из карт.

Для явного указания используемого драйвера можно создать файл /etc/X11/xorg.conf.d/20-nvidia.conf.

sudo gedit /etc/X11/xorg.conf.d/20-nvidia.conf

И скопировать в него примерно следующее:

Section "Device"
        Identifier "Nvidia Card"
        Driver "nvidia"
        VendorName "NVIDIA Corporation"
        BoardName "GeForce GTX 1050 Ti"
EndSection

Но у меня не происходит загрузка в графический интерфейс.

Если вы хотите отключить загрузку драйверов Intel, то создайте файл /etc/modprobe.d/blacklist-intel.conf:

sudo gedit /etc/modprobe.d/blacklist-intel.conf

И скопируйте в него примерно следующее (название модулей могут отличаться в зависимости от вашего центрального процессора):

install i915 /usr/bin/false
install intel_agp /usr/bin/false
install viafb /usr/bin/false

Среди других советов встречаются добавить в опции загрузки ядра следующее:

nvidia nvidia_modeset nvidia_uvm nvidia_drm vidia-drm.modeset=1

Если у вас EFI (а не БИОС), то для изменения опций загрузки ядра нужно открыть файл вида /boot/loader/entries/*.conf. У меня этот файл называется /boot/loader/entries/arch.conf:

sudo gedit /boot/loader/entries/arch.conf

Также рекомендуют изменить файл /mkinitcpio.conf:

sudo gedit /etc/mkinitcpio.conf

В котором вместо строки

MODULES=()

нужно записать строку

MODULES=(nvidia)

Затем нужно пересобрать ядро, для этого в Debian и производных нужно выполнить команду:

sudo update-initramfs -u

а в Arch Linux и производных нужно выполнить такую команду:

sudo mkinitcpio -p linux

Но всё это мне никак не помогло: настройка 20-nvidia.conf и/или блокировка в файле blacklist-intel.conf приводили к чёрному экрану во время загрузки. А последние два совета с файлами в arch.conf и указанием модуля в mkinitcpio.conf вообще не дали никакого эффекта.

Также мне не помогли методы, описанные на странице https://wiki.archlinux.org/index.php/NVIDIA_Optimus

Мне помог пакет Bumblebee.


Рекомендуемые статьи:

6 Комментарии

  1. Иван

    А "бонусные варианты" и не сработают, т.к. на вашем устройстве скорее всего команда lspci | grep -E "VGA|3D" выдаст похожее на:
    01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)
    05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c2)

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

    1. Alexey (Автор записи)

      Приветствую! Спасибо за пояснение — все мои попытки говорят о том, что вы правы, но я до сих пор не понимаю, почему это так? И если вас не затруднит, не могли бы пояснить, как именно определить, что вывод через определённую видеокарту реализован аппаратно? На моём ноутбуке команда lspci | grep -E "VGA|3D" выводит следующее:

      00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
      01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Ti Mobile] (rev a1)
      
      1. Lanoz

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

      2. Иван

        Если написано "VGA compatible" в строке для видеоадаптера, то видеовыход аппаратно реализован через него.

        На сайтах, которые выдаются по запросу 'nvidia gpu offloading', есть много разной информации по использованию nvidia-prime. 

        Конкретно в вашем случае нужно использовать гибридный драйвер. Но в связке с Intel он работает как-то криво что ли и поэтому существенной прибавки к производительности не даст. Здесь к сожалению, придется остаться на винде.

        На моей ноутбучной связке AMD+NVIDIA все работало относительно хорошо до момента начала троттлинга процессора, ибо дискретная видеокарта из под проприетарных драйверов по потребляемой мощности выходит далеко за свой нормальный TDP = 25 W, и это никак на линуксе не чинится, кроме как ужимать по производительности процессор. Вот такие дела.

  2. Красноглазый линуксоид

    Если видете VGA - значит запустится. Кроме того не устанавливайте bbswitch, удалите его нафиг, я 5 часов пытался запустить, иксы не работают с ним, приходится хард выключать ноут, а я так даже boot партишн испортил, fchk спас. Так что дизейблите сервис, перезагружатесь, удаляйте bbswitch, енейблите сервис, перезагружайтесь, и все работает. Порядок именно такой:D

    1. Олег

      У меня проблемы с драйверами на дискретную карту начались после команды

      **sudo nvidia-xconfig**

      Хорошо еще можно восстановить зависимость пакетов через 

      **ubuntu-drivers autoinstall**

      Но карта перестала подключаться через

      **sudo prime-select nvidia**

Добавить комментарий для Lanoz Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *