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

덧붙임!

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


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

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

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

아치 문서 초반에 이에 대한 문제점이 이미 언급돼 있다. (22년 9월 현재, 아래 내용은 없어졌다.)

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. 의견 고맙습니다.
      저는 지식이 일천한지라, 이리 저리 부딪히며 해결할 수 밖에 없었지요.

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