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
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.
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
/StatusNotifierItemanswers aorg.freedesktop.DBus.Properties.Getcall only when the message destination isthe well-known name
org.freedesktop.StatusNotifierItem-<pid>-1. When the sameobject is addressed by the unique connection name that currently owns that
well-known name, every
Getfails withorg.freedesktop.DBus.Error.Failed: error occurred in Get.GNOME's
ubuntu-appindicatorsextension resolves the well-known name to theunique 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
ubuntu-appindicators@ubuntu.com, packagegnome-shell-ubuntu-extensions 50.26.04.7ubuntuThe same behaviour was present on this machine before the OS upgrade, under
Ubuntu 24.04.5 with GNOME Shell 46.
Steps to reproduce
ubuntu-appindicatorsextension enabled.
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:
Reading a property through the well-known name succeeds:
Reading the same property through the unique name that owns it fails:
This affects every property, including
IdandMenu, which the extensiontreats as mandatory. Separately,
IconPixmapfails even through the well-knownname, while the neighbouring
OverlayIconPixmapandAttentionIconPixmapcorrectly return an empty array — that inconsistency may be worth a look too:
What the shell extension logs as a result:
Docker Desktop's own log also recorded a failed registration attempt on an
earlier run, when the watcher was momentarily unavailable. Chromium calls
RegisterStatusNotifierItemonce and never retries: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, replacingwith
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.Getregardless of whetherthe message destination is the well-known name or the unique connection name,
and return an empty array from
IconPixmapwhen no pixmap is set, matching whatOverlayIconPixmapandAttentionIconPixmapalready do. RetryingRegisterStatusNotifierItemwhen the watcher appears later would also help, sothat 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.