Setting up Ubuntu 19.04 with Nvidia Optimus on my Asus ZenBook Flip UX562F
Nowadays, Ubuntu is usually relatively straightforward to install. However, on this device, I ran into some issues: Firstly with getting it to boot, and secondly with fully utilizing the GPU. It’s absolutely worth it though, and with this guide you should be able to get it running quickly!
Note that this does not cover the basics of installing a GNU/Linux system on a computer, possibly alongside Windows. There are already a number of great tutorials for that.
Installation
You can access the boot menu by holding ESC during the Asus logo. When trying to boot into my USB drive with Ubuntu, I initially got stuck at a black screen. Booting with the ‘Safe Graphics’ option works about 50% of the time though. Optionally, press ‘E’ in the Grub selection screen and replace ‘quiet splash’ with nomodese
. Then hit F10 to boot. (Source)
On the freshly installed system, you will need safe graphics or nomodeset
again. In addition, an issue with intel microcode prevented me from successfully booting. This was fixed by adding dis_ucode_ldr
after nomodeset
. (Source)
When you have finally booted into Ubuntu, make the intel microcode fix permanent by editing /etc/default/grub
. Replace the GRUB_CMDLINE_LINUX_DEFAULT
line with this:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash dis_ucode_ldr"
Yes, we’re keeping the quiet splash - this is because nomodeset
won’t be required anymore once we have Nvidia drivers.
Nvidia drivers
There are many tutorials for this, but I’ll try to repeat the steps again in a concise way.
Note that you’ll be installing proprietary Nvidia drivers from an alternative source. Unfortunately, the open source drivers aren’t even close yet, in part due to Nvidia’s unwillingness to be very helpful.
First add the alternative source (PPA) and update your available packages:
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
Now, check what’s the most recent available driver:
apt-cache search nvidia-driver
At the time of writing this, 430 is the most recent version. Install it like this:
sudo apt-get install nvidia-driver-430
You can also use Ubuntu’s ‘Software & Updates’ GUI. In the ‘Additional Drivers’ tab, you should see the most recent Nvidia drivers after adding the PPA.
Now, after rebooting, things should be relatively functional. However, there’s one more step:
Nvidia Optimus
This laptop has both integrated Intel graphics and a dedicated Nvidia GPU. After installing the drivers, you can switch which of these you want to use for everything in the ‘PRIME Profiles’ tab of the ‘NVIDIA X Server Settings’ GUI.
To save battery life and keep the GPU free for tasks which require it, it’s best to use the integrated graphics for most things, and only take the GPU for certain graphics-intensive applications. I also had a very strange issue where I was running out of VRAM very quickly with this configuration (you can use watch nvidia-smi
for checking the VRAM usage).
Nvidia Optimus is the technology which allows for this. Again, Nvidia was very unhelpful with getting this to work on Linux, but the free Bumblebee project did it (to some extent).
You can install Bumblebee and Primus like this:
sudo apt-get install bumblebee primus
With Bumblebee, you can now run programs with your GPU like this:
optirun program_name
However, this didn’t properly work for me until I made some more changes. It started with the error Cannot access secondary GPU
. For this, I had to make sure to select the Nvidia card in the PRIME profile, and in /etc/bumblebee/bumblebee.conf
, change these paths as follows:
LibraryPath=/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu
XorgModulePath=/usr/lib/x86_64-linux-gnu/nvidia-430/xorg,/usr/lib/xorg/modules,/usr/lib/xorg/modules/input
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia
You might have to replace ‘430’ by the number of your version, if it’s different.
At this point, I was getting other errors like Cannot open or write pidfile /var/run/bumblebeed.pid
or Failed to retrieve LibraryPath setting
. It might also simply not do anything when trying to optirun
something, and just be stuck at a blinking cursor.
I had to set this environment variable: __GLVND_DISALLOW_PATCHING=1
You can make it permanent by adding this at the bottom of /etc/profile
:
export __GLVND_DISALLOW_PATCHING=1
It might work now. If you get an error like Failed to load modules at startup: Could not find module by name 'off'
, you need to do one more thing: In /etc/modprobe.d//blacklist-nvidia.conf
, remove alias nvidia off
or comment it out.
You can use glxgears
, a simple 3D application, to test your setup: optirun glxgears
As mentioned before, nvidia-smi
can be used for seeing your GPU utilization and sensor values: watch nvidia-smi
Additional support
If something doesn’t work, askubuntu is a great place to search and ask. For Bumblebee, this launchpad thread was my main source. You can also contact me at karl@hexaquo.at, even if you already solved the issue, so that I can expand this guide.
Good luck and have fun!