अधिसूचनाएं और अधिसूचना डेमॉन विंडो प्रबंधक पर काम नहीं कर रहे हैं


13

Linux के स्टैंडअलोन विंडो मैनेजर (Openbox, Awesome WM और alike) पर सूचनाएं काम नहीं करती हैं। मैंने अधिसूचना-डेमॉन और डंस्ट को स्थापित करने की कोशिश की, लेकिन भेजने के साथ notify-send "something"पॉप-अप करने के लिए कोई विंडो नहीं है।

मैंने पोलकिट-गनोम-एजेंट को चलाने और सीधे अधिसूचना डेमों को चलाने की कोशिश की, लेकिन यह मदद नहीं करता है (जबकि कुछ समय पहले मैंने इसी तरह की समस्या को हल किया था, लेकिन अब यह कुछ भी नहीं करता है)।

जब तक मैं अजगर के साथ तुच्छ अधिसूचना नहीं भेजता, तब तक त्रुटियों का कोई संकेत नहीं है, फिर मुझे केवल अस्पष्ट त्रुटि संदेश मिलता है: File "/usr/lib/python3.3/site-packages/gi/types.py", line 113, in function return info.invoke(*args, **kwargs) gi._glib.GError: Could not connect: Connection refused तुच्छ सी प्रोग्राम कुछ भी नहीं आउटपुट करता है (उदाहरण के लिए कोई त्रुटि नहीं)।

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

संपादित करें: मैंने वहां से नमूना कोड लिया: https://wiki.archlinux.org/index.php/Libnotify#Pthon

Dbus को चलाना चाहिए क्योंकि Systemd पर निर्भरता है। मैंने libnotifyस्थापित किया है - यह पैकेज है जो प्रदान करता है notify-send। डेस्कटॉप फ़ाइल का अनुसरण करके अधिसूचना डेमॉन को आवश्यकतानुसार शुरू करना चाहिए (केवल जब सूचना आती है) /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/dunst

मैंने सीधे डेमोंस चलाने की भी कोशिश की थी (बस निष्पादित) और सूचनाएं भेजने की कोशिश की। अगर सोमेनो को पता है कि मुझे और जानकारी कैसे मिल सकती है, तो कृपया सुझाव देने में संकोच न करें।

संपादित 2: मैंने सूडो के साथ अधिसूचना डेमॉन चलाने की कोशिश की: sudo notification-daemon_name &(मेरे मामले में sudo dunst &) और sudo notify-send something, फिर अधिसूचना काम करती है। लेकिन जब मैं अप्रभावित उपयोगकर्ता के रूप में पिछले कार्यों में से कोई भी करने की कोशिश करता हूं (जो कि महत्वपूर्ण अधिकांश प्रोग्राम अप्रभावित उपयोगकर्ताओं के रूप में अधिसूचना भेजते हैं), तो कुछ भी नहीं दिखाता है।

notification-daemon बिना किसी त्रुटि या चेतावनी के सभी को काम करने से मना करता है।

संपादित 3: स्पष्ट रूप से यह अनुमति समस्या है: मैं रूट एक्सेस के बिना सूचनाएं नहीं भेज सकता। स्वच्छ रिबूट के बाद: sudo notify-send "something"मैन्युअल रूप से किसी भी डेमॉन को लॉन्च किए बिना भी काम करता है, हालांकि मुझे (और मेरे लॉन्च किए गए कार्यक्रमों) को रूट विशेषाधिकार के बिना सूचनाएं भेजने में सक्षम होना चाहिए क्योंकि यह गनोम या किसी अन्य पूर्ण डेस्कटॉप वातावरण में संभव है?


1
"अधिसूचना-डेमॉन" को स्थापित करने का क्या मतलब है? क्या आपने इसे स्थापित किया है libnotifyक्योंकि यह notify-sendकमांड प्रदान करता है (जो आपको सभी की आवश्यकता है)?
जसोनव्रीयन

आपने इस प्रश्न का उत्तर देने के लिए बहुत कम जानकारी दी है। आपके द्वारा दिए गए एकमात्र त्रुटि संदेश के आधार पर, मुझे संदेह है कि DBus नहीं चल रहा है और इस प्रकार कनेक्ट करने के लिए नोटिफ़िकेशन-सेंड के लिए कुछ भी नहीं है। यदि आपने अपना "तुच्छ अधिसूचना" कोड और सटीक त्रुटि दी है, तो हम एक उत्तर के करीब पहुंचने में सक्षम हो सकते हैं।
msw

मैंने वहां से नमूना कोड लिया: wiki.archlinux.org/index.php/Libnotify#Python
IBr

मुझे डंस्ट के साथ सफलता मिली। कोई और "कनेक्शन से इनकार" संदेश।
9

जवाबों:


6

अंत में मैंने स्वयं समस्या हल की।

मैंने जो किया वह निर्देश छोड़ दूंगा।

समस्या के दो भाग होते हैं:

  1. Dbus को विंडोज़ मैनेजर के भीतर से एक्सेस नहीं किया जा सकता
  2. अधिसूचना डेमॉन को डब से संदेश नहीं मिल सकते हैं

1 समस्या समाधान:

असली समस्या यह थी, कि मेरे विंडोज़ मैनेजर को lxdm से चलाया जाता था, जो किसी कारणवश /etc/X11/xinit/xinitrc.dlxde सेशन के अलावा (एलएक्सडीई डबस कामों में, कमाल की wm नहीं करता है) को छोड़कर कॉन्फिग फाइल को मर्ज नहीं करता है। इस फ़ोल्डर में 30-dbusनिम्न सामग्री के साथ नामित फ़ाइल मौजूद है:

