Automated KWin/Plasma crash detection and reporting tool for Arch/Garuda users

I’ve developed an automated crash monitoring tool specifically for tracking KWin/Plasma stability issues on rolling-release distros like Arch and Garuda.

What It Does

  • Automatically detects KWin, Plasma, and GPU crashes via systemd-coredump and journalctl
  • Captures complete system state at crash time (KWin support info, GPU diagnostics, active effects)
  • Privacy-sanitized data collection (3 configurable levels)
  • CSV logging for pattern analysis
  • Runs as a systemd user service with minimal overhead

Real-World Usage

Just used it to capture and report this crash: https://bugs.kde.org/show_bug.cgi?id=510541

The monitor automatically detected the KWin segfault, captured all relevant diagnostic data, and made filing a comprehensive bug report straightforward.

Repository

Written in Fish shell, designed for Arch-based systems. Especially useful if you’re experiencing intermittent crashes and want to systematically track them.

Feedback and contributions welcome!

2 Likes

@sitter you might find this relevant! :smiley:

have you as a dev run it through it’s paces? Cause this could be very nice to have.

~ git clone xxxxx://codeberg.org/thebearking/kwin-crash-monitor.git`  :check_mark:  12m 26s  02:59:22 PM cd kwin-crash-monitor Cloning into ‘kwin-crash-monitor’… remote: Enumerating objects: 88, done. remote: Counting objects: 100% (88/88), done. remote: Compressing objects: 100% (88/88), done. remote: Total 88 (delta 41), reused 0 (delta 0), pack-reused 0 (from 0) Receiving objects: 100% (88/88), 42.51 KiB | 256.00 KiB/s, done. Resolving deltas: 100% (41/41), done. **~**/**kwin-crash-monitor**  main  ./install.fish  :check_mark:  02:59:32 PM env: ‘fish’: No such file or directory **~**/**kwin-crash-monitor**  main  ls  127 ✘  02:59:49 PM CHANGELOG.md **crash-monitor.fish** .editorconfig **.git** **install.fish** README.md CONTRIBUTING.md crash-monitor.service **examples** .gitignore LICENSE **uninstall.fish** **~**/**kwin-crash-monitor**  main  ./install.fish  :check_mark:  03:00:16 PM env: ‘fish’: No such file or directory **~**/**kwin-crash-monitor**  main `

Yeah, it’s been through the wringer. Running it on my daily driver for weeks now, and had a few other Garuda/Arch users testing it on the recent Qt 6.10 mess.

It’s a systemd user service - clone, run ./install.fish, done. Monitors KWin, GPU drivers, kernel issues, the works. Captures full system state when stuff breaks so you’ve got actual data instead of “it crashed sometimes idk”.

Just used it to file https://bugs.kde.org/show_bug.cgi?id=510541 with everything KDE devs needed in one shot. I have a larger issue I am working on and collecting data for as well but not ready to report.

If you’re on Arch-based and dealing with random crashes, spin it up. Any edge cases or weird behavior, let me know.

Looking at the attachment in that bug report, unfortunately it’s missing the most important part: a backtrace of the crashing thread. We always need that for crash reports. Nothing else is even 10% as important.

1 Like

You’re right, the coredump capture has a timing issue. When multiple processes crash in a cascade, my monitor grabs the most recent dump globally instead of the specific one that triggered the capture.

The kernel log has the crash signature though:
kwin_wayland[74757]: segfault at 35 ip 00007f057a456a26 sp 00007ffd0f623310 error 4 in libQt6Qml.so.6.10.0

I can reproduce this crash reliably with Wobbly Windows enabled. I’ll install debug symbols and trigger it again to get you a proper backtrace. Should have that within a day or so.

Also fixing the monitor to capture the correct PID’s coredump in cascade scenarios, as we type.

Want to address what I posted?

Apologies - the install script is missing its executable flag in the repository. I’ll fix that shortly.

For now, you can run:

chmod +x install.fish

./install.fish

The fix will be in the repo, along with a pretty large update later today. I’ll be replying here with the update. Not sure how the executable flag got dropped. Thank you for pointing that out!

1 Like

Knew I was forgetting something. :face_with_spiral_eyes:

The scripts are properly marked as executable in the repository. This is likely a Git configuration issue on your system.

Run this to fix it locally:
chmod +x install.fish
./install.fish

If you’re on WSL or have core.fileMode=false set in your Git config, executable permissions may not be preserved on clone. The chmod command above will restore them.