Luncurkan sesi X palsu / minimal untuk Pulseaudio / dbus

13

Saya menggunakan Pulseaudio untuk berbagi audio antara desktop dan Raspberry Pi.

Namun, Pulseaudio membutuhkan dbus, dan dbus membutuhkan sesi X. Tanpa sesi grafis, Pulseaudio hanya dapat berjalan dalam mode sistem, yang secara resmi tidak direkomendasikan.

Selain pada Raspberry Pi, biaya sesi X sangat tinggi, jadi saya ingin menghilangkannya dengan cara yang paling efisien (lebih murah).

Bagaimana saya bisa memulai sesi X terkecil untuk ditendang Pulseaudio?

kursus
sumber
Udev jelas tidak membutuhkan X. Saya tidak tahu tentang Pulseaudio: apa yang gagal jika tidak ada X? Apakah ini terkait dengan D-Bus?
Gilles 'SO- stop being evil'
Yah saya sudah membaca itu tetapi mungkin hanya Pulseaudio. Dengan tidak adanya X Pulseaudio diluncurkan dalam mode sistem lebar, yang berarti tidak ada sesi per pengguna, yang buruk seperti situs resmi mengatakan: freedesktop.org/wiki/Software/PulseAudio/Documentation/User/…
kursus
Maaf saya mencampur udev dan dbus, diedit.
kursus

Jawaban:

11

Anda dapat menggunakan Xvfb , yang merupakan server X dengan framebuffer virtual, yaitu server X yang hanya menampilkan di memori dan tidak terhubung ke perangkat keras apa pun. Anda tidak perlu menjalankan klien yang tidak Anda inginkan di server itu, dan khususnya tidak ada lingkungan desktop atau window manager.

Xvfb :1 -screen 0 1x1x8 &

Sesudah ini:

DISPLAY=:1 dbus-launch
DISPLAY=:1 pulseaudio --start

Anda perlu menunggu sedikit setelah memulai Xvfb agar tampilan tersedia. Anda dapat menggunakan xinituntuk memulai server X dan kemudian memulai klien ketika sudah siap. Masukkan perintah yang ingin Anda jalankan dalam skrip (perhatikan bahwa ketika skrip keluar, server X keluar):

#!/bin/sh
dbus-launch
pulseaudio --start
sleep 99999999

Mulai server X virtual dengan

xinit /path/to/client.script -- /usr/bin/Xvfb :1 -screen 0 1x1x8

Jika Anda ingin menjalankannya saat boot, Anda dapat memulainya dari cron. Laricrontab -e (sebagai pengguna Anda, bukan sebagai root) dan tambahkan baris

@reboot xinit /path/to/client.script -- Xvfb :1 -screen 0 1x1x8

Jika Anda ingin mengakhiri sesi ini, matikan xinitprosesnya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Maaf mengganggu saya kesulitan untuk menjalankan secara otomatis perintah mulai pulseaudio (baris ke-4 dari contoh Anda) saat boot. Saya ingin tahu apakah ini properti DISPLAY. Saya mencoba rc.local, /etc/init.d, rcS, tetapi skripnya tidak pernah memulai pulseaudio. Ketika saya menjalankan skrip saya melalui SSH berfungsi dengan baik. Saya akan senang jika Anda bisa memberi saran.
kursus
Xvfb harus melakukan beberapa pengaturan sebelum siap menerima koneksi X, jadi jika perintah selanjutnya berjalan terlalu cepat, Anda mungkin menemukan mereka gagal terhubung ke server X. Anda mungkin ingin melihat ke dalam menggunakan xinit untuk memulai Xvfb, dan menempatkan perintah-perintah itu di .xinitrc sehingga xinit memulai mereka hanya setelah Xvfb siap untuk mereka.
alanc
Maaf saya tidak membuat Anda sehat. Apakah saya harus memulai Xvfb dengan .xinitrc? Sekarang ini dimulai dengan rc.local. Jika demikian, di mana saya meletakkan perintah PA? Saya mencoba memulai perintah PA di .xinitrc tetapi tidak berhasil, saya kehilangan sesuatu.
kursus
@kursus Anda harus menjalankan semua perintah ini sebagai pengguna. Anda dapat melakukannya dari crontab dengan @reboot. Juga jika benar, perlu ada penundaan setelah memulai Xvfb, dan xinit memecahkan masalah ini. Lihat hasil edit saya.
Gilles 'SO- stop being evil'
Terima kasih atas hasil editnya, sekarang lebih jelas. Namun saya mendapatkan opsi Tidak Dikenali: Xvfb ketika meluncurkan perintah xinit, dengan atau tanpa panggilan skrip.
kursus
1

Saya memiliki masalah yang sama kemarin, menggunakan audio Pulse untuk raspberrypi 0 W dengan DBus di lingkungan tanpa kepala buat dengan yocto tanpa x11 dan tanpa systemd, Anda perlu menjalankan dan mengekspor dbus sebelum menjalankan pulseaudio.

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
     echo "Starting dbus" 
     export $(dbus-launch)
fi

Di etc / pulse / client.conf, aktifkan allow-autospawn-for-root = yes

Jalankan pulseaudio -vuntuk memeriksa apakah ada masalah lain di konfigurasi Anda. Jangan gunakan --systemsakelar karena itu tidak benar.

pulseaudio -D --disallow-exit
Drl Sherif Omran
sumber
0

Ada cara yang lebih elegan untuk mencegah skrip mencapai EOF daripada menggunakan sleep 99999999 !

Gunakan sleep infinitysebagai gantinya. Itu melakukan apa yang dikatakannya ...

Jost
sumber