เปิดตัวเซสชัน X ปลอม / น้อยที่สุดสำหรับ Pulseaudio / dbus


13

ฉันใช้ Pulseaudio เพื่อแบ่งปันเสียงระหว่างเดสก์ท็อปและ Raspberry Pi

อย่างไรก็ตาม Pulseaudio ต้องการ dbus และ dbus ต้องการเซสชัน X หากไม่มีเซสชันกราฟิก Pulseaudio จะสามารถทำงานในโหมดระบบเท่านั้นซึ่งไม่แนะนำอย่างเป็นทางการ

นอกจากนี้ในราสเบอร์รี่ Pi ค่าใช้จ่ายของเซสชัน X นั้นสูงอย่างมากดังนั้นฉันจึงต้องการกำจัดมันด้วยวิธีที่มีประสิทธิภาพมากที่สุด (ราคาถูกกว่า)

ฉันจะเริ่มต้นเซสชัน X ที่เล็กที่สุดสำหรับ Pulseaudio เพื่อเริ่มเล่นได้อย่างไร


Udev แน่นอนที่สุดไม่จำเป็นต้อง X ฉันไม่รู้เกี่ยวกับ Pulseaudio: เกิดอะไรขึ้นถ้าไม่มี X สิ่งนี้เกี่ยวข้องกับ D-Bus หรือไม่?
Gilles 'หยุดชั่วร้าย'

ฉันเคยอ่านมาแล้ว แต่มันอาจเป็นแค่ Pulseaudio เท่านั้น ในกรณีที่ไม่มี X Pulseaudio เปิดตัวในโหมดกว้างของระบบซึ่งหมายความว่าไม่มีเซสชันต่อผู้ใช้ซึ่งไม่ดีเท่าที่เว็บไซต์ทางการกล่าวว่า: freedesktop.org/wiki/Software/PulseAudio/Documentation/User/ …
kursus

ขออภัยฉันผสม udev และ dbus แล้วแก้ไข
kursus

คำตอบ:


11

คุณสามารถใช้Xvfbซึ่งเป็น X server ที่มี framebuffer เสมือนเช่น X server ที่แสดงเฉพาะในหน่วยความจำและไม่เชื่อมต่อกับฮาร์ดแวร์ใด ๆ คุณไม่จำเป็นต้องเรียกใช้ไคลเอนต์ใด ๆ ที่คุณไม่ต้องการบนเซิร์ฟเวอร์นั้นและโดยเฉพาะอย่างยิ่งไม่มีสภาพแวดล้อมเดสก์ท็อปหรือตัวจัดการหน้าต่าง

Xvfb :1 -screen 0 1x1x8 &

หลังจากนี้:

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

คุณต้องรอสักครู่หลังจากเริ่มต้นXvfbการแสดงผลให้พร้อมใช้งาน คุณสามารถใช้xinitเพื่อเริ่มเซิร์ฟเวอร์ X จากนั้นเริ่มไคลเอ็นต์เมื่อพร้อม วางคำสั่งที่คุณต้องการเรียกใช้ในสคริปต์ (โปรดทราบว่าเมื่อสคริปต์จบการทำงานเซิร์ฟเวอร์ X จะออก):

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

เริ่มต้นเซิร์ฟเวอร์ X เสมือนด้วย

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

หากคุณต้องการเรียกใช้ในเวลาบูตคุณสามารถเริ่มจาก cron เรียกใช้crontab -e(ในฐานะผู้ใช้ของคุณไม่ใช่ในฐานะรูท) และเพิ่มบรรทัด

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

ถ้าคุณต้องการที่จะฆ่าเซสชั่นนี้ฆ่าxinitกระบวนการ


ขอโทษที่รบกวนฉันพยายามที่จะรันคำสั่ง pulseaudio start โดยอัตโนมัติ (บรรทัดที่ 4 ของตัวอย่างของคุณ) ตอนบูต ฉันสงสัยว่ามันเป็นคุณสมบัติการแสดงผล ฉันลอง rc.local, /etc/init.d, rcS แต่สคริปต์ไม่เคยเริ่ม pulseaudio เมื่อฉันรันสคริปต์ผ่าน SSH มันทำงานได้อย่างสมบูรณ์ ฉันจะดีใจถ้าคุณสามารถให้คำแนะนำ
kursus

Xvfb ต้องทำการตั้งค่าบางอย่างก่อนที่จะพร้อมรับการเชื่อมต่อ X ดังนั้นหากคำสั่งในภายหลังทำงานเร็วเกินไปคุณอาจพบว่าพวกเขาไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ X ได้ คุณอาจต้องการใช้ xinit เพื่อเริ่ม Xvfb และวางคำสั่งเหล่านั้นใน. xinitrc เพื่อให้ xinit เริ่มต้นคำสั่งเหล่านั้นเมื่อ Xvfb พร้อมสำหรับพวกเขา
alanc

ฉันขอโทษฉันไม่เข้าใจคุณ ฉันต้องเริ่ม Xvfb ด้วย. xinitrc หรือไม่ ตอนนี้มันเริ่มต้นด้วย rc.local ถ้าฉันจะใส่คำสั่ง PA ที่ไหน? ฉันพยายามเริ่มต้นคำสั่ง PA ใน. xinitrc แต่ไม่มีโชคฉันขาดอะไรไป
kursus

@kursus คุณต้องเรียกใช้คำสั่งเหล่านี้ในฐานะผู้ใช้ของคุณ คุณสามารถทำมันได้จาก crontab @rebootด้วย นอกจากนี้ยังถูกต้องจะต้องมีความล่าช้าหลังจากเริ่ม Xvfb และ xinit แก้ปัญหานี้ได้ ดูการแก้ไขของฉัน
Gilles 'หยุดความชั่วร้าย'

ขอบคุณสำหรับการแก้ไขตอนนี้ชัดเจนยิ่งขึ้น อย่างไรก็ตามฉันได้รับตัวเลือกที่ไม่รู้จัก: Xvfbเมื่อเรียกใช้คำสั่ง xinit โดยมีหรือไม่มีการเรียกใช้สคริปต์
kursus

1

ฉันมีปัญหาเดียวกันเมื่อวานนี้โดยใช้ Pulse audio สำหรับ raspberrypi 0 W กับ DBus ในสภาพแวดล้อมที่ไม่มีหัวสร้างโดย yocto โดยไม่มี x11 และไม่มี systemd คุณต้องรันและส่งออก dbus ก่อนที่จะเรียกใช้ pulseaudio

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

ใน etc / pulse / client.conf โปรดเปิดใช้งาน allow-autospawn-for-root = ใช่

เรียกใช้pulseaudio -vเพื่อตรวจสอบว่ามีปัญหาอื่นในการกำหนดค่าของคุณ อย่าใช้--systemสวิตช์เพราะจะไม่ถูกต้อง

pulseaudio -D --disallow-exit

0

มีวิธีที่หรูหรากว่าในการป้องกันไม่ให้สคริปต์เข้าถึง EOF มากกว่าการใช้sleep 99999999!

ใช้sleep infinityแทน มันทำในสิ่งที่มันบอกว่า ...

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