PipeWire é um servidor e uma API para lidar com multimídia no Linux. Seu uso mais comum é servir aplicações Wayland e Flatpak para implementar o compartilhamento de tela, área de trabalho remota e outras formas de roteamento de áudio e vídeo entre diferentes peças de software. De acordo com o FAQ oficial, "você pode pensá-lo como uma camada de roteamento multimídia em cima dos drivers que as aplicações e as bibliotecas podem usar".
Ao contrário do foco do PulseAudio no consumo de áudio, e do foco do JACK em áudio profissional, o PipeWire pretende funcionar para todos(as) os(as) usuários(as), em todos os níveis. Entre outras técnicas, o PipeWire alcança seus objetivos através de sua capacidade de alternar dinamicamente entre diferentes tamanhos de buffers para adaptar-se aos diferentes requisitos de latência de diferentes aplicações de áudio.
No DebianTrixie, pipewire 1.4.2 e wireplumber 0.5.8 estão disponíveis e serão o padrão na maioria dos AmbientesDeÁreaDeTrabalho.
No DebianBookworm, o PipeWire 0.3.65 está disponível e é consideravelmente mais confiável, e é um substituto razoável para muitos casos de uso. O PipeWire é o servidor de som padrão com o GNOME Desktop.
No DebianBullseye, o PipeWire 0.3.19 está disponível e pode ser usado experimentalmente como um substituto para a biblioteca de espaço de usuário(a) ALSA, PulseAudio e JACK. Este é um caso de uso documentado, mas não suportado.
No DebianBuster, o PipeWire 0.2.5 está disponível e não deve precisar ser manualmente instalado, pois geralmente é inserido como uma dependência por aplicativos que fazem uso dele.
Versões mais recentes estão disponíveis nos repositórios DebianTesting, DebianUnstable e Backports.
Contents
Instalação
Na sua forma mais básica, o PipeWire pode ser instalado simplesmente instalando o pacote pipewire.
Para o Debian 12 e mais recentes, pipewire-audio-client-libraries é substituído por pipewire-alsa e pipewire-jack. É recomendado instalar o metapacote pipewire-audio, que depende de wireplumber (o gerenciador de sessões recomendado), pipewire-pulse (para substituir o PulseAudio), e pipewire-alsa (ALSA) e libspa-0.2-bluetooth (para suporte a Bluetooth). Além disso, a instalação desse metapacote removerá o pulseaudio para evitar quaisquer conflitos entre ambos os servidores de som. Para instalação adicional de suporte a câmeras, instale libspa-0.2-libcamera.
No Debian 11, não há mais um pacote em separado de extensões do FFmpeg, e o pacote Bluetooth foi movido para libspa-0.2-bluetooth. Há também uma extensão JACK no pacote libspa-0.2-jack, necessária para usar o PipeWire como um servidor JACK (como explicado abaixo).
Para o Debian 11, o PipeWire pode ser usado para substituir o PulseAudio. Além disso, o pacote pipewire-audio-client-libraries está disponível. As bibliotecas deste pacote permitem que aplicações acessem diretamente o JACK e o ALSA para saída através do servidor PipeWire, permitindo uma interoperabilidade harmoniosa entre os diferentes servidores de som e APIs.
No Debian 10, algumas extensões são divididas em pacotes independentes. Essas extensões podem ser encontradas nos pacotes libspa-bluetooth e libspa-ffmpeg.
Configuração
Usando como substituto do PulseAudio/JACK/ALSA
Debian 13
Na data de agosto de 2023, a configuração do pipewire para Trixie/Sid é semelhante à do Bookworm.
O gerenciador de sessões anterior pipewire-media-session não será enviado com o Trixie, uma vez que está morto no upstream (veja 1030765).
Como informado pelo(a) desenvolvedor(a) upstream, se você quiser reiniciar de forma limpa os serviços do pipewire, o comando recomendado é
systemctl --user restart wireplumber pipewire pipewire-pulse
Verificar a saída de "wpctl status", "wpctl inspect $ID" e "pw-dump" também pode ajudar na análise.
WirePlumber 0.5 e seu novo sistema de configuração JSON
O WirePlumber 0.5 foi lançado com um novo sistema de configuração. O novo sistema é baseado em JSON em vez de Lua, o que torna o WirePlumber >= 0.5 incompatível com arquivos de configuração Lua escritos para o WirePlumber 0.4. Não é realizada nenhuma migração automática de arquivos antigos de configuração, você terá que atualizá-los manualmente seguindo o manual de migração.
Debian 12
A versão do PipeWire presente no DebianBookworm melhorou a compatibilidade e a confiabilidade, e também está muito mais fácil de configurar como substituto.
Dois gerenciadores de sessão já estão disponíveis. O gerenciador padrão (wireplumber) é o recomendado pelos(as) desenvolvedores(as) do pipewire. O outro (pipewire-media-session) é primitivo e é melhor utilizá-lo quando se usa o PipeWire apenas por sua funcionalidade básica como o compartilhamento de tela. Ao usar o PipeWire como servidor de som do seu sistema, o(a) mantenedor(a) recomenda a instalação do gerenciador mais avançado WirePlumber. O comando a seguir instalará o WirePlumber e removerá o antigo gerenciador de sessões:
# apt install wireplumber pipewire-media-session-
Você precisará habilitar o WirePlumber no "systemd" (em execução como usuário(a), não como root):
$ systemctl --user --now enable wireplumber.service
Quando estiver usando o WirePlumber, é mínima a quantidade de configurações necessárias para usar o PipeWire como seu servidor de som. Na verdade, o pacote WirePlumber recomenda pipewire-pulse, então a configuração provavelmente acontecerá automaticamente. Você só terá que ativar as camadas ALSA e JACK manualmente, o que torna desnecessário criar um arquivo vazio no diretório de configuração da sua sessão de mídia (já que esse diretório nem mesmo existirá ao usar o WirePlumber), mas ainda vai exigir a cópia de arquivos do seu diretório /usr/share/doc/pipewire/examples/, conforme descrito nas instruções do Debian 11.
Se tiver interesse na alternância automática de perfis Bluetooth (por exemplo, trocar de A2DP para HSP/HFP quando um aplicativo precisa de acesso ao microfone), saiba que o WirePlumber ganhou suporte para a alternância automática na versão 0.4.8.
Uma mudança importante na comparação com o Debian 11 é que o diretório de configuração foi movido de /etc/pipewire/ para /usr/share/pipewire/: você pode se livrar do primeiro diretório para evitar confusões.
Debian 11
De acordo com Simon! ?McVittie, "Isto não é um cenário suportado para o Debian 11, e é considerado experimental".
Pode quebrar determinados aplicativos, não ter certa funcionalidade, ou não funcionar de jeito nenhum.
Certos(as) usuários(as) podem se interessar na capacidade do PipeWire de ser um substituto pronto para soluções de áudio Linux existentes, incluindo o PulseAudio e o JACK. Os benefícios potenciais incluem menor uso de CPU, melhor suporte para dispositivos Bluetooth e melhor integração entre aplicações usando JACK e PulseAudio. Este é o comportamento padrão em outras distribuições, notadamente o Fedora 34 e mais recentes.
Este comportamento pode ser habilitado experimentalmente no DebianBullseye.
As três seções instrucionais abaixo são independentes uma da outra, mas recomenda-se fortemente usar o PipeWire para substituir todas as soluções se você pretende substituir apenas uma delas, para uma melhor integração entre diferentes aplicações.
PulseAudio
Nesse cenário, o PipeWire é executado como um serviço de áudio por usuário(a), substituindo o PulseAudio completamente.
Crie este arquivo vazio:
# touch /etc/pipewire/media-session.d/with-pulseaudio
Crie um serviço pipewire-pulse, copiando os arquivos de exemplo:
# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
Execute esses três comandos como um usuário(a) regular (não como root):
// Verifique arquivos do novo serviço com: systemctl --user daemon-reload // Desabilite e pare o serviço PulseAudio com: systemctl --user --now disable pulseaudio.service pulseaudio.socket // Habilite e inicia o novo serviço pipewire-pulse com: systemctl --user --now enable pipewire pipewire-pulse
Você pode verificar qual servidor está em uso, com seu usuário(a) regular, executando:
LANG=C pactl info | grep '^Server Name'
Se estiver usando o PipeWire, o nome do servidor será "PulseAudio (On PipeWire 0.3.19)".
Certifique-se de que continue funcionando após uma reinicialização. Se não funcionar, você talvez precise "mascarar" o serviço PulseAudio executando:
systemctl --user mask pulseaudio
Isso pode exigir outra reinicialização, após a qual o PipeWire deve ser usado exclusivamente, mesmo após outras reinicializações. Isto vai bloquear o serviço PulseAudio de ser ativado. Se desejar restaurar uma funcionalidade anterior, você precisará executar o mesmo comando novamente com a ação "unmask".
root
Se desejar executar o PipeWire como root, remova ou comente esta linha:
ConditionUser=!root
Do "pipewire.socket" e do "pipewire.service" em "/usr/lib/systemd/user".
E do "pipewire-pulse.service" e "pipewire-pulse.socket" em "/etc/xdg/systemd/user".
ALSA
Os clientes do ALSA podem ser configurados para usar a saída via PipeWire.
Algumas pessoas podem descrever essa solução como "substituindo o ALSA", mas como o FAQ do PipeWire esclarece: "Não, o ALSA é uma parte essencial da pilha de áudio Linux, ele fornece a interface para os drivers de áudio do núcleo (kernel). Dito isto, a biblioteca de espaço de usuário(a) do ALSA tem um monte de coisas que provavelmente não é mais desejável nos dias de hoje, como extensões de efeitos mixagem, roteamento, hierarquização, etc. O PipeWire usa um pequeno subconjunto das funcionalidades centrais do ALSA para acessar o hardware. Todas as outras funcionalidades devem ser tratadas pelo PipeWire".
Instale o pacote pipewire-audio-client-libraries, se ainda não estiver instalado.
Crie este arquivo vazio:
# touch /etc/pipewire/media-session.d/with-alsa
Copie um arquivo de configuração dos exemplos do PipeWire para o seu diretório de configuração do ALSA:
# cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/
JACK
Os clientes JACK podem ser configurados para usar a saída via PipeWire em vez do JACK.
Instale os pacotes pipewire-audio-client-libraries e libspa-0.2-jack, se ainda não estiverem instalados.
Crie este arquivo vazio:
# touch /etc/pipewire/media-session.d/with-jack
Execute os clientes JACK usando o envoltório (wrapper) pw-jack, ou copie:
# cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/
E execute:
# ldconfig
Isso substituirá as bibliotecas do servidor JACK pelas bibliotecas do PipeWire em tempo de execução do aplicativo, ao apontar o linker dinâmico para a pasta /usr/lib/x86_64-linux-gnu/pipewire-0.3/jack/.
Para ARM64, você pode ter que fazer um passo extra. Uma vez que existe um arquivo chamado aarch64-linux-gnu.conf em /etc/ld.so.conf.d/, ele tem precedência sobre aquele que você copiou anteriormente. Renomeie-o para 0-pipewire-jack-aarch64-linux-gnu.conf e execute ldconfig novamente.
Bluetooth
O PipeWire geralmente funciona bem em conjunto com o Bluez para fornecer áudio de alta qualidade para dispositivos de áudio habilitados para Bluetooth quando usado como um substituto para o PulseAudio, com algumas ressalvas.
No mínimo, você precisará instalar o pacote libspa-0.2-bluetooth, remover o pacote pulseaudio-module-bluetooth e, em seguida, reiniciar seu computador ou reiniciar os serviços do PipeWire, caso contrário, as conexões de dispositivos falharão com "Protocolo não disponível".
O PipeWire tentará escolher o melhor codec possível por padrão. Você pode alterar isso, e ajustar muitas outras configurações relacionadas, no arquivo /etc/pipewire/media-session.d/bluez-monitor.conf. Você pode editar o arquivo diretamente ou armazenar alterações locais por usuário(a) copiando o arquivo para ~/.config/pipewire/media-session.d/bluez-monitor.conf e editando essa cópia.
Além disso, desde a liberação do PipeWire 0.3.19, houve inúmeras adições de recursos e correções de bugs relacionados ao Bluetooth. A versão no Debian Bullseye não é representativa do estado atual do PipeWire.
PulseAudio
Instale o pacote pipewire-pulse e reinicie. Isto configurará o PipeWire para ativar o daemon de substituição do PulseAudio. Verifique se está habilitado, executando:
LANG=C pactl info | grep '^Server Name'
Se o PipeWire estiver configurado corretamente, será exibido "Server Name: PulseAudio (on PipeWire 0.3.XX)". Se não estiver funcionando corretamente, consulte as instruções do Debian 11 para mascarar o PulseAudio.
ALSA
Instale o pacote pipewire-alsa e reinicie. Isto configurará o PipeWire para ativar sua extensão ALSA. Verifique se está habilitado, executando:
LANG=C aplay -L | grep -A 1 default
Se o PipeWire estiver configurado corretamente, será exibido "Default ALSA Output (currently PipeWire Media Server)". Se você ver "Playback/recording through the PulseAudio sound server", então o PulseAudio ainda tem o controle da saída ALSA e precisa ser desinstalado.
JACK
As instruções do Debian 11 ainda se aplicam, no momento desta escrita.
Tenha em mente que os comandos "touch" são desnecessários se você estiver usando o WirePlumber em vez do pipewire-media-session. Consulte a parte inicial desta seção para mais detalhes sobre qual gerenciador de sessão você deve usar.
Se estiver usando o pipewire-media-session, observe que seu diretório de configuração passou de /etc/pipewire/media-session.d/ para /usr/share/pipewire/media-session.d, e ajuste os caminhos conforme necessário ao fazer uso das instruções anteriores.
Bluetooth
Veja as informações do Debian 11.
Roteamento de "sinks", fontes e dispositivos de áudio
Se você estiver interessado(a) em configurar as conexões dos "sinks" e fontes (sources) com o PipeWire, como normalmente faria com o PulseAudio, a maneira mais fácil é usar qualquer uma das ferramentas helvum (baseada em GTK ou qpwgraph (baseada em Qt).
Primeiro, certifique-se de que você configurou o PipeWire para substituir ALSA, JACK e PulseAudio. Em seguida, instale qualquer um dos pacotes helvum ou qpwgraph, e abra o software instalado.
Serão exibidas as representações gráficas de cada dispositivo de áudio em seu sistema que age como uma entrada ou como uma saída para áudio. Além disso, serão exibidos todos as aplicações ativas que estão produzindo ou recebendo áudio, e as conexões entre todos.
Você pode arrastar de forma habitual para criar novas conexões entre aplicativos, hardware de áudio ou uma combinação deles. Alguns usos populares são criar um loop de sua entrada de microfone para sua saída de áudio, para que você possa monitorar a si mesmo(a), reproduzir áudio através de vários dispositivos de saída de áudio ao mesmo tempo, ou usar seu reprodutor de música como um microfone falso para outras aplicações que recebem entrada de voz. O céu é o limite!
Isso só é possível com o PipeWire, que reúne o JACK, PulseAudio e ALSA em um grafo unificado, permitindo uma configuração arbitrária na qual os programas podem usar diferentes APIs.
A mesma tarefa pode ser realizada com a ferramenta de linha de comando do PipeWire pw-link, que permite criar ou destruir conexões entre as portas do PipeWire (ou seja, substitui as ferramentas jack_connect e jack_disconnect do JACK). Outras ferramentas baseadas em JACK que podem manipular o grafo - como Patchage, Catia, RaySession, e a janela de grafos QjackCtl - também devem funcionar.
Desabilitando Sinks/Sources
Se sua placa de áudio fornece vários nós, mas você só usa alguns deles, você pode desativar aqueles não utilizados com uma configuração colocada em, por exemplo, ~/.config/wireplumber/wireplumber.conf.d/disable-nodes.conf. Exemplos podem ser encontrados em wireplumber-doc (/usr/share/doc/wireplumber/examples/wireplumber.conf.d).
## Output of the command: wpctl status --name
# ...
# Audio
# ├─ Devices:
# │ 48. alsa_card.usb-Generic_USB_Audio-00 [alsa]
# │ 49. alsa_card.pci-0000_17_00.0 [alsa]
# │
# ├─ Sinks:
# │ 64. alsa_output.pci-0000_17_00.0.pro-output-0 [vol: 1.00]
# │ * 65. alsa_output.pci-0000_17_00.0.pro-output-3 [vol: 0.55]
# │
# ├─ Sources:
# │ 66. alsa_input.pci-0000_17_00.0.pro-input-0 [vol: 1.00]
# │ 67. alsa_input.pci-0000_17_00.0.pro-input-1 [vol: 1.00]
# │ * 68. alsa_input.pci-0000_17_00.0.pro-input-2 [vol: 1.00]
# ...
## You can see the "*" which show the currently default in/outputs.
## all other nodes will be disable with a bit of help of regex(7) matching.
monitor.alsa.rules = [
{
matches = [
{
node.name = "~alsa_input.*-(0|1)$"
}
{
node.name = "~alsa_output.*-(0|1|2)$"
}
]
actions = {
update-props = {
node.disabled = true
}
}
}
]Após quaisquer alterações na configuração, você precisa executar systemctl --user restart wireplumber.service.
Sinks para Airplay
Você pode enviar áudio de sua área de trabalho para dispositivos airplay em sua rede. O Pipewire tem um módulo raop-discover que usará zeroconf/mdns usando Avahi para descobrir os dispositivos em sua rede e adicioná-los como dispositivos de saída em sua área de trabalho.
$ pacmd load-module module-raop-discover
Você também pode carregar automaticamente este módulo na inicialização, adicionando ao arquivo ~/.config/pipewire/pipewire.conf.d/raop-discover.conf:
context.modules = [
{
name = libpipewire-module-raop-discover
args = { }
}
]
Problemas conhecidos
Pacmd falha com "No PulseAudio daemon running"
O comando pacmd falha com:
$ pacmd No PulseAudio daemon running, or not running as session daemon.
O comando pactl deve ser aproximadamente equivalente em termos de funcionalidade e funciona com um backend pipewire.
pulos e "client missed 1 wakeups"
Pelo menos um usuário (TheAnarcat) experimentou "quedas de áudio" estranhas e problemas de "pular" durante a execução de backups (borg) em uma estação de trabalho sob o PipeWire no Debian bullseye. A mensagem client missed 1 wakeups apareceu em logs e a situação degenerou até o ponto em que não era possível reproduzir áudio. Reiniciar o pipewire corrigiu o problema:
systemctl --user restart pipewire.service
Este problema não parece acontecer mais no Debian bookworm.
áudio agitado em sistemas com alta carga
A latência mais baixa do PipeWire em comparação com o PulseAudio pode levar a áudio agitado em sistemas com alta carga.
Primeiro visualize o quantum usando o comando pw-top e, em seguida, aumente o valor do quantum usando este comando, até que o áudio se torne mais suave:
pw-metadata -n settings 0 clock.force-quantum 2048
Depois de encontrar o valor do quantum certo para sua situação, você pode tornar o valor permanente criando um arquivo de configuração ~/.config/pipewire/pipewire.conf.d/choppy-under-load.conf com o seguinte conteúdo, e reiniciando os daemons relacionados ao pipewire:
context.properties = {
default.clock.quantum = 2048
default.clock.min-quantum = 2048
}
Volume do dispositivo para usuários(as) SDDM não é restaurado no login
Ao usar o SDDM, o volume do dispositivo é sempre redefinido para 40%^3/100% em cada inicialização ou saída de sessão. Isso pode danificar o hardware de áudio se essa configuração causar um feedback.
As operações de salvamento e restauração de volume são tratadas pelo Wireplumber, iniciado como um serviço de usuário(a) do sistema.
Com a configuração padrão, o Wireplumber tenta restaurar níveis personalizados a partir do arquivo ~/.local/state/wireplumber/default-routes na inicialização ou, falhando, usa os padrões para sinks (40%^3) e fontes (sources) (100%).
Wireplumber salva os níveis personalizados sempre que "algo" altera o volume do dispositivo.
As coisas ficam mais complicadas ao usar o SDDM como gerenciador de desktop: durante a duração de sua exibição na tela, ele inicia uma sessão como usuário sddm, completo com seu systemd de usuário, Pipewire e Wireplumber.
O Wireplumber da SDDM sofre a mesma lógica descrita acima, geralmente definindo o volume para 40%/100%. Depois que um(a) usuário(a) se autentica e inicia sua própria sessão, o Wireplumber do(a) usuário(a) pegará 40%/100% do SDDM como uma mudança externa e substituirá obedientemente ~user/.local/state/wireplumber/default-routes.
Solução alternativa: defina o volume conforme desejado na sessão do(a) usuário(a) e, em seguida, copie o arquivo de estado do Wireplumber do(a) usuário(a) para o diretório inicial do SDDM. Isso aplicará o volume desejado diretamente na tela de login.
sudo install -o sddm -g sddm ~/.local/state/wireplumber/default-routes /var/lib/sddm/.local/state/wireplumber/default-routes
Nota: alterar a configuração de usuário(a) para desativar device.restore-routes e para definir device.routes.default-sink-volume and device.routes.default-source-volume aplicaria apenas a alteração de volume no login de usuário(a), mas deixando no nível padrão para a duração da tela de login do SDDM.
Outra solução: desativar o Pipewire e o Wireplumber para o(a) usuário(a) do sddm
A seguinte solução é fornecida por esta postagem no stackexchange.com.
Você precisa ter o pacote systemd-container instalado no seu sistema.
Como o SDDM é executado em um contexto de usuário(a) systemd, todos os serviços definidos para todos(as) os(as) usuários(as) são acionados automaticamente. Entre eles o Pipewire, que desencadeia a inicialização do Wireplumber.
Mas sempre que o Wireplumber não conseguir encontrar qualquer configuração de volume por usuário(a), que é o caso do usuário não-login sddm, ele tenta redefinir o volume para os padrões.
A solução proposta desativa o Pipewire e o Wireplumber para o usuário sddm.
Faça login em uma sessão systemd para o usuário sddm:
sudo machinectl shell sddm@ /bin/sh
Execute os seguintes comandos para interromper, desativar e mascarar o Pipewire e o Wireplumber:
systemctl --user stop pipewire.service pipewire.socket wireplumber.service wireplumber.socket systemctl --user disable pipewire.service pipewire.socket wireplumber.service wireplumber.socket systemctl --user mask pipewire.service pipewire.socket wireplumber.service wireplumber.socket
Verifique se o WirePlumber está inativo e mascarado:
systemctl --user status wireplumber.service
Em seguida, saia da sessão systemd.
No próximo login, as configurações da alsa não serão mais redefinidas.
Veja também
PipeWire 1.0 – Uma entrevista com o criador do PipeWire, Wim Taymans (na Fedora Magazine)
Puppet module deploying the above configuration (except ALSA)
Leia a documentação oficial do pacote Debian para usar o Pipewire como um substituto de outros servidores de áudio, no arquivo /usr/share/doc/pipewire-audio-client-libraries/README.Debian.
