Nvidia and intel graphics linux
A subreddit for discussions and news about gaming on the GNU/Linux family of operating systems (including the Steam Deck).
Hi , i thought there is a need for a guide on that topic. So i will try my best to explain how to properly use dedicated gpu’s for avoiding performance issues. I’m not a native speaker , so bare with my somewhat broken English. Guide will be centric to Ubuntu 18.04 base ( since i’m on Mint 19.1 ) , especially for Nvidia Prime.
First things first ; if you want to do proper gaming with Optimus laptops ; avoid Bumblebee. Web is entirely filled with Bumblebee related topics but it’s outdated , has overhead compared to Prime and most importantly it doesn’t support Vulkan. There are some people who got it working with Vulkan but that guide will be newcomer friendly as possible. So there is no Bumblebee for you 🙂
That guide will assume you are on a clean install due to having more straightforward steps.
Code blocks in that guide will automatically mean usage of terminal.
1-) Check if you have an Optimus laptop or not since some old laptops indeed only have an Nvidia GPU.
lspci | egrep ‘VGA|3D|Display’
That command should return something like this :
00:02.0 VGA compatible controller: Intel Corporation Device 591b (rev 04) 01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)
Congrats , you have an Optimus laptop.
2-) Add this PPA to your system via terminal since that is the easiest way to get latest stable drivers.
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update
3-) On Ubuntu you can install Nvidia proprietary driver via » Additional Drivers » section , on Mint you can do that via » Driver Manager» section.
Do note there is no support for some older gpu’s in new driver branches. PPA link has additional infos about it. Refer to that page.
Latest one is 415.27 as the time preparing this guide , let’s go with that.
Don’t forget to install Vulkan:
Enable 32-bit architecture
sudo dpkg —add-architecture i386
sudo apt install libvulkan1 libvulkan1:i386
After installing the driver , you will need to restart your laptop.
4-) After restart , you should see an Nvidia or Intel icon at your taskbar. If you can’t see it anywhere , install this.
sudo apt-get install nvidia-prime-applet
Click to that icon. You will be greeted with «Nvidia X-server Settings» .
In the » PRIME Profiles » section you will see Nvidia and Intel listed , but one of them selected. Here is the caveat of Prime ( not for me ) , you will need to log out from current session and log in back if you want to switch gpu’s.
If you want to be sure which card is active :
OpenGL renderer string will you give the answer:
direct rendering: Yes OpenGL renderer string: GeForce GTX 1050/PCIe/SSE2
There is a work going on from Nvidia in order to provide proper gpu offloading but until that , Prime is your best bet.
5-) You will see massive tearing everywhere but it has a solution called PrimeSync. In that part ; you will need to change «xed» part to whatever text editor you have.
sudo xed /etc/modprobe.d/zz-nvidia-modeset.conf
Add this line into that file:
options nvidia-drm modeset=1
After applying that modeset change ; run this command:
After restart we need to check if modeset change took effect or not:
sudo cat /sys/module/nvidia_drm/parameters/modeset
If the output is » Y » that means modeset is active for Nvidia driver.
Now we need to learn which connection interface is being used by our laptop screen. That is usually eDP-1-1 but you may never know.
After learning our connection interface , let’s active PrimeSync to get rid of tearing forever.
xrandr —output eDP-1-1 —set ‘PRIME Synchronization’ ‘1’
Boom , there is no tearing.
If you want to compare how it looks like without it :
xrandr —output eDP-1-1 —set ‘PRIME Synchronization’ ‘0’
Let’s add it to our system startup for ease of use.
Search » Startup Applications» on your system. Same on Mint and Ubuntu.
Click » Add » and name it as » PrimeSync» ( or whatever you like ).
Paste this into command section:
«xrandr —output eDP-1-1 —set ‘PRIME Synchronization’ ‘1’»
Set startup delay to «0» ( zero ).
That’s it , you can enjoy tear free gaming with maximum possible performance.
PS: On Arch based distros you can use optimus-manager for Prime.
Intel/AMD systems:
You will need Mesa drivers which they come preinstalled by default.
1-) Be sure to use a recent version of Mesa , by adding this PPA to your system. This PPA contains stable Mesa releases.
sudo add-apt-repository ppa:paulo-miguel-dias/pkppa sudo apt-get update
If there will be any updates , update manager of your distro will list them.
Don’t forget to install Vulkan:
Enable 32-bit architecture
sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386
2-) By default , Intel gpu will be responsible for everything unless you say otherwise with that little command:
Go to your library — Right click to any game that you want to run with AMD gpu — Properties — Launch options:
Other apps : Put DRI_PRIME=1 without %command% argument on your executables path , shortcut etc.
3-) Activating experimental AMDGPU support on Southern Islands and Sea Islands gpu’s:
AMDGPU kernel driver is needed to use Vulkan. On Polaris and newer gpu’s it is on by default.
DRI_PRIME=1 glxinfo | grep «OpenGL renderer»
So output of that line will tell us a crucial info.
Southern Islands series: CAPE VERDE, PITCAIRN, TAHITI, OLAND, HAINAN Sea Islands series: BONAIRE, KABINI, KAVERI, HAWAII, MULLINS
If you have a Southern Islands Gpu do the following:
echo ‘GRUB_CMDLINE_LINUX=»$GRUB_CMDLINE_LINUX radeon.si_support=0 amdgpu.si_support=1″‘ | sudo tee /etc/default/grub.d/amdgpu.cfg
If you have a Sea Islands Gpu do the following:
echo ‘GRUB_CMDLINE_LINUX=»$GRUB_CMDLINE_LINUX radeon.cik_support=0 amdgpu.cik_support=1″‘ | sudo tee /etc/default/grub.d/amdgpu.cfg
If you have an AMD + AMD gpu config and one of them belongs to Sea Islands and one of them belongs to Southern Islands:
echo ‘GRUB_CMDLINE_LINUX=»$GRUB_CMDLINE_LINUX radeon.si_support=0 amdgpu.si_support=1 radeon.cik_support=0 amdgpu.cik_support=1″‘ | sudo tee /etc/default/grub.d/amdgpu.cfg
After these changes , restart your system and check if amdgpu is activated or not with this:
Output should look like this:
drivers: modesetting,ati,amdgpu (unloaded: fbdev,vesa)
If something goes wrong ( boot problems , stability problems etc ) boot with recovery mode and do the following:
sudo rm -f /etc/default/grub.d/amdgpu.cfg
Включение гибридной графики в Ubuntu на ноутбуках Nvidia + Intel (OpenGL, Vulkan)
Это простая инструкция как включить гибридную графику intel-nvidia на ноутбуке. Чтобы определенные приложения запускались на дискретном чипе, а другие на встроенном. На свое удивление в интернете не нашел простую инструкцию того, как запускать определенные приложения, используя дискретную графику. Так что напишу так просто, на сколько считаю нужным
У меня система KDE Neon 5.21 — по большому счету — Ubuntu LTS с окружением рабочего стола KDE Plasma 5.21, видеочип GeForce MX150
1. Устанавливаем драйвер
a) Если у вас система на Qt (Как правило окружение KDE или LXQt), то с помощью данной команды через терминал загрузим программу для установки драйверов:
sudo apt install software-properties-qt
Если у вас система на GTK то с помощью это команды:
sudo apt install software-properties-gtk
Хотя разницы принципиальной нет
b) Затем запускаем ее с правами root
sudo software-properties-qt
В папке ~/.local/share/applications/ создадим файл software properties qt.desktop с таким содержанием
[Desktop Entry] Categories=System;Settings; Comment[ru_RU]=drivers Comment=drivers Exec=konsole -e "~/.local/share/applications/software-properties-qt.sh" GenericName[ru_RU]=Установка драйверов\s GenericName=Установка драйверов\s Icon=systemsettings MimeType= Name[ru_RU]=software properties qt\n Name=software properties qt\n Path= StartupNotify=true Terminal=false TerminalOptions= Type=Application X-DBUS-ServiceName= X-DBUS-StartupType= X-KDE-SubstituteUID=false X-KDE-Username=
И файл software properties qt.sh в той же папке:
#! /bin/bash echo software-properties-qt sudo /usr/bin/software-properties-qt
После перезагрузки ярлык появится в меню
Но это далеко не обязательно, вполне достаточно запустить из консоли для наших целей настройки гибридной графики
c) Переходим на последнюю вкладку Additional drivers и устанавливаем нужный драйвер. Я выбрал самой последней версии, который не tested и не server
d) После установки перезагружаем устройство
2. Настраиваем видеокарту
a) Загружаем следующую программу:
sudo apt install nvidia-settings
b) Переходим в PRIME Profiles Здесь мы видим три пункта:
- NVIDIA (Performance Mode) — работать только на дискретной графике. Сильно потребляет батарею в несложных задачах, а так же ноутбук начинает греться. Зато система работает намного быстрее, но это того не стоит. У меня после установки драйвера этот пункт включился автоматически
- NVIDIA On-Demand — некоторые приложения будут использовать дискретную графику nvidia, но по-умолчанию встроенная intel. Как запустить конкретное приложение с дискретной графикой напишу дальше
- NVIDIA (Power Saving Mode) — отключение дискретной графики
Выбираем второй вариант — NVIDIA On-Demand , и перезагружаем систему
3. Запуск приложения с использованием дискретной графики
Это то, что сложнее всего гуглилось.
Для запуска приложения с использованием графики nvidia нужно задать для OpenGL две переменные среды:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia
__NV_PRIME_RENDER_OFFLOAD=1
Делать это надо перед командой для запуска приложения. Например, нам нужно запустить из терминала приложение program с использованием дискретной графики. Нужно вызвать его так:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia program
Соответственно, если у приложения есть ярлык (.desktop) в меню приложений, то надо изменить команду запуска в ярлыке. В KDE Plasma нужно нажать на него ПКМ, открыть свойства (или «изменить приложение. «), перейти во вкладку «приложение» и перед командой приписать данную приставку. В других средах похожего стола примерно так же
Можно сделать это же действие через текстовый редактор. Открываем ярлык, находим Exec= , и приписываем перед коммандой данную приставку __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia
Заключение
Данный метод, как я понял, точно работают для программ, использующих библиотеки OpenGL и Vulkan. У меня, к сожалению, не получилось запустить так Windows приложение через Wine, которое использует DirectX, но это уже совсем другая история. (OpenGL приложения под Wine работают)
P.S. в комментариях (#comment_23011444) немного подсказали, что для работы с Proton (DirectX) есть такой док