Pulseaudio / dbus के लिए एक नकली / न्यूनतम X सत्र लॉन्च करें


13

मैं डेस्कटॉप और रास्पबेरी पाई के बीच ऑडियो साझा करने के लिए पल्सीडियो का उपयोग करता हूं।

हालांकि, पल्सेडियो को डब की जरूरत है, और डब को एक्स सेशन की जरूरत है। ग्राफिकल सत्र के बिना, पल्सेडियो केवल सिस्टम मोड में चलने में सक्षम है, जिसे आधिकारिक तौर पर अनुशंसित नहीं किया गया है।

रास्पबेरी पाई के अलावा, एक एक्स सत्र की लागत नाटकीय रूप से अधिक है, इसलिए मैं इसे सबसे कुशल (कम खर्चीली) तरीके से छुटकारा पाना चाहूंगा।

Pulseaudio को किक मारने के लिए मैं सबसे छोटा X सत्र कैसे शुरू कर सकता हूं?


Udev को निश्चित रूप से X की आवश्यकता नहीं है। मुझे Pulseaudio के बारे में नहीं पता है: X की अनुपस्थिति में क्या विफल रहता है? क्या यह डी-बस से संबंधित है?
गिल्स एसओ- बुराई को रोकना '

वैसे मैंने पढ़ा है लेकिन यह केवल पल्सीडियो हो सकता है। एक्स पल्सेडियो की अनुपस्थिति में सिस्टम वाइड मोड में लॉन्च किया गया है, जिसका अर्थ है प्रति उपयोगकर्ता सत्र नहीं, जो कि आधिकारिक वेबसाइट के अनुसार खराब है: freedesktop.org/wiki/Software/PulseAudio/Documentation/User-…
kursus

क्षमा करें, मैंने udev और dbus को मिलाया, संपादित किया।
kursus

जवाबों:


11

आप Xvfb का उपयोग कर सकते हैं , जो एक वर्चुअल फ्रेमबफ़र के साथ एक्स सर्वर है, अर्थात एक एक्स सर्वर जो केवल मेमोरी में प्रदर्शित होता है और किसी भी हार्डवेयर से कनेक्ट नहीं होता है। आपको उस सर्वर पर किसी भी क्लाइंट को चलाने की ज़रूरत नहीं है, और विशेष रूप से डेस्कटॉप वातावरण या विंडो मैनेजर में नहीं।

Xvfb :1 -screen 0 1x1x8 &

इसके बाद:

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

Xvfbडिस्प्ले उपलब्ध होने के लिए आपको शुरू करने के बाद थोड़ा इंतजार करना होगा। आप xinitएक एक्स सर्वर शुरू करने और फिर तैयार होने पर क्लाइंट शुरू करने के लिए उपयोग कर सकते हैं । उन आदेशों को रखें जिन्हें आप स्क्रिप्ट में चलाना चाहते हैं (ध्यान दें कि जब स्क्रिप्ट बाहर निकलती है, तो एक्स सर्वर बाहर निकलता है):

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

वर्चुअल X सर्वर के साथ प्रारंभ करें

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

यदि आप इसे बूट समय पर चलाना चाहते हैं, तो आप इसे क्रॉन से शुरू कर सकते हैं। भागो crontab -e(अपने उपयोगकर्ता के रूप में, रूट के रूप में नहीं) और लाइन जोड़ें

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

यदि आप इस सत्र को मारना चाहते हैं, तो xinitप्रक्रिया को मार दें ।


परेशान करने के लिए क्षमा करें मैं बूट पर pulseaudio प्रारंभ कमांड (आपके उदाहरण की चौथी पंक्ति) को स्वचालित रूप से निष्पादित करने के लिए संघर्ष करता हूं। मुझे आश्चर्य है कि यह प्रदर्शन संपत्ति है। मैंने rc.local, /etc/init.d, rcS की कोशिश की, लेकिन स्क्रिप्ट कभी भी pulseaudio शुरू नहीं करती है। जब मैं एसएसएच के माध्यम से अपनी स्क्रिप्ट चलाता हूं तो यह पूरी तरह से काम करता है। मुझे खुशी होगी अगर आप सलाह दे सकते हैं।
kursus

Xvfb को X कनेक्शन स्वीकार करने के लिए तैयार होने से पहले कुछ सेटअप करना होता है, इसलिए यदि बाद के कमांड बहुत जल्द चलते हैं, तो आप X सर्वर से कनेक्ट करने में विफल हो सकते हैं। आप Xvfb को शुरू करने के लिए xinit का उपयोग करना चाहते हैं, और उन कमांड को .xinitrc में रख सकते हैं ताकि xinf उनके लिए तैयार होने के बाद ही उन्हें शुरू करें।
अलंक

मुझे खेद है कि मैं आपको अच्छी तरह से नहीं मिला। क्या मुझे .xinitrc के साथ Xvfb शुरू करना है? अभी इसे आरलोकल के साथ शुरू किया गया है। यदि हां, तो मैं PA कमांड कहां रखूं? मैंने पीए कमांड शुरू करने की कोशिश की।
kursus

@kursus आपको अपने उपयोगकर्ता के रूप में इन सभी आदेशों को चलाने की आवश्यकता है। आप इसे एक क्रॉस्टैब से कर सकते हैं @reboot। इसके अलावा alanc सही है, Xvfb को शुरू करने के बाद देरी होने की जरूरत है, और xinit इस मुद्दे को हल करता है। मेरा संपादन देखें।
गिल्स एसओ- बुराई को रोकना '

संपादन के लिए धन्यवाद, यह अब और अधिक स्पष्ट है। हालाँकि मुझे एक अपरिचित विकल्प मिलता है : Xinfb को स्क्रिप्ट कॉल के साथ या उसके बिना लॉन्च करते समय Xvfb।
18

1

मेरे पास कल भी यही मुद्दा था, बिना किसी11% के yocto के साथ एक बिना सिर के वातावरण में डीबस के साथ रास्पबेरीपी 0 डब्ल्यू के लिए पल्स ऑडियो का उपयोग करके और कोई सिस्टमड नहीं, आपको पल्सेडियो चलाने से पहले डब को चलाने और निर्यात करने की आवश्यकता है।

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

Etc / pul / client.conf में, कृपया allow-autospawn-for-root = yes सक्षम करें

pulseaudio -vयह जाँचने के लिए चलाएँ कि आपके कॉन्फ़िगरेशन में कोई अन्य समस्या है या नहीं। --systemस्विच का उपयोग न करें क्योंकि यह सही नहीं होगा।

pulseaudio -D --disallow-exit

0

EOF का उपयोग करने से स्क्रिप्ट को रोकने के लिए और अधिक सुरुचिपूर्ण तरीका है sleep 99999999!

sleep infinityइसके बजाय उपयोग करें । यह वही करता है जो यह कहता है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.