Fedora: Falscher Port bei Pulseaudio gesetzt

Wer beim Wechsel zu Fedora 34 auch plötzlich seine oder ihre Musik aus dem Kopfhörer hören mußte, dem kann wohl doch helfen.

Fedora: Falscher Port bei Pulseaudio gesetzt

Die Ursache habe ich zwar nicht finden können, aber es gibt eine automatische Lösung das Problem: Den Port beim Desktopstart umstellen.

Wir brauchen:

  1. Eine Desktopdatei für den Autostart
  2. ein kleines Bashscript
  3. eine dynamische Anpassung an sich verändernde PulseAudio Sinks.

~/.config/autostart/fixpipewire.desktop
[Desktop Entry]
Version=1.0
Name=Fixpipewire
GenericName=Fixpipewire
Comment=fixes audio port selection
Exec=/home/<username>/.local/bin/fixpipewire
Icon=pva
Terminal=false
Type=Application
StartupNotify=false
Categories=extras
Keywords=tools
X-Desktop-File-Install-Version=0.21
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=5

Das hier angegebene Script sieht dann so aus:

~/.local/bin/fixpipewire

#!/bin/bash

pactl list sinks | grep -B2 „Name: alsa_output.pci-0000_0a_00.4.analog-stereo“ | grep Ziel | sed -e „s/^.* #//g“ | awk ‚{print „pactl set-sink-port „$1″ analog-output-lineout“;}’| bash

Wie man an die Details kommt

Mehrere Details müssen wir erwähnen. Mit

$ pactl list sinks | less

bekommen wir eine Liste mit allen Sinks. Auf Deutsch heißen die Sinks leider „Ziel“.. keine Ahnung welches Genie da eine Übersetzung angebracht hat 🙁

Wir schauen nach folgenden Angaben:  Sink #, Name und .. Portid

Beispiel:

Ziel #48

Name: alsa_output.pci-0000_0a_00.4.analog-stereo
Beschreibung: Starship/Matisse HD Audio Controller Analog Stereo

Ports:
analog-output-lineout: Line-Ausgang (type: Line, priority: 9000, availability group: Legacy 4, not available)
analog-output-headphones: Kopfhörer (type: Kopfhörer, priority: 9900, availability group: Legacy 5, availability unknown)
Aktiver Port: analog-output-headphones

Der aktive Port ist die Stellung, die das Ausgabegeräte gerade hat. Im Beispiel oben ist das z.Z. „analog-output-headphones“, also wird der Ton auf den Kopfhörern ausgegeben. Das beheben wir so:

$ pactl set-sink-port 48 analog-output-lineout

Da wir das Script per Desktopdatei in den Autostart gebracht haben, mit einer Verzögerung von 5 Sekunden, wird der Port jetzt bei Desktoplogin umgestellt, egal wie oft man ein- und ausloggt.

PulseAudio möchte Defaultdevice nicht ändern

Stellt Euch mal vor, Euer neuer Desktop-PC finden den HDMI Monitor mit Soundmodul vor dem dem Mainboard und alle Apps möchten immer dort Ihren Ton ausgeben…

PulseAudio möchte Defaultdevice nicht ändern

Da man das verständlicherweise nicht möchte, weil die Lautsprecher am Mainboard dran sind, würde man erwarten, daß man PulseAudio sagen kann, welches denn das Defaultgerät für die Soundausgabe ist. Das kann man tatsächlich, genauso machen:

$ pacmd list-sinks | grep -i name:
name: <alsa_output.pci-0000_04_00.1.hdmi-stereo-extra1>
name: <upnp>
name: <combined>
name: <alsa_output.pci-0000_0a_00.4.analog-stereo>

Eine genauere Info gibt es mit „pacmd list-sinks | grep -i name“ (ohne den Doppelpunkt ).

Nun geben wir das gewünschte Geräte einfach via pactl an:

$ pactl set-default-sink alsa_output.pci-0000_0a_00.4.analog-stereo

Oft funktioniert das, aber was, wenn nicht?

Da gibt es eine einfache Lösung via ALSA, der Advanced Linux Sound Architecture, die die Basis für jedweden Linuxton bildet. Zunächst müssen wir feststellen, welche Soundkarten gefunden werden:

$ cat /proc/asound/cards
0 [NVidia ]: HDA-Intel – HDA NVidia
          HDA NVidia at 0xfc080000 irq 38
1 [Generic ]: HDA-Intel – HD-Audio Generic
           HD-Audio Generic at 0xfc700000 irq 97
2 [C925e ]: USB-Audio – Logitech Webcam C925e
          Logitech Webcam C925e at usb-0000:0a:00.3-2.2, high speed

Ihr seht die Zahlen vor den Namen? Die brauchen wir um in der /etc/asound.conf die Defaults einzustellen:

$ cat /etc/asound.conf
#
# Place your global alsa-lib configuration here…
#

defaults.pcm.card 1
defaults.ctl.card 1

Danach müssen wir nur noch PulseAudio neustarten:

$ systemctl restart –user pulseaudio
$ systemctl restart –user pulseaudio

Nicht über die beiden Restarts wundern, einfach machen 😉 Es könnte auch schon beim ersten klappen, aber einige PulseAudio Module machen beim ersten Restart erfahrungsgemäß Probleme, daher einfach 2x machen 😀

Jetzt sollte Eurer Ton auf der Soundkarte Eures Vertrauens zuhören sein 😀