Bug 515833

Summary: Plasma Audio UI ignores PipeWire/WirePlumber custom device names for internal audio
Product: [Plasma] plasmashell Reporter: MisterE <edwin>
Component: Audio Volume widgetAssignee: Plasma Bugs List <plasma-bugs-null>
Status: NEEDSINFO WAITINGFORINFO    
Severity: wishlist CC: akselmo, isma.af
Priority: NOR    
Version First Reported In: master   
Target Milestone: 1.0   
Platform: openSUSE   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description MisterE 2026-02-10 19:07:02 UTC
SUMMARY

KDE Plasma’s Audio UI (Audio Volume widget / plasmashell audio integration) overrides audio device names provided by PipeWire/WirePlumber for certain devices, most notably internal speakers and microphones.

Even when node.description and node.nick are explicitly set via WirePlumber rules, Plasma continues to display hardcoded labels such as “Speakers” and “Internal Microphone”.

This makes it impossible for users to fully control how their audio devices are named.
In practice, device names change depending on whether an external dock is connected. If a user wants consistent device names in both docked and undocked situations, the only available option is to accept Plasma’s hardcoded “Speakers” label.

STEPS TO REPRODUCE
1. Not docked
2. Sink in KDE tray is called "Speakers"
3. Dock
4. Sinks are called "Laptop Speakers (description)" and "ThinkPad Thunderbolt 3 Dock USB Audio Analog Stereo"



OBSERVED RESULT
Hardcoded "Speakers" in undocked situation



EXPECTED RESULT
Custom text (in this case "Laptop Speakers (description)") in undocked situation.



SOFTWARE/OS VERSIONS

Operating System: openSUSE Leap 16.0
KDE Plasma Version: 6.4.2
KDE Frameworks Version: 6.16.0
Qt Version: 6.9.1
Kernel Version: 6.12.0-160000.9-default (64-bit)
Graphics Platform: Wayland
Processors: 8 × Intel® Core™ i5-8250U CPU @ 1.60GHz
Memory: 16 GiB of RAM (15.5 GiB usable)
Graphics Processor: Mesa Intel® UHD Graphics 620





ADDITIONAL INFORMATION

I created a wireplumber config to create uniform names between docked and undocked mode. 


monitor.alsa.rules = [
  {
    matches = [
      {
        node.name = "alsa_output.pci-0000_00_1f.3.analog-stereo"
      }
    ]
    actions = {
      update-props = {
        node.description = "Laptop Speakers (description)"
        node.nick = "Speakers (nick)"
      }
    }
  },
  {
    matches = [
      {
        node.name = "alsa_input.pci-0000_00_1f.3.analog-stereo"
      }
    ]
    actions = {
      update-props = {
        node.description = "Internal Microphone (description)"
        node.nick = "Microphone (nick)"
      }
    }
  }
]





PipeWire/WirePlumber already populate the following properties by default:
  node.name
  node.description
  node.nick

Because these properties are always set, Plasma currently cannot distinguish between:

  backend-generated values
  user-managed overrides

This likely explains why Plasma enforces hardcoded labels such as “Speakers”.



Possible solutions

Provide a user-configurable option in Plasma to control naming policy, for example:

  Default (current behavior)
  Prefer node.description
  Prefer node.nick
Comment 1 Akseli Lahtinen 2026-02-11 09:46:35 UTC
You can rename devices in the audio settings. Go to System Settings -> Sound. There in header is a button "Rename devices"

Can you press that, rename the devices as you want it to be, and see if that fixes your issue? Or does the hardcoded name still appear?
Comment 2 MisterE 2026-02-11 19:14:05 UTC
Basically, this does the same thing as when I configure it manually using my WirePlumber config files. KDE creates ~/.config/wireplumber/wireplumber.conf.d/00-plasma-pa.conf and produces the same result.

It’s not the biggest issue in the world, but I would prefer to have control over the file name.

I’m still experimenting with WirePlumber, and I’ve also noticed that the tray name changes to “Headphones” when I plug in my analog 3.5mm jack. It’s not yet clear to me how that mechanism works internally.
Comment 3 MisterE 2026-02-11 20:01:25 UTC
Maybe these are not hardcoded strings in KDE, but it uses the port names underneath ("Speakers" and "Headphones").

