1.0.0-5 — June 2026

GNOME crash fix: the wrapper now passes HOME=/root to the root pkexec process, preventing a bubblewrap sandbox failure when gdk-pixbuf tries to rasterize SVG icons.

Fixed

  • GNOME crash on launch (gtkiconhelper / gdk-pixbuf SVG loader): The wrapper was passing HOME=/home/soplos to the root pkexec process. The gdk-pixbuf SVG rasterizer uses bubblewrap as a sandbox; when the parent is root but HOME points to a user directory, the bwrap sandbox fails to initialize and GTK aborts. Fixed by passing HOME=/root, matching how soplos-grub-editor handles it.

1.0.0-4 — June 2026

GNOME crash fix: the wrapper now specifies the Gdk version before importing it, preventing a conflict with GTK4 already loaded in GNOME sessions.

Fixed

  • GNOME crash on launch — missing gi.require_version('Gdk', '3.0'): The wrapper's inline Python block imported Gdk without specifying a version. In GNOME sessions GTK4 is already loaded, so gi tried to load Gdk 3.0 on top of 4.0 and raised ImportError. gi.require_version('Gdk', '3.0') is now set before the import in both the non-root and root branches of the wrapper.

1.0.0-3 — June 2026

Native titlebar in XFCE and KDE: the CSD HeaderBar is now only used in GNOME and other environments; XFCE and KDE use native window decorations matching the rest of the Soplos apps.

Fixed

  • Titlebar uses native window decorations in XFCE and KDE/Plasma: The CSD Gtk.HeaderBar is now only active in GNOME and other desktop environments. In XFCE and KDE the application uses native decorations, matching the behavior of the rest of the Soplos applications.
  • set_status() adapted for native mode: In desktop environments that use native decorations, set_status() updates the window title instead of the HeaderBar subtitle, so operation feedback remains visible in all environments.

1.0.0-2 — June 2026

Launcher and packaging fixes: wrapper renamed to soplos-system-service, pkexec now calls python3 -c inline, GLib and Gtk.Application initialization fixes, postinst path corrected; plus UX fixes: corrected progress bar, scrollable details panel, smart action buttons and color-coded Loaded column.

Fixed

  • Wrapper renamed from soplos-system-services to soplos-system-service: Matches the project name and the Soplos packaging convention followed by all other apps.
  • Wrapper follows the Soplos pattern — pkexec calls python3 -c inline: Instead of calling the wrapper recursively, pkexec now runs python3 -c "import main; main.main()". This avoids the need for a matching polkit exec.path policy and matches how soplos-grub-editor works.
  • GLib.set_prgname and GLib.set_application_name set before importing main: Eliminates the "g_set_application_name() called multiple times" terminal warning that appeared on every launch.
  • Gtk.Application changed from FLAGS_NONE to HANDLES_COMMAND_LINE: Added a do_command_line handler that calls activate(). FLAGS_NONE caused a silent exit when the D-Bus singleton registration failed running as root via pkexec.
  • postinst path corrected: The previous script used /usr/share/soplos-system-services/ (wrong path with a trailing s) which made set -e exit immediately, leaving the package in a broken half-installed state.
  • pkexec handling moved entirely to the bash wrapper: As per the Soplos app pattern, privilege elevation is now entirely in the launcher script; main.py no longer calls pkexec and only runs the GTK application.
  • GTK_IM_MODULE set in the wrapper: Set to gtk-im-context-simple to suppress ibus connection warnings when running as root.
  • Dark/light theme detection moved to the bash wrapper: Detection now uses xfconf-query (XFCE) and gsettings (GNOME) in the wrapper before pkexec elevation, then passes the result via SOPLOS_COLOR_SCHEME.
  • Progress bar position corrected: Was appearing below the footer in -1 due to reversed pack_end ordering; footer is now packed first so the progress bar sits correctly between content and footer.
  • Progress bar minimum display time of 700ms: The bar is now visible even on fast operations where service listing completes almost instantly.
  • Details panel replaced Gtk.Label with Gtk.TextView inside Gtk.ScrolledWindow: Prevents window deformation on long systemctl output and adds scroll support for lengthy service details.
  • Smart action button state improved: Start is now disabled when the selected service is active; Stop and Restart are disabled when it is inactive, preventing nonsensical operations.
  • Color-coded Loaded column — not-found entries shown in red: Services where the unit file was not found are now highlighted in red in the Loaded column, matching the Active column color logic.
  • Black border artifact removed from details panel: Moving the soplos-card CSS class from an inner widget to the Gtk.ScrolledWindow and setting ShadowType.NONE eliminates the double-border visual artifact.

1.0.0-1 — June 2026

Complete rewrite: two-tab GTK interface (Services and Logs), color-coded TreeView, smart action buttons, CSD HeaderBar, dark/light theme via pkexec, full i18n and modular architecture.

Rewritten

  • GTK.Notebook two-tab interface: Services tab with sortable TreeView (green active / red failed / red not-found) and Logs tab with monospace journalctl viewer, replacing the original skeleton layout.
  • Smart action buttons: Start, Stop and Restart buttons enabled or disabled based on the current service state; all controls disabled until a service is selected.
  • CSD HeaderBar and Soplos footer: HeaderBar with operation subtitle (loading count, errors). Footer shows DE and display protocol on the left, version on the right. Progress bar in pulse mode shown during listing and operations.
  • Dark/light theme forwarded through pkexec: Detected as the regular user before elevation and passed via SOPLOS_COLOR_SCHEME, ensuring correct colors when running as root under XFCE, KDE or GNOME.
  • Full i18n and modular architecture: All UI strings through the dict-based _() system across all 8 languages. Modular layout: core/, ui/, services/systemd.py and utils/. All relevant env variables forwarded through pkexec.

Added

  • Polkit policy, desktop launcher and bash wrapper: org.soplos.systemservice.policy, org.soplos.systemservice.desktop (with Name and Comment in all 8 languages) and soplos-system-services launcher script.
  • Debian packaging and icons: debian/control and debian/copyright. Icons at 48×48, 64×64 and 128×128 pixels under assets/icons/.

Fixed

  • Duplicate service rows: _populate_service_store() was appending each service twice.
  • Bullet character parsed as service name: systemctl prefixes failed units with a U+25CF bullet symbol which was being picked up as a service name.
  • Progress bar position and visibility: Was appearing below the footer due to pack_end ordering — footer is now packed first. Added 700ms minimum display time so the bar is noticeable even when service listing completes instantly.

Improved

  • systemd.py: All control functions use subprocess.run with capture_output and timeout. Added get_service_logs() via journalctl.
  • utils/strings.py: Added global _(), set_language() and get_current_language() so all modules share a single language state.

1.0.0 — July 2025

Initial project creation with GTK3 skeleton, systemd service listing, basic service control and 8-language string system.

Added

  • GTK3 application skeleton with systemd service listing via systemctl list-units.
  • Basic service control: Start, stop, restart, enable and disable functions.
  • 8-language string system with dict-based translations (ES, EN, FR, PT, DE, IT, RO, RU) and pkexec privilege elevation.