PipeWire (Português)

Translation Status:
This article is a localized version of
PipeWire
. Last translation date: 2021-05-19. You can help to synchronize the translation, if there were
changes
in the English version.
Artigos relacionados
PipeWire/Exemplos (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.
Opcionalmente, instale
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-git
AUR
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]
.
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
The factual accuracy of this article or section is disputed.
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
AUR
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
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
Audio
PipeWire pode ser usado como um servidor de áudio, semelhante ao PulseAudio e ao JACK, com o objetivo de substituí-los. Ele fornece uma implementação compatível com o servidor PulseAudio e bibliotecas compatíveis com a ABI para clientes JACK.
Primeiramente, instale o
pipewire-audio
. De acordo com o cliente de áudio, você precisará realizar outras etapas. Caso necessário, consulte a seção
Advanced Linux Sound Architecture#Firmware
.
Nota
Isto também instalará
pipewire-pulse
e irá substituir o PulseAudio pelo PipeWire. Veja
FS#69437
para mais detalhes. Para a versão anterior, veja
PulseAudio#PulseEffects
.
Consulte os
Community Presets
para uma coleção de configurações pré-definidas.
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