Linux on the System76 Lemur Pro.

02 May 2024

A couple of weeks back I noticed that Windbringer was starting to act dodgy in the way that Dell laptops do when they're getting long in the tooth: USB trouble, wifi getting weird (he'd only connect to the legacy 802.11b network), power cell not charging fully and refusing to doo so... Dell is remarkbly consistent in this regard. Not too long after that a good friend of mine visited with one of their System76 laptops and let me tool around with it for a while. This started wheels turning in my head because I new that I was going to need to replace Windbringer's shell sooner or later. It wasn't long after that I pulled the trigger on buying a customized Lemur Pro 14" laptop.

System76 only officially supports Linux on their laptops so I didn't really have to do any research on hardware support or anything like that. Compared to Dell the customization process was as close to trivial as I've ever seen:

  • Ubuntu 22.04 LTS (which I summarily replaced with Arch Linux on first boot)
  • Intel Core Ultra 7 155U @ 4.8 GHz (12 cores, 14 threads)
  • 40 GB DDR5 RAM @ 4800 MHz
  • 4 TB PCIe4 M.2 SSD
  • An extra charger (which resides in my field kit permanently)

A big selling point for me is that for once there is only one graphics chipset on board. Dell has been all-in on Optimus for years and, while it works decently well it's something that I rarely ever used. 98% of the time it was just a power sink with no way of really turning it off, just turning it down. System76 has just one, a plain old Intel graphics processor that is pretty much all I need (I don't game, I don't do 3D stuff, if I need GPU acceleration for anything I run it on Leandra). I should probably lay out the specs that I didn't customize:

  • 14" FHD+ display @ 1900x1200, 16:10 ratio
  • Thunderboard v4 port x1
  • USB v3.2 gen 2 type C port (which is also the power jack)
  • USB v3.2 gen 2 type A port
  • USB v3.2 gen 1 type A port
  • HDMI
  • Clickpad (touchpad with embedded left-click button) with multi-touch support
  • Bluetooth v5.3
  • Intel Meteor Lake PCH CNVi WiFi, 6E
  • Standard TRRS headset jack
  • 2 megapixel PHD webcam with "power on" LED
    • The webcam is in a sane position at the top of the display for a change.
  • Open Firmware based on Coreboot
  • Kensington security cable slot
  • 73 Wh LiOn power cell
  • microSD card reader

If you're curious, here's the output of lspci after everything is installed:

00:00.0 Host bridge: Intel Corporation Device 7d02 (rev 04)
00:02.0 VGA compatible controller: Intel Corporation Meteor Lake-P [Intel Graphics] (rev 08)
00:06.0 PCI bridge: Intel Corporation Device 7eca (rev 10)
00:07.0 PCI bridge: Intel Corporation Meteor Lake-P Thunderbolt 4 PCI Express Root Port #0 (rev 10)
00:0a.0 Signal processing controller: Intel Corporation Device 7d0d (rev 01)
00:0d.0 USB controller: Intel Corporation Meteor Lake-P Thunderbolt 4 USB Controller (rev 10)
00:0d.2 USB controller: Intel Corporation Meteor Lake-P Thunderbolt 4 NHI #0 (rev 10)
00:14.0 USB controller: Intel Corporation Meteor Lake-P USB 3.2 Gen 2x1 xHCI Host Controller (rev 20)
00:14.2 RAM memory: Intel Corporation Device 7e7f (rev 20)
00:14.3 Network controller: Intel Corporation Meteor Lake PCH CNVi WiFi (rev 20)
00:15.0 Serial bus controller: Intel Corporation Meteor Lake-P Serial IO I2C Controller #0 (rev 20)
00:15.1 Serial bus controller: Intel Corporation Meteor Lake-P Serial IO I2C Controller #1 (rev 20)
00:16.0 Communication controller: Intel Corporation Device 7e70 (rev 20)
00:19.0 Serial bus controller: Intel Corporation Meteor Lake-P Serial IO I2C Controller #4 (rev 20)
00:19.1 Serial bus controller: Intel Corporation Meteor Lake-P Serial IO I2C Controller #5 (rev 20)
00:1c.0 PCI bridge: Intel Corporation Device 7e38 (rev 20)
00:1f.0 ISA bridge: Intel Corporation Device 7e03 (rev 20)
00:1f.3 Audio device: Intel Corporation Meteor Lake-P HD Audio Controller (rev 20)
00:1f.4 SMBus: Intel Corporation Meteor Lake-P SMBus Controller (rev 20)
00:1f.5 Serial bus controller: Intel Corporation Meteor Lake-P SPI Controller (rev 20)
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller S4LV008[Pascal]
2d:00.0 SD Host controller: O2 Micro, Inc. SD/MMC Card Reader Controller (rev 01)

