PulseAudio เริ่มต้นอย่างไร


17

PulseAudio ทำงานบนระบบของฉันอยู่เสมอและจะเริ่มต้นใหม่ทันทีหากเกิดปัญหาหรือฉันฆ่ามัน อย่างไรก็ตามฉันไม่เคยเริ่ม PulseAudio จริงๆ

ผมได้ตรวจสอบ/etc/init.d/แล้ว/etc/X11/Xsession.d/และผมได้ตรวจสอบsystemctl list-units -a, และ PulseAudio คือไม่มีที่ไหนเลยที่จะพบ

ดูเหมือนว่า PulseAudio จะเริ่มต้นเองอย่างน่าอัศจรรย์โดยที่ฉันไม่เคยเรียกใช้มาก่อนและจะเริ่มใหม่ได้อย่างไรเมื่อมันตาย?

ฉันใช้ Debian 8 (jessie) กับ xinit และตัวจัดการหน้าต่าง i3 และ PulseAudio 5

คำตอบ:


15

ดูเหมือนว่ากระบวนการใด ๆ ที่เชื่อมโยงไปยังตระกูล 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 (การทดสอบ) ดังนั้นผลลัพธ์ของคุณอาจแตกต่างกัน):

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

หากต้องการบอกกระบวนการเหล่านี้ไม่ให้ Autospawn PulseAudio ให้แก้ไข ~ / .config / pulse / client.conf และเพิ่มบรรทัด

autospawn = no

PulseAudio และห้องสมุดต่างเคารพการตั้งค่านั้นโดยทั่วไป

การเชื่อมโยง libpulse * ด้วยกระบวนการทำงานอาจบ่งบอกว่าทำไม PulseAudio จึงตอบสนองอย่างรวดเร็ว หน้า FreeDesktop.org " Running PulseAudio " ดูเหมือนจะยืนยันสิ่งนี้:

"... โดยทั่วไปแล้วแอปพลิเคชันพื้นหลังจะเชื่อมต่อใหม่ทันทีทำให้เซิร์ฟเวอร์รีสตาร์ททันที"

ดูเหมือนว่าคุณจะเริ่มต้นใช้งานตัวจัดการหน้าต่าง i3 ผ่านคอนโซล (โดยเรียกใช้ xinit) และอย่าใช้ตัวจัดการการแสดงผลหรือสภาพแวดล้อมเดสก์ท็อป ข้อมูลรายละเอียดคำตอบที่เหลือสำหรับผู้ที่ใช้ GNOME, KDE และอื่น ๆ

ข้อมูลเพิ่มเติมสำหรับ GNOME / KDE AUTOSTART

แพ็คเกจ PulseAudio (5.0-13), ใน Debian Jessie (Stable) amd64, ติดตั้งไฟล์ระบบสี่ไฟล์ต่อไปนี้:

  1. /etc/xdg/autostart/pulseaudio-kde.desktop
  2. /etc/xdg/autostart/pulseaudio.desktop
  3. / usr / bin / เริ่มต้น PulseAudio-x11
  4. / usr / bin / เริ่มต้น PulseAudio ของ KDE

ผู้จัดการเซสชันแบบกราฟิกบางตัวจะเรียกใช้สคริปต์ Autostart ของ FreeDesktop.org โดยอัตโนมัติเมื่อเข้าสู่ระบบของผู้ใช้ ในทางกลับกันสคริปต์ Autostart ของ PulseAudio จะบอกผู้จัดการเซสชันแบบกราฟิกให้เรียกใช้สคริปต์เริ่มต้นของ PulseAudio ที่เหมาะสม:

/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde

สคริปต์เหล่านี้เรียกลูกค้า PulseAudio / usr / bin / pactl เพื่อโหลดโมดูล PulseAudio ซึ่งวางไข่เซิร์ฟเวอร์ PulseAudio เป็นผลพลอยได้ (หมายเหตุ: หากคุณตั้งค่า autospawn เป็น "ไม่" pactl จะเคารพสิ่งนั้นและจะไม่ใช้เซิร์ฟเวอร์ PulseAudio โดยอัตโนมัติ)

รายละเอียดเพิ่มเติมได้ที่หน้า FreeDesktop.org " Running PulseAudio "

