왕꽃삽질! Arch Linux, pulseaudio/pipewire 문제!!

덧붙임!

아무 근거는 없으나, 혹시 ~/.config/wireplumber/wireplumber.conf 를 생성(복사)해놓으면 pipewire-pulse 없이도 소리가 잘 날 수도?
이 파일은 /usr/share/wireplumber/wireplumber.conf 에서 복사해올 수 있다.


아.. 순조롭게 흘러간다 했으나, 결국 한방 얻어맞고야 말았다.
이전에 설치했던 Arch 는, 그저 설치만 하고 거의 사용하질 않았었고, GUI 도 아마.. 안썼었던 듯 하다.
따라서 이런 문제까진 겪질 못했다.

이번(2021년 11월)에는, KDE Neon 을 대체, 또는 거의 유사한 정도로 사용하려 했기 때문에 KDE Plasma 까지 설치하고 제대로 써보려했는데, ‘소리’ 문제가 거의 만 하루동안 나를 괴롭혔다.

풀어낸걸까? 자신은 없지만.. 아무튼 몇번 재부팅을 하며 실험해봤는데, 소리가 제대로 나온다.
(섣부르지만) 결론부터 말하자면, 이 문제는 신기술인 PipeWire 때문에 비롯됐다.

아치 문서 초반에 이에 대한 문제점이 이미 언급돼 있다.

The factual accuracy of this article or section is disputed.
Reason: Does it mean that without installing further packages, pipewire does not handle audio at all? The pipewire package contains many audio-related files, e.g. /etc/alsa/conf.d/50-pipewire.conf. (Discuss in Talk:PipeWire)

내가 설치해본 소감도 마찬가지다. Pipewire 만으로 소리가 난다는 얘긴가? 난 결국 pipewire-pulse 를 설치해야만 했는데???

참고로, ArchLinux 에는  pipewire-docs 라는 꾸러미가 있다. 이건 /usr/share/doc/pipewire/html/index.html 에서 볼 수 있는데, 소프트웨어 개발에 관한 내용이 주를 이루고 있으므로, 나같은 ‘사용자’한텐 전혀 도움이 되는 내용이 아니다.


검은 그림자, 드리우다.

그래픽 드라이버?

GUI 도 설치하고, 이런 저런 프로그램들을 갖춰가고 있던 중, 영상과 소리를 확인하고자 유튜브로 가봤다. 브라우저는 비발디였다.

그런데..?
영상이 나오질 않고 계속 버퍼링(? 동그라미만 뱅글뱅글)되는 현상이 나타났다.
그림이 나오지 않으니, 당연히 그래픽 쪽 문제라 생각하고 애꿎은 그래픽 드라이버를 Usual Suspect 로 간주했었다. 이런 저런 커널 옵션도 줘보고, 할 수 있는 한 여러가지를 다 해봤으나 실패. 역시 심증만으로하는 수사는 지양해야 한다.

SMPlayer 는 되는데?

그러다가, 넷웍과 무관하게 실험을 해보고자, SMPlayer 로 동영상 파일을 재생했다.
어랏?
영상, 소리 모두 문제가 없다.

이렇다는건, 그래픽 드라이버 문제는 아니란 건데..

그렇다면 브라우저?

비발디가 문제일까 하여, FireFox, Google Chrome 으로 모두 시험/실험해봤으나 결과는 동일.
이러면 브라우저 문제도 아닌거다.

본격 수사, 시작되다.

alsa 가?

그러다가 어떻게 그랬는지는 모르지만, Pulse 를 유력 용의자로 놓고 강력 취조를 시작했다.
살펴보니 pulseaudio-alsa 가 설치돼 있질 않았다. 이걸 설치하고, 재부팅(아마도 지금 생각하면 재부팅이 아니라 재로그인이 아니었을까 추측해본다.)했더니 드/디/어! 소리와 영상이 나오기 시작했다. 이게 어젯밤이다. 성공했다는 뿌듯함과 안도감으로 기분좋게 잠자리로 향했다.

그저 착각이었네!

허나, 날이 밝고 다시 Arch 를 돌려보니 여전히 동일한 현상이 반복됐다. 아마도 재로그인하면서 인식이 되지 않았던 사운드카드가 정상 작동을 했던 모양이다. 즉, PC 를 켜고 첫 로그인에선 오류가 발생하지만, 재로그인시에는 그게 어떻게든 제자리로 가는 모양이다.

