TL;DR: Criei um script chamado audioctl que, com um único comando,
me permite alternar entre fone (via HDMI), caixas de som (analógicas) ou
até reproduzir em ambos ao mesmo tempo. Tudo isso com pactl, um
pouco de Bash e o poder do Linux.
O que é o pactl?
O pactl (abreviação de PulseAudio Control) é uma ferramenta de linha
de comando usada para controlar servidores de áudio como PulseAudio
e, com compatibilidade total, o PipeWire --- o sucessor moderno do
PulseAudio, usado por padrão em distros como Fedora, Ubuntu 22.04+, Arch
e NixOS.
Com ele, você pode:
- Listar dispositivos de áudio (sinks e sources)
- Mudar o volume
- Alternar entre saídas
- Mover streams de áudio entre dispositivos
- Carregar ou descarregar módulos (como o
module-combine-sink)
Ele é o "canivete suíço" do áudio no terminal --- e a base de tudo o que
vamos construir neste tutorial.
O problema
Eu uso um setup simples, mas comum:
- Meu fone de ouvido está conectado ao monitor (que por sua vez está ligado ao PC via HDMI).
- Minhas caixas de som estão ligadas diretamente na saída de áudio analógica do computador.
Meu sogro precisava conseguir alterar entre caixa de som e fone de
ouvido, coisa que ele já conseguia na interface, porém ele também
precisava conseguir colocar nas duas ao mesmo tempo (por questões de
acessibilidade).
Então pensei:
"Se o Linux me dá total controle do sistema, por que não criar meu
próprio controlador de áudio?"
E foi exatamente isso que fiz. Neste post, vou te mostrar passo a
passo como construí essa ferramenta --- e como você pode adaptá-la
para o seu setup.
Pré-requisitos
- Um sistema Linux moderno (Ubuntu, Fedora, Arch, NixOS, etc.).
- PulseAudio ou PipeWire.
- Terminal e um editor de texto.
- Pelo menos duas saídas de áudio funcionais.
💡 Se você não sabe se tem PipeWire ou PulseAudio, rode:
pactl info | grep "Server Name"Se aparecer "PipeWire" ou "PulseAudio", está tudo certo!
Passo 1: Entenda sua configuração de áudio
Antes de automatizar, precisamos saber quais dispositivos existem.
Liste seus sinks (saídas de áudio):
pactl list sinks short
Saída de exemplo:
52 alsa_output.pci-0000_01_00.1.hdmi-stereo ... RUNNING
57 alsa_output.pci-0000_09_00.6.analog-stereo ... SUSPENDED
-
RUNNING= está em uso\ -
SUSPENDED= inativo, mas disponível
Agora veja os cards:
pactl list cards
Procure pelo seu dispositivo analógico e confirme o perfil ativo
(como output:analog-stereo).
Passo 2: Controle básico de volume
O pactl permite controlar o volume do sink padrão usando:
@DEFAULT_SINK@
# Aumentar 5%
pactl set-sink-volume @DEFAULT_SINK@ +5%
# Diminuir 5%
pactl set-sink-volume @DEFAULT_SINK@ -5%
Passo 3: Alternar entre saídas de áudio
Para mudar o sink padrão:
pactl set-default-sink NOME_DO_SINK
Mover streams ativos:
pactl list short sink-inputs
pactl move-sink-input ID_DO_STREAM NOVO_SINK
Passo 4: Áudio em dois dispositivos ao mesmo tempo (modo "dual")
pactl load-module module-combine-sink sink_name=combined_output slaves=alsa_output.hdmi,alsa_output.analog sink_properties=device.description="Dual_HDMI+Analog"
Passo 5: O script final --- audioctl
Código completo
https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94
Como instalar
chmod +x ~/projetos/audioctl
mkdir -p ~/bin
ln -sf ~/projetos/audioctl ~/bin/audioctl
Dicas extras
speaker-test -t wav -c 2
Conclusão
Com menos de 60 linhas de Bash, resolvi um problema real --- com
flexibilidade que nenhum app gráfico oferece.
✨ O controle está nas suas mãos --- e no terminal.
Código completo
https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94
Top comments (0)