본문 바로가기
리눅스

PipeWire

by 다움위키 2023. 12. 22.

PipeWire리눅스에서 오디오와 비디오 스트림과 하드웨어를 처리하기 위한 서버입니다. 그것은 Red Hat에서 Wim Taymans에 의해 만들어졌습니다. 그것은 멀티미디어 라우팅과 파이프라인 프로세싱을 처리합니다.

페도라는 버전 34에서 PipeWire를 기본으로 제공하고 있습니다. 데비안 11에서, PipeWire 0.3.19를 사용할 수 있고, ALSA 사용자 공간 라이브러리, PulseAudio와 JACK에 대해 대체품으로 실험적으로 사용될 수 있습니다. 이것은 문서화되었지만 지원되지 않는 사용-사례입니다.

Installation

데비안 11에서 기본적으로 제공되고, 아래와 같이 설치할 수 있습니다:

  • sudo apt install pipiwire

데비안 11에서, 별도의 FFmpeg 플러그인 패키지가 없고, 블루투스 패키지는 이전 버전 10과 libspa-0.2-bluetooth로 이동되었습니다. PipeWire를 JACK 서버로 사용하기 위해 요구되는 libspa-0.2-jack 패키지에 JACK 플러그인도 있습니다:

  • sudo apt install libspa-0.2-bluethooth libspa-0.2-jack

데비안 11에 대해, PipeWire는 PulseAudio를 대체하기 위해 사용될 수 있습니다. 추가적으로, pipewire-audio-client-libraries 패키지가 사용될 수 있습니다. 이 패키지에서 라이브러리는 응용 프로그램에게 PipeWire 서버를 통해 출력하기 위해 JACK과 ALSA에 직접 접근하는 것을 허용하며, 서로 다른 사운드 서버와 API 사이의 조화로운 상호 운용성을 허용합니다.

Using Sid package

데비안 12에서 사용될 현재의 시드 pipewire는 호환성과 안정성이 크게 향상된 것으로 알려져 있습니다. 실제로, 현재 데비안 11에서 아래 설정으로는 사운드가 끊어지는 이상한 상황을 자주 만나게 됩니다. 알려진 조치를 수행하더라도 여전히 그 현상이 없어지지 않습니다.

대신에 시드의 패키지를 데비안 11에서 컴파일한 후에, pulseaudio를 mask하고 pipewire-pulse를 실행하면, 문제가 발생하지 않을 수 있습니다.

설치 후에, 소리 관련된 이상 현상이 발생할 수 있으며, 아래 #Troubleshootings를 참고하셔서 서비스에서 발생하는 경고 메시지를 없애줄 필요가 있습니다. 그 작업 후, 약 한 달의 기간 동안 소리 관련된 어떠한 이상 현상도 발생하지 않았습니다. 이제 충분히 사용할 준비가 되었습니다. 시도해 보십시오!!

다음 패키지들을 설치할 수 있습니다:

  • gstreamer1.0-pipewire
  • libpipewire-0.3-0
  • libpipewire-0.3-modules
  • libspa-0.2-modules
  • pipewire
  • pipewire-audio-client-libraries
  • pipewire-alsa
  • pipewire-jack
  • pipewire-bin
  • pipewire-pulse

그외 다음 패키지가 필요합니다:

  • pipewire-media-session

또는

  • wireplumber

다시 컴파일할 경우에, 다음 오류가 발생할 수 있습니다.

dpkg-shlibdeps: error: no dependency information found for .../usr/lib/x86_64-linux-gnu/pipewire-0.3/jack/libjack.so.0

이 파일은 pipewire-audio-client-libraries 패키지에 포함되어 있습니다. 이것을 지우고 다시 컴파일할 수 있습니다. 다른 방법은 여기서 확인할 수 있고, 상황에 따라 적절한 것을 선택할 수 있습니다.

Configuration 시드 패키지 설정은 아래 과정보다는 단순합니다:

  • systemctl --user --now disable pulseaudio.service pulseaudio.socket
  • systemctl --user mask pulseaudio.service
  • systemctl --user mask pulseaudio.socket
  • systemctl --user --now enable pipewire pipewire-pulse wireplumber
  • sudo reboot

이 패키지와 wine을 같이 사용하면, libxfixes3:i386 패키지에서 문제가 발생할 수 있습니다. 일부 수정이 필요한 i386 패키지도 같은 디렉토리에서 찾을 수 있습니다.

Configuration

