Wie kann Alsa automatisch ein bevorzugtes Audiogerät auswählen?

36

Ich habe eine USB-Soundkarte gekauft. Ich möchte meinen Linux-Desktop so einrichten, dass er das USB-Gerät bevorzugt, wenn es angeschlossen ist, und automatisch wechselt, wenn das Gerät (un) angeschlossen ist. Ist es möglich und wie?

Petr Pudlák
quelle
Debian verwendet stattdessen pulseaudio.
Braiam

Antworten:

36

Finden Sie Ihre Karte mit

$ cat /proc/asound/cards

Um gültige ALSA-Kartennamen zu erhalten, verwenden Sie aplay:

$ aplay -l

und dann erstelle /etc/asound.confmit folgendem:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Ersetzen Sie "Karte 1" durch die oben angegebene Nummer oder den Namen Ihrer Karte.

Alternativ können Sie die Reihenfolge Ihrer Karten ändern, sodass Ihre USB-Karte die Karte 0 ist und ohne Bearbeitung funktioniert asound.conf.

Matija Nalis
quelle
2
Ich habe versucht, Ihren Vorschlag, aber wenn die USB-Karte ausgesteckt ist, funktioniert Audio nicht mehr vollständig, anstatt auf die eingebaute Karte zu wechseln.
Petr Pudlák
2
Mit einem RPI2 funktionierte diese Lösung für mich. Versuchte den ganzen Rest, aber nichts funktionierte, bis ich dies tat. (Musste "Karte 0" für meine verwenden).
Rob Gibbons
2
Unter Verwendung der obigen Konfiguration funktionierte der Sound in YouTube auf Palemoon bei mir nicht. Diese Konfiguration funktionierte: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234
für diesen einen Tag stecken! und du hast gerade meinen Arsch gerettet!
Alamin
2
Verwenden Sie keine esoterischen Batch-Processing-Hackery in Antworten auf normale Menschen. Anstatt einen Einzeiler zu schreiben, der Spalten aus der Ausgabe extrahiert, beschreiben Sie in Worten, wie Sie die gewünschten Informationen in der vollständigen Ausgabe finden.
Szczepan Hołyszewski
16

Dies ist die Methode zur Auswahl der Standard-Soundkarte in Alsa. Sie können Alsa installieren, damit diese Methode funktioniert, wenn Sie Pulse Audio verwenden.

cat / proc / asound / modules

listet Ihre Soundmodule auf. Die Ausgabe des Befehls sieht wie folgt aus (zB):

0 snd_hda_intel

1 snd_usb_intel

Sie können ziemlich leicht verstehen, welches Ihre USB-Soundkarte von oben ist.

nano /etc/modprobe.d/alsa-base.conf

Bearbeiten Sie diese alsa-base.conf so, dass Ihre bevorzugte Karte einen Index von -2 / 0 und die andere Karte einen Index von -1 / 1 hat (bleiben Sie bei -2 und -1).

options snd_hda_intel index = -1

options snd_usb_intel index = -2

In diesem Fall ist das USB-Gerät das bevorzugte Gerät.

Wenn Sie zwei verschiedene Karten mit dem gleichen Namen aus der Ausgabe haben, wie folgt:

options snd_hda_intel

options snd_hda_intel

Setzen Sie diesen Befehl ab, um herauszufinden, welches welches ist:

Katze / proc / asound / Karten

Dann bearbeiten Sie die Module wie folgt:

options snd_hda_intel enable = 1 index = 0

options snd_hda_intel enable = 0 index = 1

Möglicherweise ist ein Neustart erforderlich. Möglicherweise müssen Sie Ihre Soundkarten manuell umschalten.

