audsw - trocar configurações do ALSA de forma fácil
Publicado por João Gabriel (última atualização em 11/12/2021)
[ Hits: 2.414 ]
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]}"
zswaplig.sh - Um "Ligador" de ZSWAP, SWAP em RAM para Sabayon Linux
baixar mp3 do site mp3tube.net
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Mint Xfce não mantém a conexão no wi-fi (2)
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)









