Skip to content

omarchy-audio-output-sink fails to resolve physical sink for EasyEffects #12204

Description

@layolayo

System details

Intel Core Ultra 7 155H, Intel Arc Graphics, Omarchy 4.0.3-1 (Lenovo ThinkPad X1 Carbon Gen 12)

What's wrong?

Summary

omarchy-audio-output-sink attempts to resolve virtual/DSP sinks like EasyEffects down to the physical hardware sink so that volume controls (both keyboard shortcuts and the Omarchy shell audio panel slider) act on real speaker loudness rather than altering the level going into the DSP processing chain.

However, the resolution check for EasyEffects in omarchy-audio-output-sink (lines 40–42) searches pactl list sink-inputs for application.name = "EasyEffects":

downstream="$(pactl list sink-inputs 2>/dev/null |
  awk -v virt="$sink" '
    /^Sink Input #/ {target = ""}
    /^[[:space:]]*Sink:/ {target = $2}
    /node\.name = / {
      name = $0
      sub(/.*node\.name = "/, "", name)
      sub(/"$/, "", name)
      if (index(name, virt) == 1 && target != "") {print target; exit}
    }
    /application\.name = "EasyEffects"/ {
      if (virt == "easyeffects_sink" && target != "") {print target; exit}
    }')"

In PipeWire, EasyEffects communicates natively via PipeWire SPA client nodes rather than through the PulseAudio emulation layer (pipewire-pulse). Therefore, application.name = "EasyEffects" never appears in pactl list sink-inputs.

Impact

  1. omarchy-audio-output-sink fails to resolve easyeffects_sink to the physical sink and falls back to returning easyeffects_sink.
  2. Both omarchy-audio-output-volume (volume keys) and Panel.qml (volumeSinkProc / Output slider in the shell audio panel) control easyeffects_sink instead of the physical sink.
  3. Changing easyeffects_sink volume is largely absorbed or normalized by EasyEffects's limiter/compressor/autogain, resulting in little to no audible volume change when adjusting the slider.
  4. If the underlying hardware sink is muted or at 0% (e.g. after booting or switching audio profiles), neither the volume keys nor the shell slider can raise or unmute the physical hardware speaker, leaving the system completely silent even while audio players show normal playback.

Steps to Reproduce

  1. Install and run EasyEffects (systemctl --user enable --now easyeffects.service), routing output to laptop speakers (alsa_output.*.HiFi__Speaker__sink).
  2. Run omarchy-audio-output-sink.
  3. Notice it outputs easyeffects_sink instead of resolving to the downstream physical speaker sink (alsa_output.*.HiFi__Speaker__sink).
  4. Mute the physical hardware speaker (pactl set-sink-mute <alsa_output_sink> 1) and try raising volume with keyboard volume keys or the Omarchy shell Output slider. Notice the physical speaker remains muted and at 0% volume.

Suggested Fix

When $sink == "easyeffects_sink", resolve the target downstream sink via active PipeWire links (pw-link -l) or EasyEffects configuration:

if [[ $sink == "easyeffects_sink" ]]; then
  # Check active PipeWire link
  target=$(pw-link -l 2>/dev/null | awk '$1 == "ee_soe_output_level:output_FL" {getline; print $2}' | cut -d: -f1)
  if [[ -n $target && $target == alsa_output.* ]]; then
    printf '%s\n' "$target"
    exit 0
  fi
  # Fallback to configured output device in easyeffects database
  target=$(grep '^outputDevice=' "${XDG_CONFIG_HOME:-$HOME/.config}/easyeffects/db/easyeffectsrc" 2>/dev/null | cut -d= -f2-)
  if [[ -n $target && $target == alsa_output.* ]]; then
    printf '%s\n' "$target"
    exit 0
  fi
fi

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions