Автоматическая (preseed) установка Debian, доступ к звуковой карте(ам)

Автоматическая (preseed) установка Debian, доступ к звуковой карте(ам)

Я использую функцию preseeding для формирования пользовательской системы Debian 10 x64. Все идет хорошо, за исключением того, что на этапе late_command я запускаю скрипт оболочки для настройки и развертывания различных вещей, и я хотел бы иметь возможность доступа к физическим аудиоинтерфейсам.

Обычно я делаю это с помощью pacmd list-sinksи тогда я могу легко получить доступ к различным именам аудиокарт. Но в этом случае, используя chroot /target/ sudo -u device pacmd list-sinks, единственное, что я вижу, это фиктивный интерфейс с именем audio_null:

Вывод команды pacmd list-sinks

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

(Для информации: мне нужно получить доступ к имени физического интерфейса, чтобы настроить интерфейс по умолчанию в профиле Pulseaudio по умолчанию, поскольку корневая файловая система сразу после установки устанавливается в режим «только для чтения», сейчас самое время сделать это раз и навсегда).

Полагаю, что это ожидаемое поведение, поскольку во время установки не требуются все модули, и тогда некоторые необходимые службы/шаги настройки могут быть пропущены.

Итак, что я уже попробовал:

  • Вручную (пере)загрузите некоторые модули, которые показались вам уместными:chroot /target/ sudo modprobe soundcore
  • Перезагрузка сервиса PulseAudio (который, по-видимому, еще не был запущен)
  • Листинг из целевой системы и за ее пределами ( chroot /target/ pacmd list-sinks, pacmd list-sinks) Чтобы предыдущие команды сработали, мне нужно было перезапустить Pulse, chroot /target/ sudo -u device pulseaudio --startбез чего я получил сообщение об ошибкеNo PulseAudio daemon running or not running as session daemon

Ни одна из предыдущих попыток не увенчалась успехом, и у меня заканчиваются идеи. Вероятно, я упустил/неправильно понял очевидную концепцию, и внешняя точка зрения будет приветствоваться.

Даже если это не моя конечная цель, может быть проще рассмотреть проблему шире: как воспроизвести звук на этапе late_commandустановки Debian.

PS: Если это имеет значение, то в настоящее время я выполняю развертывание на виртуальной машине, используя VmWare, и подключаю к ней физическую звуковую карту.

решение1

Этот этап все еще выполняется в chroot, поэтому экземпляр systemd не существует, и все, что зависит от systemd, работающего в фоновом режиме, сломано.

Вы также используете образ ядра, который был создан для установщика, и хотя он может быть тем же самым, что был установлен в целевой системе, часто это не так, поскольку установщик выбирает самое последнее ядро, доступное на момент установки, поэтому модули, установленные в системе, скорее всего, не будут соответствовать текущему работающему ядру.

Лучшим вариантом будет поиск звуковых модулей для ядра установщика (я полагаю, что они существуют в дополнительном модуле установщика для обеспечения доступности) и использование инструментов ALSA для воспроизведения звука.

решение2

Вероятно, это было быгораздо проще, как скрипт, который запускается при первой загрузкеа не из установщика.

Тем не менее, быстрый тест, вручную выполнив "Load installer components from installation media" и затем выбрав "sound-modules-5.10-8-amd64-di: sound support" (в Debian 11, но, вероятно, есть и в Debian 10) правильно вставляет необходимые модули ядра. Установка alsa-utils (in-target) работает из коробки на VirtualBox. Запуск aplayтоже работает, при условии, что вы сначала отключите звук карты с помощью amixer.

Требуемая для Debian 11 строка preseed будет выглядеть так:

d-i preseed/early_command string anna-install sound-modules

(...есть и другие способы, мне этот помог)

Затем вам также нужно убедиться, что у вас есть alsa-utils на цели. Ничего не нужно, если вы используете "задачу", такую ​​как окружение рабочего стола и т. д. Но если это голая система, вам нужно:

d-i pkgsel/include string alsa-utils

Наконец, чтобы произвести немного шума (каламбур):

d-i preseed/late_command string in-target /bin/sh -c \
    "amixer set Master 80% unmute; amixer set PCM 80% unmute; aplay /usr/share/sounds/alsa/Noise.wav"

При наличии работающего стека ALSA вы можете легко получить список аппаратных аудиоустройств, выполнив aplay -lили что-то подобное (в целевом объекте), а затем использовать эту информацию в своем скрипте настройки.

Хотя это может работать, я могу себе представить, что будет очень сложно сделать это правильно с разными аппаратными настройками. Для некоторых звуковых карт потребуются дополнительные переключатели или выходы для выбора и т. д. Более того, опции modprobeв окончательной системе могут существенно отличаться от среды di и влиять на индексы карт и т. д. Удачного взлома!

Связанный контент