You are not logged in.

#1 2026-02-08 00:48:51

satellitesahara
Member
Registered: 2026-01-24
Posts: 9

Pipewire not switching automatically between headphones and speaker

Basically what it says in the subject. I need to open the sound settings panel (I'm using Cinnamon DE) every time I plug or unplug my headphones to manually switch the profile. I consulted the wiki and followed the advice given here:

https://wiki.archlinux.org/title/PipeWi … new_device

I restarted the pipewire-pulse service and used pactl list modules to confirm the module-switch-on-connect module was loaded, but this did not fix the issue

I can provide any console output needed about my system information and would greatly appreciate any help to get this behavior working as expected

Last edited by satellitesahara (2026-02-08 00:50:06)

Offline

#2 2026-02-09 21:28:16

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 25,037

Re: Pipewire not switching automatically between headphones and speaker

Which kind of headphones? The module-switch-on-connect usually only works if whatever you're plugging in is considered a distinct card (spawns a new card in aplay -l/pactl list cards for example) if it's a simple jack, it might be misconfigured in the driver (amixer -c0 to check for example, or whatever the correct card index is) if you're lucky it's a toggle there if unlucky you might have to play around with some model settings.

First things first, what do you get from

aplay -lL
amixer -c0 #or whatever the correct card
pactl list cards
pactl list sinks

post that wrapped in  [code][/code] tags.

Offline

#3 2026-02-10 19:36:08

satellitesahara
Member
Registered: 2026-01-24
Posts: 9

Re: Pipewire not switching automatically between headphones and speaker

It does appear that the headphones are not registered as a separate sound card. There's only one sound card in my system. Here's the output of the commands you asked for:

aplay -lL:

null
    Discard all samples (playback) or generate zero samples (capture)
pipewire
    PipeWire Sound Server
default:CARD=sofhdadsp
    sof-hda-dsp, 
    Default Audio Device
sysdefault:CARD=sofhdadsp
    sof-hda-dsp, 
    Default Audio Device
hdmi:CARD=sofhdadsp,DEV=0
    sof-hda-dsp, 
    HDMI Audio Output
hdmi:CARD=sofhdadsp,DEV=1
    sof-hda-dsp, 
    HDMI Audio Output
hdmi:CARD=sofhdadsp,DEV=2
    sof-hda-dsp, 
    HDMI Audio Output
**** List of PLAYBACK Hardware Devices ****
card 0: sofhdadsp [sof-hda-dsp], device 0: HDA Analog (*) []
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 3: HDMI1 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 4: HDMI2 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 5: HDMI3 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 31: Deepbuffer HDA Analog (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

amixer -c0

Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 87
  Mono: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 87
  Mono:
  Front Left: Playback 80 [92%] [-5.25dB] [off]
  Front Right: Playback 80 [92%] [-5.25dB] [off]
Simple mixer control 'Speaker',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 87
  Mono:
  Front Left: Playback 73 [84%] [-10.50dB] [on]
  Front Right: Playback 73 [84%] [-10.50dB] [on]
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 [on]
Simple mixer control 'IEC958',1
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'IEC958',2
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 63
  Front Left: Capture 38 [60%] [11.25dB] [off]
  Front Right: Capture 38 [60%] [11.25dB] [off]
Simple mixer control 'Auto-Mute Mode',0
  Capabilities: enum
  Items: 'Disabled' 'Enabled'
  Item0: 'Disabled'
Simple mixer control 'Dmic0',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right - Rear Left - Rear Right
  Limits: Capture 0 - 45
  Front Left: Capture 45 [100%] [0.00dB] [off]
  Front Right: Capture 45 [100%] [0.00dB] [off]
  Rear Left: Capture 45 [100%] [0.00dB] [off]
  Rear Right: Capture 45 [100%] [0.00dB] [off]
Simple mixer control 'Dmic0 Capture DRC switch',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Dmic0 Capture TDFB angle set enum',0
  Capabilities: enum
  Items: '-90' '-75' '-60' '-45' '-30' '-15' '0' '15' '30' '45' '60' '75' '90'
  Item0: '0'
Simple mixer control 'Dmic0 Capture TDFB beam switch',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Post Mixer Analog',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 45
  Mono:
  Front Left: Playback 45 [100%] [0.00dB]
  Front Right: Playback 45 [100%] [0.00dB]
Simple mixer control 'Post Mixer Analog Playback DRC switch',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Pre Mixer Analog',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 45
  Mono:
  Front Left: Playback 45 [100%] [0.00dB]
  Front Right: Playback 45 [100%] [0.00dB]
Simple mixer control 'Pre Mixer Deepbuffer HDA Analog',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 45
  Front Left: 45 [100%] [0.00dB]
  Front Right: 45 [100%] [0.00dB]

pactl list cards

Card #48
	Name: alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic
	Driver: alsa
	Owner Module: n/a
	Properties:
		device.enum.api = "udev"
		device.api = "alsa"
		media.class = "Audio/Device"
		api.alsa.path = "hw:0"
		api.alsa.card = "0"
		api.alsa.card.name = "sof-hda-dsp"
		api.alsa.card.longname = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		device.plugged.usec = "6115223403"
		device.bus_path = "pci-0000:00:1f.3-platform-skl_hda_dsp_generic"
		sysfs.path = "/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0"
		device.bus = "pci"
		device.subsystem = "sound"
		device.vendor.id = "0x8086"
		device.vendor.name = "Intel Corporation"
		device.product.id = "0x7e28"
		device.product.name = "Meteor Lake-P HD Audio Controller"
		device.name = "alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic"
		device.description = "Meteor Lake-P HD Audio Controller"
		device.nick = "sof-hda-dsp"
		device.icon_name = "audio-card-analog-pci"
		api.alsa.use-acp = "true"
		api.acp.auto-profile = "false"
		api.acp.auto-port = "false"
		api.dbus.ReserveDevice1.Priority = "-20"
		api.alsa.split-enable = "true"
		api.dbus.ReserveDevice1 = "Audio0"
		spa.object.id = "2"
		factory.id = "15"
		client.id = "47"
		object.id = "48"
		object.serial = "48"
		object.path = "alsa:acp:sofhdadsp"
		alsa.card = "0"
		alsa.card_name = "sof-hda-dsp"
		alsa.long_card_name = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		alsa.driver_name = "snd_soc_skl_hda_dsp"
		alsa.mixer_name = "Realtek ALC287"
		alsa.components = "HDA:8086281d,80860101,00100000 HDA:10ec0287,17aa38dc,00100002 cfg-dmics:2 iec61937-pcm:5,4,3"
		alsa.id = "sofhdadsp"
		device.string = "0"
	Profiles:
		off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
		HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2): Play HiFi quality Music (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2) (sinks: 4, sources: 2, priority: 10300, available: yes)
		HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker): Play HiFi quality Music (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker) (sinks: 4, sources: 2, priority: 10200, available: yes)
		pro-audio: Pro Audio (sinks: 5, sources: 2, priority: 1, available: yes)
	Active Profile: HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker)
	Ports:
		[Out] HDMI3: HDMI / DisplayPort 3 Output (type: HDMI, priority: 700, latency offset: 0 usec, availability group: HDMI/DP,pcm=5, not available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "HDMI/DP,pcm=5"
				device.icon_name = "video-display"
				card.profile.port = "0"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker), HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)
		[Out] HDMI2: HDMI / DisplayPort 2 Output (type: HDMI, priority: 600, latency offset: 0 usec, availability group: HDMI/DP,pcm=4, not available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "HDMI/DP,pcm=4"
				device.icon_name = "video-display"
				card.profile.port = "1"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker), HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)
		[Out] HDMI1: HDMI / DisplayPort 1 Output (type: HDMI, priority: 500, latency offset: 0 usec, availability group: HDMI/DP,pcm=3, available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "HDMI/DP,pcm=3"
				device.icon_name = "video-display"
				card.profile.port = "2"
				device.product.name = "DELL U2419H"
				iec958.codecs.detected = "[\"PCM\"]"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker), HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)
		[Out] Speaker: Speaker (type: Speaker, priority: 100, latency offset: 0 usec, availability unknown)
			Properties:
				port.type = "speaker"
				device.icon_name = "audio-speakers"
				card.profile.port = "3"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker)
		[In] Mic2: Stereo Microphone (type: Mic, priority: 200, latency offset: 0 usec, availability group: Mic, not available)
			Properties:
				port.type = "mic"
				port.availability-group = "Mic"
				device.icon_name = "audio-input-microphone"
				card.profile.port = "4"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker), HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)
		[In] Mic1: Digital Microphone (type: Mic, priority: 100, latency offset: 0 usec, availability unknown)
			Properties:
				port.type = "mic"
				device.icon_name = "audio-input-microphone"
				card.profile.port = "5"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker), HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)
		[Out] Headphones: Headphones (type: Headphones, priority: 200, latency offset: 0 usec, availability group: Headphone, available)
			Properties:
				port.type = "headphones"
				port.availability-group = "Headphone"
				device.icon_name = "audio-headphones"
				card.profile.port = "6"
			Part of profile(s): HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)

