sysc-tray
Inspect the user service that receives system tray items for sysc-shell.
sysc-tray owns StatusNotifierItem discovery and DBusMenu state. sysc-shell owns icon drawing, placement, input and menu surfaces. The tray daemon runs separately, so restarting the shell does not discard tray registrations.
Source: default-branch commit e7d3dd4b · SYSC v0.1.3 pin: sysc-tray v0.1.2.
Session service
SYSC installs sysc-tray as a user service in the graphical session. Let the installer handle conflicts with another tray host. See existing desktop services before changing an existing setup.
Inspect the service and its journal as the installing user:
systemctl --user --no-pager status sysc-tray.service
busctl --user status org.kde.StatusNotifierWatcher
journalctl --user -u sysc-tray.service -b --no-pagerThe service should run while the graphical-session.target is active. The bus-name owner may be sysc-tray or another healthy watcher: v0.1.2 provides the watcher when the name is free and attaches as a host when another watcher already owns it. A different process in the bus status is not by itself a failure. A failed or intentionally skipped unit can leave the shell without tray items; check the install choice and the journal before restarting anything.
Interface boundary
sysc-tray provides org.kde.StatusNotifierWatcher when the bus name is free, or attaches to a healthy existing watcher as a StatusNotifierHost. In either mode it tracks item and menu state and serves the shell presenter at $XDG_RUNTIME_DIR/sysc-tray/presenter.v1.sock. The socket accepts the same user's shell presenter. The v1 socket protocol sends reconnect snapshots so the shell can recover after either process restarts.
The current implementation handles StatusNotifierItem and DBusMenu clients. It does not render UI and does not support legacy XEmbed tray icons. See the service integration guide for the shell, tray, clipboard and notification handoff.
Trace an item
The service owns StatusNotifierWatcher registration, item properties, activation and DBusMenu events. sysc-shell owns icon lookup, bar placement, input handling and menu drawing. Restarting sysc-shell should reconnect to the tray service and receive a fresh snapshot; restarting sysc-tray makes tray clients register again.
If the tray is empty, check the service first, then confirm that an application registered a StatusNotifierItem on the same session bus. A different process shown for org.kde.StatusNotifierWatcher can be healthy: sysc-tray attaches to an existing watcher when one already owns the name. The daemon does not implement legacy XEmbed icons.
Menu events include the revision that the shell displayed. When an application changes its menu before a click arrives, the service rejects the stale event instead of activating a different row. Open the menu again and choose the current item.
The v0.1.2 protocol package describes the suite-pinned public types. The internal presenter socket is a session interface; avoid treating its message layout as a public integration API.
