PipeWire (Português) - ArchWiki

# PipeWire (Português)

From ArchWiki
Jump to navigation Jump to search
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.

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.

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 || helvumAUR 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:

- 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 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 pulseeffects[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

- 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

Category:

- Multimedia (Português)

Hidden categories:

- Pages or sections flagged with Template:Accuracy
- Pages with broken package links