이젠 이리 저리 들쑤시는 수밖에

답은 Arch Linux 문서내에 있다는 신념(?)하에, Pulseaudio 관련된 문서, 질문/답변등을 뒤지기 시작했다. 이런 저런 헛정보들을 발견하고, 적용해보았다.
물론, 모두 실패.

그러다가…

드디어 제대로된 접근

pulseaudio -vvv

이 내용도 역시 Arch 문서에 있다. 그것도 문서 제일 첫머리에.
다만, 거기서 제안한대로 daemon 을 먼저 죽이고 시험하면, 오류를 볼 수 없었다.
일단은, 그냥 pulseaudio -vvv 를 실행해본다.

(현재 내 상황은 문제가 해결되었고, 따라서 같은 오류 문구를 볼 수는 없다. 따라서, 나와 유사한 곤란을 호소한 글에 나와있는 출력상황을 그대로 옮겨본다.)

$ pulseaudio -vvv
I: [pulseaudio] main.c: setrlimit(RLIMIT_NICE, (31, 31)) failed: Operation not permitted
I: [pulseaudio] main.c: setrlimit(RLIMIT_RTPRIO, (9, 9)) failed: Operation not permitted
D: [pulseaudio] core-rtclock.c: Timer slack is set to 50 us.
D: [pulseaudio] core-util.c: RealtimeKit worked.
I: [pulseaudio] core-util.c: Successfully gained nice level -11.
I: [pulseaudio] main.c: This is PulseAudio 12.0-378-g02fc89
D: [pulseaudio] main.c: Compilation host: x86_64-pc-linux-gnu
D: [pulseaudio] main.c: Compilation CFLAGS:  -g -O0 -Wall -W -Wextra -pipe -Wno-long-long -Wno-overlength-strings -Wunsafe-loop-optimizations -Wundef -Wformat=2 -Wlogical-op -Wsign-compare -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align -Wstrict-aliasing -Wwrite-strings -Wno-unused-parameter -fno-common -fdiagnostics-show-option -fdiagnostics-color=auto
D: [pulseaudio] main.c: Running on host: Linux x86_64 5.0.0-20-generic #21-Ubuntu SMP Mon Jun 24 09:32:09 UTC 2019
D: [pulseaudio] main.c: Found 12 CPUs.
I: [pulseaudio] main.c: Page size is 4096 bytes
D: [pulseaudio] main.c: Compiled with Valgrind support: yes
D: [pulseaudio] main.c: Running in valgrind mode: no
D: [pulseaudio] main.c: Running in VM: no
D: [pulseaudio] main.c: Running from build tree: no
D: [pulseaudio] main.c: Optimized build: no
D: [pulseaudio] main.c: All asserts enabled.
I: [pulseaudio] main.c: Machine ID is a780a212b2e84b5f8f2f3abe253cfbbb.
I: [pulseaudio] main.c: Session ID is 2.
I: [pulseaudio] main.c: Using runtime directory /run/user/1000/pulse.
I: [pulseaudio] main.c: Using state directory /home/x/.pulse.
I: [pulseaudio] main.c: Using modules directory /usr/local/lib/pulse-12.0/modules.
I: [pulseaudio] main.c: Running in system mode: no
E: [pulseaudio] pid.c: Daemon already running.
E: [pulseaudio] main.c: pa_pid_file_create() failed.

내 상황과 상당히 비슷했는데, 위 결과에서 중요한 문구는 맨 아래 2개다.

E: [pulseaudio] pid.c: Daemon already running.
E: [pulseaudio] main.c: pa_pid_file_create() failed.

