덧붙임!
아무 근거는 없으나, 혹시 ~/.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-alsa, pipewire-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
꾸러미를 지우는게 방법일 수도 있겠지만.. 의존성 때문에 이렇게 하기도 어렵다.
pipewire-pulse 패키지는 pipewire에 pulseaudio 호환 오디오 서버 모듈을 작동시키는 역할을 합니다. 그것 없이 pipewire만 설치한다면 pipewire api로 접근해야 하는데 앱들은 pulseaudio api 출력이나 jack, alsa 출력을 가지고 있기 때문에 pipewire-pulse, pipewire-jack, pipewire-alsa 중 하나를 설치하지 않는다면 일반적인 환경에서는 소리가 안 나는 게 당연합니다.
의견 고맙습니다.
저는 지식이 일천한지라, 이리 저리 부딪히며 해결할 수 밖에 없었지요.