pactl list sinks

Sink #59
	State: SUSPENDED
	Name: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI3__sink
	Description: Meteor Lake-P HD Audio Controller HDMI / DisplayPort 3 Output
	Driver: PipeWire
	Sample Specification: s32le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 4294967295
	Mute: no
	Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
	        balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor Source: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI3__sink.monitor
	Latency: 0 usec, configured 0 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY 
	Properties:
		object.path = "alsa:acp:sofhdadsp:0:playback"
		api.alsa.path = "hw:sofhdadsp,5"
		api.alsa.open.ucm = "true"
		api.alsa.pcm.card = "0"
		api.alsa.pcm.stream = "playback"
		port.group = "playback"
		device.icon_name = "video-display"
		device.bus = "pci"
		audio.channels = "2"
		audio.position = "FL,FR"
		device.routes = "1"
		alsa.mixer_device = "_ucm0001.hw:sofhdadsp"
		alsa.resolution_bits = "16"
		alsa.card = "0"
		alsa.card_name = "sof-hda-dsp"
		alsa.long_card_name = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		alsa.driver_name = "snd_soc_skl_hda_dsp"
		alsa.mixer_name = "Realtek ALC287"
		alsa.components = "HDA:8086281d,80860101,00100000 HDA:10ec0287,17aa38dc,00100002 cfg-dmics:2 iec61937-pcm:5,4,3"
		alsa.id = "sofhdadsp"
		device.api = "alsa"
		device.class = "sound"
		alsa.class = "generic"
		alsa.subclass = "generic-mix"
		alsa.name = ""
		alsa.subdevice = "0"
		alsa.subdevice_name = "subdevice #0"
		alsa.device = "5"
		alsa.sync.id = "00000000:00000000:00000000:00000000"
		device.profile.name = "HiFi: HDMI3: sink"
		device.profile.description = "HDMI / DisplayPort 3 Output"
		card.profile.device = "0"
		device.id = "48"
		factory.name = "api.alsa.pcm.sink"
		node.pause-on-idle = "false"
		priority.driver = "664"
		priority.session = "664"
		media.class = "Audio/Sink"
		node.name = "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI3__sink"
		node.nick = "HDMI / DisplayPort 3 Output"
		device.description = "Meteor Lake-P HD Audio Controller"
		api.alsa.card.name = "sof-hda-dsp"
		api.alsa.card.longname = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		factory.id = "19"
		clock.quantum-limit = "8192"
		client.id = "47"
		node.driver = "true"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		object.id = "59"
		object.serial = "59"
		device.enum.api = "udev"
		api.alsa.card = "0"
		device.plugged.usec = "6115223403"
		device.bus_path = "pci-0000:00:1f.3-platform-skl_hda_dsp_generic"
		sysfs.path = "/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0"
		device.subsystem = "sound"
		device.vendor.id = "0x8086"
		device.vendor.name = "Intel Corporation"
		device.product.id = "0x7e28"
		device.product.name = "Meteor Lake-P HD Audio Controller"
		device.name = "alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic"
		device.nick = "sof-hda-dsp"
		api.alsa.use-acp = "true"
		api.acp.auto-profile = "false"
		api.acp.auto-port = "false"
		api.dbus.ReserveDevice1.Priority = "-20"
		api.alsa.split-enable = "true"
		api.dbus.ReserveDevice1 = "Audio0"
		spa.object.id = "2"
		device.string = "0"
	Ports:
		[Out] HDMI3: HDMI / DisplayPort 3 Output (type: HDMI, priority: 700, availability group: HDMI/DP,pcm=5, not available)
	Active Port: [Out] HDMI3
	Formats:
		pcm

