You are not logged in.

#1 2026-09-13 17:29:11

MGM
Member
Registered: 2026-09-13
Posts: 1

Trouble with headset's microphone connection.

Hello! First of all, this is my first time posting, so please excuse me if I make any mistake.

My issue is the following: after I connect my headset (microphone included), even though voice chat apps register said headset on the microphone tab, they won't detect any audio. arecord also doesn't register anything. I've been trying to diagnose this for a while but I couldn't find anything so I don't even know what to post so I can be helped.

Another useful piece of information is that, even though my headset has headphones and microphone on the same piece of hardware, the audio of the headphones on said voice chats works with no problem, so it's just a microphone problem.

I will now post the output of some general commands that might give some insight

  
sudo fuser -v /dev/snd/*
[sudo] password for user1: 
                     USER        PID ACCESS COMMAND
/dev/snd/controlC0:  user1      2323 F.... wireplumber
                     user1      2766 F.... arecord
/dev/snd/controlC1:  user1      2323 F.... wireplumber
/dev/snd/pcmC0D0c:   user1      2766 F...m arecord
/dev/snd/timer:      user1      2766 f.... arecord
pactl list cards
Card #51
	Name: alsa_card.pci-0000_03_00.1
	Driver: alsa
	Owner Module: n/a
	Properties:
		device.enum.api = "udev"
		device.api = "alsa"
		media.class = "Audio/Device"
		api.alsa.path = "hw:1"
		api.alsa.card = "1"
		api.alsa.card.name = "HDA ATI HDMI"
		api.alsa.card.longname = "HDA ATI HDMI at 0xa03a0000 irq 142"
		device.plugged.usec = "8052921"
		device.bus_path = "pci-0000:03:00.1"
		sysfs.path = "/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.1/sound/card1"
		device.bus = "pci"
		device.subsystem = "sound"
		device.vendor.id = "0x1002"
		device.vendor.name = "Advanced Micro Devices, Inc. [AMD/ATI]"
		device.product.id = "0xab40"
		device.product.name = "Navi 48 HDMI/DP Audio Controller"
		device.name = "alsa_card.pci-0000_03_00.1"
		device.description = "Navi 48 HDMI/DP Audio Controller"
		device.nick = "HDA ATI HDMI"
		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 = "Audio1"
		spa.object.id = "4"
		factory.id = "15"
		client.id = "46"
		object.id = "51"
		object.serial = "51"
		object.path = "alsa:acp:HDMI"
		alsa.card = "1"
		alsa.card_name = "HDA ATI HDMI"
		alsa.long_card_name = "HDA ATI HDMI at 0xa03a0000 irq 142"
		alsa.driver_name = "snd_hda_intel"
		alsa.mixer_name = "ATI R6xx HDMI"
		alsa.components = "HDA:1002aa01,00aa0100,00100a00"
		alsa.id = "HDMI"
		device.string = "1"
	Profiles:
		off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
		output:hdmi-stereo: Digital Stereo (HDMI) Output (sinks: 1, sources: 0, priority: 5900, available: no)
		output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (sinks: 1, sources: 0, priority: 5700, available: no)
		output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (sinks: 1, sources: 0, priority: 5700, available: no)
		output:hdmi-stereo-extra3: Digital Stereo (HDMI 4) Output (sinks: 1, sources: 0, priority: 5700, available: no)
		output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (sinks: 1, sources: 0, priority: 800, available: no)
		output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (sinks: 1, sources: 0, priority: 800, available: no)
		output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 600, available: no)
		output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 600, available: no)
		output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (sinks: 1, sources: 0, priority: 600, available: no)
		output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (sinks: 1, sources: 0, priority: 600, available: no)
		output:hdmi-surround-extra3: Digital Surround 5.1 (HDMI 4) Output (sinks: 1, sources: 0, priority: 600, available: no)
		output:hdmi-surround71-extra3: Digital Surround 7.1 (HDMI 4) Output (sinks: 1, sources: 0, priority: 600, available: no)
		pro-audio: Pro Audio (sinks: 4, sources: 0, priority: 1, available: yes)
	Active Profile: off
	Ports:
		hdmi-output-0: HDMI / DisplayPort (type: HDMI, priority: 5900, latency offset: 0 usec, availability group: Legacy 1, not available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "Legacy 1"
				device.icon_name = "video-display"
				card.profile.port = "0"
			Part of profile(s): output:hdmi-stereo, output:hdmi-surround, output:hdmi-surround71
		hdmi-output-1: HDMI / DisplayPort 2 (type: HDMI, priority: 5800, latency offset: 0 usec, availability group: Legacy 2, not available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "Legacy 2"
				device.icon_name = "video-display"
				card.profile.port = "1"
			Part of profile(s): output:hdmi-stereo-extra1, output:hdmi-surround-extra1, output:hdmi-surround71-extra1
		hdmi-output-2: HDMI / DisplayPort 3 (type: HDMI, priority: 5700, latency offset: 0 usec, availability group: Legacy 3, not available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "Legacy 3"
				device.icon_name = "video-display"
				card.profile.port = "2"
			Part of profile(s): output:hdmi-stereo-extra2, output:hdmi-surround-extra2, output:hdmi-surround71-extra2
		hdmi-output-3: HDMI / DisplayPort 4 (type: HDMI, priority: 5600, latency offset: 0 usec, availability group: Legacy 4, not available)
			Properties:
				port.type = "hdmi"
				port.availability-group = "Legacy 4"
				device.icon_name = "video-display"
				card.profile.port = "3"
			Part of profile(s): output:hdmi-stereo-extra3, output:hdmi-surround-extra3, output:hdmi-surround71-extra3

Card #52
	Name: alsa_card.pci-0000_00_1f.3
	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 = "HDA Intel PCH"
		api.alsa.card.longname = "HDA Intel PCH at 0xa0810000 irq 143"
		device.plugged.usec = "8085153"
		device.bus_path = "pci-0000:00:1f.3"
		sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
		device.bus = "pci"
		device.subsystem = "sound"
		device.vendor.id = "0x8086"
		device.vendor.name = "Intel Corporation"
		device.product.id = "0xa348"
		device.product.name = "300/C240 Series Chipset Family HD Audio"
		device.form_factor = "internal"
		device.name = "alsa_card.pci-0000_00_1f.3"
		device.description = "Built-in Audio"
		device.nick = "HDA Intel PCH"
		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 = "46"
		object.id = "52"
		object.serial = "52"
		object.path = "alsa:acp:PCH"
		alsa.card = "0"
		alsa.card_name = "HDA Intel PCH"
		alsa.long_card_name = "HDA Intel PCH at 0xa0810000 irq 143"
		alsa.driver_name = "snd_hda_intel"
		alsa.mixer_name = "Realtek ALC1220"
		alsa.components = "HDA:10ec1220,103c84fd,00100003"
		alsa.id = "PCH"
		device.string = "0"
	Profiles:
		off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
		output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (sinks: 1, sources: 1, priority: 6565, available: no)
		output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority: 6500, available: no)
		input:analog-stereo: Analog Stereo Input (sinks: 0, sources: 1, priority: 65, available: no)
		pro-audio: Pro Audio (sinks: 1, sources: 2, priority: 1, available: yes)
	Active Profile: off
	Ports:
		analog-input-front-mic: Front Microphone (type: Mic, priority: 8500, latency offset: 0 usec, availability group: Legacy 1, not available)
			Properties:
				port.type = "mic"
				port.availability-group = "Legacy 1"
				device.icon_name = "audio-input-microphone"
				card.profile.port = "0"
			Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo
		analog-input-rear-mic: Rear Microphone (type: Mic, priority: 8200, latency offset: 0 usec, availability group: Legacy 2, not available)
			Properties:
				port.type = "mic"
				port.availability-group = "Legacy 2"
				device.icon_name = "audio-input-microphone"
				card.profile.port = "1"
			Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo
		analog-input-mic: Microphone (type: Mic, priority: 8700, latency offset: 0 usec, availability group: Legacy 3, not available)
			Properties:
				port.type = "mic"
				port.availability-group = "Legacy 3"
				device.icon_name = "audio-input-microphone"
				card.profile.port = "2"
			Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo
		analog-input-linein: Line In (type: Line, priority: 8100, latency offset: 0 usec, availability group: Legacy 4, not available)
			Properties:
				port.type = "line"
				port.availability-group = "Legacy 4"
				card.profile.port = "3"
			Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo
		analog-output-lineout: Line Out (type: Line, priority: 9000, latency offset: 0 usec, availability group: Legacy 5, not available)
			Properties:
				port.type = "line"
				port.availability-group = "Legacy 5"
				card.profile.port = "4"
			Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo
		analog-output-headphones: Headphones (type: Headphones, priority: 9900, latency offset: 0 usec, availability group: Legacy 6, not available)
			Properties:
				port.type = "headphones"
				port.availability-group = "Legacy 6"
				device.icon_name = "audio-headphones"
				card.profile.port = "5"
			Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo

Card #67
	Name: bluez_card.08_12_87_F8_C0_E4
	Driver: module-bluez5-device.c
	Owner Module: n/a
	Properties:
		device.api = "bluez5"
		device.bus = "bluetooth"
		media.class = "Audio/Device"
		device.name = "bluez_card.08_12_87_F8_C0_E4"
		device.description = "OPPO Enco Air4 Pro"
		device.alias = "OPPO Enco Air4 Pro"
		device.vendor.id = "bluetooth:02b0"
		device.product.id = "0x0000"
		device.form_factor = "headset"
		device.icon_name = "audio-headset-bluetooth"
		device.string = "08:12:87:F8:C0:E4"
		api.bluez5.icon = "audio-headset"
		api.bluez5.path = "/org/bluez/hci0/dev_08_12_87_F8_C0_E4"
		api.bluez5.address = "08:12:87:F8:C0:E4"
		api.bluez5.device = ""
		api.bluez5.class = "0x240404"
		api.bluez5.connection = "connected"
		bluez5.profile = "off"
		spa.object.id = "0"
		factory.id = "15"
		client.id = "46"
		object.id = "56"
		object.serial = "67"
	Profiles:
		off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
		a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 0, priority: 132, available: yes)
		a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ) (sinks: 1, sources: 0, priority: 131, available: yes)
		a2dp-sink: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 0, priority: 133, available: yes)
		headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD) (sinks: 1, sources: 1, priority: 5, available: yes)
		headset-head-unit: Headset Head Unit (HSP/HFP, codec MSBC) (sinks: 1, sources: 1, priority: 6, available: yes)
	Active Profile: a2dp-sink
	Ports:
		headset-input: Handsfree (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
			Part of profile(s): headset-head-unit-cvsd, headset-head-unit
		headset-output: Headphones (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
				device.icon_name = "audio-headphones-bluetooth"
			Part of profile(s): a2dp-sink-sbc, a2dp-sink-sbc_xq, a2dp-sink
		headset-hf-output: Handsfree (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
				device.icon_name = "audio-headset-bluetooth"
			Part of profile(s): headset-head-unit-cvsd, headset-head-unit
pactl list sources
Source #69
	State: SUSPENDED
	Name: bluez_input.08:12:87:F8:C0:E4
	Description: OPPO Enco Air4 Pro
	Driver: PipeWire
	Sample Specification: float32le 1ch 48000Hz
	Channel Map: mono
	Owner Module: 4294967295
	Mute: no
	Volume: mono: 65536 / 100% / 0.00 dB
	       balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor of Sink: n/a
	Latency: 0 usec, configured 0 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY 
	Properties:
		device.id = "56"
		node.name = "bluez_input.08:12:87:F8:C0:E4"
		node.virtual = "false"
		card.profile.device = "0"
		audio.position = "[MONO]"
		media.class = "Audio/Source"
		priority.session = "2010"
		bluez5.loopback = "true"
		device.description = "OPPO Enco Air4 Pro"
		device.routes = "1"
		node.group = "loopback-2323-18"
		node.link-group = "loopback-2323-18"
		resample.prefill = "true"
		resample.disable = "true"
		media.name = "OPPO Enco Air4 Pro output"
		stream.is-live = "true"
		node.want-driver = "true"
		node.autoconnect = "true"
		node.trigger = "true"
		port.group = "stream.0"
		adapt.follower.spa-node = ""
		object.register = "false"
		factory.id = "10"
		clock.quantum-limit = "8192"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		client.id = "57"
		object.id = "58"
		object.serial = "69"
		device.api = "bluez5"
		device.bus = "bluetooth"
		device.name = "bluez_card.08_12_87_F8_C0_E4"
		device.alias = "OPPO Enco Air4 Pro"
		device.vendor.id = "bluetooth:02b0"
		device.product.id = "0x0000"
		device.form_factor = "headset"
		device.icon_name = "audio-headset-bluetooth"
		device.string = "08:12:87:F8:C0:E4"
		api.bluez5.icon = "audio-headset"
		api.bluez5.path = "/org/bluez/hci0/dev_08_12_87_F8_C0_E4"
		api.bluez5.address = "08:12:87:F8:C0:E4"
		api.bluez5.device = ""
		api.bluez5.class = "0x240404"
		api.bluez5.connection = "connected"
		bluez5.profile = "off"
		spa.object.id = "0"
	Formats:
		pcm

Source #71
	State: SUSPENDED
	Name: bluez_output.08_12_87_F8_C0_E4.1.monitor
	Description: Monitor of OPPO Enco Air4 Pro
	Driver: PipeWire
	Sample Specification: s16le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 4294967295
	Mute: no
	Volume: front-left: 0 /   0% / -inf dB,   front-right: 0 /   0% / -inf dB
	       balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor of Sink: bluez_output.08_12_87_F8_C0_E4.1
	Latency: 0 usec, configured 0 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY 
	Properties:
		api.bluez5.transport = ""
		api.bluez5.profile = "a2dp-sink"
		api.bluez5.codec = "aac"
		api.bluez5.address = "08:12:87:F8:C0:E4"
		device.routes = "1"
		card.profile.device = "1"
		device.id = "56"
		factory.name = "api.bluez5.a2dp.sink"
		spa.object.id = "1"
		node.pause-on-idle = "false"
		device.description = "OPPO Enco Air4 Pro"
		node.name = "bluez_output.08_12_87_F8_C0_E4.1"
		priority.driver = "1010"
		priority.session = "1010"
		factory.id = "10"
		clock.quantum-limit = "8192"
		device.api = "bluez5"
		media.class = "Audio/Sink"
		media.name = "OPPO Enco Air4 Pro"
		node.driver = "true"
		port.group = "stream.0"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		object.id = "60"
		object.serial = "71"
		client.id = "46"
		device.bus = "bluetooth"
		device.name = "bluez_card.08_12_87_F8_C0_E4"
		device.alias = "OPPO Enco Air4 Pro"
		device.vendor.id = "bluetooth:02b0"
		device.product.id = "0x0000"
		device.form_factor = "headset"
		device.icon_name = "audio-headset-bluetooth"
		device.string = "08:12:87:F8:C0:E4"
		api.bluez5.icon = "audio-headset"
		api.bluez5.path = "/org/bluez/hci0/dev_08_12_87_F8_C0_E4"
		api.bluez5.device = ""
		api.bluez5.class = "0x240404"
		api.bluez5.connection = "connected"
		bluez5.profile = "off"
		device.class = "monitor"
	Ports:
		headset-output: Headphones (type: Headset, priority: 0, available)
	Active Port: headset-output
	Formats:
		pcm
pactl list source-outputs

(no output on the last one)


I honestly don't know what to do, I've been quite a while trying to solve it on my own with little to no advances, so thanks to anyone that tries to help me. smile

Offline

#2 2026-09-14 08:17:30

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

Re: Trouble with headset's microphone connection.

Is "headset" the bluetooth one? you'll want to explicitly switch that to one of the microphone including profiles, i.e.

pactl set-card-profile bluez_card.08_12_87_F8_C0_E4  headset-head-unit

wireplumber "should" have some heuristics to attempt to auto-switch that when an application requests the mic, but this might not work properly all the time.

Offline

#3 2026-09-16 08:31:30

SmallAndSimple
Member
Registered: 2015-11-25
Posts: 58

Re: Trouble with headset's microphone connection.

I just stumbled upon this: I have a new laptop and use a bluetooth headset. On my previous laptop, all was well but now I have to explicitly switch profile before starting the call, otherwise there is no output. To be clear: if I use the automatic-profile-switch feature from pipewire, the headset does not give any in- or outputs during calls, if I switch to the same profile by hand using volume control everything is fine.

There is some errorlogging in journalctl --user:

sep 16 10:24:36 lely-21688 systemd[1222]: Started app-teams-for-linux-10718.scope.
sep 16 10:24:52 lely-21688 wireplumber[1309]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-79) running -> error (Received error event)
sep 16 10:24:52 lely-21688 wireplumber[1309]: spa.bluez5: Failure in Bluetooth audio transport /org/bluez/hci0/dev_20_AF_1B_20_28_66/sep1/fd0
sep 16 10:24:52 lely-21688 pipewire[1308]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-79) running -> error (Received error event)
sep 16 10:25:06 lely-21688 wireplumber[1309]: pw.node: (bluez_input.20_AF_1B_20_28_66.0-79) running -> error (Received error event)
sep 16 10:25:06 lely-21688 wireplumber[1309]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-83) running -> error (Received error event)
sep 16 10:25:06 lely-21688 wireplumber[1309]: spa.bluez5: Failure in Bluetooth audio transport /org/bluez/hci0/dev_20_AF_1B_20_28_66/fd59
sep 16 10:25:06 lely-21688 pipewire[1308]: pw.node: (bluez_input.20_AF_1B_20_28_66.0-79) idle -> error (Received error event)
sep 16 10:25:06 lely-21688 pipewire[1308]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-83) running -> error (Received error event)
sep 16 10:25:12 lely-21688 wireplumber[1309]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-83) running -> error (Received error event)
sep 16 10:25:12 lely-21688 wireplumber[1309]: spa.bluez5: Failure in Bluetooth audio transport /org/bluez/hci0/dev_20_AF_1B_20_28_66/sep1/fd0
sep 16 10:25:12 lely-21688 pipewire[1308]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-83) running -> error (Received error event)
sep 16 10:25:12 lely-21688 wireplumber[1309]: pw.node: (bluez_input.20_AF_1B_20_28_66.0-83) running -> error (Received error event)
sep 16 10:25:12 lely-21688 wireplumber[1309]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-118) suspended -> error (Received error event)
sep 16 10:25:12 lely-21688 pipewire[1308]: pw.node: (bluez_input.20_AF_1B_20_28_66.0-83) running -> error (Received error event)
sep 16 10:25:12 lely-21688 pipewire[1308]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-118) running -> error (Received error event)
sep 16 10:25:12 lely-21688 pipewire[1308]: pw.link: 0x55c8365672d0: one of the nodes is in error out:suspended in:error
sep 16 10:25:12 lely-21688 pipewire[1308]: pw.link: 0x55c836fa89e0: one of the nodes is in error out:suspended in:error
sep 16 10:25:12 lely-21688 pipewire[1308]: pw.link: 0x55c836db4500: one of the nodes is in error out:suspended in:error
sep 16 10:25:19 lely-21688 wireplumber[1309]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-118) running -> error (Received error event)
sep 16 10:25:19 lely-21688 wireplumber[1309]: spa.bluez5: Failure in Bluetooth audio transport /org/bluez/hci0/dev_20_AF_1B_20_28_66/fd59
sep 16 10:25:19 lely-21688 pipewire[1308]: pw.node: (bluez_input.20_AF_1B_20_28_66.0-83) idle -> error (Received error event)
sep 16 10:25:19 lely-21688 pipewire[1308]: pw.node: (bluez_output.20_AF_1B_20_28_66.1-118) idle -> error (Received error event)

But that could all be noise, nothing seems to point me to more modern topics.

So, could this be a recent regression of wireplumber? Or is it just that the underlying bluetooth hardware is different so wireplumber cant really deal with this new one? I dont have access to the old laptop anymore to check.

Offline

#4 2026-09-16 09:17:06

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

Re: Trouble with headset's microphone connection.

Could be either/or, there have been a few changes to this autochange heuristic in recent wireplumber versions, might want to try a pre 0.5.14 version, afaik that's the one where they changed this, though not entirely sure whether you'd run into lib issues as that version is somewhat old by now (should be relatively easy to build with the ABS though)

Offline

Board footer

Powered by FluxBB