Як змусити Alsa автоматично вибрати бажаний звуковий пристрій?


36

Купив USB звукову карту. Я хотів би встановити свій робочий стіл Linux так, щоб він віддав перевагу USB-пристрою, якщо він підключений та автоматично перемикається, оскільки пристрій (не) підключено. Чи можливо, і як?


Debian замість цього використовує pulseaudio.
Брайам

Відповіді:


36

Знайдіть свою картку за допомогою

$ cat /proc/asound/cards

Щоб отримати дійсні назви карт ALSA, використовуйте aplay:

$ aplay -l

а потім створити за /etc/asound.confдопомогою наступного:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Замініть "картку 1" на номер або назву вашої картки, визначені вище.

Крім того, ви можете змінити замовлення своїх карток, щоб ваша USB-карта була карткою 0, і вона працюватиме без редагування asound.conf.


2
Я спробував вашу пропозицію, але коли відключена USB-карта, звук перестає працювати повністю, замість того, щоб перейти на вбудовану картку.
Петро Пудлак

2
Використовуючи RPI2, це рішення працювало на мене. Спробував усі інші, але нічого не вийшло, поки я цього не зробив. (Доводилося використовувати "картку 0" на моїй).
Роб Гіббонс

2
Використовуючи вищевказану конфігурацію, звук у ютубі на палемуні для мене не працював, цей конфігурація працювала: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234

застряг на цьому один день! і ти щойно врятував мою попу!
аламін

2
НЕ використовуйте езотеричну серійну обробку хакерів у відповідях нормальних людей. Замість того, щоб писати однокласник, який витягує стовпці з результатів, опишіть словами, як знайти потрібну інформацію в повному обсязі.
Szczepan Hołyszewski

16

це метод вибору звукової карти за замовчуванням в Alsa. Ви можете встановити Alsa, щоб цей метод працював, якщо ви використовуєте Pulse Audio.

cat / proc / asound / модулі

перерахує ваші звукові модулі. Вихід команди буде таким (наприклад):

0 snd_hda_intel

1 snd_usb_intel

ви можете легко зрозуміти, яка з вас звукова карта usb зверху.

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

відредагуйте цей alsa-base.conf таким чином, щоб у вибраній картці був індекс = -2 / 0, а на іншій картці індекс = -1 / 1 (дотримуйтесь -2 і -1)

параметри snd_hda_intel index = -1

параметри snd_usb_intel index = -2

у цьому випадку USB-пристрій є кращим пристроєм.

якщо у вас є дві різні картки з однаковою назвою на виході, наприклад:

параметри snd_hda_intel

параметри snd_hda_intel

видайте цю команду, щоб з’ясувати, що саме:

кішка / Proc / Asound / картки

потім редагуйте модулі таким чином:

параметри snd_hda_intel enable = 1 індекс = 0

параметри snd_hda_intel enable = 0 індекс = 1

може знадобитися перезавантаження. Тому, можливо, доведеться вручну перемикати звукові карти.


Що ви маєте на увазі під "модифікацією результату"? Як я можу змінити вихід?
Петро Пудлак

я вніс необхідні зміни у answer.try цю версію. сподіваюся, що це допоможе. Методи можуть відрізнятися залежно від смаку Linux, який ви використовуєте.
Ашильдр

Дякую. Як я можу перевірити налаштування? Я визначив карти, додав відповідні параметри, перезавантажив, але я не бачу змін - все-таки внутрішня (Intel) карта є кращою.
Петро Пудлак

спробуйте> параметри snd-usb-intel enable = 1 індекс = 0 (увімкнути)> параметри snd-hda-intel enable = 0 індекс = 1 (відключити) або> параметри snd-hda-intel enable = 0 index = 0> options snd-usb-intel enable = 1 index = 1 and reboot
Ashildr

тобто, увімкніть usb відключити інший, використовуючи enable = 0 або 1, зробіть це і навпаки. я не впевнений, що буде працювати для вас. перезавантаження потрібно. я хочу вирішити
вашу

4

Я також не міг отримати вихід з мого USB-пристрою. Мій cat /proc/asound/modulesрезультат:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Я спробував обидві описані тут відповіді, які не допомогли (з багатьма комбінаціями індексів та великою кількістю перезапуску). Я думаю, що проблема полягала в ініціалізації мого USB-пристрою після завантаження. Що б там не було, тому моє робоче рішення - це чорний список інших 2-х звукових пристроїв шляхом оновлення у /etc/modprobe.d/blacklist.confвигляді:

blacklist snd_hda_intel

3

Відповідь від Matija Nalis для мене працювала лише наполовину (alsamixer змінив типовий стан, але інші речі, такі як aplay і firefox, вперто трималися за неправильним замовчуванням). Цей приклад із вікі Debian працював на мене (на ноутбуці CentOS-6):

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

Для завершення: ALSA погано задокументований, і особливо це дуже простий матеріал, як, наприклад, вибір картки для використання занадто важкий. Гірше, що, здається, змінюється між системами. Крім того, я отримав тег "Generic_1" з aplay -l, де він відображається як "картка 1" у списку. Інші люди, здавалося, користуються ним, тому я зробив те саме ... що це означає, я не можу сказати.


1

Хоча ви можете змінити карту alsa за замовчуванням, відредагувавши .asoundrc або систему asound.conf, є кілька суттєвих проблем із цим підходом.

Це неміцно, і вимагає, щоб перезавантаження програми було виконано.

Якщо ви хочете перемикати карти на льоту, то вам дійсно потрібно використовувати звуковий сервер, який правильно абстрагує програми із звукової карти, наприклад, pulseaudio.


Деякі додатки, такі як Skype beta, ігнорують це і підключаються до картки ALSA за замовчуванням. Це не дає звуку для Skype, коли HDMI є першим пристроєм замість HDA.
Макс N

-1

Ось варіант відповідей Матія Наліса та Теля. Це те, що працювало для мене:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, аудіо HDMI як картка 0 та звукова карта USB як карта 1 відповідно до aplay -l)

Примітка: інші методи для мене не спрацювали, оскільки / proc / asound / модулі не існує, і немає аудіомодуля hdmi до чорного списку або ставиться з низьким пріоритетом, він вбудовується в ядро. Здається, мені довелося б перекомпілювати ядро ​​без підтримки hdmi-аудіо, щоб повністю його відключити.


sudo modprobe $ soundcard_driver зробить те, що ви хочете для / proc / asound / module
linuxdev2013

@ linuxdev2013, як ви могли б змусити драйвер, який не підтримує modprobe? Як було пояснено вище, це не модуль, він вбудований у ядро.
astooooooo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.