You are not logged in.
I use a pair of Sony MDR-7506 headphones. They work completely fine, and until now I've never gone further than enabling the Wireplumber user unit and calling it a day.
However, I'm now trying to make a script to change outputs. However, my headphones aren't showing up as devices (nodes).
This is the output of wpctl status:
PipeWire 'pipewire-0' [1.6.6, user@linux, cookie:665356246]
└─ Clients:
32. xdg-desktop-portal [1.6.6, user@linux, pid:841]
41. WirePlumber [1.6.6, user@linux, pid:8161]
51. WirePlumber [export] [1.6.6, user@linux, pid:8161]
57. xdg-desktop-portal-wlr [1.6.6, user@linux, pid:4850]
58. wpctl [1.6.6, user@linux, pid:8366]
Audio
├─ Devices:
│ 46. Built-in Audio [alsa]
│
├─ Sinks:
│ * 33. Built-in Audio Analog Stereo [vol: 0.40]
│
├─ Sources:
│ * 40. Built-in Audio Analog Stereo [vol: 1.00]
│
├─ Filters:
│
└─ Streams:
Video
├─ Devices:
│
├─ Sinks:
│
├─ Sources:
│
├─ Filters:
│
└─ Streams:
Settings
└─ Default Configured Devices:After plugging the headphones in, nothing changes:
[user@linux ~]$ wpctl status > before
[user@linux ~]$ # plug headphones in
[user@linux ~]$ wpctl status > after
[user@linux ~]$ diff before after
7c7
< 58. wpctl [1.6.6, user@linux, pid:8544]
---
> 58. wpctl [1.6.6, user@linux, pid:8558]pw-cli says much the same:
[user@linux ~]$ pw-cli ls Node
id 29, type PipeWire:Interface:Node/3
object.serial = "29"
factory.id = "11"
priority.driver = "200000"
node.name = "Dummy-Driver"
id 30, type PipeWire:Interface:Node/3
object.serial = "30"
factory.id = "11"
priority.driver = "190000"
node.name = "Freewheel-Driver"
id 33, type PipeWire:Interface:Node/3
object.serial = "99"
object.path = "alsa:acp:PCH:6:playback"
factory.id = "19"
client.id = "51"
device.id = "46"
priority.session = "1009"
priority.driver = "1009"
node.description = "Built-in Audio Analog Stereo"
node.name = "alsa_output.pci-0000_00_1f.3.analog-stereo"
node.nick = "ALC298 Analog"
media.class = "Audio/Sink"
id 40, type PipeWire:Interface:Node/3
object.serial = "100"
object.path = "alsa:acp:PCH:0:capture"
factory.id = "19"
client.id = "51"
device.id = "46"
priority.session = "2009"
priority.driver = "2009"
node.description = "Built-in Audio Analog Stereo"
node.name = "alsa_input.pci-0000_00_1f.3.analog-stereo"
node.nick = "ALC298 Analog"
media.class = "Audio/Source"
id 45, type PipeWire:Interface:Node/3
object.serial = "96"
factory.id = "14"
client.id = "51"
node.description = "BLE MIDI 1"
node.name = "bluez_midi.server"
media.class = "Midi/Bridge"
id 48, type PipeWire:Interface:Node/3
object.serial = "93"
factory.id = "11"
client.id = "51"
priority.session = "100"
priority.driver = "1"
node.name = "Midi-Bridge"
media.class = "Midi/Bridge"When there's audio playing through the headphones, however:
[user@linux ~]$ wpctl status
...
Audio
├─ Devices:
│ 46. Built-in Audio [alsa]
│
├─ Sinks:
│ * 33. Built-in Audio Analog Stereo [vol: 0.20]
│
├─ Sources:
│ * 40. Built-in Audio Analog Stereo [vol: 1.00]
│
├─ Filters:
│
└─ Streams:
59. Music Player Daemon
61. output_FL > ALC298 Analog:playback_FL [active]
63. output_FR > ALC298 Analog:playback_FR [active]
...I'm not sure where to go from here... I spent half an hour or so searching online but I couldn't find any similar cases.
The wireplumber unit complains about missing deps for bluetooth and camera capture, but I don't think it's relevant.
[user@linux ~]$ systemctl status --user wireplumber
● wireplumber.service - Multimedia Service Session Manager
Loaded: loaded (/usr/lib/systemd/user/wireplumber.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-05-29 11:09:37 BST; 17min ago
Invocation: 2434942d060b4a3182dfb6c414ca4250
Main PID: 8161 (wireplumber)
Tasks: 6 (limit: 19024)
Memory: 5.7M (peak: 6.6M)
CPU: 516ms
CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/wireplumber.service
└─8161 /usr/bin/wireplumber
May 29 11:09:37 linux systemd[682]: Started Multimedia Service Session Manager.
May 29 11:09:37 linux wireplumber[8161]: spa.bluez5: BlueZ system service is not available
May 29 11:09:37 linux wireplumber[8161]: wp-device: SPA handle 'api.libcamera.enum.manager' could not be loaded; is it installed?
May 29 11:09:37 linux wireplumber[8161]: s-monitors-libcamera: PipeWire's libcamera SPA plugin is missing or broken. Some camera types may not be sup>Offline
This is normally hard tied to the codec/the driver and needs to be adjusted on a kernel level if you really want proper separation here (the default behavior is that the hardware internally mutes the speakers once you plug headphones, without the upper layers having a way to notice this). You might have a direct control option (check/post amixer -c0 , or whatever the actual card index is you see in aplay -l) in the likely event that this isn't the case, you need to enable some codec hints.
Assuming this to be the case, use https://bbs.archlinux.org/viewtopic.php … 1#p2008741 and the rest of that thread as a starting point, but if you have any questions to the procedure described there, please ask them here not there, to not dig out a solved thread.
Last edited by V1del (2026-05-29 15:39:42)
Offline
Here's the output of that command.
[user@linux ~]$ amixer -c0
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 127
Mono: Playback 44 [35%] [-41.50dB] [on]
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 127 [100%] [0.00dB] [on]
Front Right: Playback 127 [100%] [0.00dB] [on]
Simple mixer control 'Headphone',1
Capabilities: pswitch
Playback channels: Front Left - Front Right
Mono:
Front Left: Playback [on]
Front Right: Playback [on]
Simple mixer control 'Speaker',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 0 [0%] [-63.50dB] [off]
Front Right: Playback 0 [0%] [-63.50dB] [off]
Simple mixer control 'PCM',0
Capabilities: pvolume
Playback channels: Front Left - Front Right
Limits: Playback 0 - 255
Mono:
Front Left: Playback 255 [100%] [0.00dB]
Front Right: Playback 255 [100%] [0.00dB]
Simple mixer control 'Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'IEC958',1
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',2
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch
Capture channels: Front Left - Front Right
Limits: Capture 0 - 127
Front Left: Capture 127 [100%] [30.00dB] [on]
Front Right: Capture 127 [100%] [30.00dB] [on]
Simple mixer control 'Auto-Mute Mode',0
Capabilities: enum
Items: 'Disabled' 'Enabled'
Item0: 'Disabled'
Simple mixer control 'Dock Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
Simple mixer control 'Internal Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 3 [100%] [30.00dB]
Front Right: 3 [100%] [30.00dB]It seems strange to me that Pipewire doesn't have a builtin way to switch between outputs manually, but what do I know.
I think this will take some time for me to understand, and I probably will have questions soon.
Offline
by default you have one audio output device with multiple different outputs (ports). the sink basically chooses only the audio device. you have to change the port of that sink.
If you just want to globally switch all sound between headphones and speakers, that should be no problem. The easiest way would be to use pactl from libpulse
pactl list sinks
pactl set-sink-port @DEFAULT_SINK@ analog-output-speaker
pactl set-sink-port @DEFAULT_SINK@ analog-output-headphonesIf you want to send different audio to both, it may be more difficult.
Last edited by progandy (2026-05-29 18:56:59)
| alias CUTF='LANG=en_XX.UTF-8@POSIX ' | alias ENGLISH='LANG=C.UTF-8 ' |
Offline
So I've made some progress. I enabled indep_hp, and set the profile to Pro Audio. Now the headphones do show up as a sink in the output of [bold]wpctl status[/bold], however the sink for the builtin speakers is gone, so only the headphones can play audio.
Audio
├─ Devices:
│ 42. Built-in Audio [alsa]
│
├─ Sinks:
│ 69. Built-in Audio Pro 3 [vol: 1.00]
│ 122. Built-in Audio Pro 7 [vol: 1.00]
│ * 126. Built-in Audio Pro [vol: 1.35]
│ 154. Built-in Audio Pro 8 [vol: 1.00]
│
├─ Sources:
│ * 123. Built-in Audio Pro [vol: 1.00]
│
├─ Filters:
│
└─ Streams:
58. Music Player Daemon
60. output_FL > ALC298 Analog:playback_AUX0 [init]
176. output_FR > PulseAudio Volume Control:input_FR [init]Offline
@progandy switching globally is indeed what I'm trying to do.
When using pactl, the sink port analog-output-speaker isn't outputting sound when the headphones are plugged in, regardless of when using indep_hp and Pro Audio profile or not.
This is a lot more involved that I thought it'd be.
Offline
I'm gonna have to give up on this now, it's taking too much time to work out.
I can't get the sinks for both the headphones and the internal speakers to show up at once, for all my trying.
I also tried a different approach I found when searching online, which was following this (https://github.com/luisbocanegra/linux- … udio-ports) guide to step #2, which had both speaker and headphone ports, but would only send audio through the headphones no matter what.
Offline