Estou usando o recurso de pré-configuração para moldar um sistema Debian 10 x64 personalizado. Tudo está acontecendo bem, exceto que durante a etapa late_command, estou executando um script de shell para configurar e implantar coisas diversas e gostaria de poder acessar as interfaces físicas de áudio.
Normalmente, faço isso usando pacmd list-sinks
e posso acessar facilmente os diferentes nomes das placas de áudio. Mas neste caso, usando chroot /target/ sudo -u device pacmd list-sinks
, a única coisa que vejo é uma interface fictícia chamada audio_null
:
Também preciso que assim que o sistema for reiniciado após a instalação, poderei acessar normalmente a interface física de áudio.
(Para obter informações, preciso acessar o nome da interface física para configurar a interface padrão no perfil padrão do Pulseaudio, uma vez que o sistema de arquivos raiz é configurado como somente leitura logo após a instalação, este é o momento final para fazer isso de uma vez por todas).
Suponho que seja um comportamento esperado, uma vez que todos os módulos não são necessários durante uma instalação e algumas etapas de serviços/configuração necessárias podem ser ignoradas.
Então, o que eu tentei até agora:
- (Re)carregue manualmente alguns módulos que pareciam pertinentes:
chroot /target/ sudo modprobe soundcore
- Recarregando o serviço PulseAudio (que aparentemente ainda não foi iniciado)
- Listagem de e fora do sistema de destino (
chroot /target/ pacmd list-sinks
,pacmd list-sinks
) Para fazer os comandos anteriores funcionarem, precisei reiniciar o Pulsechroot /target/ sudo -u device pulseaudio --start
sem o qual enfrentei uma mensagem de erroNo PulseAudio daemon running or not running as session daemon
Nenhuma das tentativas anteriores teve sucesso e estou ficando sem ideias. Provavelmente perdi/entendi mal um conceito óbvio e um ponto de vista externo seria bem-vindo.
Mesmo que não seja meu objetivo final, pode ser mais fácil retomar o problema para um problema mais amplo: Como reproduzir um som durante a late_command
etapa de instalação do Debian.
PS: Pelo que vale, atualmente estou implantando em uma máquina virtual, usando VmWare, e uma placa de som física conectada a ela.
Responder1
Este estágio ainda está sendo executado em um chroot, portanto, não existe nenhuma instância do systemd e qualquer coisa que dependa do systemd em execução em segundo plano está quebrada.
Você também está executando uma imagem do kernel que foi construída para o instalador e, embora possa ser a mesma que foi instalada no sistema de destino, geralmente não é, pois o instalador escolherá o kernel mais recente que está disponível em tempo de instalação - portanto, os módulos instalados no sistema provavelmente não caberão no kernel atualmente em execução.
Sua melhor aposta é procurar módulos de som para o kernel do instalador (acredito que eles existam em um módulo instalador opcional para acessibilidade) e usar as ferramentas ALSA para reproduzir o som.
Responder2
Fazer isso provavelmente seriamuito mais fácil como um script executado na primeira inicializaçãoem vez de dentro do instalador.
Dito isto, um teste rápido fazendo manualmente "Carregar componentes do instalador da mídia de instalação" e selecionando "sound-modules-5.10-8-amd64-di: sound support" (no Debian 11, mas provavelmente também no Debian 10) corretamente insere os módulos de kernel necessários. A instalação do alsa-utils (no destino) funciona imediatamente no VirtualBox. A execução aplay
também funciona, desde que você ative o som do cartão amixer
primeiro.
A linha de pré-configuração necessária para o Debian 11 seria semelhante a:
d-i preseed/early_command string anna-install sound-modules
(... existem outras maneiras, esta funcionou para mim)
Então você também precisa ter certeza de ter alsa-utils no destino. Nada é necessário se você estiver usando uma "tarefa", como ambiente de desktop, etc. Mas se for um sistema simples, você precisará de:
d-i pkgsel/include string alsa-utils
Finalmente, para fazer barulho (trocadilho intencional):
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"
Com uma pilha alsa funcional, você pode facilmente obter uma lista de dispositivos de áudio de hardware fazendo aplay -l
ou similar (no destino) e usando essas informações em seu script de configuração posteriormente.
Embora isso possa funcionar, posso imaginar que seria muito complicado acertar com diferentes configurações de hardware. Algumas placas de som precisariam de interruptores ou saídas adicionais para serem selecionadas, etc. Além disso, as modprobe
opções no sistema final poderiam ser substancialmente diferentes do ambiente di e afetar os índices das placas, etc. Feliz hacking!