System76 Oryx Pro
The System76 Oryx Pro comes with two NVMe M.2 slots. Older models have space for a 2.5" SSD/HDD. Booting from NVMe requires the use of EFI, while booting over SATA/AHCI does not. If you are not sure what to use, EFI is a sensible and safe default for all configurations of this machine.
System76 develops a special distribution (Pop!_OS) for their computers, and it comes with many tweaks and tools to ensure a seamless end-user experience. Arch does not have these out of the box; and unfortunately, sometimes their computers do not work right without them. Thankfully, it is possible to get the same first-class hardware support in Arch Linux that you have in Pop!_OS -- it just takes a little elbow grease.
All necessary packages can be found in the AUR. It is recommended to install everything in the list below.
- AUR (needed for System76 switchable graphics)
- AUR (seems to be needed for things like audio to work right)
- AUR (required if you want to update your BIOS)
- AUR (required if you want to know when there's a BIOS update available)
- AUR (if you want to change your keyboard's backlight color)
(There are also "-git" versions of many of these packages, if you wish to stay bleeding edge.)
Once you have installed the above, you will need to tell your computer to use them.
Enable the following services with
systemctl enable: (source)
To make sure all drivers are being loaded correctly, run
system76-driver-cli; this will automatically add necessary rules to
/etc/modprobe.d, and execute
s76-i915-mkinitcpio.conffile, and a redundant (if you have
system76-driver_i2c-nvidia-gpu.conffile. As such, this step may be skippable, for the time-being.
To enable switchable graphics, run
system76-power graphics hybrid once; and then put
prime-run before every application you want to start with your dGPU. Note that this will only work for applications that use GLVND. (source)
integratedwill display as
computeuntil you restart. This seems to be intended behavior. (This note is here because at least one person was confused by this.)
To verify whether switchable graphics is working, run
prime-run glxinfo. These commands should succeed and have different vendors. If the latter command fails, go to #prime-run not working. (Note that you can limit the output to just the relevant information by appending
| grep -i vendor to the aforementioned commands.)
You can control the brightness and color of your keyboard's LEDs. To do so, simply run
sys76-kb set -b $B -c $C, with
$B being how bright you want the keyboard (on a scale of 0-255) and
$C being a 6-digit color hex (eg, "ffffff"). Since the keyboard's LEDs are controlled from the commandline, it is possible to script patterns and light shows.
Note that these settings are not maintained across boots; so you will need to reapply them on startup.
To check your current BIOS version and whether there is a new version available, run
firmware-manager as root. Keep in-mind that this is a GTK application, so you need to be running X or Wayland for it to run. (It has no CLI -- it doesn't even respond to
To update your system to the latest firmware on the next boot, run
- System76: If you want to use the hybrid graphics mode developed by System76, follow the instructions in #OEM software. This seems to use PRIME behind the scenes.
- Bumblebee: Some users have reported getting success with Bumblebee. Your mileage may vary if you are using a more complete DE like GNOME; this has only been tested with .
- NVIDIA: When in doubt, NVIDIA's proprietary drivers should always work.
Audio seems to work out of the box with a USB headset; however, it does not relay audio to the onboard speaker. The Pop!_OS kernel is patched to work with Realtek PCI's quirks; Arch's, are not. The following parameters can be added to
/etc/modprobe.d/clevo-p950.conf to resolve this issue:
options snd-hda-intel model=clevo-p950. This workaround provides headphone and speaker audio, but headset mics may not work. (source)
Out of the box, Arch Linux does not resume a previously suspended or hibernated session. To support hibernation, ensure that you have swap space equal to or greater than your system memory (RAM), and add "resume" to your
/etc/mkinitcpio.conf file, per the instructions here.
- NOTE: hibernate has yet to be tested on this device, but suspend seems to work fine.
Bad thermals / excessive throttling
The oryp7, as with all System76 computers, comes with a bad fan curve. By default, your fans will only reach 100% at 90'C; but by the time you've reached that temperature, the CPU is already throttling hard. By setting a custom fan curve that reaches 100% at 70'C, you can easily avoid such unnecessary throttling. However, in order to customize the fan curve, you have to compile and flash the EC to your BIOS. Make sure to not set your lowest fan speed below 25%, as doing so will cause rattling (see #163);
There is also (as of 2021-04-20) a pull request to sync the CPU and GPU fans, which should maximize cooling (since both lie on the same heatpipe).
Both of these considerations have been merged into a pull request just for oryp7 computers here.
Note that even with these changes, your computer will still run very hot. You will need to repaste the oryp6/7 if you intend to use the CPU for long periods of time.
fancontrol not working
AUR does not currently support runtime configuration of fan speeds, so
fancontrol will not work. There is an open feature request for this, though.
In the meantime, a custom fan curve can be configured by those willing to compile their BIOS manually. Quoth one of the devs: "The fan speed is controlled by the fan curve in the firmware: system76/ec@16778e4/src/board/system76/oryp7/board.mk. You can change the fan curve by changing the values in that file before you build firmware-open."
Keyboard colors are set at random
Set your keyboard brightness to 100%. There is a known issue with the firmware on oryp6/oryp7 when the brightness is less than 100%.
prime-run not working
/etc/X11/xorg.conf.d/90-intel-nvidia.conf and adding the following to it:
Section "ServerLayout" Identifier "layout" Screen 0 "iGPU" EndSection Section "Device" Identifier "iGPU" Driver "modesetting" BusID "PCI:0:2:0" EndSection Section "Screen" Identifier "iGPU" Device "iGPU" EndSection Section "Device" Identifier "dGPU" Driver "nvidia" BusID "PCI:1:0:0" EndSection
BusID fields above to match the first field in the output of this command:
lspci | egrep "VGA | 3D" (you can omit leading zeroes). You will need to restart your X server for this to take effect.
Xorg fails to start with "No devices detected"
If you find (normally after an update & restart) that launching X (via
startx or otherwise) does not work, you may confirm that the
nvidia device is installed and working by doing the following:
Confirm the error in
nvidia kernel module should successfully load. You may also confirm the error with
Check whether both integrated and discrete graphics cards are available:
# lspci | grep VGA 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile) 01:00.0 VGA compatible controller: NVIDIA Corporation TU106M [GeForce RTX 2070 Mobile] (rev a1)
If you do not see the second entry (or some similar NVIDIA card), make sure the card has been turned on by
--help to explore options):
# system76-power graphics
Check whether the discrete NVIDIA graphics card is powered on usingAUR:
# system76-power graphics power
To power the discrete NVIDIA graphics card on, supply "on" as an argument (i.e.
system76-power graphics power on). After doing so and querying again, you should see:
# system76-power graphics power on (discrete)
Once the card is powered on, it should show up in the output of
lspci, and be detectable by Xorg, given that the appropriate NVIDIA driver is installed.
system76-firmware: EFI mount point not found
If using the new (replacement) EFI mount point
/efi, ensure you have the mount present in
etc/fstab. You may find the appropriate device to mount by using a combination of lsblk and fdisk -l.
# fdisk -l # List disks (one device will be designated as "EFI System") # lsblk # List devices and mount points, you should see the EFI system device, and confirm whether it is mounted/unmounted # mount device /efi # # genfstab -U / # (optional) print fstab configuration for inclusion/merging into /etc/fstab
After doing the above, it might be a good idea to schedule a firmware update:
# system76-firmware-cli schedule
After scheduling a firmware update, ensure that GRUB is set to use the EFI partition like so:
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=grub # cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak # grub-mkconfig -o /boot/grub/grub.cfg
Restart to trigger the firmware update.