In a previous post I explained how to use your discrete GPU for specific applications while still running your main screen on your integrated GPU.
This is pretty convenient because you don't have to reboot to play a game or use your GPU in a specific application, but it made other things more difficult like using external monitors since they are all wired to the discrete GPU.
In this post we will replicate Pop! OS ability to boot exclusively into your discrete GPU and have the ability to use external monitors (technically you can use external monitors with bumblebee but it requires some effort).
If you have installed
bumblebee we have to get rid of it as it includes some configuration to blacklist nvidia drivers and that will interfere with our set up.
sudo systemctl disable --now bumblebeed.service sudo pacman -Rns bumblebee sudo gpasswd -d fms bumblebee
Install required software
You will need this packages to pull this off:
There is usually a discussion about using
nouveau and how Nvidia's is evil and how much they suck but I still want to get as much of my video card as I am able (with Linux) so I use their drivers.
sudo pacman -S nvidia nvidia-utils nvidia-settings
This package is available in the AUR. I personally use aurman.
aurman -S system76-power
This utility allows you to switch GPU's, turn on the discrete card on or off, or switch power profiles. Overall, if you have a System76 machine you want this.
Something important of note is that (at the time of this writing) the
nvidia-utils package includes the following (very important) configuration file:
# /usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf Section "OutputClass" Identifier "intel" MatchDriver "i915" Driver "modesetting" EndSection Section "OutputClass" Identifier "nvidia" MatchDriver "nvidia-drm" Driver "nvidia" Option "AllowEmptyInitialConfiguration" Option "PrimaryGPU" "yes" ModulePath "/usr/lib/nvidia/xorg" ModulePath "/usr/lib/xorg/modules" EndSection
It enables the modsetting driver and loads the nvidia driver (if available). This fortunately doesn't get in the way when using the Intel GPU.
One thing to note is that using the modesetting driver breaks
xbacklight. If you don't use a desktop environment and rely on it to change the screen backlight you will have to change how you do it. I personally use light.
Telling Xorg to use the discrete GPU
In order to use your discrete GPU we depend on a technology called PRIME. It allows you to offload rendering to different GPUs, and more importantly for the matter at hand, to have one GPU (integrated) to display the output rendered by another GPU (your discrete).
Where you put the following instructions depends on how you run your X server.
# Check if we are using nvidia graphics and tell xorg to get the # output from NVIDIA-0. if system76-power graphics | grep -q 'nvidia'; then xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto xrandr --dpi 96 fi
You can put them in
Using a desktop manager
Create the following script:
#!/bin/sh #/usr/bin/setup-nvidia.sh if system76-power graphics | grep -q 'nvidia'; then xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto xrandr --dpi 96 fi
And use one of the following methods mentioned here as it is dependant of which manager you use.
That is it!. Now you just need to run:
sudo system76-power graphics nvidia
And check that it is working:
Enjoy. If you can't get it working or have any suggestion, please reach out.