Как сделать внешнюю usb-аудиокарту дефолтной в системе с alsa
ОглавлениеМинисовет: Как быстро перейти к разделу в оглавленииВариант I: Жёсткая индексация аудиокартВариант II: Горячее подключение usb-audioВариант III: "Ручной" триггер переключения аудиокартВариант IV: переключение аудиокарт через asoundconf-gtk(GUI) / asoundconf(терминал) Выбор регулировки звука аудиокарты в Xfce Переключение аудиокарт из консолиРегулировка звука из консолиКак быстро перейти к разделу в оглавлении
* Щёлкните в браузере тройным щелчком мыши рядом со строкой или на строке интересующего раздела, чтобы строка в оглавлении полностью выделились.
* Нажмите Ctrl+c скопировав выделенное в буфер обмена.
* Нажмите Ctrl+f чтобы окно
Найти, в браузере, стало активным.
* Нажмите Ctrl+v для вставки выделенного из буфера обмена в окно
Найти браузера.
* Нажмите F3 или Ctrl+G или щёлкните по кнопке
Далее для перехода к следующему совпадению.
Для перехода к предыдущему совпадению, т.е. возврат к разделу оглавления, нажмите Shift+F3 или Ctrl+Shift+G или щёлкните по кнопке
НазадВсе горячие клавиши браузера Firefox (применимо и для Pale Moon):
https://support.mozilla.org/ru/kb/sochetaniya-klavishВариант I: Жёсткая индексация аудиокарт
Сложный
Смотрим свои аудиоустройства и их индексацию:
$ cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
1 [Headset ]: USB-Audio - Logitech USB Headset
Logitech Logitech USB Headset at usb-0000:03:00.1-1, full speed
Их два:
Дефолтная карта ICH6 с индексом 0.
Задача:
Поменять индексы так, чтобы usb аудиокарта Headset была с индексом 0.
Какой ядерный модуль использует аудиокарта ICH6?
$ lspci -knn | grep -A2 -i audio
00:1e.2 Multimedia audio controller [0401]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller [8086:266e] (rev 03)
Subsystem: Hewlett-Packard Company NX6110/NC6120 [103c:099c]
Kernel driver in use: snd_intel8x0
Используется ядерный модуль snd_intel8x0
В основном usb аудиоустройства используют ядерный модуль snd_usb_audio
# find /lib/modules/3.12.22-std-def-alt1/ -name snd*|grep usb|grep audio
/lib/modules/3.12.22-std-def-alt1/kernel/sound/usb/snd-usb-audio.ko
За редким исключением.
Какой модуль к какой карте относится разобрались.
Теперь нас интересует файл:
$ cat /etc/modprobe.d/alsa-modindex.conf
## spare index=0 for a hotplug soundcard (if any)
#options snd-usb-audio index=0
## offset HDMI output compared to onboard audio (#28648)
#options snd_hda_intel index=2,3
#options snd_intel8x0 index=2
#options snd_via82xx index=2
#options snd-bt87x index=3
#options snd_intel8x0m index=4
#options snd-atiixp-modem index=4
#options snd-via82xx-modem index=4
## get PC speaker out of the way
options snd_pcsp index=10
Теперь меняем индексы у карт так, чтобы Headset стала индексом 0, а ICH6 - индексом 1:
$ cat /etc/modprobe.d/alsa-modindex.conf
## spare index=0 for a hotplug soundcard (if any)
#options snd-usb-audio index=0
## offset HDMI output compared to onboard audio (#28648)
#options snd_hda_intel index=2,3
#options snd_intel8x0 index=2
#options snd_via82xx index=2
#options snd-bt87x index=3
#options snd_intel8x0m index=4
#options snd-atiixp-modem index=4
#options snd-via82xx-modem index=4
## get PC speaker out of the way
#options snd_pcsp index=10
options snd-usb-audio index=0
options snd_intel8x0 index=1
Модули и текущую индексацию можно увидеть здесь:
# cat /proc/asound/modules
0 snd_usb_audio
1 snd_intel8x0
Если непонятно какой модуль к какой карте относится, ищем поиском в lspci через less - клавиша /
После которой вводится модель поиска. Например имя ядерного модуля или тип устройства.
Или та же модель для поиска в команде ниже.
В примере для поиска, регистр типа устройства, audio, игнорируется:
# lspci -knn | less -p audio -I
Вместо типа audio, моделью для поиска может быть название ядерного модуля snd из вывода выше.
Если карт на самом деле больше, их можно все переиндексировать.
Перегружаемся и получаем звук usb-audio дефолтным.
В конфликтных ситуациях, когда две карты используют один и тот же ядерный модуль, их можно жёстко задать через id ( /etc/modprobe.d/alsa-modindex.conf):
http://forum.altlinux.org/index.php/topic,28619.msg199386.html#msg199386options snd-usb-audio index=0
options snd-hda-intel index=1
options snd-hda-intel index=2 id="NVidia"
Или:
Дописал в файл /etc/modprobe.d/alsa-modindex строчку
options snd-hda-intel index=1,0
И после перезагрузки порядок поменялся.
options - позволяет задать модулю параметр.
snd-hda-intel - название модуля драйвера алса, одинаковое для обоих карт (видимо одинаковая микросхема).
index - параметр, задающий приоритет модуля.
В данном случае есть два модуля с одинаковым названием. Поэтому первому (с индексом 0) задается более низкий приоритет (index= 1), а второму (с индексом 1) задается более высокий приоритет (index=0).
Получается, что индексы меняются местами с помощью одной строки.
Вариант II: Горячее подключение usb-audio
Исходно-дефолтное:
# cat /etc/modprobe.d/alsa-modindex.conf
## spare index=0 for a hotplug soundcard (if any)
#options snd-usb-audio index=0
## offset HDMI output compared to onboard audio (#28648)
#options snd_hda_intel index=2,3
#options snd_intel8x0 index=2
#options snd_via82xx index=2
#options snd-bt87x index=3
#options snd_intel8x0m index=4
#options snd-atiixp-modem index=4
#options snd-via82xx-modem index=4
## get PC speaker out of the way
options snd_pcsp index=10
В системе с:
# rpm -qa --last *alsa*|sort
alsa-oss-1.0.25-alt2 Пн 28 апр 2014 22:10:53
alsa-tools-1.0.27-alt2 Чт 01 май 2014 23:16:56
alsa-utils-1.0.27-alt3 Пт 18 окт 2013 09:26:53
libalsa-1.0.27-alt3 Пт 18 окт 2013 09:26:23
...
udev-alsa-0.3-alt1.2 Пт 18 окт 2013 09:27:29
До подключения usb-audio:
# cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
# cat /proc/asound/modules
0 snd_intel8x0
После подключения usb-audio:
# cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
1 [Headset ]: USB-Audio - Logitech USB Headset
Logitech Logitech USB Headset at usb-0000:03:00.1-1, full speed
# cat /proc/asound/modules
0 snd_intel8x0
1 snd_usb_audio
Собственно сама таблетка usb-audio hotplug (горячее подключение):
# ll /etc/udev/rules.d/00-usb-audio-hotplug.rules
-rw-r--r-- 1 root root 344 июн 24 06:30 /etc/udev/rules.d/00-usb-audio-hotplug.rules
# cat /etc/udev/rules.d/00-usb-audio-hotplug.rules
KERNEL=="pcmC[D0-9cp]*", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#pcmC}; K=$${K%%D*}; echo defaults.ctl.card $$K > /etc/asound.conf; echo defaults.pcm.card $$K >>/etc/asound.conf'"
KERNEL=="pcmC[D0-9cp]*", ACTION=="remove", PROGRAM="/bin/sh -c 'echo defaults.ctl.card 0 > /etc/asound.conf; echo defaults.pcm.card 0 >>/etc/asound.conf'"
Перегрузить рулезы:
# udevadm control --reload
Или перезагрузить компьютер.
Как это работает?
usb-audio не подключено к порту:
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.card 0
usb-audio подключено к порту:
# cat /etc/asound.conf
defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.card 1
usb-audio отключено от порта:
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.card 0
После горячего подключения usb-audio требуется перезапуск аудио-приложения.
Таблетку:
Hot-plugging a USB sound cardрекомендовали тут:
https://bugzilla.altlinux.org/show_bug.cgi?id=28648#c1Вариант III: "Ручной" триггер переключения аудиокарт
Этот же (Вариант II) вариант для аудиокарт
# cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
1 [Headset ]: USB-Audio - Logitech USB Headset
Logitech Logitech USB Headset at usb-0000:03:00.1-1, full speed
у которых текущие индексы,
# cat /proc/asound/modules
0 snd_intel8x0
1 snd_usb_audio
выполняется скрипт-триггером, не требующим udev-alsa:
# VAL=$(cat /etc/asound.conf |tail -c 2) && \
if (( $VAL == 1 )); then sed -i 's/1/0/g' /etc/asound.conf; \
else sed -i 's/0/1/g' /etc/asound.conf; fi
где:
/etc/asound.conf:
# cat /etc/asound.conf
defaults.ctl.card 1
defaults.pcm.card 1
Показать последний символ в последней строке
VAL=$(cat /etc/asound.conf |tail -c 2)
Проверка - если дефолтная карта в /etc/asound.conf с индексом 1, - истина
if (( $VAL == 1 ));
Тогда в файле /etc/asound.conf заменить в строках 1 на 0 сделав дефолтной карту 0
then sed -i 's/1/0/g' /etc/asound.conf
Иначе (если в /etc/asound.conf - 0) в /etc/asound.conf заменить 0 на 1, сделав дефолтной карту с индексом 1, - см. cat /proc/asound/cards
else sed -i 's/0/1/g' /etc/asound.conf
В else можно сделать более жёсткую проверку, добавив условие:
if (( $VAL == 0 ));
с соответствующим:
then sed -i 's/0/1/g' /etc/asound.conf; fi
Работает это так:
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
# VAL=$(cat /etc/asound.conf |tail -c 2) && \
if (( $VAL == 1 )); then sed -i 's/1/0/g' /etc/asound.conf; \
else sed -i 's/0/1/g' /etc/asound.conf; fi
# cat /etc/asound.conf
defaults.ctl.card 1
defaults.pcm.card 1
# VAL=$(cat /etc/asound.conf |tail -c 2) && \
if (( $VAL == 1 )); then sed -i 's/1/0/g' /etc/asound.conf; \
else sed -i 's/0/1/g' /etc/asound.conf; fi
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
Если сменить индексы правкой скрипта, скрипт сможет переключать например карты с индексами 1 и 2, устанавливая их по очереди дефолтной аудиокартой.
Минимальные требования скрипта, это наличие sed и libalsa в системе.
Этот вариант можно повесить опционально на панель через sudo для общесистемного переключения на дефолтную аудиокарту. Или файл asound.conf положить в домашний каталог как $HOME/.asound.conf и поправить скрипт.
Вариант IV: переключение аудиокарт через asoundconf-gtk(GUI) / asoundconf(терминал)
Изначально ваш выбор карт может быть например таким
0 - индекс аудиокарты (0 - дефолтная)
В квадратных скобках id (идентификатор) звуковой карты
$ cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
Используемый картой(ами) модуль
$ cat /proc/asound/modules
0 snd_intel8x0
После подключения usb-гарнитуры список индексов и модулей будет таким
$ cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
1 [Headset ]: USB-Audio - Logitech USB Headset
Logitech Logitech USB Headset at usb-0000:03:00.0-1, full speed
$ cat /proc/asound/modules
0 snd_intel8x0
1 snd_usb_audio
Наша задача сменить приоритет usb-гарнитуры сделав её дефолтной.
Для этого устанавливаем пакеты:
# apt-get install asoundconf asoundconf-gtk
После установки пакетов никакие конфигурационные файлы в домашнем каталоге не содержатся:
$ cat ~/.asoundrc
cat: /home/user/.asoundrc: Нет такого файла или каталога
Вызываем графический конфигуратор выбора аудиокарты:
Меню Xfce -> Настройки -> Default Sound CardВ появившемся окне выбираем нашу подключенную к usb-порту аудио-гарнитуру.
После чего файлы создадутся,
$ cat ~/.asoundrc
# ALSA library configuration file
# Include settings that are under the control of asoundconf(1).
# (To disable these settings, comment out this line.)
</home/user/.asoundrc.asoundconf>
а usb-гарнитура станет дефолтной
$ cat ~/.asoundrc.asoundconf
# ALSA library configuration file managed by asoundconf(1).
#
# MANUAL CHANGES TO THIS FILE WILL BE OVERWRITTEN!
#
# Manual changes to the ALSA library configuration should be implemented
# by editing the ~/.asoundrc file, not by editing this file.
!defaults.pcm.card Headset
defaults.ctl.card Headset
defaults.pcm.device 0
defaults.pcm.subdevice -1
defaults.pcm.nonblock 1
defaults.pcm.compat 0
defaults.pcm.minperiodtime 5000
defaults.pcm.ipc_key 5678293
defaults.pcm.ipc_gid audio
defaults.pcm.ipc_perm 0660
defaults.pcm.dmix.max_periods 0
defaults.pcm.dmix.rate 48000
defaults.pcm.dmix.format "unchanged"
defaults.pcm.dmix.card defaults.pcm.card
defaults.pcm.dmix.device defaults.pcm.device
defaults.pcm.dsnoop.card defaults.pcm.card
defaults.pcm.dsnoop.device defaults.pcm.device
defaults.pcm.front.card defaults.pcm.card
defaults.pcm.front.device defaults.pcm.device
defaults.pcm.rear.card defaults.pcm.card
defaults.pcm.rear.device defaults.pcm.device
defaults.pcm.center_lfe.card defaults.pcm.card
defaults.pcm.center_lfe.device defaults.pcm.device
defaults.pcm.side.card defaults.pcm.card
defaults.pcm.side.device defaults.pcm.device
defaults.pcm.surround21.card defaults.pcm.card
defaults.pcm.surround21.device defaults.pcm.device
defaults.pcm.surround40.card defaults.pcm.card
defaults.pcm.surround40.device defaults.pcm.device
defaults.pcm.surround41.card defaults.pcm.card
defaults.pcm.surround41.device defaults.pcm.device
defaults.pcm.surround50.card defaults.pcm.card
defaults.pcm.surround50.device defaults.pcm.device
defaults.pcm.surround51.card defaults.pcm.card
defaults.pcm.surround51.device defaults.pcm.device
defaults.pcm.surround71.card defaults.pcm.card
defaults.pcm.surround71.device defaults.pcm.device
defaults.pcm.iec958.card defaults.pcm.card
defaults.pcm.iec958.device defaults.pcm.device
defaults.pcm.modem.card defaults.pcm.card
defaults.pcm.modem.device defaults.pcm.device
defaults.pcm.file_format "raw"
defaults.pcm.file_truncate true
defaults.rawmidi.card 0
defaults.rawmidi.device 0
defaults.rawmidi.subdevice -1
defaults.hwdep.card 0
defaults.hwdep.device 0
defaults.timer.class 2
defaults.timer.sclass 0
defaults.timer.card 0
defaults.timer.device 0
defaults.timer.subdevice 0
defaults.namehint.showall off
defaults.namehint.basic on
defaults.namehint.extended off
После смены аудиокарты требуется перезапуск аудиоприложения.
Выбор регулировки звука аудиокарты в Xfce
Правой кнопкой мыши щёлкнуть по аплету микшера в панели задач, выбрать опцию
Свойства.
В поле
Звуковая карта выбирается звуковая карта звук через которую будет регулировать аплет.
Но после подключения usb-гарнитуры вы не увидите её в списке.
Чтобы гарнитура отобразилась в выпадающем списке, нужно удалить аплет микшера с Панели задач, затем добавить его, после чего карта отобразится в выпадающем списке.
Но есть более короткий путь.
Выполните команду в терминале (эту команду можно сделать исполняемым скриптом и повесить на кнопку в одну из панелей):
$ kill -3 $(ps -eo pid,args|grep xfce4|grep mixer|head -n1|cut -f1 -d '/')
После выполнения этой команды xfce4-mixer автоматически перезапустится, а карта в выпадающем списке отобразится.
Если вы повторите выполнение этой команды менее чем через минуту, всплывёт окно с сообщением:
Модуль «Регулятор громкости»
неожиданно пропал с панели. Хотите его
перезапустить?
Модуль в течение 60 секунд был перезапущен
несколько раз. Если вы нажмёте «Выполнить», панель
попробует запустить его снова, в противном случае он
будет окончательно удалён с панели.
[Выполнить] [Удалить]
Повторите вызов окна
Свойства, окно называется
Плагин регулировки звука, и выберите вашу появившуюся в списке usb-audio гарнитуру.
Отключение usb-гарнитуры происходит в обратном порядке:
В окне
Свойства микшера сначала выбираете вашу набортную аудиокарту.
Затем в
Меню Xfce -> Настройки -> Default Sound Card переключаетесь на набортную аудиокарту,
и затем отключаете usb-гарнитуру от usb-порта.
Переключение аудиокарт из консоли
Смотрим индексы и идентификаторы карт.
Набортная карта:
0 - индекс (0 - дефолтная)
ICH6 - ID (идентификатор) карты
USB гарнитура:
1 - индекс, не дефолтная, низкий приоритет
Headset - ID (идентификатор) карты
$ cat /proc/asound/cards
0 [ICH6 ]: ICH4 - Intel ICH6
Intel ICH6 with AD1981B at irq 21
1 [Headset ]: USB-Audio - Logitech USB Headset
Logitech Logitech USB Headset at usb-0000:03:00.0-1, full speed
$ cat /proc/asound/modules
0 snd_intel8x0
1 snd_usb_audio
Выводим помощь
$ asoundconf --help
Usage:
asoundconf is-active
asoundconf get|delete PARAMETER
asoundconf set PARAMETER VALUE
asoundconf list
Convenience macro functions:
asoundconf set-default-card PARAMETER
asoundconf reset-default-card
asoundconf set-pulseaudio
asoundconf unset-pulseaudio
asoundconf set-oss PARAMETER
asoundconf unset-oss
Изначально конфигов нет
$ ls -a ~/.asoundrc*
ls: невозможно получить доступ к /home/user/.asoundrc*: Нет такого файла или каталога
Посмотреть доступные аудиокарты
$ asoundconf list
Names of available sound cards:
ICH6
Headset
Во время установки умолчальной аудиокарты
$ asoundconf set-default-card Headset
конфиги будут созданы
$ ls -a ~/.asoundrc*
/home/user/.asoundrc /home/user/.asoundrc.asoundconf
В созданных конфигах:
Переключение аудиокарт активно и не заблокировано
$ grep -v '#' ~/.asoundrc
</home/user/.asoundrc.asoundconf>
USB-гарнитура выбрана умолчальной
$ grep -v '#' ~/.asoundrc.asoundconf|head -n2
!defaults.pcm.card Headset
defaults.ctl.card Headset
Выбор другой карты как умолчальной выполняется по формату
asoundconf set-default-card ID_аудиокарты
где ID_аудиокарты берётся из вывода списка доступных аудиокарт.
Регулировка звука из консоли
Запуском псевдографического конфигуратора
alsamixer
или прямыми командами через amixer.
Посмотреть название контролов карты 0
$ amixer -c0 scontrols|head -n4
Simple mixer control 'Master',0
Simple mixer control 'Master Mono',0
Simple mixer control 'Headphone Jack Sense',0
Simple mixer control 'PCM',0
Посмотреть название контролов карты 1
$ amixer -c1 scontrols|head -n4
Simple mixer control 'Headphone',0
Simple mixer control 'Mic',0
Посмотреть состояние регуляторов аудиокарт
$ amixer -c0 sget Master
Simple mixer control 'Master',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 13 [42%] [-27.00dB] [on]
Front Right: Playback 13 [42%] [-27.00dB] [on]
$ amixer -c1 sget Headphone
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 44
Mono:
Front Left: Playback 32 [73%] [-9.00dB] [on]
Front Right: Playback 32 [73%] [-9.00dB] [on]
Установить регулятор уровня звука на USB-гарнитуре на 63%
$ amixer -c1 sset Headphone 63%
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 44
Mono:
Front Left: Playback 28 [64%] [-13.00dB] [on]
Front Right: Playback 28 [64%] [-13.00dB] [on]
Воспроизвести потоковое аудио в подсистеме alsa через аудиокарту 1
$ mplayer -quiet -nocache -softvol -prefer-ipv4 -ao alsa:device=hw=1 http://fr1.1mix.co.uk:8016
В подсистеме pulseaudio через аудиокарту 1
$ mplayer -quiet -nocache -softvol -prefer-ipv4 -ao pulse::1 http://fr3.ah.fm:9000