ผู้จัดการจอแสดงผลบางส่วนนอกจากนี้และในดิสทริบิวชันอื่น ๆ อาจเริ่มต้น PulseAudio (ตัวอย่างเช่นSDDM บน ArchLinuxแม้ว่าผู้ดูแลระบบอาจแก้ไขปัญหานี้ได้ในตอนนี้)


4

Pulseaudio เป็นภูตตัวน้อย man pulseaudioบอกว่าคุณสามารถปิดได้ด้วยคำสั่งpulseaudio --killแต่การทำเช่นนั้นจะทำให้เกิดใหม่อีกครั้ง - มันจะเกิดขึ้นเอง สคริปต์เริ่มต้นปกติอยู่ที่นั่นเพื่อเริ่มต้นตอนบูท, /etc/rc2.d/S50pulseaudio. แต่เมื่อคุณลองควบคุมสิ่งนี้ด้วยวิธี Linux ปกติมันใช้งานไม่ได้เพราะการรัน/etc/init.d/pulseaudio stopไม่หยุด การถอด/etc/rc2.d/S50pulseaudioไม่ได้ป้องกันไม่ให้เริ่มต้นตอนบูท

ที่จะหยุดนิสัย respawning เปิด/etc/pulse/client.confการเปลี่ยนแปลง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อาจมีไฟล์เดียวเริ่มต้นมากขึ้นในการจัดการกับ: สิ่งนี้จะเริ่มต้น Pulse เมื่อเซสชัน Gnome เริ่มทำงาน ลบหรือคัดลอกไปยังไดเรกทอรีอื่นในกรณีที่คุณต้องการบันทึกและตรวจสอบชื่อไฟล์ที่แน่นอนอีกครั้ง เคล็ดลับที่มีประโยชน์เมื่อคุณพบสคริปต์ที่เริ่มต้น PulseAudio คือการเปลี่ยนไบนารีที่พวกเขาเรียกจาก/usr/bin/pulseaudioเป็น/bin/trueการนี่เป็นไฟล์เล็ก ๆ ที่ใช้งานได้ดีซึ่งมีหน้าที่เพียงอย่างเดียวคือ "ไม่ต้องทำอะไรเลยให้สำเร็จ" มันทำให้สคริปต์มีความสุขและเป็นตัวยึดตำแหน่งที่สะดวกหากคุณต้องการเปลี่ยนกลับ

ตอนนี้คุณได้กำจัดสคริปต์การเริ่มต้นและการตอบสนองทั้งหมดตอนนี้ใช้คำสั่งด้านล่างเพื่อหยุดและเริ่มต้นเสียงพัลส์

 $ pulseaudio --kill
 $ pulseaudio --start

1
มันช่วยได้นิดหน่อย แต่ก็ไม่ได้ตอบคำถามเลย ฉันยังไม่ทราบเลยว่า PulseAudio จะเปิดตัวบนระบบของฉันอย่างไร Debian 8 ใช้ systemd และอย่างที่ฉันบอกว่าsystemctl list-units -aไม่มี PulseAudio xinit เปิดตัวสคริปต์จาก/etc/X11/Xsession.dและตามที่กล่าวไว้มันไม่รวม PulseAudio
Hubro

กระบวนการหลักสำหรับกระบวนการ pulseaudio ของคุณคืออะไร?
Thushi

1
ข้อความของคำตอบนี้ดูเหมือนว่าจะมาจากบทความปี 2010 โดยคาร์ล่า Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 ดูเหมือนว่าคำแนะนำจะไม่ใช้กับ Debian Jessie และ PulseAudio (5.0-13) อีกต่อไป
iokevins

0

คำตอบที่ได้รับจาก Thushi / 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.

pulseaudio-daemon เริ่มขึ้นสองครั้ง ครั้งหนึ่งโดย rtkit-daemon และเวลาอื่น ๆ โดย GNOME / KDE AUTOSTART หรือแอปอื่น อย่างไรก็ตามการตั้งค่าใน /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

แก้ไขปัญหาของฉัน สิ่งเดียวที่ฉันไม่สามารถยืนยันได้ก็คือไม่มีสคริปต์เริ่มต้นในไดเรกทอรี /etc/rcX.d อีกต่อไป ค่อนข้างชัดเจนเพราะ rtkit-daemon ทำงานด้วยการโต้ตอบของ systemd

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.