Notes on ZorinOS

My personal values and policies towards my online privacy, data sovereignty, and tolerance to advertising have evolved, especially since the beginning of 2025. After nearly 25 years as a Windows user, I decided to switch to an Ubuntu-based distribution called ZorinOS. I’ll explain why it improved my life, and how I’ve modified it to run better.

Obligatory neofetch screenshot

A Weight Off My Shoulders

Moving to Linux had a pleasant and unexpected non-technical side-effect. I almost immediately felt a weight I was previously unaware of lift off my shoulders. I think the major reasons for this are that:

This PC feels like My Computer again.

Quality of Life Tweaks For Zorin

Below is a living document containing the list of tweaks I’ve made to my Zorin installation to make it more pleasant to use. Last Updated: September 2025.

Improve UI Scale

UI elements are either too big at 200% and too small at 100%, but using fractional scale in GNOME results in blurriness. To make the interface more readable, I instead set resolution scaling to 100% and used gnome-tweaks to change text sizes. Specifically, I increased my interface text to 12pt and set the “scaling factor” to 1.25. This keeps elements like the task bar and title menus small and out of the way, while making the rest of the interface text large enough to read comfortably.

The scaling factor in tweaks sets the magnitude of the Large Text accessibility option and then enables it. Sometimes the Large Text option interferes with legacy apps, resulting in text that is too big and cut off. I set the Accessibility menu to always stay visible in the taskbar so it can be easily toggled on and off.

Reduce Trackpad Scroll Speed

My Framework laptop’s two-finger trackpad scrolling was much too sensitive. I installed libinput-config (which first requires meson, libc-dev, and libinput-dev to build). I followed the readme and created a config file in which I set the scroll-factor to 0.25.

Libinput will eventually add a Lua plugin system that will make libinput-config unnecessary (slated for version 1.29).

Fix Garbled Bluetooth Sound

I had issues with bluetooth audio getting corrupted every few seconds, making videos unwatchable. I fixed this by installing the blueman bluetooth manager from the package store and connected to my headphone with that app instead of the system bluetooth interface.

Add GNOME ExtensionManager

There are plenty of extensions that you can use with GNOME to modify and add functionality to your desktop environment. The GNOME Extensions website relies on a Firefox plug-in to install the extensions, but Zorin comes with Brave. Installing Extension Manager from the Software app allows you to browse and install extensions without Firefox.

Zorin even recommends it for advanced users on their website: Zorin Docs - Install Third Party GNOME Shell Extensions.

Using an eGPU with Linux and a Framework Laptop

Unfortunately, eGPU usability is not seamless when running Zorin or other Linux distros on my system (Framework 13”, 11th Gen Intel, Nvidia RTX3080 in Razer Core X).

If I boot the system with the eGPU attached, the BIOS is unable to find my M.2 drive; this did not occur with a Windows installation. When powering on, I must wait for the green light on the side of the laptop to go out before plugging in the eGPU. The drive is then recognized and the eGPU is usable in the OS. Unfortunately, hot-plugging does not work.

Running a second monitor via the GPU’s HDMI port resulted in stutters and poor performance on the monitor and the built-in display. I have to run the HDMI from one a Framework HDMI expansion card. Theoretically this will degrade performance, but I did not experience any notable difference in performance compared to Windows when playing No Mans Sky.

Apps must be explicitly informed to offload graphics tasks to the eGPU. I wrote a bash script with the following contents that allows for easy invocation of the environment variables needed.

#!/bin/bash
exec env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia “$@”

Save this to ~/.local/bin/prime-run, then make it executable with chmod +x, and add ~/.local/bin to the path by adding the following to .bashrc:

export PATH=”$HOME/.local/bin:$PATH”

Now just call prime-run instead of having to type the long variable names. This can be used in Steam launch options with prime-run %command%.

Conclusion

Transitioning to Linux required me to learn new things and work around technical challenges. With these hurdles now crossed, I feel a tangible improvement to my overall quality of life in general, and have a new appreciation for how the systems I use daily can have the ability to influence my state of mind.