Я купил звуковую карту USB. Я хотел бы настроить свой рабочий стол Linux так, чтобы он предпочитал USB-устройство, если оно подключено и автоматически переключается, когда устройство (не) подключено. Возможно ли это и как?
7 ответов
Найдите свою карточку с
$ cat /proc/asound/cards
Чтобы получить действительные имена карт ALSA, используйте aplay
:
$ aplay -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq
и затем создайте /etc/asound.conf
со следующим:
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
Замените "карточка 1" номером или названием вашей карточки, указанным выше.
Кроме того, вы можете изменить порядок своих карт, чтобы ваша карта USB была картой 0 и работала без редактирования asound.conf
.
это метод выбора звуковой карты по умолчанию в Alsa. Вы можете установить Alsa, чтобы этот метод работал, если вы используете Pulse Audio.
cat /proc /asound /modules
перечислю ваши звуковые модули.Вывод команды будет выглядеть следующим образом (например):
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 = -1
параметры snd_usb_intel index = -2
в этом случае USB-устройство является предпочтительным устройством.
если у вас есть две разные карты с одинаковым именем из выходных данных, например:
параметры snd_hda_intel
параметры snd_hda_intel
выполните эту команду, чтобы узнать, что есть что:
cat /proc /asound /cards
затем отредактируйте модули следующим образом:
параметры snd_hda_intel enable = 1 index = 0
параметры snd_hda_intel enable = 0 index = 1
может потребоваться перезагрузка. так что вам, возможно, придется вручную переключать звуковые карты.
Ответ от 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". Другие люди, кажется, использовали его, поэтому я сделал то же самое ... что это значит, я не могу сказать.
Я также не смог получить вывод с моего 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
Хотя вы можете изменить карту alsa по умолчанию, отредактировав .asoundrc или системный asound.conf, у этого подхода есть пара существенных проблем.
Это хрупкий и требует перезапусков приложений, чтобы соблюдать.
Если вы хотите переключать карты на лету, то вам действительно нужно использовать звуковой сервер, который правильно абстрагирует приложения от звуковой карты, такие как pulseaudio.
Инструменты pavucontrol и paprefs также могут помочь в настройке, но, возможно, это слишком просто :) или, может быть, это просто испортит все, что вы уже сделали.
Вот вариант ответов Matija Nalis и Tel. Вот что сработало для меня:
~/.Asoundrc
defaults.pcm.!card 1
defaults.ctl.!card 1
(Odroid C0, Debian Jessie, аудио HDMI как карта 0 и звуковая карта USB как карта 1 согласно aplay -l)
Примечание: другие методы у меня не сработали, так как /proc /asound /modules не существует, и нет аудио модуля hdmi для внесения в черный список или с низким приоритетом, он встроен в ядро. Кажется, мне пришлось бы перекомпилировать ядро без поддержки аудио hdmi, чтобы полностью отключить его.