Garuda System Maintenance
Garuda System Maintenance is a background service that sits in the system tray. Its package description reads “Automated Garuda system maintenance tool”. It warns about partial upgrades, an out of date system, old snapshots and new maintenance announcements on the Garuda forum. It does not install or update packages by itself.
This page describes the code of version 3.1.0, the version in the PKGBUILD.
Package
Section titled “Package”| Package | Notes |
|---|---|
garuda-system-maintenance | Version 3.1.0. Depends on qt6-base, knotifications, kstatusnotifieritem, garuda-libs and snapper-tools. |
Every Garuda edition lists it in its Packages-Desktop-Common file.
| File | Purpose |
|---|---|
/etc/xdg/autostart/garuda-system-maintenance.desktop | Starts the service with the desktop session. See XDG Autostart. |
/usr/share/applications/garuda-system-maintenance-settings.desktop | Menu entry “Garuda System Maintenance Settings”. |
/usr/share/polkit-1/rules.d/garuda-system-maintenance.rules | Lets members of the wheel group run snapper-tools find-old without a password. |
/usr/share/knotifications6/garuda-system-maintenance.notifyrc | Notification settings. Notifications show as popups. |
~/.config/garuda/garuda-system-maintenance.conf | The settings of the user. |
Running it
Section titled “Running it”garuda-system-maintenancegaruda-system-maintenance --settings| Command | Effect |
|---|---|
garuda-system-maintenance | Starts the tray service. Only one instance runs per user. A second one exits with code 1. |
garuda-system-maintenance --settings | Opens the settings window only. |
Schedule
Section titled “Schedule”- The first round of checks runs 30 seconds after start.
- After that, a round runs every 15 minutes.
- The partial upgrade check also reacts at once when files in
/var/lib/garudachange. - The snapshot check runs once per session.
Network requests
Section titled “Network requests”The service makes one kind of network request.
| Request | Target | When | Turn off |
|---|---|---|---|
| Forum announcements | https://forum.garudalinux.org/c/announcements/announcements-maintenance/45.json | Every round: 30 seconds after start, then every 15 minutes | Untick “Notify about forum maintenance announcement posts” |
The request is a plain HTTP GET for the public topic list of the forum category “Announcements - Maintenance”. It sends no data about the system. All other checks read local files only.
The service no longer checks for keyring or hotfix updates. The package agent that did this was removed (changelog entry “packageagent: Remove”). garuda-hotfixes itself is retired. See Garuda Migrations.
Checks and notifications
Section titled “Checks and notifications”Forum announcements
Section titled “Forum announcements”The service sorts the topics of the category by creation date and compares the newest one with the timestamp it stored last.
- On the first run of a new user, it only stores the timestamp. No notification is shown.
- When a newer topic exists, it shows “New maintenance announcement:
<title>” with the topic link and the first 150 characters of the excerpt. The action Open in browser opens the topic. - When the settings were created by an older version (settings version 2), the stored timestamp is set to 2025-07-18. Announcements after that date are then shown once.
Partial upgrade
Section titled “Partial upgrade”The pacman hook runner of garuda-hooks creates /var/lib/garuda/partial_upgrade when packages were updated but the system is still not fully up to date. It removes the file after a full update. Garuda System Maintenance watches this folder.
When the folder changes and the file exists, it shows “Partial upgrade detected”. While the file exists, the tray icon also shows the alert icon. The notification has these actions:
| Action | Effect |
|---|---|
| Update system | Opens a terminal and runs garuda-update. |
| Learn more | Opens the Partial upgrades page. |
| Disable warnings | Turns off the partial upgrade warning. |
System out of date
Section titled “System out of date”After a full update, the hook runner touches /var/lib/garuda/last_update. When this file is 13 days old or older, the service waits two more days. It then shows “System out of date”. The notification repeats at most every three days.
| Action | Effect |
|---|---|
| Update system | Opens a terminal and runs garuda-update. |
| Disable warnings | In the code, this turns off the partial upgrade warning, not the out of date warning. |
To turn off the out of date warning, untick “Notify if system is critically out of date” in the settings, or use Ignore permanently in the tray dialog.
Old snapshots
Section titled “Old snapshots”Once per session, the service runs pkexec snapper-tools find-old. The polkit rule lets wheel members run it without a password. It lists old Snapper snapshots without automatic cleanup and old restore subvolumes.
When it finds any, it shows “Old snapshots/backups found”.
| Action | Effect |
|---|---|
| View and delete | Shows the list. Delete runs pkexec snapper-tools delete-old, which asks for the password. |
| Disable notifications | Turns off the old snapshot check. |
Tray icon
Section titled “Tray icon”The icon turns into the alert icon when a check needs attention. A click on the icon opens the dialog of the most urgent check:
| Priority | Check |
|---|---|
| 1st | Partial upgrade or system out of date |
| 2nd | Old snapshots |
The dialog offers Update system or Delete, Ignore permanently and Cancel. When nothing needs attention, a click opens the settings. The context menu has one entry, Settings.
Settings
Section titled “Settings”The settings window has two groups. Changes apply when you press OK. The running service reloads the settings file when it changes.
| Setting | Key in the settings file | Default |
|---|---|---|
| Notify about forum maintenance announcement posts | application/notifyforum | On |
| Notify about partial upgrades | application/partialupgrade | On |
| Notify if system is critically out of date | application/outofdate | On |
| Notify about old snapshots | application/oldsnapshot | On |
The package also installs /usr/lib/garuda-system-maintenance/migrate-dr460nized, an old Plasma theme migration script. The current build does not include the migration agent that ran it.