FreeBSD 12.1 Nvidia desktop


Last weekend I finally got around to dual-booting FreeBSD 12.1 on my home tower. It’d been on the 11.x branch for a long time, and I used the opportunity to start fresh. It was originally built as a budget game machine for world-building, so it has a Skylake i5 and a Nvidia GTX 970.

It was quicker to get a FreeBSD Nvidia desktop going than I expected, but there were still a couple of gotchas.

Optional preparation

The first thing I always do is create a zfs dataset for the ports system, so I can use snapshots to try new software, or troubleshoot updates. You’ll probably also want the latest packages over quarterly for desktop use.

# zfs create zroot/usr/local
# mkdir -p /usr/local/var/db/pkg
# ln -s /var/db/pkg /usr/local/var/db/pkg
# mkdir -p /usr/local/etc/pkg/repos
# cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf
# sed -i '' 's/quarterly/latest/g' /usr/local/etc/pkg/repos/FreeBSD.conf
# pkg bootstrap -y
# pkg update

Desktop essentials

These are the drivers and basics for a desktop you need:

# pkg install nvidia-drivers nvidia-settings dbus xorg
# sysrc dbus_enable=YES
# sysrc kld_list="nvidia-modeset linux"

Next, create /usr/local/etc/X11/xorg.conf.d/nvidia-driver.conf to tell Xorg to use the nvidia driver rather than a fallback:

Section "Device"
    Identifier "NVIDIA Card"
    VendorName "NVIDIA Corporation"
    Driver "nvidia"

Then reboot to make sure everything comes up cleanly.

Aside: Not using kld_load?

Note that I used kld_list in my /etc/rc.conf above. Most guides suggest you do this instead:

# sysrc kld_load="nvidia-modeset"
# echo 'linux_enable="YES"' >> /boot/loader.conf

This no longer automatically loaded it for me in FreeBSD 12.1, as keleathi has also noticed on the FreeBSD forums. If someone knows why that might be the case, please feel free to tweet me. With both of those in place I still needed to manually load nvidia-modeset after each boot:

# kldload nvidia-modeset
==> nvidia0: <Unknown> on vgapci0
==> vgapci0: child nvidia0 requested pci_enable_io
==> vgapci0: child nvidia0 requested pci_enable_io

Install your desktop

I’m using Lumina on my laptop with Allan Jude’s recommendation—post coming!—but I’ve been a fan of Xfce since almost the beginning of my *nix experience, so it gets pride of place on my desktops:

# pkg install xfce xfce4-goodies xfce4-places-plugin
$ echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc
$ ln -s ~/.xinitrc ~/.xsession
$ startx

Author bio and support


Ruben Schade is a technical writer and infrastructure architect in Sydney, Australia who refers to himself in the third person. Hi!

The site is powered by Hugo, FreeBSD, and OpenZFS on OrionVM, everyone’s favourite bespoke cloud infrastructure provider.

If you found this post helpful or entertaining, you can shout me a coffee or send a comment. Thanks ☺️.