https://bugs.kde.org/show_bug.cgi?id=522895

            Bug ID: 522895
           Summary: Duplicate "Chrome is using your microphone" systray
                    entries accumulate per capture session; disabled state
                    doesn't generalize to new entries
    Classification: Plasma
           Product: plasmashell
      Version First 6.7.2
       Reported In:
          Platform: Other
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: System Tray widget
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]
  Target Milestone: 1.0

Created attachment 194173
  --> https://bugs.kde.org/attachment.cgi?id=194173&action=edit
image1

# Bug Report: Duplicate "Google Chrome is using your microphone" System Tray
entries accumulate indefinitely, disabled state does not generalize to new
instances

**Suggested Product:** plasmashell
**Suggested Component:** System Tray
**Platform:** Fedora 44 (RPM), KDE Plasma 6, Wayland session

---

## Summary

Every time Chrome starts a new microphone capture session (in this case
triggered repeatedly by the "Voice In - Speech-To-Text Dictation" extension,
v4.42), a **new, separate** "Google Chrome is using your microphone." entry is
created in the System Tray, instead of the existing entry being reused/toggled.
These entries are never removed when the capture session ends — only when
Chrome's process is fully closed do all of them disappear at once.

Additionally, manually setting these duplicate entries to **"Never show
(disabled)"** in System Tray Settings does **not** generalize to future capture
sessions. The disabled state appears to be tied to a specific entry/slot rather
than to the application+notification identity as a whole:

- If N entries currently exist and are all set to "Never show (disabled),"
clicking the mic again up to N more times reuses/respects those disabled slots
(no new visible icon).
- Clicking beyond that count creates additional **new** entries, which default
back to "Show when relevant" (visible) rather than inheriting the disabled
preference.
- Closing Chrome clears all entries (visible and disabled) from the list
entirely — they are not persisted as a standing rule for "Chrome mic capture"
going forward.

## Environment

- OS: Fedora 44
- Desktop: KDE Plasma 6, Wayland
- Browser: Google Chrome (RPM package)
- Trigger: "Voice In - Speech-To-Text Dictation" Chrome extension, v4.42,
repeatedly starting/stopping mic capture via `getUserMedia` in the same
tab/page

## Steps to Reproduce

1. Open Chrome, load a page with the Voice In extension active.
2. Click the extension's microphone toggle to start dictation, then click again
to stop. Repeat this several times in the same session (no page reload, no tab
close).
3. Observe System Tray: each click cycle adds a **new** "Google Chrome is using
your microphone." entry, rather than one entry toggling active/inactive.
4. Open System Tray Settings → Entries. Confirm entry count matches icon count
exactly.
5. Set all current entries to "Never show (disabled)" and Apply.
6. Close Chrome entirely. All entries (including the disabled ones) disappear
from the Entries list.
7. Reopen Chrome, click the mic 2 times. 2 new entries appear, but with **no
visible tray icon** — i.e., they silently inherited "Never show (disabled)."
8. Continue clicking the mic beyond the number of previously-disabled slots (in
testing, beyond ~20 total clicks). New entries beyond that count appear
**visibly** in the tray, defaulting to "Show when relevant" again.

## Expected Behavior

- A single microphone-in-use indicator per browser (or at most per active
capturing tab/origin) that toggles visibility based on live capture state,
matching the actual audio stream lifecycle.
- If a user disables a given notification-type entry, that preference should
persist and apply to all future instances of the same notification identity —
not be capped at a fixed number of remembered slots.

## Actual Behavior

- A new tray entry is created per capture session start and never cleaned up
until the browser process exits.
- "Never show (disabled)" preference is retained only up to the number of
entries that existed when it was applied; additional capture sessions beyond
that count produce new entries with default (visible) settings.

## Diagnostics Already Performed

1. **Ruled out a real PipeWire/PulseAudio stream leak.**
   ```
   pactl list short source-outputs
   ```
   Confirmed exactly one active source-output while the mic is actively
capturing (red), and zero when idle — the underlying audio stream is properly
opened/closed each time. The duplication is purely a tray/indicator-layer
issue, not an audio-stack leak.

2. **Ruled out a D-Bus StatusNotifierItem registration leak.**
   ```
   busctl --user list | grep -i notifier
   ```
   Showed only the expected single `org.kde.StatusNotifierWatcher` and
`org.kde.StatusNotifierHost-<pid>` entries — no accumulation of orphaned SNI
registrations was visible on the session bus at the time of inspection.

3. **Checked plasmashell logs for errors during reproduction.**
   ```
   kquitapp6 plasmashell
   plasmashell --replace &
   ```
   No warnings or errors were logged in relation to microphone/systemtray/audio
around the moment new duplicate icons appeared.

4. Confirmed via System Tray Settings → Entries that the entry count in the
config UI exactly matches the number of visible/hidden tray icons, and that all
duplicate entries share the identical label "Google Chrome is using your
microphone." — i.e., Chrome (or the systemtray host) is not deduplicating by
label/app identity when creating new entries.

## Hypothesis / Related Reports

Chrome's Linux mic-capture tray icon is historically implemented via
`libappindicator`, which is known to register tray icons through both the
legacy XEmbed protocol and the modern StatusNotifierItem (SNI) protocol
simultaneously. Other desktop environments have documented duplicate-icon bugs
from this same dual-registration behavior with Chromium/Electron apps (see,
e.g., linuxdeepin/dde-dock issue tracker discussions of duplicate tray icons
from libappindicator-based apps). It's possible Plasma's systemtray applet has
a related dedup/lifecycle gap specifically when handling this class of
app-notification icon, compounded by the "Never show" preference being stored
per discrete entry ID rather than per notification identity.

No existing bugs.kde.org report matching this exact combination (repeated
duplicate creation + capped/non-generalizing "Never show" preference) was found
as of this report (searched July 2026).

## Attachments to include when filing

- Screenshot of System Tray Settings showing 2+ identical "Google Chrome is
using your microphone." entries.
- Screenshot of the 1-item context menu ("Voice In - Speech-To-Text Dictation")
that appears when clicking one of the duplicate mic icons, which does nothing
when clicked.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to