| Summary: | Plasma Audio UI ignores PipeWire/WirePlumber custom device names for internal audio | ||
|---|---|---|---|
| Product: | [Plasma] plasmashell | Reporter: | MisterE <edwin> |
| Component: | Audio Volume widget | Assignee: | 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: | |||
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? 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. 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
|
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