Ashildr
quelle
Was meinst du mit "Ändern der Ausgabe"? Wie kann ich die Ausgabe ändern?
Petr Pudlák
Ich habe notwendige Änderungen in der Antwort vorgenommen. Versuchen Sie diese Version. Hoffen Sie, dass dies hilft. Die Methoden können je nach dem verwendeten Linux-Geschmack variieren.
Ashildr
Vielen Dank. Wie kann ich das Setup überprüfen? Ich habe die Karten identifiziert, die entsprechenden Optionen hinzugefügt und neu gestartet, sehe aber keine Änderung - trotzdem ist die interne (Intel-) Karte die bevorzugte.
Petr Pudlák
versuchen Sie> Optionen snd-usb-intel aktivieren = 1 Index = 0 (zu aktivieren)> Optionen snd-hda-intel aktivieren = 0 Index = 1 (zu deaktivieren) oder> Optionen snd-hda-intel aktivieren = 0 Index = 0> options snd-usb-intel enable = 1 index = 1 und
neustart
dh usb aktivieren den anderen mit enable = 0 oder 1 deaktivieren, dies auch umgekehrt tun. Ich bin nicht sicher, welche für Sie funktionieren wird. Neustart ist erforderlich. Ich möchte, dass Sie Ihr Problem lösen
Ashildr
4

Ich konnte auch keine Ausgabe von meinem USB-Gerät erhalten. Meine cat /proc/asound/modulesAusgabe war:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Ich habe beide hier beschriebenen Antworten ausprobiert, was nicht geholfen hat (mit vielen Indexkombinationen und viel Neustart). Ich denke, das Problem war, dass mein USB-Gerät nach dem Booten initialisiert wurde. Wie auch immer, meine funktionierende Lösung ist es, andere 2 Audiogeräte auf die schwarze Liste zu setzen, indem sie aktualisiert wird /etc/modprobe.d/blacklist.confals:

blacklist snd_hda_intel
user533723
quelle
3

Die Antwort von Matija Nalis hat bei mir nur zur Hälfte geklappt (alsamixer hat die Voreinstellung geändert, aber andere Dinge wie aplay und firefox haben sich hartnäckig an die falsche Voreinstellung gehalten). Dieses Beispiel aus dem Debian-Wiki funktionierte für mich (auf CentOS-6-Laptops):

defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0

Um es festzuhalten: ALSA ist schlecht dokumentiert, und besonders diese sehr einfachen Dinge wie die Auswahl der zu verwendenden Karte sind viel zu schwierig. Schlimmer noch, es scheint sich zwischen den Systemen zu ändern. Außerdem habe ich das Tag "Generic_1" von aplay -l erhalten, wo es als "Karte 1" in der Liste erscheint. Andere Leute schienen es zu benutzen, also habe ich dasselbe getan ... was es bedeutet, kann ich nicht sagen.

Tel
quelle
1

Während Sie die Standard-Alsa-Karte ändern können, indem Sie .asoundrc oder die asound.conf des Systems bearbeiten, gibt es bei diesem Ansatz einige schwerwiegende Probleme.

Es ist zerbrechlich und erfordert einen Neustart der Anwendung.

Wenn Sie Karten im laufenden Betrieb wechseln möchten, müssen Sie einen Soundserver verwenden, der die Anwendungen von der Soundkarte korrekt abstrahiert, z. B. pulseaudio.

Grant Diffey
quelle
Einige Anwendungen wie Skype Beta ignorieren dies jedoch und stellen eine Verbindung zur Standard-ALSA-Karte her. Dies führt zu keinem Audio für Skype, wenn HDMI anstelle von HDA das erste Gerät ist.
Max N
-1

Hier ist eine Variante der Antworten von Matija Nalis und Tel. Das hat bei mir funktioniert:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, HDMI-Audio als Karte 0 und USB-Soundkarte als Karte 1 nach aplay -l)

Hinweis: Andere Methoden haben bei mir nicht funktioniert, da / proc / asound / modules nicht existiert und es kein HDMI-Audiomodul gibt, das auf die schwarze Liste gesetzt oder auf niedrige Priorität gesetzt werden kann. Es ist in den Kernel eingebettet. Es scheint, als hätte ich den Kernel ohne HDMI-Audio-Unterstützung neu kompilieren müssen, um ihn vollständig zu deaktivieren.

astooooooo
quelle
sudo modprobe $ soundcard_driver würde tun, was Sie für / proc / asound / modules
wünschen
@ linuxdev2013 wie könntest du einen treiber modprobe, der nicht modprobe-fähig ist? Wie oben erläutert, handelt es sich nicht um ein Modul, sondern um eine Einbettung in den Kernel.
Astooooooo