Pulseaudio / dbus için sahte / minimum X oturumu başlatın


13

Bir masaüstü ile Raspberry Pi arasında ses paylaşmak için Pulseaudio kullanıyorum.

Ancak, Pulseaudio'nun dbus'a ve dbus'ın X oturumuna ihtiyacı vardır. Grafiksel oturum olmadan, Pulseaudio yalnızca resmi olarak önerilmeyen sistem modunda çalışabilir.

Ayrıca bir Ahududu Pi üzerinde, bir X oturumunun maliyeti önemli ölçüde yüksek, bu yüzden en verimli (daha az maliyetli) şekilde kurtulmak istiyorum.

Pulseaudio'nun başlaması için en küçük X oturumunu nasıl başlatabilirim?


Udev'in kesinlikle X'e ihtiyacı yok. Pulseaudio hakkında bilmiyorum: X'in yokluğunda ne başarısız oluyor? Bu D-Bus ile mi ilgili?
Gilles 'SO- kötü olmayı bırak'

Bunu okudum ama sadece Pulseaudio olabilir. X Pulseaudio'nun yokluğunda sistem geniş modunda başlatılır, bu da resmi web sitesinin dediği gibi kötü bir kullanıcı başına oturum anlamına gelmez: freedesktop.org/wiki/Software/PulseAudio/Documentation/User/…
kursus

Maalesef udev ve dbus'u birlikte düzenledim.
kursus

Yanıtlar:


11

Sen kullanabilirsiniz Xvfb yani sadece bellekte ve görüntüler herhangi bir donanım bağlamak etmediğini X sunucusu sanal framebuffer'ın X sunucusu vardır. Bu sunucuda istemediğiniz herhangi bir istemciyi çalıştırmanız gerekmez ve özellikle masaüstü ortamı veya pencere yöneticisi yoktur.

Xvfb :1 -screen 0 1x1x8 &

Bundan sonra:

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

XvfbEkranın kullanılabilir olması için başladıktan sonra biraz beklemeniz gerekir . xinitBir X sunucusunu başlatmak ve sonra hazır olduğunda istemcileri başlatmak için kullanabilirsiniz . Çalıştırmak istediğiniz komutları bir komut dosyasına yerleştirin (komut dosyası çıktığında, X sunucusunun çıktığını unutmayın):

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

Sanal X sunucusunu aşağıdakilerle başlatın:

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

Önyükleme zamanında çalıştırmak istiyorsanız, cron'dan başlatabilirsiniz. Çalıştırın crontab -e(kullanıcı olarak, kök olarak değil) ve satırı ekleyin

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

Bu oturumu öldürmek istiyorsan, xinitsüreci öldür .


Rahatsız ettiğim için üzgünüm, açılışta pulseaudio start komutunu (örneğin 4. satırı) otomatik olarak yürütmek için mücadele ediyorum. DISPLAY özelliği olup olmadığını merak ediyorum. Ben rc.local, /etc/init.d, rcS denedim, ama script asla pulseaudio başlamıyor. Senaryomu SSH üzerinden çalıştırdığımda mükemmel çalışıyor. Tavsiye verebilirseniz sevinirim.
kursus

Xvfb, X bağlantılarını kabul etmeye hazır olmadan önce bazı kurulumlar yapmalıdır, bu nedenle sonraki komutlar çok erken çalışırsa, X sunucusuna bağlanamadıklarını görebilirsiniz. Xvfb'yi başlatmak için xinit kullanmaya bakmak ve bu komutları .xinitrc'ye koymak, böylece xinit yalnızca Xvfb onlar için hazır olduğunda bunları başlatır.
alanc

Seni iyi anlamadığım için üzgünüm. Xvfb'yi .xinitrc ile başlatmam gerekir mi? Şimdi rc.local ile başlıyor. Öyleyse PA komutunu nereye koyacağım? PA komutunu .xinitrc'de başlatmayı denedim ama şansım yok, bir şey eksik.
kursus

@kursus Tüm bu komutları kullanıcı olarak çalıştırmanız gerekir. Bunu bir crontab'dan yapabilirsiniz @reboot. Ayrıca alanc doğrudur, Xvfb'yi başlattıktan sonra bir gecikme olması gerekir ve xinit bu sorunu çözer. Düzenlememe bakın.
Gilles 'SO- kötü olmayı bırak'

Düzenleme için teşekkürler, şimdi daha açık. Ancak Tanınmayan bir seçenek alıyorum: xinit komutunu başlatırken, komut dosyası çağrısı ile veya komut dosyası olmadan Xvfb .
kursus

1

Dün aynı sorunu vardı, başsız bir ortamda DBus ile ahududu 0 W için Pulse ses kullanarak x11 olmadan yocto ile oluşturmak ve hiçbir systemd, pulseaudio çalıştırmadan önce dbus çalıştırmak ve vermek gerekir.

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

Etc / pulse / client.conf dosyasında lütfen root için allow-autospawn'ı etkinleştir = yes

pulseaudio -vYapılandırmanızda başka bir sorun olup olmadığını kontrol etmek için çalıştırın . --systemAnahtarı kullanmayın çünkü doğru olmaz.

pulseaudio -D --disallow-exit

0

Komut dosyasının EOF'a ulaşmasını önlemenin daha zarif bir yolu var sleep 99999999!

sleep infinityBunun yerine kullanın . Ne diyorsa onu yapar ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.