Sink #60
	State: SUSPENDED
	Name: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI2__sink
	Description: Meteor Lake-P HD Audio Controller HDMI / DisplayPort 2 Output
	Driver: PipeWire
	Sample Specification: s32le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 4294967295
	Mute: no
	Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
	        balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor Source: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI2__sink.monitor
	Latency: 0 usec, configured 0 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY 
	Properties:
		object.path = "alsa:acp:sofhdadsp:1:playback"
		api.alsa.path = "hw:sofhdadsp,4"
		api.alsa.open.ucm = "true"
		api.alsa.pcm.card = "0"
		api.alsa.pcm.stream = "playback"
		port.group = "playback"
		device.icon_name = "video-display"
		device.bus = "pci"
		audio.channels = "2"
		audio.position = "FL,FR"
		device.routes = "1"
		alsa.mixer_device = "_ucm0001.hw:sofhdadsp"
		alsa.resolution_bits = "16"
		alsa.card = "0"
		alsa.card_name = "sof-hda-dsp"
		alsa.long_card_name = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		alsa.driver_name = "snd_soc_skl_hda_dsp"
		alsa.mixer_name = "Realtek ALC287"
		alsa.components = "HDA:8086281d,80860101,00100000 HDA:10ec0287,17aa38dc,00100002 cfg-dmics:2 iec61937-pcm:5,4,3"
		alsa.id = "sofhdadsp"
		device.api = "alsa"
		device.class = "sound"
		alsa.class = "generic"
		alsa.subclass = "generic-mix"
		alsa.name = ""
		alsa.subdevice = "0"
		alsa.subdevice_name = "subdevice #0"
		alsa.device = "4"
		alsa.sync.id = "00000000:00000000:00000000:00000000"
		device.profile.name = "HiFi: HDMI2: sink"
		device.profile.description = "HDMI / DisplayPort 2 Output"
		card.profile.device = "1"
		device.id = "48"
		factory.name = "api.alsa.pcm.sink"
		node.pause-on-idle = "false"
		priority.driver = "680"
		priority.session = "680"
		media.class = "Audio/Sink"
		node.name = "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI2__sink"
		node.nick = "HDMI / DisplayPort 2 Output"
		device.description = "Meteor Lake-P HD Audio Controller"
		api.alsa.card.name = "sof-hda-dsp"
		api.alsa.card.longname = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		factory.id = "19"
		clock.quantum-limit = "8192"
		client.id = "47"
		node.driver = "true"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		object.id = "60"
		object.serial = "60"
		device.enum.api = "udev"
		api.alsa.card = "0"
		device.plugged.usec = "6115223403"
		device.bus_path = "pci-0000:00:1f.3-platform-skl_hda_dsp_generic"
		sysfs.path = "/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0"
		device.subsystem = "sound"
		device.vendor.id = "0x8086"
		device.vendor.name = "Intel Corporation"
		device.product.id = "0x7e28"
		device.product.name = "Meteor Lake-P HD Audio Controller"
		device.name = "alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic"
		device.nick = "sof-hda-dsp"
		api.alsa.use-acp = "true"
		api.acp.auto-profile = "false"
		api.acp.auto-port = "false"
		api.dbus.ReserveDevice1.Priority = "-20"
		api.alsa.split-enable = "true"
		api.dbus.ReserveDevice1 = "Audio0"
		spa.object.id = "2"
		device.string = "0"
	Ports:
		[Out] HDMI2: HDMI / DisplayPort 2 Output (type: HDMI, priority: 600, availability group: HDMI/DP,pcm=4, not available)
	Active Port: [Out] HDMI2
	Formats:
		pcm

