I purchased a Framework 16 and received it some time mid-2024. Throwing caution to the wind, I've entirely ignored the "supported operating systems" and instead have been running Debian on it.1
This page chronicles some of the issues, fixes, gotchas, and other things that have come up. (Which is not to say they're necessarily related to the laptop, Framework, Debian, or anything in particular.)
At the time of writing this was all relevant to Debian 12 unstable (trixie/sid) on a Framework 16 with BIOS 3.03. I also went ahead and updated the kernel because it had some fix I wanted at some point. I'm making no particular commitment to coming back to update any of this. Take it for what it is--some guy's "AS-IS" notes.
I should give some context for this entire page:
I really, really like this laptop.
This page is not a complaint. It's a love letter. I like this laptop and the overall setup I have enough that in between all the other nonsense in my life I've taken the time to try and fix the issues that have cropped up so I can keep using it.
Should you buy one? No idea. I don't know you, anonymous reader. I don't know what you like, don't like, your hopes, your dreams, your goals and aspirations. All I'll tell you is "it's not a macbook so please don't buy one expecting a macbook and then post another complain-y review on the internet about how it's not a macbook"--we've got enough of those floating around already that that should be abundantly clear to anyone.
Audio
I am not an audiophile. People said the speakers suck. I didn't listen because I don't really care about sound quality as long as it's "good enough" where "good enough" is some semblance of "I can understand the words coming out of the speakers.". It's not good enough.
It seems the issue is mostly the built-in equalization, however. I found using Pipewire / Easy Effects and some profiles people have posted on the Framework forums cleaned the audio up to "good enough" levels for me.
Install Pipewire
Debian has a more comprehensive reference available, but long story short:
# apt-get install pipewire-audio pipewire-pulse pipewire-alsa libspa-0.2-bluetooth`
And probably reboot for good measure. Or don't. I'm not your supervisor. But I did have it in my notes to "make sure you reboot before installing easy effects".
Install Easy Effects
You can install Easy Effects via apt, however I would strongly recommend installing via Flatpak. Besides output processing, Easy Effects works great for cleaning up microphone audio for video conferencing and things. The Debian package does not include the more restrictively licensed "RNNoise" filter which the Flatpak does.
n.b. If you install from one source and then decide to use the other, make sure to fully exit Easy Effects first. Don't be like me and spend hours trying to compile it from source because for some reason the Flatpak package is missing RNNoise only to find that's somehow also missing RNNoise when in reality you were still running the old apt version and starting the Flatpak version was just activating the other window for you.
Including setting up flatpak in case you don't have it already:
# apt-get install flatpak plasma-discover-backend-flatpak
# flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# flatpak install com.github.wwmm.easyeffects
Easy Effects Profile
Go download one of the many available profiles. I believe I'm using this one posted by cab on the Framework forums. It's for the Framework 13 but... it makes the audio sound nicer to my ears.
In Easy Effects, select "Output" at the top, then the "Presets" menu at the left end of the top bar. Beside the "+" for adding a new preset, click the "Import Preset" button and select the downloaded profile.
You may or may not need to explicitly click "Load" beside the importer profile.
Check under "Players" (bottom of the window now...) that Easy Effects is enabled for whichever application you're using.
Colour Profile
A colour profile to calibrate the display has been extracted from the Windows driver and made available by Samo Kosik on GitLab.
To install:
- Download and place in
/usr/share/color/icc/colord
- Run
colormgr get-profiles | grep -A 1 NE160QDM-NZ6.icm
to get the profile id (should look likeicc-<biglonghexstring>
) - Run
colormgr get-devices | grep -A 3 BOE
to get the device id for the laptop's internal display (should look likeeDP-1
) - Run
colormgr device-add-profile <device-id> <profile-id>
to attach the profile to the display.2
dGPU
Black Windows
You may find some applications start and only display a black screen (e.g., Steam). Didn't chase this all the way down, but seems to be related to them trying to render with the dGPU when it's not active.
You can force an application onto the internal GPU by setting DRI_PRIME=0
before starting it. (Conversely, setting DRI_PRIME=1
before starting a game or something will force it onto the dGPU.)
In KDE, you can right click on an application's shortcut and go to "Application -> Advanced Options" and uncheck "Run using dedicated graphics card" to toggle whether it's forced onto the dGPU or not as well.
GPU Monitoring
Installing nvtop
will allow you to display the usage of each GPU from the command line to see when the dGPU is active.
The GUI Mission Center program also displays separate GPU usage information.
Fingerprint Scanner
-- Install fprintd + the pam module for it
# apt-get install fprintd libpam-fprintd
-- Enrol your fingerprint
# fprintd-enroll yourusername
-- Enable the 'Fingerprint Authentication' PAM module
# pam-auth-update
Most places you're logging in should now support login via fingerprint with various levels of jank.
kscreenlocker (KDE's lock screen) supports it and even prints for you to scan your fingerprint, however if it's triggered and you don't authenticate before it times out it doesn't seem you're able to reactivate it and must login via password.
sddm (default login manager) supports it... but not intentionally. You have to attempt to login (with a junk or even blank password) then when it appears to "hang", put your finger on the fingerprint sensor.
Power
The USB PD implementation seems... off. Several peripherals that worked with my previous ThinkPad seem to cause issues with the Framework. Things like:
- Connecting multiple external USB-C displays I found one would power on, the other would continuously flicker on and off. Sometimes it would give up and stop. Connecting external power to the displays fixed the issue. I'd see lines in dmesg relating to things like
UCSI_GET_PDOS (-5)
. - Connecting power through certain docks/hubs with the Framework power adapter would cause the CPU to throttle down to 400MHz and get stuck there. But not all docks. And it worked with other power adapters.3
The solution in all cases was "mess with the power until it works".
I did try diagnosing further with ectool and more, however it seems like most of the functionality that would be useful for this is disabled in the firmware. Just have to wait for a BIOS update to fix it.
Sensors
Framework provides additional configuration for the sensors present in the laptop.
# apt-get install lm-sensors
$ wget -O- "https://raw.githubusercontent.com/FrameworkComputer/lm-sensors/refs/heads/framework/configs/Framework/Framework16-AMD.conf" | sudo tee /etc/sensors.d/Framework16-AMD.conf
# sensors-detect
Then you can run sensors
to see the hardware status.
Software
LibreOffice
The scaling in this is terrible and broken in Wayland when you have multiple screens with mixed scaling.
Run it with WAYLAND_DISPLAY=
to force it to fall back into X11 mode so it's no longer responsible for figuring out its own scaling and it works well enough.
Sleep
It wouldn't be Linux if sleep just worked, would it?
systemd
systemd v256 introduced some functionality that triggers some kernel bugs that... I don't really care. End result is if you tried to put the system to sleep while you had any NFS shares mounted, VMs running in KVM, or a few other things then it would stay awake for a minute until a timeout was hit and the system would sleep... but could never wake again. I mean, sure, it would turn the display back on but only to a frozen lock screen.
So now that that's happened, reboot4 and check journalctl -b-1
to see the system logs from the last boot and look for a line right before you threw your hands up in the air and restarted along the lines of "failed to freeze user.slice".
Does this ever happen to you? Then in /etc/systemd/system/systemd-suspend.service.d/disable_freeze_user_session.conf
, add:
[Service]
Environment="SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false"
And keep an eye on the GitHub issue to see when it's fixed.
Wake Sources
Now this one is definitely a hardware issue.
So turns out there's enough flex in the laptop that when you put it to sleep and throw it in a bag... the screen can contact the trackpad and keyboard and wake the laptop back up. This was... not a fun one to try and track down.
Easiest way to solve this? Just disable the wake up sources. I've got my own script set up (because reasons), but this one from the Framework Community is supposed to work:
#!/bin/bash
# From: https://community.frame.work/t/responded-waking-from-suspend-w-lid-closed/47497/52
# Install at /lib/systemd/system-sleep/disable-wakeup
# Make sure you mark the script executable.
shopt -s nullglob
case $1 in
pre)
systemctl stop bluetooth
for d in /sys/bus/usb/devices/*/power/wakeup /sys/bus/i2c/devices/*/power/wakeup; do
echo disabled > "$d"
done
;;
post)
systemctl start bluetooth;;
esac
After this is in place, the only way to wake the laptop is the power button. You can be more selective about disabling the wakeup sources and also leave the lid sensor enabled. That is left as an exercise for the reader.
-
I also have Windows installed because I just can't kick my Lightroom habit however at some point I also replaced the m.2 wifi card with one that's not and never will be supported on Windows 10 so now I have a bunch of pictures and no network connection. Next time I care enough to look at it, the current plan is "install linux in a hyper-v VM and use PCI passthrough to pass the wireless card through and then route all of Windows' traffic through the VM". This sort of self-inflicted pain should really be how I introduce this entire post. ↩
-
If you're running KDE, you can install the
colord-kde
package to add colour management into System Settings. ↩ -
Supposedly MagicSysRq would let you recover without rebooting. I never tried it. Press Fn+Alt+F11+R to put the kernel into raw input mode. Then Ctrl+Alt+F3 to switch to a console TTY. Then
systemctl unfreeze user.slice
. Good luck. ↩