Tampaknya proses apa pun yang menautkan ke keluarga libpulse* dari objek bersama - baik sebelum atau setelah menjalankan X dan window manager i3 - mungkin secara implisit autospawn server PulseAudio, di bawah proses pengguna Anda, sebagai produk sampingan dari upaya untuk berinteraksi dengan subsistem audio . Pembuat PulseAudio, Lennart Poettering, tampaknya mengonfirmasi hal ini, dalam email 29-05-2015 ke milis systemd-devel:
"pulseaudio umumnya bukan layanan sistem tetapi layanan pengguna. Kecuali jika sesi pengguna Anda sepenuhnya diubah untuk dikelola oleh systemdtoo (yang tidak mungkin), maka systemd tidak terlibat sama sekali dengan memulainya.
"PA biasanya dimulai dari skrip atau layanan penyiapan sesi. InGnome adalah sesi gnome, misalnya. Ini juga merupakan permintaan otomatis jika perpustakaan digunakan dan perhatikan bahwa itu tidak ada."
Misalnya, pada Debian Stretch (Pengujian), browser web IceWeasel menautkan ke dua objek bersama libpulse*:1) libpulsecommon-7.1.so; dan 2) libpulse.so.0.18.2:
[email protected]:~$ 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
[email protected]:~$ 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
Anda mungkin melihat tautan proses mana yang berjalan ke libpulse*. Misalnya, pertama-tama dapatkan daftar objek bersama libpulse*, lalu jalankan lsof pada masing-masing objek (catatan:ini berasal dari Debian Stretch (Pengujian), jadi keluaran Anda mungkin berbeda):
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
Untuk memberi tahu proses ini agar tidak memunculkan PulseAudio secara otomatis, edit ~/.config/Pulse/client.conf dan tambahkan baris
autospawn = no
PulseAudio dan perpustakaannya menghargai pengaturan itu, secara umum.
Penautan libpulse* dengan menjalankan proses juga dapat menunjukkan mengapa PulseAudio muncul kembali dengan sangat cepat. Laman FreeDesktop.org, "Menjalankan PulseAudio", tampaknya mengonfirmasi hal ini:
"...biasanya beberapa aplikasi latar belakang akan segera tersambung kembali, menyebabkan server segera dimulai ulang."
Anda sepertinya menunjukkan bahwa Anda memulai pengelola jendela i3 melalui konsol (dengan menjalankan xinit) dan tidak menggunakan pengelola tampilan atau lingkungan desktop. Sisa dari jawaban ini merinci info bagi mereka yang menggunakan GNOME, KDE, dan sebagainya.
INFO TAMBAHAN, UNTUK AUTOSTART GNOME/KDE
Paket PulseAudio (5.0-13), di Debian Jessie (Stabil) amd64, menginstal empat file sistem berikut:
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulseaudio.desktop
- /usr/bin/start-pulseaudio-x11
- /usr/bin/start-pulseaudio-kde
Beberapa manajer sesi grafis secara otomatis menjalankan skrip autostart FreeDesktop.org saat login pengguna. Selanjutnya, skrip mulai otomatis PulseAudio memberi tahu manajer sesi grafis untuk menjalankan skrip mulai PulseAudio yang sesuai:
/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde
Skrip ini memanggil klien PulseAudio /usr/bin/pactl untuk memuat modul PulseAudio, yang memunculkan server PulseAudio sebagai produk sampingan (catatan:jika Anda menyetel autospawn ke "tidak", pactl menghormatinya dan tidak server PulseAudio autospawn).
Lebih detail, di halaman FreeDesktop.org "Running PulseAudio".
Beberapa pengelola tampilan, sebagai tambahan dan di distribusi lain, mungkin memulai PulseAudio (misalnya, SDDM, di ArchLinux. Meskipun pengelola mungkin telah menyelesaikan ini sekarang).
Bagaimana PulseAudio memulai?
Meskipun ini masih merupakan pertanyaan yang valid, jawabannya telah berubah seiring waktu. Jawaban sebelumnya tidak cukup atau salah karena sekarang PulseAudio diluncurkan secara otomatis oleh systemd pengguna, yang pada gilirannya diluncurkan oleh systemd sistem saat pengguna masuk.
$ 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
Untuk mematikan PulseAudio
Untuk menghentikan proses PulseAudio dan tidak segera meluncurkan instance baru, gunakan systemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Untuk menonaktifkan PulseAudio
Jika Anda tidak ingin PulseAudio dimulai secara otomatis saat masuk, Anda dapat menonaktifkannya seperti ini:
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(Ngomong-ngomong, meskipun dinonaktifkan, Anda masih dapat memulai PulseAudio saat Anda menginginkannya dengan menggunakan systemctl --user start
.)
Menjawab pertanyaan secara umum
Perintah di atas adalah semua yang Anda butuhkan. Namun, jika Anda tertarik untuk mengetahui solusinya sendiri, teruslah membaca.
Untuk mengetahui proses apa yang membuka kartu suara
Gunakan lsof
atau fuser -v
perintah untuk melihat proses apa yang membuka file perangkat.
$ 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
Untuk mengetahui proses apa yang meluncurkan PulseAudio
Gunakan pstree -s
untuk menunjukkan proses induk seperti:
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─{pulseaudio}(32773)
Saya menggunakannya untuk melihat bahwa PulseAudio sebenarnya diluncurkan oleh contoh systemd
(PID 738) yang berjalan di akun saya sendiri:
$ ps -fp 738
UID PID PPID C STIME TTY TIME CMD
hackerb9 738 1 0 Feb10 ? 00:00:00 /lib/systemd/systemd --user
Dari sana, mudah ditebak bahwa seseorang perlu menggunakan systemctl --user
untuk menghentikannya.
Pulseaudio adalah daemon kecil. man pulseaudio
mengatakan Anda dapat mematikannya dengan perintah pulseaudio --kill
tetapi melakukan itu membutuhkan kelahiran kembali-- itu muncul kembali dengan sendirinya. Skrip init normal tersedia untuk memulainya saat boot, /etc/rc2.d/S50pulseaudio
. Tetapi ketika Anda mencoba mengontrol ini dengan cara normal Linux tidak berfungsi, karena menjalankan /etc/init.d/pulseaudio stop
tidak menghentikannya. Menghapus /etc/rc2.d/S50pulseaudio
tidak mencegahnya mulai saat boot.
Untuk menghentikan kebiasaan respawning, buka /etc/pulse/client.conf
, ubah autospawn = yes
ke autospawn = no
, dan atur daemon-binary ke /bin/true
. Pastikan baris ini tidak diberi komentar, seperti ini:
autospawn = no
daemon-binary = /bin/true
Sekarang kita dapat menangani file startup Linux normal. Hapus dulu /etc/rc2.d/S50pulseaudio
. Atau Anda dapat mengganti namanya menjadi perintah kill, yang mempertahankan tautan jika Anda menginginkannya lagi:
$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio
ATAU
Mungkin ada satu file startup lagi yang harus dibuang:/etc/X11/Xsession.d/70pulseaudio
. Ini memulai Pulse saat sesi Gnome dimulai. Hapus atau salin ke direktori lain jika Anda ingin menyimpannya, dan verifikasi lagi nama file yang tepat. Trik yang berguna, saat Anda menemukan skrip yang memulai PulseAudio, adalah mengubah biner yang mereka panggil dari /usr/bin/pulseaudio
ke /bin/true
. Ini adalah eksekusi kecil yang bagus yang tugasnya hanya "tidak melakukan apa-apa, berhasil". Itu membuat skrip senang, dan itu adalah tempat penampung yang nyaman jika Anda ingin mengubahnya kembali.
Sekarang setelah Anda membersihkan semua skrip startup dan respawning, Sekarang gunakan perintah di bawah ini untuk menghentikan dan memulai audio pulse.
$ pulseaudio --kill
$ pulseaudio --start