Repository navigation
Tray icon never appears on GNOME: SNI properties are refused when the object is addressed by its unique bus name #734
Description
Tray icon never appears on GNOME: SNI properties are refused when the object is addressed by its unique bus name
Summary
On Ubuntu 26.04.1 with GNOME Shell 50.1 (Wayland), Docker Desktop registers a
StatusNotifierItem, but no tray icon is drawn — only an empty placeholder. The
cause is that the D-Bus object at /StatusNotifierItem answers a
org.freedesktop.DBus.Properties.Get call only when the message destination is
the well-known name org.freedesktop.StatusNotifierItem-<pid>-1. When the same
object is addressed by the unique connection name that currently owns that
well-known name, every Get fails with
org.freedesktop.DBus.Error.Failed: error occurred in Get.
GNOME's ubuntu-appindicators extension resolves the well-known name to the
unique name before building its proxy, so every property read fails and the
indicator is never constructed.
Under D-Bus routing, the two forms of address reach the same connection and the
same object, so both should behave identically. This looks like a defect in the
bundled Chromium/Electron StatusNotifierItem implementation rather than in the
shell extension.
Environment
| Component | Version |
|---|---|
| Docker Desktop | 4.90.0-238679 (binary dated 2026-09-04) |
| Bundled Electron | 43.4.0 |
| Bundled Chromium | 150.0.7871.224 |
| Docker Engine | 29.7.2 |
| OS | Ubuntu 26.04.1 LTS (resolute) |
| Desktop | GNOME Shell 50.1, Wayland session |
| Tray extension | ubuntu-appindicators@ubuntu.com, package gnome-shell-ubuntu-extensions 50.26.04.7ubuntu |
| Kernel | 7.0.0-31-generic |
The same behaviour was present on this machine before the OS upgrade, under
Ubuntu 24.04.5 with GNOME Shell 46.
Steps to reproduce
- Run Docker Desktop on a GNOME session with the
ubuntu-appindicators
extension enabled. - Observe the panel: no whale icon appears. Depending on the extension version
you get either nothing at all or a placeholder showing three dots with no
working menu.
Evidence
Docker Desktop does publish the item and reports it as active:
$ busctl --user list --acquired | grep StatusNotifierItem
org.freedesktop.StatusNotifierItem-103439-1 103439 Docker Desktop ps :1.127
$ busctl --user call org.freedesktop.DBus /org/freedesktop/DBus \
org.freedesktop.DBus GetNameOwner s org.freedesktop.StatusNotifierItem-103439-1
s ":1.127"
Reading a property through the well-known name succeeds:
$ busctl --user call org.freedesktop.StatusNotifierItem-103439-1 /StatusNotifierItem \
org.freedesktop.DBus.Properties Get ss org.kde.StatusNotifierItem Id
v s "Docker Desktop_status_icon_1"
Reading the same property through the unique name that owns it fails:
$ busctl --user call :1.127 /StatusNotifierItem \
org.freedesktop.DBus.Properties Get ss org.kde.StatusNotifierItem Id
Call failed: error occurred in Get
This affects every property, including Id and Menu, which the extension
treats as mandatory. Separately, IconPixmap fails even through the well-known
name, while the neighbouring OverlayIconPixmap and AttentionIconPixmap
correctly return an empty array — that inconsistency may be worth a look too:
$ busctl --user get-property org.freedesktop.StatusNotifierItem-103439-1 \
/StatusNotifierItem org.kde.StatusNotifierItem IconPixmap
Failed to get property IconPixmap on interface org.kde.StatusNotifierItem: error occurred in Get
$ busctl --user get-property org.freedesktop.StatusNotifierItem-103439-1 \
/StatusNotifierItem org.kde.StatusNotifierItem OverlayIconPixmap
a(iiay) 0
What the shell extension logs as a result:
gnome-shell[...]: While initalizing proxy for org.freedesktop.StatusNotifierItem-...-1:
Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.Failed: error occurred in Get
getProperty@.../ubuntu-appindicators@ubuntu.com/dbusProxy.js:89:33
refreshProperty@.../appIndicator.js:306:48
_checkNeededProperties@.../appIndicator.js:505:66
_setupProxy@.../appIndicator.js:431:24
_registerItem@.../statusNotifierWatcher.js:95:31
RegisterStatusNotifierItemAsync@.../statusNotifierWatcher.js:205:24
ubuntu-appindicators@ubuntu.com[...]: org.freedesktop.StatusNotifierItem-...-1,
Impossible to get basic properties: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error...
Docker Desktop's own log also recorded a failed registration attempt on an
earlier run, when the watcher was momentarily unavailable. Chromium calls
RegisterStatusNotifierItem once and never retries:
[2026-09-09T19:41:32Z] ERROR:dbus/object_proxy.cc:590] Failed to call method:
org.kde.StatusNotifierWatcher.RegisterStatusNotifierItem: object_path=/StatusNotifierWatcher:
org.freedesktop.DBus.Error.UnknownMethod: No such method "RegisterStatusNotifierItem"
Workaround
Patching the extension to skip the unique-name resolution makes the icon and its
menu appear immediately. In
/usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/statusNotifierWatcher.js,
inside RegisterStatusNotifierItemAsync, replacing
busName = await DBusUtils.getUniqueBusName(invocation.get_connection(),
service, this._cancellable);with
busName = service;resolves it. This is only a local workaround: it is overwritten by package
updates and it papers over the underlying behaviour rather than fixing it.
Suggested fix
Make the StatusNotifierItem object answer Properties.Get regardless of whether
the message destination is the well-known name or the unique connection name,
and return an empty array from IconPixmap when no pixmap is set, matching what
OverlayIconPixmap and AttentionIconPixmap already do. Retrying
RegisterStatusNotifierItem when the watcher appears later would also help, so
that a tray icon is not lost for the lifetime of the process when Docker Desktop
happens to start before the shell's watcher is ready.
Activity
LuisPicoES commentedon Sep 13, 2026
I can reproduce this on Ubuntu 24.04 with GNOME Shell 46.0 on X11.
Environment:
ubuntu-appindicators@ubuntu.com58-1ubuntu24.04.1The AppIndicator extension is enabled and the StatusNotifierWatcher is registered normally. Docker does create
org.freedesktop.StatusNotifierItem-<PID>-1, but it does not appear inRegisteredStatusNotifierItems.The symptom is exactly as described here: no Docker tray icon, with the three-dot placeholder appearing briefly on some launches.
I can also reproduce the
org.freedesktop.DBus.Error.Failed: error occurred in Getbehaviour when accessing/StatusNotifierItemthrough the unique bus name, while the same property access through the well-known name succeeds.Interestingly, ChatGPT's Electron-based tray icon works normally on the same system, so the AppIndicator host itself appears to be functioning.
This appears to be a useful reproduction on Ubuntu 24.04/GNOME 46/X11 in addition to the newer Ubuntu 26.04/Wayland reports.
0Ky commentedon Sep 14, 2026
Related to issue #661. It looks like an upstream problem that was suppose to be fixed in electron/electron#53215. Docker Desktop Version 4.91.0 (239619) is bundled with
Electron 43.4.0, the fix is in Electron v43.5.0.LuisPicoES commentedon Sep 22, 2026
Updated to Docker Desktop
v4.92.0. Issue is still there, so the underlying issue has not been resolved.0Ky commentedon Sep 22, 2026
@LuisPicoES The fix will come when Docker decides to update the bundled Electron to version ≥ 43.5.0. The updated Docker Desktop
v4.92.0is still shipping withChrome/150.0.7871.224 Electron/43.4.0, an old version of Electron that was released in 12 August, 2026.LuisPicoES commentedon Sep 23, 2026
@0Ky Yes, I guess that the fix will come when the developers bump the bundled Electron/Chrome. Interesting what they say here. I have been reading about this topic because it affects several apps (Docker, Obsidian, Goose, LM Studio(?)<---not entirely sure about this one, it's been broken for a long time), but not others (AnyDesk, Claude, ChatGPT or Livepatch).
<43.3.0(Claude Desktop, likely ChatGPT if it's on an older build) → unaffected, predates the bug43.3.0–43.4.x(Docker Desktop, Obsidian, likely Goose and LM Studio) → broken, caught in the regression window≥43.5.0or≥44.1.0→ fixed again, once apps update past ithaisher commentedon Sep 30, 2026
Hit this too, on Debian 13 (GNOME Shell 48.7, gnome-shell-extension-appindicator 59-4, Docker Desktop 4.93.0). Tray shows the three dots for a second, then the icon disappears. gnome-shell logs
error occurred in Getfrom appIndicator.js.I dug through the extension and there are actually two places where it trips over Electron, not one:
RegisterStatusNotifierItemresolves the well-known name to a unique name, and every property read after that fails. This is the one already described above.GetAllalso goes to the unique name owner (that's how GDBusProxy works for well-known names), so it fails silently. The extension setsStatustoPASSIVEbefore init and relies on thatGetAllto overwrite it. It never does, so the item is "ready" but permanently PASSIVE.IdandMenucome through because they get refreshed separately via the well-known name.Quick check that it's the unique-name thing:
Getonorg.freedesktop.StatusNotifierItem-<pid>-1works, same call on the:1.xxxname fails.Workaround that works for me (icon and menu both fine). Copy the extension to
~/.local/share/gnome-shell/extensions/so you don't touch the packaged one, then patch two files.statusNotifierWatcher.js:} else if (service.match(Util.BUS_ADDRESS_REGEX)) { - try { - busName = await Util.getUniqueBusName(invocation.get_connection(), - service, this._cancellable); - } catch (e) { - logError(e); - } + busName = service; objPath = DEFAULT_ITEM_OBJECT_PATH;appIndicator.js, in_setupProxy():Then log out and back in (Wayland needs it, and the shell caches the module, so toggling the extension isn't enough).
Not a proper fix, since it just works around Electron only answering on the well-known name. Whichever side ends up changing, I'd guess Docker Desktop's tray should answer on both names, like other SNI implementations do. Happy to test anything.