audsw - trocar configurações do ALSA de forma fácil
Publicado por João Gabriel (última atualização em 11/12/2021)
[ Hits: 2.644 ]
Há muitos que ainda utilizam apenas o ALSA. Seja porque não gostam do PulseAudio / Pipewire, ou porque não vêem necessidade em utilizá-los, etc. No ALSA, para alterar a saída de áudio padrão é necessário modificar os arquivos de configuração ( /etc/asound.conf ou ~/.asoundrc ). Esse script serve para facilitar essa tarefa.
Primeiramente, crie um arquivo de configuração para cada saída de áudio que você quiser ter a possibilidade de usar como padrão. Exemplo: Supondo que hw:0,2 é uma saída HDMI e hw:1,3 é uma saída analógica frontal, você pode criar um arquivo /etc/asound-hdmi que usa hw:0,2 como dispositivo padrão; e depois outro arquivo /etc/asound-analog que usa hw:1,3 como dispositivo padrão. Você configura o script pra usar esses arquivos, e após isso poderá escolher o dispositivo de áudio padrão muito mais facilmente.
Antes de usar o script, modifique CARD_DESC para incluir uma descrição de cada dispositivo de áudio e modifique CARD_CONF para que aponte para os arquivos de configuração corretos.
Esse script não só pode ser utilizado para alterar os dispositivos de áudio padrão, mas também para outras funções que envolvem modificação do(s) arquivo(s) de configuração do ALSA, como habilitar / desabilitar DMIX, alterar o codec utilizado para resampling, etc.
PS: Os programas que usam ALSA só lêem os arquivos de configuração quando são iniciados, portanto, ao alterar o dispositivo de áudio padrão, é necessário reiniciar esses programas para as alterações se manifestarem.
#!/bin/bash
# Troca o dispositivo utilizado para saída
# de áudio no ALSA, através de symlinks.
# CARD_DESC é uma descrição do dispositivo de áudio, que será mostrada ao usuário.
# Os itens de CARD_CONF correspondem, um-a-um, respectivamente, com os itens em CARD_DESC.
# Devem apontar para o arquivo de configuração que deve ser utilizado.
CARD_DESC=("Saída HDMI" "Fone de Ouvido (frontal)" "Fone de ouvido (traseiro)")
CARD_CONF=("/etc/asound-hdmi.conf" "/etc/asound-fanalog.conf" "/etc/asound-banalog.conf")
# Caso você prefira utilizar o arquivo de configuração local a cada usuário,
# troque o "/etc/asound.conf" abaixo por "$HOME/.asoundrc".
# PS: Ao usar o arquivo de configuração local, certifique-se de que
# o seu usuário tem permissão para acessar os arquivos em CARD_CONF
ASOUND_PATH="/etc/asound.conf"
# CARD_DESC e CARD_CONF devem ter o mesmo tamanho para o funcionamento do script.
if [ "${#CARD_DESC[@]}" -ne "${#CARD_CONF[@]}" ]; then
printf 'Os arrays CARD_DESC e CARD_CONF têm tamanhos diferentes.\n'
exit 1
fi
# Não faz sentido usar o script com CARD_DESC ou CARD_CONF indefinidos.
if [ -z "${#CARD_DESC[@]}" ] || [ -z "${#CARD_CONF[@]}" ]; then
printf 'Adicione pelo menos um dispositivo de som ao script.\n'
exit 1
fi
if [ "$ASOUND_PATH" = "/etc/asound.conf" ]; then
# É necessário ser root para modificar /etc/asound.conf
[ $UID -ne 0 ] && { echo "$(basename $0): deve ser executado como root !"; exit; }
else
# É desnecessário rodar esse script como root para modificar o ~/.asoundrc
[ $UID -eq 0 ] && { echo "$(basename $0): não deve ser executado como root !"; exit; }
fi
COUNT=1
printf 'Escolha um:\n\n'
# "Itera sobre" os itens do array e mostra as opções disponíveis para o usuário
for i in "${CARD_DESC[@]}"; do
printf '%d. %s' "$COUNT" "$i"
# Se o arquivo de configuração do ALSA for um symlink para um
# dos arquivos em CARD_CONF, destacamos a entrada correspondente.
if [ "$(realpath $ASOUND_PATH)" = "${CARD_CONF[$((COUNT-1))]}" ]; then
printf ' *'
fi
printf '\n'
COUNT=$((COUNT+1))
done
printf '\n'
printf '> '
read choice
# Garante que o número será válido
until [[ "$choice" =~ ^[1-9]$ ]] && [ "$choice" -le "$COUNT" ]; do
printf 'Resposta inválida.\n'
printf '> '
read choice
done
if [ -h "$ASOUND_PATH" ]; then
# Se o arquivo de configuração já é um symlink, é
# necessário "deslinká-lo" antes de "relinká-lo"
unlink "$ASOUND_PATH"
elif [ -f /etc/asound.conf ]; then
# Se o arquivo de configuração é um arquivo comum, um
# backup é feito ao renomear o arquivo para <nome>.bak
printf '* %s não é um symlink.\n' "$ASOUND_PATH"
printf '* salvando um backup em %s.bak ...\n' "$ASOUND_PATH"
mv "$ASOUND_PATH" "${ASOUND_PATH}.bak" 2>/dev/null
fi
# Testa se o arquivo de configuração existe.
if [ -f "${CARD_CONF[$((choice-1))]}" ]; then
ln -s "${CARD_CONF[$((choice-1))]}" "$ASOUND_PATH"
else
printf '%s não existe. crie-o ou edite CARD_CONF para apontar para o arquivo certo.\n' "${CARD_CONF[$((choice-1))]}"
exit 1
fi
printf '%s agora é o dispositivo de áudio padrão.\n' "${CARD_DESC[$choice-1]}"
Ver TV e rádio online por shell script
Visualizar .DOC sem o Openoffice,Abiword,etc.
zswapdeslig.sh - Um "Desligador" de ZSWAP, SWAP em RAM para Sabayon Linux
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Resolvendo o bloqueio do Módulo Warsaw no Arch Linux (Porta 30900)
Replicação SYSVOL no Samba 4 com Syncthing
Samba 4 com Replicação e LDAP Seguro (LDAPS/TLS)
Configurando o Cairo Dock individualmente em ambientes diferentes na mesma maquina
Calculadoras online gratuitas para o dia a dia do usuário Linux
Governo da França vai trocar Windows por Linux (7)
Metafísica e espiritualidade funciona de verdade! Comprovação pessoal (12)
Bluetooth desconecta logo após conectar, ubuntu 25.10 (2)









