QuirkSys Monitor is Now Available for Linux!
I’m excited to announce that QuirkSys Monitor is now officially available for Debian-based Linux distributions as a .deb package! 🎉
This marks a major milestone for the project — not just in terms of platform support, but also a major internal rewrite. The entire application has been rebuilt from the ground up in Python, allowing for better cross-platform compatibility, cleaner code, and improved performance on Linux systems.
🔧 Why the Rewrite?
Originally, QuirkSys Monitor was a lightweight system monitor built for Windows, but the idea was always to take it further. I wanted to make sure the app could run natively on Linux, too. But rather than just port the old code, I chose to rewrite the entire app in Python to:
Take advantage of Python’s excellent cross-platform support
Use modern libraries like psutil and tkinter for real-time monitoring and GUI
Keep the codebase simple, readable, and easy to maintain
The result? A snappy, clean experience that works great on Linux and lays the foundation for future features and expansions.
📦 Packaging for Debian (The .deb Struggle)
One of the most satisfying parts of this release was compiling a .deb package that installs just like any native app on Debian-based systems (Ubuntu, Linux Mint, Pop!_OS, etc.).
It wasn’t without its headaches — trying to build and test a .deb package without polluting system directories was frustrating at times (to say the least). There were plenty of permission issues, path conflicts, and trial-and-error involved.
But the end result is something I’m proud of:
A .deb installer that puts quirksys-monitor right in /usr/local/bin
A launcher shortcut you can run directly from your application menu (via a .desktop file)
No need to manually run the Python file or mess with PATH variables
If you’re running a Debian-based distro, you can download the .deb package right now.
👉 I’ve updated the original blog post where QuirkSys Monitor was first announced — the Linux download link is now live there, too.
⚠️ A Quick Note
At the moment, this build is only tested and available for Debian-based systems. Support for other distros (like Arch or Fedora) may come in the future.
🧪 Try It Out!
Let me know how it runs on your system. This is version 1.0, so bug reports and suggestions are welcome. And if you're a Linux enthusiast who loves building things the clean way, I hope the .deb packaging inspires you to do the same with your own projects.
More updates soon. Enjoy!
Source Code
#!/usr/bin/env python3
import tkinter as tk
import psutil
import threading
import time
class QuirkSysMonitor:
def __init__(self, root):
self.root = root
self.root.title("QuirkSys Monitor for Linux")
self.pinned = tk.BooleanVar(value=False)
# Labels
self.cpu_label = tk.Label(root, text="CPU Usage: ", font=("Segoe UI", 12))
self.cpu_label.pack(pady=5)
self.ram_label = tk.Label(root, text="RAM Usage: ", font=("Segoe UI", 12))
self.ram_label.pack(pady=5)
self.swap_label = tk.Label(root, text="Swap Usage: ", font=("Segoe UI", 12))
self.swap_label.pack(pady=5)
# Pin button
self.pin_button = tk.Checkbutton(
root, text = "Pin on Top", variable=self.pinned,
command=self.toggle_pin, font=("Segoe UI", 10)
)
self.pin_button.pack(pady=10)
# Start background updater
self.update_thread = threading.Thread(target=self.update_loop, daemon=True)
self.update_thread.start()
def toggle_pin(self):
self.root.attributes("-topmost", self.pinned.get())
def update_loop(self):
while True:
cpu = psutil.cpu_percent(interval=1)
ram = psutil.virtual_memory()
swap = psutil.swap_memory()
ram_used = ram.used / (1024 ** 3)
ram_total = ram.total / (1024 **3)
swap_used = swap.used / (1024 **3)
swap_total = swap.total / (1024 ** 3)
self.cpu_label.config(text=f"CPU Usage: {cpu:.1f}%")
self.ram_label.config(text=f"RAM Usage: {ram_used:.2f} GB / {ram_total:.2f} GB")
self.swap_label.config(text=f"Swap Usage: {swap_used:.2f} GB / {swap_total:.2f} GB")
time.sleep(1)
if __name__ == "__main__":
root = tk.Tk()
app=QuirkSysMonitor(root)
root.mainloop()