कैसे ssh पर सत्र DBUS संलग्न करने के लिए मज़बूती से?


4

मुझे शायद ही कोई sbus के ऊपर dbus- निर्भर टूल का उपयोग करने में कोई सफलता मिली (उदाहरण के लिए pactl- pulseaudio कमांड लाइन इंटरफ़ेस - जो कि आउटपुट आउटपुट का चयन करता है)।

मुझे पता है कि सत्र के DBUS पते को मैन्युअल रूप से कैसे निर्यात किया जाए DBUS_SESSION_BUS_ADDRESS, लेकिन अभी भी लगभग कोई भी एप्लिकेशन जैसे संदेशों के साथ विफल रहता है connection refused at pa_context_new()

यह दुख की बात है कि dbus, kdbus (और systemd) के खिलाफ सभी आरक्षण अच्छी तरह से फिट बैठता है ...

तो क्या वास्तव में किसी भी एप्लिकेशन को बनाने की आवश्यकता होती है, जैसे कि डेस्कटॉप सत्र से DBUS रन ssh पर निर्भर करता है?
क्या स्क्रीन-लंबी स्क्रिप्ट पर भरोसा किए बिना बस पता प्राप्त करने के लिए कोई गैर-परतदार, गैर-त्रुटि वाला तरीका है?
कनेक्शन की अनुमति देने के लिए - पते से और क्या आवश्यक है?


शायद iv'e एक साथ कुछ मिश्रण कर रहा है ... जैसा कि कुछ dbus ऐप्स काम करते हैं, जैसे। d-feetdbus दर्शक, मुझे लगता है कि इसके बारे में के अलावा यह dbus कनेक्शन है पल्सऑडियो सॉकेट के साथ क्या करना अधिक है।
ड्रोनस

दूसरी ओर, पल्सेडियो डब का उपयोग करता है और उसे अपने सॉकेट को ढूंढना और प्राप्त करना चाहिए, भले ही सही डब उपलब्ध हो।
ड्रोनस

जवाबों:


5

pactl D-Bus पर निर्भर नहीं करता है - यह नियंत्रण सॉकेट का पता लगाने के लिए उपयोग किए जाने वाले विभिन्न तरीकों में से केवल एक है। जो अब हमेशा एक ही स्थान पर है - $XDG_RUNTIME_DIR/pulse/native(pulseaudio v3.0 के रूप में)। तो मूल शिकायत सिर्फ सादा मतलब नहीं है। मुझे यकीन है कि strace -e connect pactl infoयह खुलासा करेगा कि "कनेक्शन मना कर दिया" त्रुटि पल्सेडियो से कनेक्ट करने की कोशिश करने से आती है, डी-बस से नहीं।

  • एक संभावित कारण: यदि /var/run/pulse/nativeप्रति उपयोगकर्ता पथ के बजाय स्ट्रेक्ट का उपयोग करने की कोशिश में स्टैक शो करता है, तो $ XDG_RUNTIME_DIR सेट नहीं हो सकता है। आप इसे मैन्युअल रूप से (से /run/user/$UID) सेट कर सकते हैं , हालांकि, यह पता लगाना बेहतर होगा कि यह स्वचालित रूप से सेट क्यों नहीं हो रहा है।

    $ XDG_RUNTIME_DIR चर pam_systemd.so द्वारा निर्धारित किया गया है; सुनिश्चित करें कि आपकी /etc/pam.d/sshdकॉन्फ़िग फ़ाइल अंततः उस मॉड्यूल को सूचीबद्ध करती है (कभी-कभी सीधे, लेकिन अधिक बार जैसे उप-कॉन्फ़िगरेशन को शामिल करके ) system-loginया common-session


कहा कि, जब आपको SSH से अधिक अन्य कार्यक्रमों का उपयोग करने की आवश्यकता होती है - वे कार्यक्रम जो एक सत्र बस पर निर्भर करते हैं - तीन सामान्य विकल्प हैं:

  • 'नई' उपयोगकर्ता बस में संलग्न करने के लिए:

    कुछ सिस्टम / डिस्ट्रोस पहले से ही "उपयोगकर्ता बस" मॉडल में चले गए होंगे, जहां कुछ संख्या में सत्र बसों के बजाय केवल उनके यूआईडी के लिए एक ही होता है। इसका पता unix:path=/run/user/$UID/busdbus-daemon के kernel:path=/sys/fs/kdbus/$UID-user/busसाथ , या kdbus के साथ है।

    Sd-bus, libdbus, gdbus के नवीनतम संस्करण स्वचालित रूप से इस पते की कोशिश करेंगे कि न तो $ DBUS_SESSION_BUS_ADDRESS और न ही $ DISPLAY सेट हो। यह "उपयोगकर्ता बस" मॉडल को आपके 1 प्रश्न का सबसे विश्वसनीय उत्तर बनाता है, क्योंकि आपको केवल यह जानना होगा कि आपका अपना यूआईडी है। (पारंपरिक "सत्र बस" मॉडल से जुड़े अधिकांश दृष्टिकोण विश्वसनीय नहीं हो सकते हैं , क्योंकि उनमें से कोई भी संख्या हो सकती है, बिल्कुल एक नहीं ...)

  • 'पारंपरिक' सत्र बस में संलग्न करने के लिए:

    सत्र बस पता आमतौर पर यादृच्छिक से उठाया जाता है, संघर्षों से बचने के लिए। हालांकि, विभिन्न उद्देश्यों के लिए (मुख्य रूप से "बस ऑटोलॉन्च" फ़ंक्शन के लिए), पता ~/.dbus/session-bus/$MACHINE_ID-$DISPLAY(लगभग) में संग्रहीत है ।

    तो आप पहले की तरह मैन्युअल रूप से $ DBUS_SESSION_BUS_ADDRESS सेट कर सकते हैं, लेकिन आप इसके बजाय $ DISPLAY भी सेट कर सकते हैं, और प्रोग्राम X11 डिस्प्ले के आधार पर मिलान सत्र बस को ढूंढेगा।

  • एक नया (समर्पित) सत्र बस शुरू करने के लिए :

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