These seem to correspond to:
                analog-output-speaker: Speakers (type: Speaker, priority: 10000, availability group: Legacy 3, not available)
                analog-output-headphones: Headphones (type: Headphones, priority: 9900, availability group: Legacy 4, available)

See the full output below.
It is unclear to me whether this can be customized in Wireplumber. The following ticket does not give me much hope:
https://github.com/i3/i3status/pull/505

One possible option would be to provide a setting to never use port names.

pactl list sinks
Sink #486
        State: SUSPENDED
        Name: alsa_output.pci-0000_00_1f.3.analog-stereo
        Description: Built-in Audio Analog Stereo
        Driver: PipeWire
        Sample Specification: s32le 2ch 48000Hz
        Channel Map: front-left,front-right
        Owner Module: 4294967295
        Mute: no
        Volume: front-left: 23593 /  36% / -26.62 dB,   front-right: 23593 /  36% / -26.62 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor Source: alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
        Latency: 0 usec, configured 0 usec
        Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY 
        Properties:
                alsa.card = "0"
                alsa.card_name = "HDA Intel PCH"
                alsa.class = "generic"
                alsa.components = "HDA:10ec0257,17aa225a,00100001 HDA:8086280b,80860101,00100000"
                alsa.device = "0"
                alsa.driver_name = "snd_hda_intel"
                alsa.id = "ALC257 Analog"
                alsa.long_card_name = "HDA Intel PCH at 0xe8248000 irq 172"
                alsa.mixer_name = "Realtek ALC257"
                alsa.name = "ALC257 Analog"
                alsa.resolution_bits = "16"
                alsa.subclass = "generic-mix"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.sync.id = "00000000:00000000:00000000:00000000"
                api.alsa.card.longname = "HDA Intel PCH at 0xe8248000 irq 172"
                api.alsa.card.name = "HDA Intel PCH"
                api.alsa.path = "front:0"
                api.alsa.pcm.card = "0"
                api.alsa.pcm.stream = "playback"
                audio.channels = "2"
                audio.position = "FL,FR"
                card.profile.device = "6"
                device.api = "alsa"
                device.class = "sound"
                device.icon_name = "audio-card-analog"
                device.id = "58"
                device.profile.description = "Analog Stereo"
                device.profile.name = "analog-stereo"
                device.routes = "2"
                factory.name = "api.alsa.pcm.sink"
                media.class = "Audio/Sink"
                device.description = "Built-in Audio"
                node.name = "alsa_output.pci-0000_00_1f.3.analog-stereo"
                node.nick = "ALC257 Analog"
                node.pause-on-idle = "false"
                object.path = "alsa:acp:PCH:6:playback"
                port.group = "playback"
                priority.driver = "1009"
                priority.session = "1009"
                factory.id = "19"
                clock.quantum-limit = "8192"
                client.id = "60"
                node.driver = "true"
                node.loop.name = "data-loop.0"
                library.name = "audioconvert/libspa-audioconvert"
                object.id = "48"
                object.serial = "486"
                api.acp.auto-port = "false"
                api.acp.auto-profile = "false"
                api.alsa.card = "0"
                api.alsa.split-enable = "true"
                api.alsa.use-acp = "true"
                api.dbus.ReserveDevice1 = "Audio0"
                api.dbus.ReserveDevice1.Priority = "-20"
                device.bus = "pci"
                device.bus_path = "pci-0000:00:1f.3"
                device.enum.api = "udev"
                device.form_factor = "internal"
                device.name = "alsa_card.pci-0000_00_1f.3"
                device.nick = "HDA Intel PCH"
                device.plugged.usec = "10231148"
                device.product.id = "0x9d71"
                device.product.name = "Sunrise Point-LP HD Audio"
                device.subsystem = "sound"
                sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
                device.vendor.id = "0x8086"
                device.vendor.name = "Intel Corporation"
                spa.object.id = "2"
                device.string = "0"
        Ports:
                analog-output-speaker: Speakers (type: Speaker, priority: 10000, availability group: Legacy 3, not available)
                analog-output-headphones: Headphones (type: Headphones, priority: 9900, availability group: Legacy 4, available)
        Active Port: analog-output-headphones
        Formats:
                pcm