Framework Laptop with Fedora
Table of Contents
These are my notes on installing a brand new Framework Laptop (Batch 9) for a nephew of mine.
- CPU: Intel® Core™ i7-1165G7
- Memory: 32GB (2 x 16GB) DDR4-3200
- Storage: 2TB - WD_BLACK™ SN750 NVMe™
- Keyboard: English International
Make, Model, Version
[root@framewrk-lptp ~]# dmidecode --type system | head --lines=9 # dmidecode 3.3 Getting SMBIOS data from sysfs. SMBIOS 3.3.0 present. Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: Framework Product Name: Laptop Version: AB
My Batch 9 machine came with today’s latest, 3.07
[root@framewrk-lptp ~]# dmidecode -s bios-version 03.07
[root@framewrk-lptp ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Vendor ID: GenuineIntel BIOS Vendor ID: Intel(R) Corporation Model name: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz BIOS Model name: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz CPU family: 6 Model: 140 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 Stepping: 1 CPU max MHz: 4700,0000 CPU min MHz: 400,0000 BogoMIPS: 5606.40 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l2 invpcid_single cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnm i flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves split_lock_detect dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid movdiri movdir64b fsrm avx512_vp2intersect md_clear flush_l1d arch_capabilities Virtualization features: Virtualization: VT-x Caches (sum of all): L1d: 192 KiB (4 instances) L1i: 128 KiB (4 instances) L2: 5 MiB (4 instances) L3: 12 MiB (1 instance) NUMA: NUMA node(s): 1 NUMA node0 CPU(s): 0-7 Vulnerabilities: Itlb multihit: Not affected L1tf: Not affected Mds: Not affected Meltdown: Not affected Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling Srbds: Not affected Tsx async abort: Not affected
[root@framewrk-lptp ~]# nvme list Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 [REDACTED] WD_BLACK SN750 2TB 1 2,00 TB / 2,00 TB 512 B + 0 B 112000WD
[root@framewrk-lptp ~]# df -h -x tmpfs -x devtmpfs Filesystem Size Used Avail Use% Mounted on /dev/dm-0 1,4T 3,8G 1,4T 1% / /dev/dm-0 1,4T 3,8G 1,4T 1% /home /dev/nvme0n1p5 974M 153M 755M 17% /boot /dev/nvme0n1p1 96M 40M 57M 41% /boot/efi
Note that Fedora uses btrfs by default since F33.
Click to show technical details.
[root@framewrk-lptp ~]# dmidecode -t memory # dmidecode 3.3 Getting SMBIOS data from sysfs. SMBIOS 3.3.0 present. Handle 0x0014, DMI type 16, 23 bytes Physical Memory Array Location: System Board Or Motherboard Use: System Memory Error Correction Type: None Maximum Capacity: 64 GB Error Information Handle: No Error Number Of Devices: 2 Handle 0x0015, DMI type 17, 92 bytes Memory Device Array Handle: 0x0014 Error Information Handle: No Error Total Width: 64 bits Data Width: 64 bits Size: 16 GB Form Factor: SODIMM Set: None Locator: Controller0-ChannelA-DIMM0 Bank Locator: BANK 0 Type: DDR4 Type Detail: Synchronous Speed: 3200 MT/s Manufacturer: Crucial Technology Serial Number: [REDACTED] Asset Tag: 9876543210 Part Number: CT16G4SFRA32A.M16FRS Rank: 2 Configured Memory Speed: 3200 MT/s Minimum Voltage: Unknown Maximum Voltage: Unknown Configured Voltage: 1.2 V Memory Technology: DRAM Memory Operating Mode Capability: Volatile memory Firmware Version: Not Specified Module Manufacturer ID: Bank 6, Hex 0x9B Module Product ID: Unknown Memory Subsystem Controller Manufacturer ID: Unknown Memory Subsystem Controller Product ID: Unknown Non-Volatile Size: None Volatile Size: 16 GB Cache Size: None Logical Size: None Handle 0x0016, DMI type 17, 92 bytes Memory Device Array Handle: 0x0014 Error Information Handle: No Error Total Width: 64 bits Data Width: 64 bits Size: 16 GB Form Factor: SODIMM Set: None Locator: Controller1-ChannelA-DIMM0 Bank Locator: BANK 0 Type: DDR4 Type Detail: Synchronous Speed: 3200 MT/s Manufacturer: Crucial Technology Serial Number: [REDACTED] Asset Tag: 9876543210 Part Number: CT16G4SFRA32A.M16FRS Rank: 2 Configured Memory Speed: 3200 MT/s Minimum Voltage: Unknown Maximum Voltage: Unknown Configured Voltage: 1.2 V Memory Technology: DRAM Memory Operating Mode Capability: Volatile memory Firmware Version: Not Specified Module Manufacturer ID: Bank 6, Hex 0x9B Module Product ID: Unknown Memory Subsystem Controller Manufacturer ID: Unknown Memory Subsystem Controller Product ID: Unknown Non-Volatile Size: None Volatile Size: 16 GB Cache Size: None Logical Size: None
[root@framewrk-lptp ~]# free -h total used free shared buff/cache available Mem: 31Gi 895Mi 28Gi 105Mi 1,5Gi 29Gi Swap: 8,0Gi 0B 8,0Gi
I went for the following
|1||DisplayPort Expansion Card|
|1||HDMI Expansion Card|
|3||USB-C Expansion Card|
|2||USB-A Expansion Card|
Since there is no RJ45 Ethernet connection, an Anker PowerExpand USB-C to Gigabit Ethernet Adapter was gifted by Janine. Wi-Fi is nice, but it’s always good to have the option to use cabled network.
Insert RAM and NVMe
Is well documented in the Framework Laptop DIY Edition Quick Start Guide.
But not powering up
Problem with this one was that the step pressing the power button (near the end of the article) led to nothing, the machine acted completely dead. :-( Same result with 2 different USB-C power supplies, same result with different USB-C Expansion Cards.
Properly attach power button bracket
On closer inspection the power button felt not correctly attached, one of the three screws holding the retention bracket was not fully screwed in, the power button was wobbly and the case was not flush near the power button. Not a good start for a brand new device.
But, while Framework’s post assembly QA feels below par, the documentation is excellent. I simply followed the Fingerprint Reader Replacement Guide up to step 5 (removing the silver bracket) and then again from step 11 (attach the silver bracket) onward.
While the power button and case now were as they should be, the laptop still would not power on.
At least the problem is shared by others and Framework describes a fix in Fully Resetting the Mainboard State. Since the owner of this laptop will be a teenager, I would be much happier if there was a push button for this reset on the mobo, especially since Framework chose a flimsy battery holder and connector. I would happily have paid up to 25€ more for higher quality CMOS batt holder and laptop batt connector. It is counterproductive to long device life to pick connectors from the very bottom of the price range. I was expecting better and am definitely used to better when working on a ThinkPad.
Shoddy assembly quality aside, the laptop was now finally working.
After reading the thread Completely dead, I get the impression it might have been sufficient to only pull the CMOS battery and not hassle with the fiddly main battery connector. No matter, it works now.
Windows 10 Pro Installation
Since the owner of the laptop will also use it for school, I installed Windows 10 Pro purchased as Download version with the machine. That install was given roughly ¼ of the NVMe, the remaining ¾ were left unused in anticipation of the Fedora Linux install.
Microsoft’s Windows 10 Media Creation Tool twice (once in a VM running on the Framework laptop and once on a native Windows install on another machine) happily created a USB medium, without any errors, but the installer did error out. Seems I am not alone with that issue and the solution was to use a different USB stick. That 3rd write, to a new stick, allowed me to install.
Guess that as a Red Hat Enterprise Linux and Fedora user I am spoiled since those actually verify the boot medium’s integrity by default. No matter. With the second stick it installed fine.
While I would have preferred a driver disk to feed the installer, post install the Framework Laptop Driver Bundle executable did its job just fine.
Dual Boot Notes
I disabled fast boot in Windows, as it is known to interfere with WiFi when dual booting. There was no notable difference in Window’s boot time.
Note that if you intend to use the fingerprint reader in a dual boot setup, then you might have issues, but the threads also show people having success.
Install Fedora 35 Workstation
Is also well documented in Framework’s article Fedora 35 Installation on the Framework Laptop
The two workarounds from Step 4, Completing Setup were applied. That is microphone input on the 3.5mm jack and Gnome […] enable fractional scaling.
Updating the BIOS was not needed since it’s already at version 3.07.
Being a civilised installer, Fedora noticed that Windows was present and automatically created an entry in the bootloader. Not like other OSes (yes, Windows, I am looking at you) that bulldozer over already installed OSes during install.
Fixed Issues under F35 default install plus updates
See the thread Fedora Linux 35 (Fedora 35) on the Framework Laptop.
I expect most if not all of these to be fixed in a future Fedora update, so do not blindly apply if you read this much later then April 2022, rather check the thread linked above.
grub Bootloader Slow to React
For this F35 install I worked around it, as per comment #2 in the bug, after applying updates.
sudo cp /boot/efi/EFI/fedora/grub.cfg /boot/efi/EFI/fedora/grub.cfg.orig sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
That was with
[root@framewrk-lptp ~]# rpm -qa grub2* grub2-common-2.06-10.fc35.noarch grub2-tools-minimal-2.06-10.fc35.x86_64 grub2-tools-2.06-10.fc35.x86_64 grub2-pc-modules-2.06-10.fc35.noarch grub2-pc-2.06-10.fc35.x86_64 grub2-efi-ia32-2.06-10.fc35.x86_64 grub2-efi-x64-2.06-10.fc35.x86_64 grub2-tools-extra-2.06-10.fc35.x86_64 grub2-efi-ia32-cdboot-2.06-10.fc35.x86_64 grub2-efi-x64-cdboot-2.06-10.fc35.x86_64 grub2-tools-efi-2.06-10.fc35.x86_64
Technical details, click to expand.
The content of
search --no-floppy --fs-uuid --set=dev [REDACTED] set prefix=($dev)/grub2 export $prefix configfile $prefix/grub.cfg
See also Unify the location of GRUB configuration files across all supported CPU architectures in the Fedora 34 release notes.
So the work around is not ideal but works.
FIXME: revisit once F36 is out.
Use Deep Sleep instead of s2idle
For now it looks like sleep type deep is the better choice, try s2idle when on F36 or later.
Deep sleep was configured as per the thread Enabling hibernate on Fedora 35.
sudo grubby --update-kernel=ALL --args=mem_sleep_default=deep
Audio is fine after suspend / resume.
If the power drain during sleep is too much, then revert this by following either Making Persistent Changes to a GRUB 2 Menu Using the grubby Tool or Customizing the GRUB 2 Configuration File in the Working with the GRUB 2 Boot Loader guide.
Todo: Try without
mem_sleep_default=deep once F36 is released and the machine was updated.
Potential Battery Life Tuning
If battery life deemed not good enough, then see the thread Linux battery life tuning.
Install Packages for Virtualization
Since Windows was installed natively, there was no need for a VM under Fedora and I thus left the packages for using virtual machines out.
Do read Getting started with virtualization and Installing virtual operating systems with GNOME Boxes in the Fedora Quick Docs before choosing between the two options.
Virtualisation works fine, as expected. I tested it before doing the dual boot setup. I just did not install the packages in the final installation round.