Sink #61
	State: SUSPENDED
	Name: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI1__sink
	Description: Meteor Lake-P HD Audio Controller HDMI / DisplayPort 1 Output
	Driver: PipeWire
	Sample Specification: s32le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 4294967295
	Mute: no
	Volume: front-left: 26214 /  40% / -23.88 dB,   front-right: 26214 /  40% / -23.88 dB
	        balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor Source: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI1__sink.monitor
	Latency: 0 usec, configured 0 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY 
	Properties:
		object.path = "alsa:acp:sofhdadsp:2:playback"
		api.alsa.path = "hw:sofhdadsp,3"
		api.alsa.open.ucm = "true"
		api.alsa.pcm.card = "0"
		api.alsa.pcm.stream = "playback"
		port.group = "playback"
		device.icon_name = "video-display"
		device.bus = "pci"
		audio.channels = "2"
		audio.position = "FL,FR"
		iec958.codecs = "[\"PCM\"]"
		device.routes = "1"
		alsa.mixer_device = "_ucm0001.hw:sofhdadsp"
		alsa.resolution_bits = "16"
		alsa.card = "0"
		alsa.card_name = "sof-hda-dsp"
		alsa.long_card_name = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		alsa.driver_name = "snd_soc_skl_hda_dsp"
		alsa.mixer_name = "Realtek ALC287"
		alsa.components = "HDA:8086281d,80860101,00100000 HDA:10ec0287,17aa38dc,00100002 cfg-dmics:2 iec61937-pcm:5,4,3"
		alsa.id = "sofhdadsp"
		device.api = "alsa"
		device.class = "sound"
		alsa.class = "generic"
		alsa.subclass = "generic-mix"
		alsa.name = ""
		alsa.subdevice = "0"
		alsa.subdevice_name = "subdevice #0"
		alsa.device = "3"
		alsa.sync.id = "00000000:00000000:00000000:00000000"
		device.profile.name = "HiFi: HDMI1: sink"
		device.profile.description = "HDMI / DisplayPort 1 Output"
		card.profile.device = "2"
		device.id = "48"
		factory.name = "api.alsa.pcm.sink"
		node.pause-on-idle = "false"
		priority.driver = "696"
		priority.session = "696"
		media.class = "Audio/Sink"
		node.name = "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI1__sink"
		node.nick = "HDMI / DisplayPort 1 Output"
		device.description = "Meteor Lake-P HD Audio Controller"
		api.alsa.card.name = "sof-hda-dsp"
		api.alsa.card.longname = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		factory.id = "19"
		clock.quantum-limit = "8192"
		client.id = "47"
		node.driver = "true"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		object.id = "61"
		object.serial = "61"
		device.enum.api = "udev"
		api.alsa.card = "0"
		device.plugged.usec = "6115223403"
		device.bus_path = "pci-0000:00:1f.3-platform-skl_hda_dsp_generic"
		sysfs.path = "/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0"
		device.subsystem = "sound"
		device.vendor.id = "0x8086"
		device.vendor.name = "Intel Corporation"
		device.product.id = "0x7e28"
		device.product.name = "Meteor Lake-P HD Audio Controller"
		device.name = "alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic"
		device.nick = "sof-hda-dsp"
		api.alsa.use-acp = "true"
		api.acp.auto-profile = "false"
		api.acp.auto-port = "false"
		api.dbus.ReserveDevice1.Priority = "-20"
		api.alsa.split-enable = "true"
		api.dbus.ReserveDevice1 = "Audio0"
		spa.object.id = "2"
		device.string = "0"
	Ports:
		[Out] HDMI1: HDMI / DisplayPort 1 Output (type: HDMI, priority: 500, availability group: HDMI/DP,pcm=3, available)
	Active Port: [Out] HDMI1
	Formats:
		pcm

