PipeWire (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.
https://gitlab.freedesktop.org/ryuukyu/helvum || helvum ou helvum-gitAUR

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:

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].

Dica: Para compartilhar um único monitor com 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

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Desde que este pull request foi mergido, a nota a seguir sobre compartilhamento de apps/janelas específicos pode não estar mais correta para xdg-desktop-portal-gtk. Além disso, veja também a discussão relacionada ao ticket em [3]. (Discuss in Talk:PipeWire (Português))

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

Tango-preferences-desktop-locale-modified.pngA tradução deste artigo ou desta seção não reflete o texto original.Tango-preferences-desktop-locale-modified.png

Motivo: PulseEffects was renamed to EasyEffects (Discuta na Talk:PipeWire (Português)#)

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].

Nota: Isto também instalará pipewire-pulse e substituir PulseAudio por PipeWire. Ver FS#69437 para mais detalhes. Para a versão legada ver PulseAudio#PulseEffects.

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