¿Cómo hacer que Alsa elija un dispositivo de sonido preferido automáticamente?

36

Compré una tarjeta de sonido USB. Me gustaría configurar mi escritorio Linux para que prefiera el dispositivo USB, si está enchufado y cambia automáticamente cuando el dispositivo está (desenchufado). ¿Es posible y cómo?

Petr Pudlák
fuente
Debian usa pulseaudio en su lugar.
Braiam

Respuestas:

36

Encuentra tu tarjeta con

$ cat /proc/asound/cards

Para obtener nombres válidos de tarjetas ALSA, use aplay:

$ aplay -l

y luego crea /etc/asound.confcon lo siguiente:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Reemplace "tarjeta 1" con el número o nombre de su tarjeta que se determinó anteriormente.

Alternativamente, puede cambiar el orden de sus tarjetas para que su tarjeta USB sea la tarjeta 0 y funcione sin edición asound.conf.

Matija Nalis
fuente
2
Intenté su sugerencia, pero cuando la tarjeta USB se desconecta, el audio deja de funcionar por completo, en lugar de cambiar a la tarjeta incorporada.
Petr Pudlák
2
Usando un RPI2, esta solución funcionó para mí. Intenté todo lo demás, pero nada funcionó hasta que hice este. (Tenía que usar la "tarjeta 0" en la mía).
Rob Gibbons, el
2
Usando la configuración anterior, el sonido en youtube en palemoon no funcionó para mí, esta configuración funcionó: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234
atrapado por este día! y me salvaste el culo!
alamin
2
NO use la piratería informática de procesamiento por lotes esotérico en las respuestas a personas normales. En lugar de escribir una línea que extraiga columnas de la salida, describa en palabras cómo encontrar la información deseada en la salida completa.
Szczepan Hołyszewski
16

Este es el método para seleccionar la tarjeta de sonido predeterminada en Alsa. Es posible que desee instalar Alsa para que este método funcione si está utilizando Pulse Audio.

cat / proc / asound / modules

enumerará sus módulos de sonido. La salida del comando será así (por ejemplo):

0 snd_hda_intel

1 snd_usb_intel

puedes entender fácilmente cuál es tu tarjeta de sonido usb desde arriba.

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

edite este alsa-base.conf de tal manera que su tarjeta preferida tenga un índice = -2 / 0 y la otra tarjeta tenga un índice = -1 / 1 (quédese con -2 y -1)

opciones snd_hda_intel index = -1

opciones snd_usb_intel index = -2

en este caso, el dispositivo usb es el dispositivo preferido.

si tiene dos tarjetas diferentes con el mismo nombre de la salida, así:

opciones snd_hda_intel

opciones snd_hda_intel

emita este comando para averiguar cuál es cuál:

gato / proc / asound / tarjetas

luego edite los módulos de esta manera:

opciones snd_hda_intel enable = 1 index = 0

opciones snd_hda_intel enable = 0 index = 1

puede ser necesario reiniciar, por lo que es posible que deba cambiar manualmente sus tarjetas de sonido.

Ashildr
fuente
¿Qué quieres decir con "modificar la salida"? ¿Cómo puedo modificar la salida?
Petr Pudlák
He realizado los cambios necesarios en la respuesta. Intente esta versión. Espero que esto ayude. Los métodos pueden variar según el sabor de Linux que utilice.
Ashildr
Gracias. ¿Cómo puedo verificar la configuración? Identifiqué las tarjetas, agregué las opciones apropiadas, reinicié, pero no veo ningún cambio; aún así, la tarjeta interna (Intel) es la preferida.
Petr Pudlák
try> options snd-usb-intel enable = 1 index = 0 (para habilitar)> options snd-hda-intel enable = 0 index = 1 (para deshabilitar) o> options snd-hda-intel enable = 0 index = 0> opciones snd-usb-intel enable = 1 index = 1 y reinicio
Ashildr
es decir, habilite usb deshabilite el otro usando enable = 0 o 1, haga esto viceversa también. No estoy seguro de cuál funcionará para usted. Es necesario reiniciar. Deseo resolver su problema
Ashildr
4

Tampoco pude obtener salida de mi dispositivo USB. Mi cat /proc/asound/modulessalida fue:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

He intentado las dos respuestas descritas aquí, que no ayudaron (con muchas combinaciones de índice y mucho reinicio). Creo que el problema fue que mi dispositivo USB se inicializó después del arranque. Lo que sea, entonces mi solución de trabajo es poner en la lista negra otros 2 dispositivos de sonido actualizándolos /etc/modprobe.d/blacklist.confcomo:

blacklist snd_hda_intel
usuario533723
fuente
3

La respuesta de Matija Nalis solo funcionó a medias para mí (alsamixer cambió el valor predeterminado, pero otras cosas como aplay y firefox obstinadamente se quedaron con el valor predeterminado incorrecto). Este ejemplo de la wiki de Debian funcionó para mí (en la computadora portátil CentOS-6):

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

Para el registro: ALSA está pobremente documentado, y especialmente esto es muy simple, como seleccionar qué tarjeta usar es demasiado difícil. Peor aún, parece cambiar entre sistemas. Además, obtuve esa etiqueta "Generic_1" de aplay -l donde aparece como "tarjeta 1" en la lista. Otras personas parecían estar usándolo, así que hice lo mismo ... lo que significa que no puedo decir.

Tel
fuente
1

Si bien puede cambiar la tarjeta alsa predeterminada editando .asoundrc o el sistema asound.conf, existen algunos problemas importantes con este enfoque.

Es frágil y requiere que se reinicie la aplicación para ser respetado.

Si desea cambiar las tarjetas sobre la marcha, entonces realmente necesita usar un servidor de sonido que abstraiga las aplicaciones de la tarjeta de sonido correctamente, como pulseaudio.

Grant Diffey
fuente
Sin embargo, algunas aplicaciones como Skype beta ignoran eso y se conectan a la tarjeta ALSA predeterminada. Eso no genera audio para Skype cuando HDMI es el primer dispositivo en lugar de HDA.
Max N
-1

Aquí hay una variante de las respuestas de Matija Nalis y Tel. Esto es lo que funcionó para mí:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, audio HDMI como tarjeta 0 y tarjeta de sonido USB como tarjeta 1 según aplay -l)

Nota: otros métodos no funcionaron para mí, ya que / proc / asound / modules no existe y no hay un módulo de audio hdmi para poner en la lista negra o poner en baja prioridad, está incrustado en el núcleo. Parece que habría tenido que volver a compilar el núcleo sin soporte de audio hdmi para deshabilitarlo por completo.

astooooooo
fuente
sudo modprobe $ soundcard_driver haría lo que deseara para / proc / asound / modules
linuxdev2013
@ linuxdev2013 ¿cómo podría modificar un controlador que no es compatible con modprobe? Como se explicó anteriormente, no es un módulo, está incrustado en el núcleo.
astooooooo