Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

ProtectASM is a system monitoring tool for notifying about physical hardware changes. It’ll send a push notification to the device’s owner’s phone, for example, when a USB device is plugged in or disconnected.

Status

Not recommended for “production” use without deep technical knowledge!

Currently the background service and app binaries need to be installed manually as there is no packaging or installers.

Public remote notification server running at https://protectasm-demo.midka.dev.

Feature list

  • Unix support
  • Detect monitor connect/disconnect
  • Detect USB connect/disconnect
  • Send notifications with minimal user information
    • Registration with only using a display name for the device
    • Authentication using ED25519 keypairs
    • Send notifications using ntfy
  • Online healthcheck to make sure user is notified if device loses internet access
  • Windows support (planned, lack of time)
  • Screensaver (fun idea, lack of time)
  • Alarm sounds/flashing screen if a device is disconnected while user is away (fun idea, lack of time)
  • More notification providers, for example, signal or matrix (lack of time)
  • Proper installer / packaging (lack of time)

Motivation for making this project

In February 2026 I (Midka) was participating in the Assembly LAN party with a computer-seat ticket. However, I didn’t want to leave my devices alone as easily disconnectable peripherals could be stolen. As a quick solution, I wrote a small shell script that pings my server every 15 seconds with the current amount of connected USB devices and monitors. It worked fine but I wanted to try and make a better version before the next event in August. I also wanted to learn some technologies that I’ve not used before much.

Technology choices

  • Programming Language: Rust
  • Desktop User Interface: Qt6 using cxx-qt
    • I made a small KDE widget using QML a couple months ago and wanted to expand my knowledge with writing a proper desktop application using QT.
  • Database: fjall-rs.
    • I have previous experience with SQLite and PostgresQL. I wanted to try something completely new to me; an embedded database written in Rust.

Contributing

All contributions are welcome in the form of code, documentation, ideas, issues, anything!


Code contributions: https://codeberg.org/project-protectasm/ProtectASM

Issues and discussions: https://codeberg.org/project-protectasm/ProtectASM/issues/new


License

ProtectASM is licensed under MIT. This documentation is licensed under MIT.