Skip to content

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.

PackageNotes
garuda-system-maintenanceVersion 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.

FilePurpose
/etc/xdg/autostart/garuda-system-maintenance.desktopStarts the service with the desktop session. See XDG Autostart.
/usr/share/applications/garuda-system-maintenance-settings.desktopMenu entry “Garuda System Maintenance Settings”.
/usr/share/polkit-1/rules.d/garuda-system-maintenance.rulesLets members of the wheel group run snapper-tools find-old without a password.
/usr/share/knotifications6/garuda-system-maintenance.notifyrcNotification settings. Notifications show as popups.
~/.config/garuda/garuda-system-maintenance.confThe settings of the user.
Terminal window
garuda-system-maintenance
garuda-system-maintenance --settings
CommandEffect
garuda-system-maintenanceStarts the tray service. Only one instance runs per user. A second one exits with code 1.
garuda-system-maintenance --settingsOpens the settings window only.
  • 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/garuda change.
  • The snapshot check runs once per session.

The service makes one kind of network request.

RequestTargetWhenTurn off
Forum announcementshttps://forum.garudalinux.org/c/announcements/announcements-maintenance/45.jsonEvery round: 30 seconds after start, then every 15 minutesUntick “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.

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.

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:

ActionEffect
Update systemOpens a terminal and runs garuda-update.
Learn moreOpens the Partial upgrades page.
Disable warningsTurns off the partial upgrade warning.

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.

ActionEffect
Update systemOpens a terminal and runs garuda-update.
Disable warningsIn 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.

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”.

ActionEffect
View and deleteShows the list. Delete runs pkexec snapper-tools delete-old, which asks for the password.
Disable notificationsTurns off the old snapshot check.

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:

PriorityCheck
1stPartial upgrade or system out of date
2ndOld 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.

The settings window has two groups. Changes apply when you press OK. The running service reloads the settings file when it changes.

SettingKey in the settings fileDefault
Notify about forum maintenance announcement postsapplication/notifyforumOn
Notify about partial upgradesapplication/partialupgradeOn
Notify if system is critically out of dateapplication/outofdateOn
Notify about old snapshotsapplication/oldsnapshotOn

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.