PulseAudio는 항상 내 시스템에서 실행되고 있으며 충돌이 발생하거나 닫히면 항상 즉시 다시 시작됩니다. 그러나 나는 실제로 한 번도시작펄스 오디오.
확인 /etc/init.d/
하고 또 /etc/X11/Xsession.d/
확인했는데 systemctl list-units -a
PulseAudio를 찾을 수 없습니다.
PulseAudio를 실행하지 않아도 마술처럼 저절로 시작되는 것처럼 보이는 이유는 무엇이며, 종료되면 어떻게 즉시 다시 시작됩니까?
저는 xinit 및 i3 창 관리자와 함께 PulseAudio 5와 함께 Debian 8(jessie)을 사용하고 있습니다.
답변1
공유 객체의 libpulse* 제품군에 연결하는 모든 프로세스(X 및 i3 창 관리자를 실행하기 전이나 후에)와 상호 작용을 시도하는 부산물로 사용자 프로세스에서 PulseAudio 서버를 암시적으로 자동 생성할 수 있습니다. 오디오 하위 시스템. PulseAudio의 창시자인 Lennart Poettering은 이를 확증하는 것처럼 보였습니다.2015-05-29 systemd-devel 메일링 리스트에 이메일 보내기:
"pulseaudio는 일반적으로 시스템 서비스가 아니라 사용자 서비스입니다. 사용자 세션이 systemd에 의해 관리되도록 완전히 변환되지 않는 한(가능성은 낮음) systemd는 이를 시작하는 데 전혀 관여하지 않습니다.
"PA는 일반적으로 세션 설정 스크립트 또는 서비스에서 시작됩니다. 예를 들어 Gnome에서는 gnome-session입니다. 라이브러리를 사용하는 경우 요청 시 자동으로 생성되므로 누락되었는지 주의하세요."
예를 들어, Debian Stretch(테스트)에서 웹 브라우저 IceWeasel은 두 개의 libpulse* 공유 객체에 연결됩니다: 1) libpulsecommon-7.1.so; 2) libpulse.so.0.18.2:
k@bucket:~$ ps -ef | grep iceweasel
k 17318 1 5 18:58 tty2 00:00:15 iceweasel
k 17498 1879 0 19:03 pts/0 00:00:00 grep iceweasel
k@bucket:~$ sudo pmap 17318 | grep -i pulse
00007fee08377000 65540K rw-s- pulse-shm-2442253193
00007fee0c378000 65540K rw-s- pulse-shm-3156287926
00007fee11d24000 500K r-x-- libpulsecommon-7.1.so
00007fee11da1000 2048K ----- libpulsecommon-7.1.so
00007fee11fa1000 4K r---- libpulsecommon-7.1.so
00007fee11fa2000 8K rw--- libpulsecommon-7.1.so
00007fee121af000 316K r-x-- libpulse.so.0.18.2
00007fee121fe000 2044K ----- libpulse.so.0.18.2
00007fee123fd000 4K r---- libpulse.so.0.18.2
00007fee123fe000 4K rw--- libpulse.so.0.18.2
libpulse*에 연결된 실행 중인 프로세스를 확인할 수 있습니다. 예를 들어 먼저 libpulse* 공유 개체 목록을 가져온 다음 각 개체에 대해 lsof를 실행합니다(참고: 이는 Debian Stretch(테스트)에서 가져온 것이므로 출력이 다를 수 있습니다).
sudo find / -type f -name "*libpulse*"
*snip*
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsedsp.so
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
/usr/lib/x86_64-linux-gnu/libpulse.so.0.18.2
/usr/lib/x86_64-linux-gnu/libpulse-simple.so.0.1.0
/usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0.0.5
/usr/lib/libpulsecore-7.1.so
/usr/lib/ao/plugins-4/libpulse.so
sudo lsof /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gnome-she 864 Debian-gdm mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set 965 Debian-gdm mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set 1232 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-she 1286 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
chrome 2730 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
pulseaudi 18356 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
이러한 프로세스가 PulseAudio를 자동으로 생성하지 않도록 하려면 ~/.config/pulse/client.conf를 편집하고 다음 행을 추가하세요.
autospawn = no
일반적으로 PulseAudio와 해당 라이브러리는 이 설정을 따릅니다.
실행 중인 프로세스를 통해 libpulse*를 연결하면 PulseAudio가 그렇게 빨리 다시 생성되는 이유를 나타낼 수도 있습니다. FreeDesktop.org 페이지, "실행펄스오디오”, 이것을 확인하는 것 같습니다:
"...일반적으로 일부 백그라운드 애플리케이션은 즉시 다시 연결되어 서버가 즉시 다시 시작됩니다."
콘솔을 통해(xinit를 실행하여) i3 창 관리자를 시작하고 디스플레이 관리자나 데스크탑 환경을 사용하지 않는 것으로 보입니다. 이 답변의 나머지 부분은 GNOME, KDE 등을 사용하는 사람들을 위한 자세한 정보입니다.
GNOME/KDE 자동 시작에 대한 추가 정보
Debian Jessie(안정 버전) amd64의 PulseAudio 패키지(5.0-13)는 다음 네 가지를 설치합니다.시스템 파일:
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulseaudio.desktop
- /usr/bin/start-pulseaudio-x11
- /usr/bin/start-pulseaudio-kde
일부 그래픽 세션 관리자는 자동으로 실행됩니다.FreeDesktop.org 자동 시작 스크립트사용자가 로그인할 때. PulseAudio 자동 시작 스크립트는 그래픽 세션 관리자에게 적절한 PulseAudio 시작 스크립트를 실행하라고 지시합니다.
/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde
이 스크립트는 PulseAudio 클라이언트 /usr/bin/pactl을 호출하여 PulseAudio 서버를 부산물로 생성하는 PulseAudio 모듈을 로드합니다(참고: autospawn을 "no"로 설정하면 pactl은 이를 존중하고아니요PulseAudio 서버를 자동으로 생성합니다.
자세한 내용을 보려면 FreeDesktop.org 페이지를 방문하세요."실행펄스오디오".
또한 다른 배포판에서는 일부 디스플레이 관리자가 PulseAudio를 시작할 수 있습니다(예:ArchLinux의 SDDM. 관리자가 지금쯤 이 문제를 해결했을 수도 있습니다.
답변2
PulseAudio는 어떻게 시작되었나요?
이는 여전히 유효한 질문이지만 시간이 지남에 따라 답변이 변경되었습니다. 이제 PulseAudio는 사용자의 systemd에 의해 자동으로 시작되고, 이는 사용자가 로그인할 때 시스템의 systemd에 의해 시작되기 때문에 이전 답변은 불충분하거나 올바르지 않습니다.
$ systemctl --user status pulseaudio
● pulseaudio.service - Sound Service
Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor pre
Active: active (running) since Tue 2020-03-14 15:29:56 ZULU; 13s ago
Main PID: 31080 (pulseaudio)
CGroup: /user.slice/user-1000.slice/[email protected]/pulseaudio.service
├─31080 /usr/bin/pulseaudio --daemonize=no
└─31081 /usr/lib/x86_64-linux-gnu/pulse/gsettings-helper
PulseAudio 종료
새 인스턴스가 즉시 시작되지 않도록 PulseAudio 프로세스를 중지하려면 다음을 사용하십시오 systemctl --user stop
.
$ systemctl --user stop pulseaudio.service pulseaudio.socket
PulseAudio 비활성화
로그인 시 PulseAudio가 자동으로 시작되는 것을 원하지 않으면 다음과 같이 비활성화할 수 있습니다.
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(그런데 비활성화하더라도 필요할 때 PulseAudio를 시작할 수 있습니다 systemctl --user start
.)
일반적으로 질문에 대답
위의 명령만 있으면 됩니다. 하지만 스스로 해결책을 찾는 방법에 관심이 있다면 계속해서 읽어보세요.
사운드 카드에 어떤 프로세스가 열려 있는지 확인하세요.
lsof
또는 명령을 사용하여 fuser -v
장치 파일이 열려 있는 프로세스를 확인합니다.
$ lsof /dev/snd/*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi 32768 hackerb9 3u CHR 116,5 0t0 15499 /dev/snd/controlC0
어떤 프로세스가 PulseAudio를 시작했는지 확인하세요.
pstree -s
아래와 같이 상위 프로세스를 표시 하는 데 사용됩니다 .
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─{pulseaudio}(32773)
systemd
이를 사용하여 PulseAudio가 내 계정(PID 738)에서 실행되는 인스턴스에 의해 실제로 시작되었는지 확인했습니다.
$ ps -fp 738
UID PID PPID C STIME TTY TIME CMD
hackerb9 738 1 0 Feb10 ? 00:00:00 /lib/systemd/systemd --user
그러면 이를 중지하기 위해 무엇을 사용해야 하는지 추측하기 쉽습니다 systemctl --user
.
답변3
Pulseaudio는 작은 데몬입니다. man pulseaudio
명령으로 끌 수 있지만 pulseaudio --kill
그렇게 하면 다시 생성됩니다. 자체적으로 다시 생성됩니다. 일반 초기화 스크립트는 부팅 시 이를 시작할 수 있습니다 /etc/rc2.d/S50pulseaudio
. 하지만 일반적인 리눅스 방식으로 제어하려고 하면 실행해도 /etc/init.d/pulseaudio stop
멈추지 않아 동작하지 않는다. 이를 제거해도 /etc/rc2.d/S50pulseaudio
부팅 시 시작되는 것을 방지할 수 없습니다.
다시 생성되는 습관을 중지하려면 을 열고 로 /etc/pulse/client.conf
변경한 후 daemon-binary를 로 설정하십시오 . 다음과 같이 해당 줄의 주석 처리가 제거되었는지 확인하세요.autospawn = yes
autospawn = no
/bin/true
autospawn = no
daemon-binary = /bin/true
이제 일반 Linux 부팅 파일을 처리할 수 있습니다. 먼저 삭제하십시오 /etc/rc2.d/S50pulseaudio
. 또는 Kill 명령으로 이름을 바꾸면 다시 필요할 경우를 대비하여 링크가 유지됩니다.
$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio
또는
시작 파일을 생략할 수도 있습니다 /etc/X11/Xsession.d/70pulseaudio
. 그러면 Gnome 세션이 시작될 때 Pulse가 시작됩니다. 삭제하거나 다른 디렉터리에 복사(저장을 원할 경우)한 후 정확한 파일명을 다시 확인하세요. PulseAudio를 시작하는 스크립트를 찾을 때 유용한 트릭 은 /usr/bin/pulseaudio
. /bin/true
이는 스크립트를 만족스럽게 유지하며 다시 변경하려는 경우 편리한 자리 표시자입니다.
이제 모든 시작 및 재생성 스크립트를 지웠으므로 이제 다음 명령을 사용하여 Pulse Audio를 중지하고 시작하십시오.
$ pulseaudio --kill
$ pulseaudio --start
답변4
Tushi/Carla Schroder가 제공한 답변(다음 답변 참조)은 debian wheezy에서 jessie로 업그레이드한 후에도 여전히 잘 작동합니다. 시작 메시지를 검토한 후 다음 오류가 발생했습니다(오류는 마지막 줄에 나열되어 있음).
root@voylinx:/etc#journalctl -b | grep pulseaudio
Dez 31 16:19:46 voylinx rtkit-daemon[1507]: Successfully made thread 1506 of process 1506 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1526 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1527 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1528 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1533 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:50 voylinx rtkit-daemon[1507]: Successfully made thread 1548 of process 1548 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:50 voylinx pulseaudio[1548]: [pulseaudio] pid.c: Daemon already running.
pulsaudio-daemon이 두 번 시작되었습니다. 한번은 rtkit-daemon에 의해 실행되고, 다른 때에는 GNOME/KDE AUTOSTART 또는 기타 응용 프로그램에 의해 실행됩니다. 어쨌든 /etc/pulse/client.conf에 설정하십시오.
autospawn = no
daemon-binary = /bin/true
내 문제를 해결했습니다. 유일하게 확인할 수 없는 점은 /etc/rcX.d 디렉토리에 더 이상 시작 스크립트가 없다는 것입니다. rtkit-daemon은 systemd와 상호 작용하여 작업을 수행하기 때문에 매우 명확합니다.