Sink #62
	State: RUNNING
	Name: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink
	Description: Meteor Lake-P HD Audio Controller Speaker
	Driver: PipeWire
	Sample Specification: s32le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 4294967295
	Mute: no
	Volume: front-left: 42588 /  65% / -11.23 dB,   front-right: 42588 /  65% / -11.23 dB
	        balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor Source: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink.monitor
	Latency: 0 usec, configured 0 usec
	Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY 
	Properties:
		object.path = "alsa:acp:sofhdadsp:3:playback"
		api.alsa.path = "hw:sofhdadsp"
		api.alsa.open.ucm = "true"
		api.alsa.pcm.card = "0"
		api.alsa.pcm.stream = "playback"
		port.group = "playback"
		device.icon_name = "audio-speakers"
		device.bus = "pci"
		audio.channels = "2"
		audio.position = "FL,FR"
		device.routes = "1"
		alsa.mixer_device = "_ucm0001.hw:sofhdadsp"
		alsa.resolution_bits = "16"
		alsa.card = "0"
		alsa.card_name = "sof-hda-dsp"
		alsa.long_card_name = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		alsa.driver_name = "snd_soc_skl_hda_dsp"
		alsa.mixer_name = "Realtek ALC287"
		alsa.components = "HDA:8086281d,80860101,00100000 HDA:10ec0287,17aa38dc,00100002 cfg-dmics:2 iec61937-pcm:5,4,3"
		alsa.id = "sofhdadsp"
		device.api = "alsa"
		device.class = "sound"
		alsa.class = "generic"
		alsa.subclass = "generic-mix"
		alsa.name = ""
		alsa.subdevice = "0"
		alsa.subdevice_name = "subdevice #0"
		alsa.device = "0"
		alsa.sync.id = "00000000:00000000:00000000:00000000"
		device.profile.name = "HiFi: Speaker: sink"
		device.profile.description = "Speaker"
		card.profile.device = "3"
		device.id = "48"
		factory.name = "api.alsa.pcm.sink"
		node.pause-on-idle = "false"
		priority.driver = "1000"
		priority.session = "1000"
		media.class = "Audio/Sink"
		node.name = "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink"
		node.nick = "Speaker"
		device.description = "Meteor Lake-P HD Audio Controller"
		api.alsa.card.name = "sof-hda-dsp"
		api.alsa.card.longname = "LENOVO-83DL-Yoga72_in_116IML9-LNVNB161216"
		factory.id = "19"
		clock.quantum-limit = "8192"
		client.id = "47"
		node.driver = "true"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		object.id = "62"
		object.serial = "62"
		node.max-latency = "16384/48000"
		api.alsa.period-size = "1024"
		api.alsa.period-num = "32"
		api.alsa.headroom = "384"
		device.enum.api = "udev"
		api.alsa.card = "0"
		device.plugged.usec = "6115223403"
		device.bus_path = "pci-0000:00:1f.3-platform-skl_hda_dsp_generic"
		sysfs.path = "/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0"
		device.subsystem = "sound"
		device.vendor.id = "0x8086"
		device.vendor.name = "Intel Corporation"
		device.product.id = "0x7e28"
		device.product.name = "Meteor Lake-P HD Audio Controller"
		device.name = "alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic"
		device.nick = "sof-hda-dsp"
		api.alsa.use-acp = "true"
		api.acp.auto-profile = "false"
		api.acp.auto-port = "false"
		api.dbus.ReserveDevice1.Priority = "-20"
		api.alsa.split-enable = "true"
		api.dbus.ReserveDevice1 = "Audio0"
		spa.object.id = "2"
		device.string = "0"
	Ports:
		[Out] Speaker: Speaker (type: Speaker, priority: 100, availability unknown)
	Active Port: [Out] Speaker
	Formats:
		pcm

