Comment faire en sorte qu'Alsa choisisse automatiquement un périphérique audio préféré?


36

J'ai acheté une carte son USB. Je voudrais configurer mon bureau Linux pour qu'il préfère le périphérique USB, s'il est branché et commute automatiquement lorsque le périphérique est (dé) branché. Est-ce possible et comment?


Debian utilise plutôt pulseaudio.
Braiam

Réponses:


36

Trouvez votre carte avec

$ cat /proc/asound/cards

Pour obtenir des noms de carte ALSA valides, utilisez aplay:

$ aplay -l

puis créez /etc/asound.confavec ce qui suit:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Remplacez «carte 1» par le numéro ou le nom de votre carte déterminé ci-dessus.

Alternativement, vous pouvez modifier l'ordre de vos cartes afin que votre carte USB soit la carte 0 et qu'elle fonctionne sans modification asound.conf.


2
J'ai essayé votre suggestion, mais lorsque la carte USB est débranchée, l'audio cesse de fonctionner complètement, au lieu de passer à la carte intégrée.
Petr Pudlák

2
En utilisant un RPI2, cette solution a fonctionné pour moi. J'ai essayé tout le reste, mais rien n'a fonctionné jusqu'à ce que je fasse celui-ci. (J'ai dû utiliser la "carte 0" sur la mienne).
Rob Gibbons

2
En utilisant la configuration ci-dessus, le son sur YouTube sur Palemoon n'a pas fonctionné pour moi, cette configuration a fonctionné: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234

coincé pour cela un jour! et tu viens de sauver mon cul!
alamin

2
N'UTILISEZ PAS le piratage de traitement par lots ésotérique dans les réponses aux gens normaux. Au lieu d'écrire une ligne unique qui extrait les colonnes de la sortie, décrivez en mots comment trouver les informations souhaitées dans la sortie complète.
Szczepan Hołyszewski

16

c'est la méthode pour sélectionner la carte son par défaut dans Alsa. Vous souhaiterez peut-être installer Alsa pour que cette méthode fonctionne si vous utilisez Pulse Audio.

cat / proc / asound / modules

listera vos modules sonores. La sortie de la commande sera comme ceci (par exemple):

0 snd_hda_intel

1 snd_usb_intel

vous pouvez facilement comprendre laquelle est votre carte son USB par le haut.

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

éditez ce fichier alsa-base.conf de manière à ce que votre carte préférée ait un index = -2 / 0 et que l'autre carte ait un index = -1 / 1 (restez avec -2 et -1)

option snd_hda_intel index = -1

option snd_usb_intel index = -2

dans ce cas, le périphérique USB est le périphérique préféré.

si vous avez deux cartes différentes avec le même nom de la sortie, comme ceci:

option snd_hda_intel

option snd_hda_intel

émettez cette commande pour savoir laquelle est laquelle:

chat / proc / asound / cartes

puis éditez les modules de cette façon:

options snd_hda_intel enable = 1 index = 0

options snd_hda_intel enable = 0 index = 1

un redémarrage peut être nécessaire. vous devrez peut-être basculer manuellement vos cartes son.


Que voulez-vous dire par "modifier la sortie"? Comment puis-je modifier la sortie?
Petr Pudlák

J'ai apporté les modifications nécessaires dans la réponse. Essayez cette version. J'espère que cela aide. Les méthodes peuvent varier selon la saveur de Linux que vous utilisez.
Ashildr

Merci. Comment puis-je vérifier la configuration? J'ai identifié les cartes, ajouté les options appropriées, redémarré, mais je ne vois aucun changement - la carte interne (Intel) est toujours la préférée.
Petr Pudlák

essayez> options snd-usb-intel enable = 1 index = 0 (pour activer)> options snd-hda-intel enable = 0 index = 1 (pour désactiver) ou> options snd-hda-intel enable = 0 index = 0> options snd-usb-intel enable = 1 index = 1 et redémarrage
Ashildr

c'est-à-dire, activez usb désactivez l'autre en utilisant enable = 0 ou 1, faites également l'inverse. Je ne sais pas ce qui fonctionnera pour vous. Le redémarrage est nécessaire. Je souhaite que vous résolviez votre problème
Ashildr

4

Je ne pouvais pas non plus obtenir de sortie de mon périphérique USB. Ma cat /proc/asound/modulessortie était:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

J'ai essayé les deux réponses décrites ici, ce qui n'a pas aidé (avec de nombreuses combinaisons d'index et beaucoup de redémarrage). Je pense que le problème était que mon périphérique USB s'est initialisé après le démarrage. Quoi qu'il en soit, ma solution de travail consiste à mettre sur liste noire les 2 autres périphériques audio en les mettant /etc/modprobe.d/blacklist.confà jour en tant que:

blacklist snd_hda_intel

3

La réponse de Matija Nalis n'a fonctionné qu'à moitié pour moi (alsamixer a changé par défaut, mais d'autres choses comme aplay et firefox ont obstinément collé avec le mauvais défaut). Cet exemple tiré du wiki Debian a fonctionné pour moi (sur un ordinateur portable CentOS-6):

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

Pour mémoire: ALSA est mal documenté, et surtout ce truc très simple comme sélectionner la carte à utiliser est bien trop difficile. Pire, il semble changer d'un système à l'autre. De plus, j'ai obtenu cette balise "Generic_1" de aplay -l où elle apparaît comme "carte 1" dans la liste. D'autres personnes semblaient l'utiliser, alors j'ai fait de même ... ce que cela signifie, je ne peux pas le dire.


1

Bien que vous puissiez modifier la carte alsa par défaut en modifiant .asoundrc ou le système asound.conf, cette approche présente quelques problèmes importants.

Il est fragile et nécessite le redémarrage de l'application pour être respecté.

Si vous souhaitez changer de carte à la volée, vous devez vraiment utiliser un serveur de son qui résume correctement les applications de la carte son, comme pulseaudio.


Certaines applications comme Skype beta ignorent cela et se connectent à la carte ALSA par défaut. Cela n'entraîne aucun son pour Skype lorsque HDMI est le premier appareil au lieu de HDA.
Max N

-1

Voici une variante des réponses de Matija Nalis et Tel. C'est ce qui a fonctionné pour moi:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, audio HDMI comme carte 0 et carte son USB comme carte 1 selon aplay -l)

Remarque: d'autres méthodes n'ont pas fonctionné pour moi, car / proc / asound / modules n'existe pas et il n'y a pas de module audio hdmi à mettre sur liste noire ou à faible priorité, il est intégré au noyau. Il semble que j'aurais dû recompiler le noyau sans prise en charge audio HDMI pour le désactiver complètement.


sudo modprobe $ soundcard_driver ferait ce que vous désirez pour / proc / asound / modules
linuxdev2013

@ linuxdev2013 comment pourriez-vous modprobe un pilote qui n'est pas capable de modprobe? Comme expliqué ci-dessus, ce n'est pas un module, il est intégré au noyau.
astooooooo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.