무슨 이유에선지 pa_pid_file_create() 라는 함수가 실행되지 못했고, 그래서 Pulseaudio 가 제대로 작동을 안한다. 사운드카드 상황을 보면(KDE Plasma 설정이나, PulseAudio Volume Control(pavucontrol-qt)를 봐도 사운드카드가 잡혀있긴 했다. 허나, 제대로 정작 소리를 내주진 못했다.

여기까지 왔지만, 꽃삽질은 멈춰지질 않았다.
일단 위에 연결된 글은 우분투용 해법을 구하고 있다. 답으로 나온 ~/.config/pulse/* 를 삭제하라는 제안은 이미 해봤기에 더 볼 것도 없었고.

두번째 시도

reddit 에서본 글 대로, /etc/pulse/default.pa 에 해당 내용을 추가해보기도 했다.
물론, 역시 꽝.

다시 alsa?

아치 문답란에 있는 글을 보고, github 까지 쫓아가봤지만, 뭔 소린지 알 수 없는 내용에 짜증만 났다.

또 다시 파랑새

차분하게 심신을 정리하고, 다시 한번 Arch Pulse Trouble Shooting 문서를 봤다.
그러다가 한군데, 드디어 제대로된 시선이 꽂혔다.

No cards. 내 상황이다. 물론, 아예 카드가 없다고 나오진 않았지만..
여기에서 fuser -v /dev/snd/* 명령을 내려보라했는데.. 여기에서 wireplumber, pipewire 라는 이름이 처음으로 등장했고, 이게 결국 해결의 빌미가 되었다.

Pipewire

이게 뭔지 잘 감이 오진 않는다. 설명을 봐도 마찬가지다.
fuser -v /dev/snd/* 를 KDE Neon 과 Tumbleweed 에서 내려본 결과는 모두 pulseaudio 였다. 그런데 Arch 는..

$ fuser -v /dev/snd/*              
                     USER        PID ACCESS COMMAND
/dev/snd/controlC0:  nemonein    927 F.... wireplumber
/dev/snd/controlC1:  nemonein    927 F.... wireplumber
/dev/snd/controlC2:  nemonein    927 F.... wireplumber
/dev/snd/seq:        nemonein    926 F.... pipewire

KDE Neon / Tumbleweed

$ fuser -v /dev/snd/*              
                     USER        PID ACCESS COMMAND
/dev/snd/controlC0:  nemonein    927 F.... pulseaudio
/dev/snd/controlC1:  nemonein    927 F.... pulseaudio
/dev/snd/controlC2:  nemonein    927 F.... pulseaudio

Pipewire 에는 /dev/snd/seq 가 생기고, 그걸 pipewire 가 관장하고 있었다.

아무튼, 문제는 pipewire 라는 심증(물증)이 점점 확실해져가고 있었다.

그래서 해결책은?

Arch PipeWire 문서에선, pipewire-pulse 를 설치할 필요는 없다고 한다.

Other packages, such as pipewire-alsapipewire-pulse, and pipewire-jack are normally not needed unless one wants to use PipeWire as a PulseAudio/JACK replacement.

그런데, pulseaudio 를 pipewire 로 대체하려면 설치하라고 한다. 지금 나로선 대안이 없다. 소리가 안나는데 어쩌라고. (더불어 영상까지.)

해봤다.

sudo pacman -S pipewire-pulse

드디어 문제 해결.
소리/영상 모두 아무 이상이 없다.

또, pavucontrol 등도 그대로 작동한다. pipewire-pulse 를 설치하면 pulseaudio 가 지워지는데, 그럼에도 불구하고 pulseaudio 는 작동을 한다. SMPlayer 에서도 Pulse 로 설정해주면 된다. 흠.. 어떤 식으로 작동하는 건지 잘 상상이 되질 않네.

PipeWire 를 알려면 좀 더 공부 필요하다. pulseaudio 의 대체재로 보이긴 하지만.. 완전히 대체한다기 보다는, pulseaudio 도 호환하면서 대체해준다고 표현하면 비슷하게 맞는 듯도 하다.
허나, 장님이 문고리를 잡았든, 코끼리가 뒷걸음질 치다 쥐를 잡았든, 어쨌든 문제는 풀렸다.
(이게 또 어떤 다른 문제를 가져올진 또 모르겠으나..)

** pipewire 꾸러미를 지우는게 방법일 수도 있겠지만.. 의존성 때문에 이렇게 하기도 어렵다.

Author: 아무도안

2 thoughts on “왕꽃삽질! Arch Linux, pulseaudio/pipewire 문제!!

  1. pipewire-pulse 패키지는 pipewire에 pulseaudio 호환 오디오 서버 모듈을 작동시키는 역할을 합니다. 그것 없이 pipewire만 설치한다면 pipewire api로 접근해야 하는데 앱들은 pulseaudio api 출력이나 jack, alsa 출력을 가지고 있기 때문에 pipewire-pulse, pipewire-jack, pipewire-alsa 중 하나를 설치하지 않는다면 일반적인 환경에서는 소리가 안 나는 게 당연합니다.

    1. 의견 고맙습니다.
      저는 지식이 일천한지라, 이리 저리 부딪히며 해결할 수 밖에 없었지요.

안녕하세요. 글 남겨주셔서 고맙습니다.