데비안 11에서 동작하기는 하지만, 안정성을 완전히 보장하기는 않습니다. 단지, 나중에 원상 복구는 가능하기 때문에 사용해 볼 필요는 있습니다.

어쨌든, 잠재적인 이점으로는 CPU 사용량 감소, 블루투스 장치 지원 향상, JACK과 PulseAudio를 사용하는 응용 프로그램 사이의 더 나은 통합이 있습니다.

아래에는 세 가지 다른 서비스를 서로 독립적으로 대체하지만, 서로 다른 응용 프로그램 사이의 최상의 통합을 위해 셋 모두를 PipeWire로 대체하는 것을 추천합니다.

PluseAudio

필요한 파일을 만들고, 서비스를 실행합니다:

  • sudo touch /etc/pipewire/media-session.d/with-pulseaudio
  • sudo cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
  • systemctl --user daemon-reload
  • systemctl --user --now disable pulseaudio.service pulseaudio.socket
  • systemctl --user --now enable pipewire pipewire-pulse

제대로 설정되었는지 확인을 합니다:

  • LANG=C pactl info | grep '^Server Name'

Server Name: PulseAudio (on PipeWire 0.3.19)

이전 서비스를 중지하도록 설정합니다:

  • systemctl --user mask pulseaudio

ALSA

위쪽에서 필요한 패키지를 설치하시고, 필요한 파일을 만듭니다:

  • sudo touch /etc/pipewire/media-session.d/with-alsa
  • sudo cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/

JACK

위쪽에서 필요한 패키지를 설치하시고, 필요한 파일을 만듭니다:

  • sudo touch /etc/pipewire/media-session.d/with-jack
  • sudo cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/
  • sudo ldconfig

이것은 /usr/lib/x86_64-linux-gnu/pipewire-0.3/jack/ 폴더에 있는 동적 링커를 지정하여 JACK 서버 라이브러리를 응용프로그램 실행-시간에 PipeWire의 대체품으로 대체합니다.

모든 설정이 끝나면 시스템을 재시작합니다.

Troubleshootings

mod.rt: Can't find xdg-portal: (null) :

pipewire.service, pipewire-pulse.service 2개의 서비스에 모두 발생하고, 각각의 설정 파일에서 module-rt를 주석처리 함으로써 없앨 수 있지만, 다른 메시지가 발생합니다.

mod.x11-bell: XOpenDisplay() failed :

pipewire-pulse.service를 시작할 때 발생하고, /usr/share/pipewire/pipewire.conf 파일을 /etc/pipewire/ 디렉토리로 복사한 후에, 해당 모듈을 주석처리해 버립니다.

Smplayer :

화면 잠금 후에 반응이 없습니다. 강제 종류 후에 재시작할 수 있지만, 원인을 알 수 없습니다.

can't load api.bluez5.enum.dbus : 

No such file or directory : /etc/pipewire/media-session.d/media-session.conf 파일에서 bluez5를 주석 처리해 줍니다.

pulseaudio.socket :

Socket service pulseaudio.service not loaded, refusing. : pulseaudio를 mask함으로써 발생하는 것으로 보이며, /etc/pulse/daemon.conf에서 daemonize = no 설정하고, ~/.config/pulse/client.conf 에 autospawn = no 설정합니다.

services mask :

사용하지도 않는데, 부팅 후에 오류 메시지를 뿌리기 때문에, 중지하고 시작하지 못하도록 처리해 줍니다:

  • systemctl --user stop pipewire.socket && systemctl --user stop pipewire.service
  • systemctl --user stop pipewire-pulse.socket && systemctl --user stop pipewire-pulse.service
  • mkdir ~/.config/systemd/user/
  • systemctl --user mask pipewire.socket
  • systemctl --user mask pipewire-pulse.socket
  • systemctl --user mask pipewire.service
  • systemctl --user mask pipewire-pulse.service

Revert back to Pulseaudio

아직 데비안의 여러 다른 패키지들과 통합이 덜 이루어졌는지, 약간의 귀찮은 일, 예를 들어, 화면 잠금 후에 비디오와 오디오 둘 다 현 위치에서 재시작되지 않고, 중지 후에 처음부터 시작해야 합니다.

원래로 되돌리고 싶으면,

  • systemctl --user unmask pulseaudio
  • systemctl --user --now disable pipewire-pulse
  • systemctl --user --now enable pulseaudio.service pulseaudio.socket
  • sudo reboot

External links