I have to admit, I'm impressed with how little this laptop weighs. It's just a bit over two pounds but doesn't feel like it at all. It's incredibly light but still large enough to type comfortably on for longer periods of time (12.3" wide, 8.75" deep, 0.65" high when closed) and fits in standard laptop cases and sleeves with just a little room to spare. The Thunderbolt port works without fighting or any extra drivers for an external display port. I use it routinely with a DisplayPort to mini DisplayPort cable paired with a mini DisplayPort to USB-C adapter for my display. System76 says that they've disabled the Intel Management Engine (which, I am told, listens on the loopback network interface, port 16992/tcp as a web server) and I don't see any evidence that this is not the case from poking around in the machine's guts. It's also heartening to see that they used regular philips head screws to hold the case together, so you don't have to worry about finding the right Torx bit.

Rather than just do a straight drive copy over to the new machine I did a full reinstallation from scratch and only copied over parts of my home directory. I figured that carrying ten years of cruft around was enough, and some custom software from System76 was required (which is all on Github, incidentally) so it made sense to reinstall the OS and the applications I use every day. I keep a list in my wiki so it's a pretty simple job. One thing that I did from scratch, however, was reinstall the MATE Desktop because, after running several different desktops over the years I wanted to see what would happen with a new install. What I learned was that Pulseaudio doesn't get pulled in by the MATE Desktop but you need it for anything like decent sound support, so you have to install that package as well. At the very least, if you want to use your microphone for anything you need Pulseaudio. And you can't just start it up, you really do have to log back out and back in again. The packages that I had to install (in rough order) were:

  • mate-media
  • pulseaudio
  • pulseaudio-alsa
  • pulseaudio-bluetooth
  • pulseaudio-zeroconf
  • pavucontrol

Additionally, MATE came with a window manager called Maximus, which works too much like Gnome 3 for my tastes. Call me crazy, but I like my window managers to actually present windows to manage. And, you know, drag around on the screen because I want to see what's underneath them. I replaced it with Marco which seems to be the original window manager for MATE and it works just as well as before. To make this happen I ran sudo pacman -S marco to install the package, started up a shell and ran the command marco & to start it up, and then went into my desktop settings (System -> Preferences -> Personal -> Startup Applications) to toggle "Maximus Window Management" off and "Mate - Marco" on to make the changes permanent.

I really don't know what they were thinking.

There is also a little bit of keyboard weirdness. For reasons I cannot fathom the arrow keys are arranged in a way that don't make any sense. Rather than this:

[   /  ] [  up  ] [ shift ]
[ left ] [ down ] [ right ]

They look like this:

[   /  ] [ shift ] [  up  ]
[ left ] [ right ] [ down ]

This is fixable by installing the system76-keyboard-configurator-git package from the AUR. Run it, authenticate when requested, and by clicking around you can change what keys do what (the microcontroller in the keyboard itself is updated with the new settings, which should be familiar to anyone who's built their own mechanical keyboard). I used this to swap the caps lock and control keys as well. However, if you also use an external keyboard from time to time these changes won't count so you'll then have to use the native keymap editor (System -> Preferences -> Hardware -> Keyboard: Layouts -> Options) to make the same changes apply to other keyboards you might plug in. It's a bit confusing. I'm still sorting it out, myself.

To get the most out of this hardware I installed System76's driver packages from the AUR per their documentation, in order:

  • system76-firmware
    • sudo systemctl enable --now system76-firmware-daemon
    • sudo gpasswd -a $USER adm
  • firmware-manager-git
  • system76-scheduler
  • system76-driver
    • sudo systemctl enable --now system76
  • system76-acpi-dkms
    • This is specific to Open Firmware.
  • system76-io-dkms
  • system76-power
    • sudo systemctl enable --now com.system76.PowerDaemon.service
  • system76-oled

As before I'm booting from UEFI using systemd-boot because it's part of the default Arch install and doesn't require jockeying any other packages. I did have to do a little messing around with efibootmgr because the system firmware comes with an entry for System76's OS image, which I deleted because I didn't want to confuse things. I don't claim to fully understand it, but the boot order looked something like this (reformatted slightly for clarity):

BootCurrent: 0000

Timeout: 2 seconds

BootOrder: 0000,0001,0002

Boot0000* Pop_OS    HD(1,GPT,7f44b66a-facb-11ee-95b5-a36ea67643f0,0x800,0x200000)/\EFI\systemd\systemd-bootx64.efi

Boot0001* UiApp MemoryMapped(11,0x8038a0,0xc6f89f)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)

Boot0002* Samsung SSD 990 PRO 4TB   PciRoot(0x0)/Pci(0x6,0x0)/Pci(0x0,0x0)/NVMe(0x1,01-02-03-04-05-06-07-08){auto_created_boot_option}

And I went in to delete the Pop_OS entry and create one for my Arch install. Looking through my command history, it went something like this:

efibootmgr --bootnum 0000 --delete-bootnum

And then ran bootctl install to add my new setup. I probably didn't have to do this (and, to be fair, I wasn't sure it would do anything helpful - here there be dragons) but for the sake of completeness, there it is. This may not be a thing you need to worry about.

In the couple of days since I started working on this post I did a little more tinkering and discovered that you shouldn't install the package xf86-video-intel. When I did so and rebooted the desktop refused to start up, giving me just a blank screen and (if I hit control-alt-F3) a text terminal. The library in this package is too old and doesn't have the right drivers for this particular graphics chipset. Thankfully, all that was required was uninstalling the package to fix the display. As a smoke test I installed the package sx to see if I could start X the old-fashioned way, which worked as hoped. Restarting my display manager and rebooting Windbringer both worked as expected.

That's pretty much all I've got right now. I'm well into week number two of breaking in a new laptop and, as far as I can tell it's the smoothest ride I've had with an install in a very long time. The only real complaint I have is the weird keyboard layout, which is easy enough to fix with a little reconfiguration (but that doesn't do anything about the physical positions of the keycaps, which I might do something about later).