PipeWire (Português)
PipeWire é um novo framework low-level de multimídia. Seu objetivo é oferecer a captura e a reprodução tanto para áudio quanto para vídeo com latência mínima e suporte para PulseAudio-, JACK-, ALSA- e programas baseados em GStreamer.
O daemon baseado no framework pode ser configurado para ser tanto um servidor de áudio (com funcionalidades do JACK e PulseAudio) quanto um servidor de captura de vídeo.
PipeWire também oferece suporte para containers como Flatpak e não depende dos user groups audio e vídeo, e em seu lugar usa us sistema de segurança similar ao Polkit, pedindo permissão para Flatpak ou Wayland para poder gravar a tela ou áudio.
Instalação
Instale o pacote pipewire através dos repositórios oficiais.
Pipewire usa systemd/User para a manutenção do servidor e da ativação automática dos sockets.
Optionalmente, installe pipewire-docs para revisar a documentação. Outros pacotes, como pipewire-alsa, pipewire-pulse, e pipewire-jack normalmente não são necessários, a menos que o usuário queira usar Pipewire como um substituto para PulseAudio/JACK. Outros pacotes disponíveis são lib32-pipewire, e lib32-pipewire-jack para suporte a multilib.
GUI
- Helvum — Patchbay para pipewire baseada em GTK, inspirada pela ferramenta catia, para o JACK.
Uso
Compartilhamento de tela por WebRTC
A maioria dos navegadores costumava depender do X11 para a captura do desktop (ou de programas individuais) ao usar WebRTC (por exemplo, no Google Hangouts). Com Wayland, o mecanismo de compartilhamento é lidado de maneira diferente por motivos de segurança. PipeWire permite o compartilhamento de conteúdo usando Wayland com controles de acesso bem definidos.
Isso requer xdg-desktop-portal e um de seus backends para ser instalado. Os backends disponíveis são:
- xdg-desktop-portal-gtk para GNOME.
- xdg-desktop-portal-kde para KDE.
- xdg-desktop-portal-wlr para compositores baseados em wlroots (por exemplo Sway, ou dwl)
Firefox (84+) oferece suporte para esse método por padrão, enquanto que no Chromium (73+) o usuário precisa habilitar suporte a WebRTC PipeWire habilitando a flag correspondente (experimental) na seguinte URL:
chrome://flags/#enable-webrtc-pipewire-capturer
Para xdg-desktop-portal-wlr
funcionar você precisa instalar pipewire-media-session [1] e garantir que XDG_CURRENT_DESKTOP=sway
está ativado na sessão [2].
xdg-desktop-portal-wlr
, caso você possua mais de um, você pode adicionar a flag --output=Monitor
através de editar a opção ExecStart=
no arquivo de serviço da unidade. A linha completa pode ficar semelhante a ExecStart=@libexecdir@/xdg-desktop-portal-wlr --output=eDP-1
Lembrando que a única funcionalidade suportada é o compartilhamento do deskop inteiro e não de um app/janela específicos [4][5].
Vídeo
Por mais que o software ainda não esteja pronto para produção, é totalmente seguro de se usar. A maioria dos programas que dependem do GStreamer para lidar, por exemplo, com transmissões de vídeo devem funcionar perfeitamente graças ao plugin GStreamer PipeWire. Programas como, por exemplo cheese são capazes de compartilhar vídeo capturado ao serem usados por conta disso.
Áudio
PipeWire pode ser utilizado como um servidor de áudio, similar ao PulseAudio e JACK. Seu objetivo é substituir tanto o PulseAudio quanto o JACK, ao prover uma implementação de servidor compatível com PulseAudio e bibliotecas compatíveis com clients JACK. Ver esta entrada no blog para mais informações.
ALSA/Programas legados
Instale pipewire-alsa para rotear todos os programas que usem a API ALSA através do PipeWire.
Clients PulseAudio
Instale pipewire-pulse. O mesmo irá substituir pulseaudio e pulseaudio-bluetooth. Normalmente não é necessária mais nenhuma ação, já que o serviço de usuário pipewire-pulse.socket
deve ser habilitado automaticamente pelo pacote. Se o PipeWire não funcionar corretamente na inicialização do sistema, confirme que os serviços Systemd/User pipewire-pulse.service
, pipewire.service
, e pipewire-media-session.service
estão funcionando.
Reinicie ou encerre e entre novamente na sessão para surtir efeito.
Para conferir se a substituição está funcionando, rode o seguinte comando e confira o resultado:
$ pactl info
... Server Name: PulseAudio (on PipeWire 0.3.16) ...
Clients JACK
Instale pipewire-jack e use pw-jack
para abrir clients JACK com as bibliotecas compatíveis ao invés da original libjack*
:
pw-jack application
Também é possível requerir um tamanho de buffer customizado ao definir um quociente de tamanho de buffer/taxa de amostra (o qual define a latência de bloco em segundos):
PIPEWIRE_LATENCY="128/48000" pw-jack application
Outra alternativa é instalar pipewire-jack-dropinAUR ou desinstalar jackAUR/jack2 para permitir que os clients JACK carreguem as bibliotecas compatíveis automaticamente.
Use ldd
para verificar que o programa JACK está linkado com a biblioteca correta:
$ ldd /usr/bin/qjackctl | grep -i libjack
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)
Dispositivos Bluetooth
PipeWire lida com dispositivos de áudio Bluetooth se o pacote pipewire-pulse estiver instalado. Mais especificamente, o deamon de sessão de mídia checa por /etc/pipewire/media-session.d/with-pulseaudio
, e habilita seu módulo bluez5
automaticamente se o arquivo existir.
Rodar PipeWire em cima do JACK nativo
PipeWire também pode ser usado como um client JACK em cima do daemon JACK nativo se desejado. Ver JACK and PipeWire para mais informações.
Pós-processamento de áudio
PulseEffects
PulseEffects é um programa em GTK que disponibiliza uma vasta quantidade de efeitos e filtros de áudio para transmissões de saída de áudio e de entrada de microfone em programas individuais. Efeitos notáveis incluem um equalizador de entrada/saída, equalizador de volume de entrada e melhorias de grave, além de um de-esser para entrada de um plug-in de redução de ruído. Ver a página no GitHub para uma lista completa de efeitos.
Para usar o PulseEffects com PipeWire, instale pulseeffectsAUR[link quebrado: replaced by easyeffects] ou pulseeffects-gitAUR[link quebrado: package not found].
Ver Community Presets para uma coleção de configurações de presets.
Solução de problemas
Microfone não é detectado por PipeWire
O módulo alsa-monitor
do PipeWire usa alsa-card-profiles para detectar dispositivos por padrão. Se isso não estiver funcionando para você, tente desligar api.alsa.use-acp
, ou opcionalmente ligue api.alsa.use-ucm
em /etc/pipewire/media-session.d/alsa-monitor.conf
, embaixo de rules
-> a primeira regra -> actions
-> update-props
:
... update-props = { api.alsa.use-acp = false ...
Então reinicie o pipewire e confira os dispositivos disponíveis:
$ pw-record --list-targets
Available targets ("*" denotes default): 62 58: description="Built-in Audio" prio=1872 60: description="Built-in Audio" prio=2000 * 62: description="Built-in Audio (Loopback PCM)" prio=1984
Sem som após conectar um dispositivo Bluetooth
Até 07-12-2020, se não houver som após conectar um dispositivo Bluetooth, você pode precisar trocar o sink padrão e/ou mover um input de sink para o sink correto. Use pactl list sinks
para listar os sinks disponíveis e pactl set-default-sink
para trocar o sink padrão para o dispositivo Bluetooth. Isso pode ser automatizado via udev usando um script similar a este.
Ver essa discussão no Reddit para mais informações sobre o problema. De acordo com o autor do script, o perfil de headset (HSP) pode ainda apresentar problemas.
Volume baixo
Caso, após substituir PulseAudio com PipeWire, seu som funcionar corretamente mas após reiniciar o volume estiver intoleravelmente baixo:
Abra alsamixer
, aperte F6
para selecionar a placa de som correta, e confirme que os volumes ALSA estão em 100%. alsactl
deve manter essa configuração após reiniciar o sistema.
Aumentar RLIMIT_MEMLOCK
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK
Instale realtime-privileges e adicione seu usuário ao grupo realtime
.
Outra alternativa é aumentar o memlock de 64kB para 128kB, o que parece ser o suficiente para corrigir isso. Se você estiver usando pipewire-pulse
sob systemd/User, adicione:
username soft memlock 64 username hard memlock 128
em /etc/security/limits.d/username.conf
Modificar a taxa de amostra
Por padrão PipeWire define uma taxa de amostra global de 48kHz. Se você precisar modificá-la (por exemplo, se possuir um DAC que suporte um valor maior) você podê fazê-lo modificando a linha default.clock.rate = 48000
no arquivo de configuração /etc/pipewire/pipewire.conf
. Por exemplo, se você quiser 192kHz, descomente e modifique a linha 48000
para default.clock.rate = 192000
.
Placa de som externa não é ativada após reconectar
Cheque se ~/.config/pipewire-media-session/default-profile
possui alguma entrada com o perfil padrão "off" e a remova. Se isso não ajudar, remova todos os arquivos de ~/.config/pipewire-media-session/
e reinicie PipeWire usando systemctl --user restart pipewire.service
.
Sem som ou pactl info mostra Failure: Connection refused
Isso significa que os programas não estão sendo capazes de conectar com o serviço PipeWire-Pulse, confirme que /etc/pipewire/pipewire-pulse.conf
existe e não é está vazio, e reinicie PipeWire-Pulse usando systemctl --user restart pipewire-pulse.service
.
Se isso não resolver o problema, rode o comando strace -f -o /tmp/pipe.txt pactl info
e cole em /tmp/pipe.txt
para ajudar na busca por ajuda no IRC (OFTC #pipewire) ou em listas de mensagens.
Qualidade de áudio baixa usando Bluetooth
No caso de a reprodução via Bluetooth travar ou cortar, confira pipewire.service
usando systemctl --user status pipewire.service
. Se houver erros como este,
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered
confira o codec atualmente selecionado usando pactl list sinks
e tente modificá-lo configurando bluez5.codecs
para usar um dentre sbc aac ldac aptx aptx_hd
em
/etc/pipewire/media-session.d/bluez-monitor.conf
... properties = { ... bluez5.codecs = [sbc] ...
Tente habilitar suporte a mSBC (fixes mic on Sony 1000XM3):
/etc/pipewire/media-session.d/bluez-monitor.conf
... rules = [ ... actions = { ... update-props = { ... bluez5.msbc-support = true ...
Reinicie PipeWire usando systemctl --user restart pipewire.service
para as mudanças fazerem efeito.
Sem dispositivos detectados após atualizar PipeWire e reiniciar (git / >=0.3.23)
Até o commit 012a68f8[6] um novo serviço do systemd foi adicionado, desabilitado por padrão, significando que não há pipewire-media-session
rodando ao inicializar o sistema. Para habilitar o serviço, rode: systemctl --user enable --now pipewire-media-session.service
Se o usuário do gerenciador de pacotes não tiver preparado as mudanças no arquivo de configuração após a atualização, então outra instância de pipewire-media-session
possa estar rodando em pipewire.service. Para conferir, rode: systemctl --user status pipewire.service
Se o resultado mostrar pipewire e pipewire-media-session rodando, atualize as configurações do seu sistema e/ou usuário:
/etc/pipewire/pipewire.conf and/or ~/.config/pipewire/pipewire.conf
context.exec = { ... # Line below should be commented out #"/usr/bin/pipewire-media-session" = { args = "" } ... }
Atraso no áudio notável ao começar a tocar áudio
Isso é causado pela suspensão dos nós quando inativo. Isso pode ser desabilitado editando /etc/pipewire/media-session.d/*-monitor.conf
dependendo de onde o atraso ocorre e mudar session.suspend-timeout-seconds
para 0 para desabilitar ou experimentar com outros valores e encontrar o que funciona para você. Outra alternativa é comentar a linha suspend-node
em /etc/pipewire/media-session.d/media-session.conf
. Reinicie os serviços do systemd pipewire
e pipewire-pulse
para aplicar as mudanças ou reinicie o sistema.
Áudio cortando quando várias fontes de áudio começam a tocar
Esse problema pode ser tipicamente diagnosticado ao rodar journalctl --user -b -u pipewire-pulse
e procurar por linhas similares a:
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940
De acordo com o https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors guia oficial de solucão de problemas do PipeWire], para resolver esse problema edite /etc/pipewire/media-session.d/alsa-monitor.conf
, descomente a linha api.alsa.headroom = 0
e modifique seu valor para 1024
.
O microfone soa distorcido
Esse problema as vezes é causado pelas configurações de "boost" do microfone.
Experimente navegar até a placa de som que está tendo problemas após rodar alsamixer
e use as setas do teclado para reduzir as possíveis opções de "Mic Boost" ou "Internal Mic Boost".
Ver também
- Wiki — PipeWire Wiki on Freedesktop GitLab
- Pipewire Update Blog Post — Blog post from January 2018 outlining the state of PipeWire at the time
- PipeWire Late Summer Update 2020 — Blog post from September 2020