#!/bin/bash

# launches a session dbus instance
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
  eval $(dbus-launch --sh-syntax --exit-with-session)
fi

कोड का यह हिस्सा $DBUS_SESSION_BUS_ADDRESSचर को परिभाषित करता है जो विभिन्न अनुप्रयोगों के लिए उपयोग करने के लिए एक डब पोर्ट को परिभाषित करता है। echo $DBUS_SESSION_BUS_ADDRESSयह देखने के लिए कि क्या dbus सत्र मौजूद है (यह dbus सत्र फ़ाइल लौटना चाहिए) को सरल शुद्धता जाँच के रूप में उपयोग किया जा सकता है।

सत्र प्रारंभ (सरल कोड से ली गई कोड .xinitrc) में इस फ़ोल्डर से फ़ाइलों को कॉन्फ़िगर किया जा सकता है

#!/bin/bash

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

2 समस्या समाधान:

जबकि डबिंग चल रहा है और अन्य कार्यक्रमों के लिए उपलब्ध है, इसे अभी भी ठीक से काम करने के लिए सूचनाओं के लिए अधिक पहुंच की आवश्यकता है, इसलिए मुझे पोलकिट एजेंट को चलाने की आवश्यकता है, क्योंकि विस्मयकारी WM में एक नहीं है। मैंने चुना था lxpolkit, क्योंकि मेरे पास पहले से ही लगभग पूर्ण वातावरण था। मेरे मामले में, बस मेरी ~/.config/awesome/rc.luaफ़ाइल में जोड़ा गया है : awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")इस लाइन के बिना किसी कारण के लिए यह lxdm के साथ डिफ़ॉल्ट रूप से शुरू करने से इनकार कर दिया।

मुझे लगता है कि सूक्ति पोलक एजेंट को भी ठीक काम करना चाहिए।


1
नोट: आपका डिस्प्ले मैनेजर ऐसा नहीं करता है और उसके साथ कुछ भी नहीं करना चाहिए .xinitrc/ मैं भूल जाता हूं कि दूसरे स्वाद को क्या कहा जाता है। वे फाइलें समतुल्य हैं (जो एक डिस्ट्रो द्वारा अलग-अलग उपयोग की जाती है) और केवल तब उपयोग की जाती है जब आप कंसोल से startxया आह्वान करते हैं xinit। शायद कारण यह है कि सिस्टम फ़ाइल लोड हो जाती है क्योंकि यह LXDE में होता है, LXDM में नहीं।
स्ट्रगल

स्पष्टीकरण के लिए धन्यवाद। ऐसा लगता है कि मुझे खुद को लोड करने के लिए सशर्त कॉन्फ़िगर करने की आवश्यकता है।
आईबीआर

हाँ, आपको यह कैसे करना चाहिए जो डेस्कटॉप वातावरण / wm पर निर्भर करता है।
स्ट्रगल

आम तौर पर आप जो कुछ .xinitrcभी करते हैं वह किसी भी पृष्ठभूमि डेमॉन को शुरू करना होगा जो बाद में सक्षम नहीं होगा (आप ऐसा करेंगे यदि आपके पास उदाहरण के लिए gnome-sessionऐसा करना नहीं है ), तो बहुत अंतिम पंक्ति में, execजो भी WM / डेस्कटॉप वातावरण आप उपयोग करते हैं ।
स्ट्रगल

0

यह एक जवाब नहीं है, शायद अगले सवाल को उत्पन्न करने में मदद करने के लिए एक बड़ा स्पष्टीकरण।

अतिरिक्त विस्तार को जोड़ने के लिए धन्यवाद। आपको शायद अनुमतियाँ समस्या है, लेकिन दुर्भाग्य से यह DBus Unix डोमेन सॉकेट से कनेक्ट करने के लिए आवश्यक अनुमतियों में होने की संभावना है।

इस रूट को गैर-रूट के रूप में पुष्टि करने के लिए:

$ strace -o /tmp/ns.out notify-send "why will this not connect"
$ grep '^connect' /tmp/ns.out
connect(4, {sa_family=AF_FILE, path=@"/tmp/dbus-6AIOJVWzCC"}, 23) = 0

इसके अलावा आपको शायद कुछ पसंद आएगा

connect(…) = -1 ECONNREFUSED  (Connection refused)

क्यों? मुझे पता नहीं है। मुझे पता है कि सूचना उपतंत्र ने गनोम विकास समुदाय में कहीं अधिक ध्यान दिया है, जितना मैंने कभी सोचा था कि इस तरह के सतही रूप से सरल होना चाहिए। मुझे zill या GTK कॉन्फ़िगरेशन स्थानों में कुछ कॉन्फ़िगरेशन फ़ाइल पर संदेह होगा, लेकिन मुझे पता है कि यह बहुत उपयोगी नहीं है।


वास्तव में मुझे मिलाconnect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-WC3XySChb5"}, 23) = -1 ECONNREFUSED (Connection refused) connect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-b3oei13hP2"}, 23) = -1 ECONNREFUSED (Connection refused)
आईबीआर

0

मेरे लिए इसने i3wm पर नोटिफ़िकेशन-ओएसडी और डनस्ट स्थापित करने का काम किया।

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