Instalación desatendida (preconfigurada) de Debian, acceso a tarjetas de audio

Instalación desatendida (preconfigurada) de Debian, acceso a tarjetas de audio

Estoy usando la función de preconfiguración para dar forma a un sistema Debian 10 x64 personalizado. Todo está sucediendo bien, excepto que durante el paso late_command, estoy ejecutando un script de shell para configurar e implementar cosas diversas y me gustaría poder acceder a las interfaces de audio físicas.

Por lo general, lo hago usando pacmd list-sinksy luego puedo acceder fácilmente a los diferentes nombres de tarjetas de audio. Pero en este caso, al usar chroot /target/ sudo -u device pacmd list-sinks, lo único que veo es una interfaz ficticia llamada audio_null:

Salida del comando pacmd list-sinks

También debo precisar que tan pronto como el sistema se reinicie después de la instalación, podré acceder con bastante normalidad a la interfaz de audio física.

(Para obtener información, necesito acceder al nombre de la interfaz física para configurar la interfaz predeterminada dentro del perfil predeterminado de Pulseaudio, ya que el sistema de archivos raíz está configurado en solo lectura justo después de la instalación, este es el mejor momento para hacerlo de una vez por todas).

Supongo que es un comportamiento esperado ya que no se requieren todos los módulos durante una instalación y luego es posible que se omitan algunos pasos de configuración/servicios necesarios.

Entonces lo que he probado hasta ahora:

  • (Re)cargue manualmente algunos módulos que sonaron pertinentes:chroot /target/ sudo modprobe soundcore
  • Recargando el servicio PulseAudio (que aparentemente aún no se ha iniciado)
  • Listado desde y fuera del sistema de destino ( chroot /target/ pacmd list-sinks, pacmd list-sinks) Para que los comandos anteriores funcionaran, necesitaba reiniciar Pulse, chroot /target/ sudo -u device pulseaudio --startsin lo cual enfrenté un mensaje de error.No PulseAudio daemon running or not running as session daemon

Ninguno de los intentos anteriores tuvo éxito y me estoy quedando sin ideas. Probablemente me perdí o entendí mal un concepto obvio y un punto de vista externo sería bienvenido.

Incluso si no es mi propósito final, podría ser más fácil resumir el problema a uno más amplio: Cómo reproducir un sonido durante el late_commandpaso de una instalación de Debian.

PD: Por si sirve de algo, actualmente estoy implementando en una máquina virtual, usando VmWare y una tarjeta de sonido física conectada a ella.

Respuesta1

Esta etapa todavía se está ejecutando en un chroot, por lo que no existe ninguna instancia de systemd y todo lo que depende de que systemd se ejecute en segundo plano está roto.

También está ejecutando una imagen del kernel que se creó para el instalador y, si bien puede ser la misma que se instaló en el sistema de destino, a menudo no lo es, ya que el instalador seleccionará el kernel más reciente que esté disponible en tiempo de instalación, por lo que los módulos instalados en el sistema probablemente no se ajusten al kernel que se está ejecutando actualmente.

Su mejor opción es buscar módulos de sonido para el kernel del instalador (creo que existen en un módulo de instalación opcional para accesibilidad) y usar herramientas ALSA para reproducir el sonido.

Respuesta2

Hacer esto probablemente seríamucho más fácil como un script que se ejecuta en el primer arranqueen lugar de desde dentro del instalador.

Dicho esto, una prueba rápida haciendo manualmente "Cargar componentes del instalador desde el medio de instalación" y luego seleccionando "sound-modules-5.10-8-amd64-di: soporte de sonido" (en Debian 11, pero probablemente también en Debian 10) correctamente inserta los módulos del kernel necesarios. La instalación de alsa-utils (en el destino) funciona de inmediato en VirtualBox. La ejecución aplaytambién funciona, siempre que actives el silencio de la tarjeta usando amixerprimero.

La línea preconfigurada requerida para Debian 11 se vería así:

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

(...hay otras formas, esta funcionó para mí)

Entonces también deberás asegurarte de tener alsa-utils en el objetivo. No se necesita nada si está utilizando una "tarea" como un entorno de escritorio, etc. Pero si se trata de un sistema básico, necesitará:

d-i pkgsel/include string alsa-utils

Finalmente, para hacer algo de ruido (juego de palabras):

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"

Con una pila de alsa que funcione, puede obtener fácilmente una lista de dispositivos de audio de hardware haciendo aplay -lalgo similar (en el objetivo) y usando esa información en su script de configuración más adelante.

Si bien esto podría funcionar, me imagino que sería muy complicado hacerlo bien con diferentes configuraciones de hardware. Algunas tarjetas de sonido necesitarían interruptores o salidas adicionales para seleccionarse, etc. Además, las modprobeopciones en el sistema final podrían ser sustancialmente diferentes del entorno di y afectar los índices de las tarjetas, etc. ¡Feliz hackeo!

información relacionada