• Re: RESOLVED pipewire and simultaenous sound output

    From bad sector@forgetski@_INVALID.net to alt.os.linux on Sun Aug 9 14:18:17 2026
    From Newsgroup: alt.os.linux

    On 9/14/25 9:07 PM, bad sector wrote:

    I have onboard HD-Audio + a Xonar sound card but I cannot get
    simultaneous output to headset and speakes. This used to be possible
    with PulseAudio but that is no longer an option on many distros. The
    mobo is an Asus x870e creator (of headaches & diarrhea).

    Further on this topic after many kernel and pipewire updates, I finally
    got what I want with help from Claude (Chatgpt less productive). The
    entire session is a living hell marathon much too long to post but I am keeping it for reference. After successful completion I asked Claude for
    a drill of the salient points and it obliged with this short list. The
    result is that I can play an audio-video backing track in VLC and have
    it radiate out of both the speakers and the headset but at different
    volumes both slider-set on the fly in PAVUCTL. The purpose is to have
    speakers at low volume letting everyone else KNOW that I'm jamming on
    headset so I cannot hear then AND don't wanna be bothered.






    -----------------------------------
    Dual Audio Output Setup rCo ASUS X870E ProArt (Realtek ALC1220 + Xonar)

    Goal: same audio (e.g. VLC) plays through both onboard headset jack and
    USB Xonar speakers simultaneously, each with independently adjustable
    volume.

    System: openSUSE Tumbleweed, PipeWire (via pipewire-pulse compatibility layer).

    Identify hardware

    `
    aplay -l
    `
    rCo card 1: Generic [HD-Audio Generic] raA onboard Realtek ALC1220 (hw:1,0)
    rCo card 2: CARD [XONAR SOUND CARD] raA USB Xonar

    `
    pactl list short sinks
    `
    Gives PipeWire sink names, e.g.:
    rCo alsaoutput.pci-00007b_00.6.analog-stereo (Realtek)
    rCo alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo (Xonar)

    Your exact PCI address/sink names will differ rCo always re-check with these two commands rather than assuming the ones below are portable.

    Fix a silent ALSA output (skip if not needed)

    If a physical output shows as active in PipeWire/pavucontrol but produces
    no sound, check the ALSA mixer directly (not just alsamixer's TUI rCo it can mis-render on narrow terminals and hide controls):

    `
    amixer -c 1 scontrols
    `

    Lists every real control. On ALC1220-family codecs the ones that gate
    output are typically Master, Headphone, Front, and PCM. Set them:

    `
    amixer -c 1 sset 'Master',0 100% unmute
    amixer -c 1 sset 'Headphone',0 100% unmute
    amixer -c 1 sset 'Front',0 100% unmute
    amixer -c 1 sset 'PCM',0 100% unmute
    `

    Test the raw device directly, bypassing PipeWire, and actually listen:

    `
    speaker-test -D hw:1,0 -c2 -t wav
    `

    If Auto-Mute Mode is enabled and misbehaving (jack-sense wrongly muting
    a port), disable it:

    `
    amixer -c 1 sset 'Auto-Mute Mode',0 Disabled
    `

    Create the combine sink

    `
    pactl load-module module-combine-sink sinkname=both slaves=alsaoutput.pci-00007b00.6.analog-stereo,alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo
    `

    Verify:
    `
    pactl list short sinks
    `
    A new both sink should appear.

    Route an app to the combined sink

    In pavucontrol raA Playback tab (app must be actively playing audio to
    show up here): change its output device dropdown to both.

    Independent volume control

    pavucontrol raA Output Devices tab: the Realtek and Xonar entries remain separate sliders even while feeding the combine sink. Adjust each
    independently rCo the app's own volume (e.g. VLC's slider) acts as the
    overall master feeding both.

    Make it persistent (survive reboot/logout)

    The pactl load-module command only lasts the current session. To load automatically, create:

    `
    ~/.config/pipewire/pipewire.conf.d/99-combine-sink.conf
    `

    with contents like:

    `
    context.modules = [
    { name = libpipewire-module-combine-stream
    args = {
    combine.mode = sink
    node.name = "both"
    node.description = "Headset + Speakers"
    combine.streams = [
    { node.name = "alsaoutput.pci-00007b_00.6.analog-stereo" }
    { node.name = "alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo" }
    ]
    }
    }
    ]
    `

    (Exact directive syntax can shift between PipeWire versions rCo if this
    doesn't load cleanly, the fallback is a systemd --user unit that runs the
    pactl load-module command on login instead.)

    Key troubleshooting lesson

    alsamixer's on-screen list is not authoritative rCo it can silently hide
    or misrender controls depending on terminal width/rendering. `amixer
    scontrols (and amixer sset`) always shows/sets the real, complete control
    set and should be the first tool reached for whenever alsamixer looks suspiciously sparse.



    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to alt.os.linux on Sun Aug 9 20:30:37 2026
    From Newsgroup: alt.os.linux

    On Sun, 9 Aug 2026 14:18:17 -0400, bad sector wrote:

    Further on this topic after many kernel and pipewire updates, I
    finally got what I want with help from Claude (Chatgpt less
    productive). The entire session is a living hell marathon much too
    long to post but I am keeping it for reference. After successful
    completion I asked Claude for a drill of the salient points and it
    obliged with this short list.

    Did it recommend using a GUI tool like qpwgraph to manage connections?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From bad sector@forgetski@_INVALID.net to alt.os.linux on Mon Aug 10 10:13:35 2026
    From Newsgroup: alt.os.linux

    On 8/9/26 4:30 PM, Lawrence DrCOOliveiro wrote:
    On Sun, 9 Aug 2026 14:18:17 -0400, bad sector wrote:

    Further on this topic after many kernel and pipewire updates, I
    finally got what I want with help from Claude (Chatgpt less
    productive). The entire session is a living hell marathon much too
    long to post but I am keeping it for reference. After successful
    completion I asked Claude for a drill of the salient points and it
    obliged with this short list.

    Did it recommend using a GUI tool like qpwgraph to manage connections?

    Not once, I'm still trying to digest it all but as far as I can tell at
    this point the 4 hangups were (condition & possible solution)


    1
    alsamixer GUI does NOT show everything allegedly because some misread
    graphics & monitor attributes but I have 4k and loads of processing so o excuse for truncated displays. There is no cure for this except sing?


    amixer -c 1 scontrols



    2
    alsa defaults that are NOT unmute & 100 on all
    ... I have no idea why this would be so!

    amixer scontrols | grep -oE "''" | awk -F\' '{print "amixer -c 0 set
    \""$2"\" unmute 100%"}' | sh



    3
    alsa auto-mute, the solution being

    amixer -c 1 set 'Auto-Mute Mode' 0 Disabled


    4
    creating a combined sink

    pactl load-module module-combine-sink sinkname=both slaves=alsaoutput.pci-00007b00.6.analog-stereo,alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo


    I had it all at the end of the session but will want to make sure that
    it all comes together on boot & then remove the workaraound when no
    longer needed (if that ever happens).

    Claude produced:

    What I think was the full session is @: https://paste.opensuse.org/pastes/44f702e4c3ef



    A short drill:
    --------------------------------------------------
    Dual Audio Output Setup rCo ASUS X870E ProArt (Realtek ALC1220 + Xonar)

    Goal: same audio (e.g. VLC) plays through both onboard headset jack and
    USB Xonar speakers simultaneously, each with independently adjustable
    volume.

    System: openSUSE Tumbleweed, PipeWire (via pipewire-pulse compatibility layer).

    Identify hardware

    `
    aplay -l
    `
    rCo card 1: Generic [HD-Audio Generic] raA onboard Realtek ALC1220 (hw:1,0)
    rCo card 2: CARD [XONAR SOUND CARD] raA USB Xonar

    `
    pactl list short sinks
    `
    Gives PipeWire sink names, e.g.:
    rCo alsaoutput.pci-00007b_00.6.analog-stereo (Realtek)
    rCo alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo (Xonar)

    Your exact PCI address/sink names will differ rCo always re-check with these two commands rather than assuming the ones below are portable.

    Fix a silent ALSA output (skip if not needed)

    If a physical output shows as active in PipeWire/pavucontrol but produces
    no sound, check the ALSA mixer directly (not just alsamixer's TUI rCo it can mis-render on narrow terminals and hide controls):

    `
    amixer -c 1 scontrols
    `

    Lists every real control. On ALC1220-family codecs the ones that gate
    output are typically Master, Headphone, Front, and PCM. Set them:

    `
    amixer -c 1 sset 'Master',0 100% unmute
    amixer -c 1 sset 'Headphone',0 100% unmute
    amixer -c 1 sset 'Front',0 100% unmute
    amixer -c 1 sset 'PCM',0 100% unmute
    `

    Test the raw device directly, bypassing PipeWire, and actually listen:

    `
    speaker-test -D hw:1,0 -c2 -t wav
    `

    If Auto-Mute Mode is enabled and misbehaving (jack-sense wrongly muting
    a port), disable it:

    `
    amixer -c 1 sset 'Auto-Mute Mode',0 Disabled
    `

    Create the combine sink

    `
    pactl load-module module-combine-sink sinkname=both slaves=alsaoutput.pci-00007b00.6.analog-stereo,alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo
    `

    Verify:
    `
    pactl list short sinks
    `
    A new both sink should appear.

    Route an app to the combined sink

    In pavucontrol raA Playback tab (app must be actively playing audio to
    show up here): change its output device dropdown to both.

    Independent volume control

    pavucontrol raA Output Devices tab: the Realtek and Xonar entries remain separate sliders even while feeding the combine sink. Adjust each
    independently rCo the app's own volume (e.g. VLC's slider) acts as the
    overall master feeding both.

    Make it persistent (survive reboot/logout)

    The pactl load-module command only lasts the current session. To load automatically, create:

    `
    ~/.config/pipewire/pipewire.conf.d/99-combine-sink.conf
    `

    with contents like:

    `
    context.modules = [
    { name = libpipewire-module-combine-stream
    args = {
    combine.mode = sink
    node.name = "both"
    node.description = "Headset + Speakers"
    combine.streams = [
    { node.name = "alsaoutput.pci-00007b_00.6.analog-stereo" }
    { node.name = "alsaoutput.usb-ASUSTeKXONARSOUNDCARD-00.analog-stereo" }
    ]
    }
    }
    ]
    `

    (Exact directive syntax can shift between PipeWire versions rCo if this
    doesn't load cleanly, the fallback is a systemd --user unit that runs the
    pactl load-module command on login instead.)

    Key troubleshooting lesson

    alsamixer's on-screen list is not authoritative rCo it can silently hide
    or misrender controls depending on terminal width/rendering. `amixer
    scontrols (and amixer sset`) always shows/sets the real, complete control
    set and should be the first tool reached for whenever alsamixer looks suspiciously sparse.



    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From vallor@vallor@vallor.earth to alt.os.linux on Thu Aug 13 10:27:01 2026
    From Newsgroup: alt.os.linux

    At Sun, 9 Aug 2026 20:30:37 -0000 (UTC), Lawrence DrCOOliveiro <ldo@nz.invalid> wrote:

    On Sun, 9 Aug 2026 14:18:17 -0400, bad sector wrote:

    Further on this topic after many kernel and pipewire updates, I
    finally got what I want with help from Claude (Chatgpt less
    productive). The entire session is a living hell marathon much too
    long to post but I am keeping it for reference. After successful
    completion I asked Claude for a drill of the salient points and it
    obliged with this short list.

    Did it recommend using a GUI tool like qpwgraph to manage connections?

    I just looked at that, then remembered playing around with it.

    Unfortunately, it isn't useful for much, including my own
    use case of creating a virtual device + loopback device
    for special audio routing tasks, such as
    the following:

    [game] -> [virtual device ] -> [loopback] -> [audio output device]
    | ^
    V |
    [obs-studio] [ other system audio, like IM beeps ]

    The reason you'd want to do this is to keep extra audio out of
    your obs-studio stream, such as the aforementioned beeps from
    IM (like WhatsApp).

    I actually abandoned MS Windows and went with Linux
    precisely because there didn't seem to be a way to do this in
    MS Windows. (Maybe that has changed, but I haven't looked back.)

    People who play IM beeps on their game streams drive me bananas,
    because you can't tell if it is your own IM that beeped or not
    without a separate device.

    (Once the extra two devices are set up, routing becomes a simple
    matter of fiddling with pavucontrol -- even with pipewire.)
    --
    -v System76 Thelio Mega v1.1 x86_64 Mem: 258G
    OS: Linux 7.2.0-rc7 D: Mint 22.3 DE: Xfce 4.18 (X11)
    NVIDIA GeForce RTX 3090Ti (24G) (610.57.04)
    "NETWORK: What fishermen do when not fishing."
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul@nospam@needed.invalid to alt.os.linux on Thu Aug 13 07:43:40 2026
    From Newsgroup: alt.os.linux

    On Thu, 8/13/2026 6:27 AM, vallor wrote:
    At Sun, 9 Aug 2026 20:30:37 -0000 (UTC), Lawrence DrCOOliveiro <ldo@nz.invalid> wrote:

    On Sun, 9 Aug 2026 14:18:17 -0400, bad sector wrote:

    Further on this topic after many kernel and pipewire updates, I
    finally got what I want with help from Claude (Chatgpt less
    productive). The entire session is a living hell marathon much too
    long to post but I am keeping it for reference. After successful
    completion I asked Claude for a drill of the salient points and it
    obliged with this short list.

    Did it recommend using a GUI tool like qpwgraph to manage connections?

    I just looked at that, then remembered playing around with it.

    Unfortunately, it isn't useful for much, including my own
    use case of creating a virtual device + loopback device
    for special audio routing tasks, such as
    the following:

    [game] -> [virtual device ] -> [loopback] -> [audio output device]
    | ^
    V |
    [obs-studio] [ other system audio, like IM beeps ]

    The reason you'd want to do this is to keep extra audio out of
    your obs-studio stream, such as the aforementioned beeps from
    IM (like WhatsApp).

    I actually abandoned MS Windows and went with Linux
    precisely because there didn't seem to be a way to do this in
    MS Windows. (Maybe that has changed, but I haven't looked back.)

    People who play IM beeps on their game streams drive me bananas,
    because you can't tell if it is your own IM that beeped or not
    without a separate device.

    (Once the extra two devices are set up, routing becomes a simple
    matter of fiddling with pavucontrol -- even with pipewire.)


    https://cmetcalfe.ca/blog/record-audio-from-specific-applications-with-shadowplay.html

    https://vb-audio.com/Cable/

    Windows has a default sound scheme, but you're supposed to be able to
    work around it with third-party software.

    Maybe the OBS forum would have the right people, to answer questions.

    When some MIDI selector was removed by Microsoft, a private person
    made up a little dialog to take its place. So for some topics, you're
    talking pretty obscure info and solutions. And modern search is
    not very good at exposing things like that.

    Paul
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From bad sector@forgetski@_INVALID.net to alt.os.linux on Sat Aug 15 09:12:48 2026
    From Newsgroup: alt.os.linux

    On 8/10/26 10:13 AM, bad sector wrote:
    On 8/9/26 4:30 PM, Lawrence DrCOOliveiro wrote:
    On Sun, 9 Aug 2026 14:18:17 -0400, bad sector wrote:

    Further on this topic after many kernel and pipewire updates, I
    finally got what I want with help from Claude (Chatgpt less
    productive). The entire session is a living hell marathon much too
    long to post but I am keeping it for reference. After successful
    completion I asked Claude for a drill of the salient points and it
    obliged with this short list.

    Did it recommend using a GUI tool like qpwgraph to manage connections?

    Not once, I'm still trying to digest it all but as far as I can tell at
    this point the 4 hangups were (condition & possible solution)


    1
    alsamixer GUI does NOT show everything allegedly because some misread graphics & monitor attributes but I have 4k and loads of processing so o excuse for truncated displays. There is no cure for this except sing?
    ...

    I also found that AI mistakes are directly proportional to the size of
    the blurb produced, so for the time being I'm using one-liner scripts
    more or less equivalent to issued cLi commands but with lots of
    commented guidance. These sripts have icons in the kde panel for easy launching ON NEED.

    What I don't yet know is if any of this survives a reboot in which case
    I will also have to know exactly what is left alive and devise maybe a
    common CleanUp scripts for use when done with either.


    #!/usr/bin/env bash
    # single-command script to use both soundcards to produce simultaneous speakers and headset output
    # ... first get pipewire's way of seeing the soundcards by commanding:
    # pactl list short sinks
    # ... next using those sink names combine your soundcards under a third name
    # of your choice such as 'bothcards' by commanding:
    pactl load-module module-combine-sink sink_name=bothcards slaves=alsa_output.pci-0000_7b_00.6.analog-stereo,alsa_output.usb-ASUSTeK_XONAR_SOUND_CARD-00.analog-stereo
    # note the index number assigned as a return to the command,
    example: 536870916
    # if you forgot the index get it by comanding:
    # pactl list short modules
    # 'unload' a loaded module by commanding:
    # pactl unload-module <the index #>
    # ... next again get pipewire's way of seeing things, now INCLUDING
    # the 'bothcards' sink by commanding:
    # pactl list short sinks
    # adjust running applications such as VLC in PAVUCTL to use 'bothcards'




    #!/usr/bin/env bash
    # single-command script to hear guitar plugged into soundcrad
    Mic/Line-In port
    # without using any application and to hear in in speakers as well as
    headset
    # ... first see how pipewire sees the soundcards by commanding:
    # pactl list short sources
    # ... next make sure that in the DUAL Mic/Line-In port Line-In is active
    by commanding:
    # pactl set-source-port alsa_input.usb-ASUSTeK_XONAR_SOUND_CARD-00.analog-stereo analog-input-linein
    # ... next load the loopback module setting latecy aggressivity 1 to 20
    to avoid hearing static
    pactl load-module module-loopback source=alsa_input.usb-ASUSTeK_XONAR_SOUND_CARD-00.analog-stereo
    sink=bothcards latency_msec=20
    # outcome is unpredictable if the 'sink=' directive is missing or
    unusable
    # it MAY be possible to REDIRECT loopback to a sink other than
    default or source
    # pactl load-module module-loopback source=alsa_input.usb-ASUSTeK_XONAR_SOUND_CARD-00.analog-stereo sink=alsa_output.pci-0000_7b_00.6.analog-stereo latency_msec=20
    # note the index number assigned as a return to the command,
    example: 536870916
    # if you forgot the index get it by comanding:
    # pactl list short modules
    # 'unload' a loaded module by commanding:
    # pactl unload-module <the index #>
    # ... next VERIFY that the 'bothcards' sink exists by commanding:
    # pactl list short sinks




    --- Synchronet 3.22a-Linux NewsLink 1.2