Уважаемые посетители портала Kamensk.NET! Напоминаем вам, что будучи зарегистрированным пользователем вы получаете возможность оставлять комментарии к новостям на сайте и к топикам на форуме, иметь доступ к скрытым разделам и много других благ и привелегий. Пожалуйста заполните регистрационную форму, это отнимет у вас всего лишь несколько минут вашего времени.

[Решено] Debian "squeeze" и ALSA: проблемы с определением звуковых карточек.

Ne01eX
Ne01eX аватар
User offline. Last seen 6 дней 19 часов ago. Не в сети
Зарегистрирован: 12.02.2006
Сообщения:

Обновился на днях с Lenny на Squeeze. В целом обновление прошло гладко, если не считать того что пришлось принудительно конфигурировать пакеты libc6, libgcc1 и ещё что-то. Буквально на следующий день после обновления обнаружил, что нет звука. Ну я конечно по-старинке решил всё исправить командой alsaconf и был предельно удивлён, когда её не обнаружил Shock

"Где наша не пропадала, подумал я и ломанулся на debian.org качать исходные тексты alsa-utils и всю сопутствующую атрибутику (патч и файл описаний .dsc). Распаковал dpkg-source с опцией -x, залез в руль rules и что я вижу: белым по синиму написано, что alsaconf со всеми потрохами майнтейнером пакета выпилен! Я такой, весь в непонятках комментирую данный участок и собираю пакадж сам. Собрал, заменил запускаю alsaconf. Опа, не нашёл ни одной карточки, хотя в системе ясно видна как минимум одна - встроенная в видеокарту. Я давай гуглить по-быстрому и выяснил, что карточки ныне должны автоматом определятся алсой при загрузке системы и, мол, если она у вас не определись, то либо обновите алсу, либо вы плохо перезагрузились. Ну я не будь дураком, скачал из unstable версию 1.0.23 в сорцах (в сквизи 1.0.22), собрал, установил. Хрен. Ещё один Кулибин с этого вашего интернета предложил мне перетнуть звуковую карточку в другой PCI-порт. Я переткнул и, о чудо, - заработало. Правда радовался я не долго, - до вчерашнего дня, когда я решил перезагрузить комп. Карточка опять отпала и больше алсой не определялась. Через lspci её видно, модуль соответствующий подгружается, а вот ни один миксер её не видит ни одним глазом. Что делать в этой ситуации кроме перетыкивания карточки из порта в порт мало понятно.

Сегодня буду копать процесс загрузки с граба до ввода пароля, может что найду...

Кстати, карточка внешняя Audigy4. Может ей прерывания в биосе жестко прописать?

Протянув руку помощи, не забудь разжать кулак.

Ne01eX
Ne01eX аватар
User offline. Last seen 6 дней 19 часов ago. Не в сети
Зарегистрирован: 12.02.2006
Сообщения:

Решил проблему не совсем ординарным методом. Но раз помогло, то так уж и быть отпишусь как это сделал Smile Возможно эта инструкция поможет кому-то ещё.

0. Карточки не перетыкивал, оставил как есть. Smile
1. Ещё раз убедился, что карточка определяется системой введя команду

lspci

2. В файл /etc/modprobe.d/alsa-base-blacklist.conf прописал модули для встроенной в видеокарту звуковухи. То есть модули, которые не будут грузится при запуске системы:

blacklist snd-hda-intel
blacklist snd-hda-codec
blacklist snd-hda-codec-atihdmi

Посмотреть что ненужное загружено в память можно командой

lsmod

Главное помнить, что несмотря на то, что в выводе команды все модули имеют подчёркивания в файл /etc/modprobe.d/alsa-base-blacklist.conf их нужно прописывать с тире!

3. Перезагрузил тачку, несколько раз. Пока звук работает без сбоев.

Для тех, кому нужно иметь в системе несколько звуковых карт одновременно данный метод, наверное, не подойдёт. Здесь надо глубже копать систему инициализации, возможно может помочь 3-5 секундная задержка в alsa-utils.
Так же работает следующий хак: выгрузка модуля неопределившейся звуковой карты командой

rmmod

и последующая загрузка его командой

insmod

В моём случае это было:

rmmod snd_ca0106

и

insmod lib/modules/2.6.32-3-686/kernel/sound/pci/ca0106/snd-ca0106.ko

После этого карта стала видна во всех микшерах, правда пришлось её перевыбрать в настройках audacious.

Чтобы не вводить это каждый раз после перезагрузки системы, можно прописать эти команды в скрипте /etc/init.d/rc.local, например, так:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
	if [ -x /etc/rc.local ]; then
	        [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
		/etc/rc.local
		ES=$?
		[ "$VERBOSE" != no ] && log_end_msg $ES
		return $ES
	fi
}

case "$1" in
    start)
	do_start
	rmmod snd_ca0106
	insmod lib/modules/2.6.32-3-686/kernel/sound/pci/ca0106/snd-ca0106.ko
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

Но ещё раз повторю, что это хак, как настроить в Debian Squeeze работу с несколькими звуковыми картами одновременно и "по-правильному" я не знаю. Я ламо!

Можно вообще отключить запуск /etc/init.d/alsa-utils и грузить модули для нужных звуковых карт в нужном порядке в /etc/init.d/rc.local, но опять же мне это не нужно. Smile

Протянув руку помощи, не забудь разжать кулак.