Published January 26th, 2020
Installing OpenSUSE Tumbleweed on Dell XPS 15
My partner, Megan, uses Linux on her Dell XPS 15 as her main workstation. It’s a powerful machine, with an i7-7700HQ CPU, but unfortunately comes with Intel HD 630/GTX 1050 graphics in NVIDIA’s “Optimus” setup. The GTX 1050 sucks a lot of power, massively reducing battery life, but with the idea that you only turn it on when you need boosted graphics performance. The downside is, under Linux, this can be a bit of a pig to get working properly.
Megan very rarely needs the full power of the NVIDIA card, but when she does, it needs to be working at full potential, so the proprietary NVIDIA binary drivers have to be used. Additionally, the card must be fully powered off when not in use, not just sitting idle, because otherwise the battery life sucks.
This required a few tweaks I couldn’t find all in one place, so I’m documenting them here.
Step 1: Installation
The first hurdle to climb over is that the installation ISO doesn’t work out of the box on these machines. The key is to disable modesetting, which allows everything to work at the cost of graphics performance (we fix this later). To do this, when the GRUB bootloader shows up, highlight “Installation” and press
e. To the end of the
linuxefi line, append
nomodeset. Then, press
Ctrl-X to boot.
I installed OpenSUSE Tumbleweed with the default settings for GNOME, including Wayland support. (If you’re wanting to use
suse-prime instead of
bumblebee to handle the graphics card switching, which gives better performance at the cost of needing to log in and out, you can’t use Wayland).
I would recommend using
btrfs for your root file system (though it isn’t relevant to getting the graphics working). During the trial-and-error in making this work properly, the
snapper snapshots possible when using this filesystem - fully bootable, working backups of your machine that can be accessed even when you can’t get to the login screen - meant I had to go through far fewer reinstalls. This is one of OpenSUSE’s killer features.
Step 2: Booted in, installing bumblebee
The OpenSUSE wiki has a guide on installing
bumblebee. This did not work for me in it’s unmodified state, leading to either failures to boot or complete system lockups when the graphics card was addressed in any way, for example with
optirun bash or
optirun --status did report that the card was powered off, though, so it clearly was close to working).
Follow the first section of this guide, from “Install Bumblebee” to just above “Optional: Install NVIDIA driver”. This should install
bumblebee, give the user the correct permissions, start the service, blacklist the
nouveau driver and remake the
Then, we want to follow the steps under the “Tumbleweed” subheading a little further down, adding the NVIDIA
bumblebee repository and installing it, as well as enabling
dkms to allow the driver to survive kernel updates.
Here, I believe there is a missing step - one must also blacklist the NVIDIA driver by using the same command as for
nouveau but with the word
nvidia instead, before remaking the
echo "blacklist nvidia" | sudo tee -a /etc/modprobe.d/99-local.conf
This, however, will still not work, and lead to crashes when the card is accessed (at least, it did for me).
Step 3: Modifying kernel parameters
Additional kernel parameters are needed to stop the NVIDIA drivers from crashing our system. In
YaST, open up the Boot Loader settings. Switch to the tab named “Kernel Parameters”, and append the following:
acpi_osi=! acpi_osi="Windows 2009". You can also remove the
nomodeset parameter carried over from the installation.
If you have rebooted your system before following this Step 3, you may experience a crash here, similar to the
lspci crash. If that happens, you can set these parameters from the GRUB bootloader like we did with
nomodeset at the start, when booting your machine, then make them permenant here. (I suppose you could also change them in the GRUB config file, though I like using
YaST because of the automatic
Once this has been appended and you reboot, you should see that
sudo lspci doesn’t crash the machine and correctly reports everything,
optirun --status reports the card is off, and
optirun bash enables the card and spawns a shell using it.
However, there is a final change, as now changing the backlight in GNOME doesn’t work. Finally, one must append
acpi_backlight=none to the kernel parameters as before, presumably because adding the Windows OSI type breaks something (?).
Step 4: Enjoy!
I wasn’t able to find a post with all these steps in one place, so I hope this helps anyone else who wants to recreate a similar setup. Please send me an email if you notice anything wrong with this guide. I’ll try and keep it updated as long as Megan is using it!