I recently decided to move from OSX to Linux and settled on a System76 new Oryx Pro (Jun 2018). They officially support Ubuntu and their own Pop! OS which work really well. I decided to use Archlinux though as it is my distribution of choice.
This post contains the details of how I managed to set it up and get all the functionality you get in Pop! OS.
Turn off discrete graphics card
This machine has a Nvidia discrete graphics card, either a 1060/1070 GTX depending on your configuration. Because of the way this card interacts with the kernel ACPI code there are times when it can hang up the system if you run
lspci or some sort of hardware scanning tool like
Let's turn it off during install to avoid running into any problems :
# echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
Don't worry. We'll get it working later on.
My setup looks like this:
Device Start End Sectors Size Type /dev/nvme0n1p1 2048 411647 409600 200M EFI System /dev/nvme0n1p2 411648 17188863 16777216 8G Linux swap /dev/nvme0n1p3 17188864 976773134 959584271 457.6G Linux filesystem Filesystem Size Used Avail Use% Mounted on /dev/nvme0n1p1 197M 122K 197M 1% /boot/efi /dev/nvme0n1p3 450G 19G 408G 5% /
System76's utilities require you to pass
ec_sys.write_support=1 as an argument for the kernel. You need to configure your bootloader for that. In my case I use
grub so here is my
/etc/defaults/grub changes to pass this on and a few other (like the resume swap partition for hibernation).
... GRUB_TIMEOUT = 0 GRUB_CMDLINE_LINUX_DEFAULT="quiet nowatchdog ec_sys.write_support=1 resume=/dev/nvme0n1p2" ...
# grub-install --target=x86_64-efi --efi-directory=/boot/efi # grub-mkconfig -o /boot/grub/grub.cfg
System76 utilities (post-setup)
System76 offers some utilities for Ubuntu and Pop! OS to enable better support for their hardware and firmware upgrades. The AUR has all of these packages too. Disclaimer: I maintain a couple of them.
This is system76 kernel module that gives support to the keyboard backlight, nvidia sound (hdmi) and a few other things. If you have a System76 machine you definitely want this:
$ git clone https://aur.archlinux.org/system76-dkms.git $ cd system76-dkms $ makepkg -sci $ sudo modprobe system76
This package contains a daemon that is used by
system76-driver to schedule firmware updates.
$ git clone https://aur.archlinux.org/system76-firmware-daemon.git $ cd system76-firmware-daemon $ makepkg -sci $ sudo systemctl enable --now system76-firmware-daemon.service
This package contains the interface to the firmware daemon and a few other utilities. You don't really need most of them in Archlinux. They are mostly support for older hardware.
$ git clone https://aur.archlinux.org/system76-driver.git $ cd system76-driver $ makepkg -sci $ sudo system76-firmware # So you can tell if you have new firmware
This is the utility you want to set up some pre-configured power management profiles for your machine and to control the Nvidia discrete graphics card.
$ git clone https://aur.archlinux.org/system76-power.git $ cd system76-power $ makepkg -sci $ sudo systemctl enable --now system76-power.service
Managing the discrete graphics card
System76 Pop! OS setup is designed to make you switch between Intel and Nvidia, reboot and then use that card solely during that session. I don't find that particularly good since this is a laptop and I want to maximize battery life as much as I can. I want to run Intel's card and use the discrete card only on demand.
In order to accomplish this, I use bumblebee and primus. I don't use bbswitch which is used to control the discrete graphics card power since it is unstable in this machine (at this point in time) and we can use
system76-power to turn the card on and off more reliably.
$ sudo pacman -S bumblebee primus $ sudo gpasswd -a <username> bumblebee # need to be part of this group $ sudo systemctl enable --now bumblebeed.service $ sudo pacman -S nvidia nvidia-settings # You can use nouveau also. $ sudo system76-power graphics intel
Turn card on
If you want to use the discrete card:
$ sudo system76-power graphics power on $ sudo modprobe nvidia-drm nvidia-modeset nvidia $ primusrun glxinfo | grep -i renderer OpenGL renderer string: GeForce GTX 1060/PCIe/SSE
Turn card off
Run the following:
$ sudo system76-power graphics power off
You will probably get the following error message:
system76-power: "device in use"
You have to unload the graphics drivers first:
$ sudo rmmod nvidia-drm nvidia-modeset nvidia $ sudo system76-power graphics power off
You can check that it worked with:
$ lspci | grep -i vga 00:02.0 VGA compatible controller: Intel Corporation Device 3e9b
In order to make this easier I use the following aliases:
alias nvidia-settings="optirun -b none nvidia-settings -c :8 " alias nvidia-on="sudo system76-power graphics power on ; sudo modprobe nvidia-drm nvidia-modeset nvidia" alias nvidia-off="sudo rmmod nvidia-drm nvidia-modeset nvidia ; sudo system76-power graphics power off"
- There seems to be a fingerprint reader in this machine but the default kernel doesn't seem to pick it up and I haven't made much of an effort to try to make it work. I didn't test it on Pop! OS. If you know which driver it needs please let me know.
- Multiple monitors, I don't have an external monitor so I haven't tested this. Depending on which graphics card the HDMI/Display ports are wired the setup would be different. I'll update the post once I try this.
The webcam, sd card reader, sound, wifi, ethernet work out of the box.
I really hope this guide works for you as it took me a while to figure all this out (and even had to bring a bring a couple of System76's utilities to our own AUR).