After my last blog post, I finally bought my first Framework Laptop and set it up. Now, I'd like to share that journey with you.
The Framework Laptop
I opted for the Framework 13 Laptop because I love the concept of a modular and repairable machine. I don't plan on buying a new laptop for several years; what I really need are upgrades for the CPU and possibly the RAM. I chose the AMD version because I’m not a fan of E-P cores. I've never used an AMD CPU before. I had some idea how to use my computer and I didn't how E-P cores would work. But I didn't spend too much time comparing CPUs, as I believe either one would suffice.
When the package arrived, it came in different parts. The CPU was already installed on the motherboard, so all I had to do was to insert the RAM and disk, and follow the instructions to connect and cover the monitor and keyboard. It was straightforward and simple. I did encounter an issue with the monitor. That was a quality issue. But customer service replaced it quickly.
Although I like FreeBSD, I decided against using it because:
-
It failed to boot from the installation.
-
I wanted something that worked out of the box, with minimal time spent fixing issues.
-
I planned to virtualize my daily OS.
Virtualizing All the Systems
I envisioned using both a stable OS and an up-to-date OS. I didn't want an update to crash the system and force me to spend time fixing it. At the same time, I wanted to keep my system current. So, I decided to virtualize my setup.
I set up a VM host to be as simple and stable as possible, leaving it unchanged for long time. Meanwhile, I keep my VMs up to date. If a VM becomes irrecoverable, I can simply create a new one. In contrast, if the host system breaks due to an update, I can reinstall it and continue using the VMs.
This approach also allows smooth migration to different Linux distributions. I can reuse the same home directory and start a new VM with a different distro, though I haven't done that yet.
The data and home directory are stored on the host file system and shared with the VM. The VM gets as much CPU and memory as possible, and most USB devices are attached to the VM.
Linux Host
FreeBSD wasn't an option, as I mentioned earlier—it wouldn't boot. Additionally, I couldn't attach individual USB devices to the bhyve guest, and passing through the whole PCI would include too many devices needed by the host. KVM supports attaching USB devices, which is crucial for my usage.
I started with OpenSUSE as the host for a while, but it caused the system to overheat and shut down when using VMs. I tried various power management tools but couldn't resolve the issue.
Eventually, I chose Gentoo as the host and set up a minimal desktop environment using LXQt as the desktop environment. I chose Gentoo for its customization options and my familiarity with it. LXQt was selected for its lightweight nature and ease of managing my two external monitors. There are lighter window managers. But they don't come with detection of external monitors automatically.
Linux Guest
I use OpenSUSE as the guest OS for my daily tasks. It starts automatically when I log into the host, and I set up virt-viewer on start as well. So I would be able to start using the VM when I log in to the host.
I attempted to install FreeBSD as a guest but failed. I haven't investigated the issue yet, so I continue using OpenSUSE.
Using KDE and its GUI tools has made my workflow more productive compared to the terminal-heavy approach I used before.
Setup of the Host and Guest
I also set up a Windows VM, which complicates the overall setup. I must carefully allocate (maximum) memory for both the Linux and Windows VMs to avoid using swap, which causes noticeable audio/video choppiness. I aim to assign as much CPU and memory as possible to the Linux VM, with just enough for the Windows VM. So far, both run smoothly together.
I created a shared folder on the host, accessible to the Linux VM via virtio file system. However, I encountered some issues:
-
The virtio file system consumes memory, adding pressure on the system and increasing the possibility of swap usage.
-
Files added to the shared folder from the host aren't immediately visible in Dolphin on the guest VM without restarting Dolphin, although they are visible via the terminal.
Initially, video playback in the Linux VM was slow. I discovered it was because I hadn't enabled OpenGL for graphics. I enabled OpenGL using virtio video, and now I could play videos smoothly. The only drawback is that I can only enable OpenGL on one VM at a time.
I use a Unix socket for SPICE and PipeWire for audio, to reduce the latency. Below is my setting for video and audio.
<video>
<model type='virtio' heads='2' primary='yes'>
<acceleration accel3d='yes'/>
</model>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</video>
<audio id='1' type='pipewire' runtimeDir='/run/user/1000'>
<input mixingEngine='yes' fixedSettings='no' name='suse' streamName='suse'/>
<output mixingEngine='yes' fixedSettings='no' name='suse' streamName='suse'/>
</audio>
<graphics type='spice' defaultMode='insecure'>
<listen type='socket' socket='/tmp/spice-suse.socket'/>
<image compression='off'/>
<gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:c1:00.0-render'/>
</graphics>
One thing I missed is that I couldn't enable hibernation on the guest. Though there is an option to enable sleep to ram and sleep to disk, I'm surprised that it's only supported when the VM is set up for BIOS. If the VM is set up for UEFI, those options become invalid options.
I've been using it for about one year. So far the laptop and the setting are quite good.