Offline

#4 2026-02-10 20:47:44

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 25,037

Re: Pipewire not switching automatically between headphones and speaker

Probably jack sensing not getting triggered properly/at all I assume

	HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2): Play HiFi quality Music (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2) (sinks: 4, sources: 2, priority: 10300, available: yes)
		HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker): Play HiFi quality Music (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker) (sinks: 4, sources: 2, priority: 10200, available: yes)

both of these "stay" available no matter whether the headset is plugged in or not? That would normally be the relevant detection mechanism.

I'm not that well versed with the inner workings of sof based audio in comparison to snd_hda_intel, if you don't actually get a proper jack event anywhere this might be annoying to fix. Something easy to try is a

amixer -c0 set 'Auto-Mute Mode',0 'Enabled'

but I'm suspecting that might just lead to speaker audio getting cut, but the switch not happening either (same command but with Disabled to revert). Do you get an event from the jack plug over ACPI? https://wiki.archlinux.org/title/Acpid https://wiki.archlinux.org/title/Acpid#Example_events ? If you do you can probably script something up to do this change

Last edited by V1del (2026-02-10 20:50:47)

Offline

#5 2026-02-10 21:25:04

satellitesahara
Member
Registered: 2026-01-24
Posts: 9

Re: Pipewire not switching automatically between headphones and speaker

V1del wrote:

Probably jack sensing not getting triggered properly/at all I assume

actually, if I run acpi_listen, it shows that my jack being plugged in and unplugged are detected properly

V1del wrote:

both of these "stay" available no matter whether the headset is plugged in or not?

both are "available" regardless of whether or not the headphones are plugged in yeah

If I try this :

amixer -c0 set 'Auto-Mute Mode',0 'Enabled'

and plug in headphones, audio does not come from either source, but in the sound control panel, speakers are still shown to be the audio device in use and level is the same

Offline

#6 2026-02-10 22:38:34

satellitesahara
Member
Registered: 2026-01-24
Posts: 9

Re: Pipewire not switching automatically between headphones and speaker

I did some reading for scripting acpi events and ended up creating a file in /etc/acpi/events/headphone:

event=jack/headphone HEADPHONE (plug|unplug)
action=/etc/acpi/actions/headphone.sh "%e"

and another file in /etc/acpi/actions/headphone.sh

#!/bin/bash
event="$1"

if echo "$event" | grep -q "HEADPHONE plug"; then
    wpctl set-profile 48 1
elif echo "$event" | grep -q "HEADPHONE unplug"; then
    wpctl set-profile 48 2
fi

Using journalctl I confirmed that this script is executing but it's failing with error message "Could not connect to PipeWire". I'm gonna keep trying to troubleshoot this. Thank you for your help so far!

Offline

#7 2026-02-11 20:00:36

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 25,037

Re: Pipewire not switching automatically between headphones and speaker

Yes this would've been my next suggestion if you indeed get acpi events proper. Good stuff getting this far.

The reason this fails is because the acpi event will be processed by a root process but your pipewire is running as your user, so you need mainly two things here, access to your normal user and access to your dbus session. If you "pick a process" from your user that you know is guaranteed to run (e.g. pipewire) you can "steal" the info to which dbus to connect to -> https://gist.github.com/AladW/de1c5676d93d05a5a0e1 and make sure you run the wpctl command as your user with e.g.

sudo -u $myuser  DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  wpctl set-profile 48 1

you probably also shouldn't hardcode that 48, it will likely change between invocations, but either use  a more fully qualified name or grep out the exact node from wpctl

See also this older thread, where someone had a similar problem/solution https://bbs.archlinux.org/viewtopic.php … 4#p1646244 you'll have to adjust a bit, but the gist is there.

Offline

Board footer

Powered by FluxBB