अधिसूचित-भेज ssh के तहत काम नहीं कर रहा है


10

शायद इसका जवाब कहीं और दिया गया हो, लेकिन मैंने इसे नहीं देखा।

मैं Ubuntu 14.04 चला रहा हूं। जब मैं अपने मशीन में SSH, उदाहरण के लिए:

ssh <user>@<machineip> notify-send "Hello"

मुझे मॉनीटर पर कुछ भी दिखाई नहीं देता जहाँ मैं मशीन में लॉग इन हूँ। अगर मैं उपसर्ग notify-sendके साथ DISPLAY=:0.0या DISPLAY=:0कुछ भी नहीं अलग होता है। मैं अभी चालू सत्र में कोई अधिसूचना नहीं देख सकता।

क्या यह काम करने के लिए कुछ चाल / स्विच है?

यदि यह स्पष्ट नहीं है, तो मुझे दोहराएं: कंप्यूटर A, I SSH से कंप्यूटर B. में कंप्यूटर बी के मॉनिटर पर।


अन्य लोगों के लिए जो इसे Google के माध्यम से शीर्ष परिणाम के रूप में पाते हैं, DISPLAY=:0 notify-send 'hello'मेरे लिए काम किया है (ऐकरू के लिए नहीं), कोशिश करें कि अधिक जटिल चरणों से पहले।
मार्क

जवाबों:


9

मुझे लगता है कि आप विभिन्न तकनीकों को भ्रमित कर रहे हैं और वे कैसे काम करते हैं। मुझे उम्मीद नहीं है कि एक सिस्टम से सूचना डेमॉन SSH के माध्यम से संदेश भेज सकता है। यह निर्धारित करना $DISPLAYकि X11 आउटपुट को किसी अनुप्रयोग से दूसरे को प्रयोजनों को प्रदर्शित करने के लिए कैसे भेजता है, लेकिन notify-sendसूचना डेमॉन को एक वास्तविक संदेश भेज रहा है। यह संदेश libnotifyलाइब्रेरी का उपयोग करके भेजा जाता है ।

अंश

libnotify एक पुस्तकालय है जो डेस्कटॉप सूचनाओं को डेस्कटॉप सूचना में भेजता है, जैसा कि डेस्कटॉप नोटिफिकेशन कल्पना में परिभाषित किया गया है। इन सूचनाओं का उपयोग उपयोगकर्ता को किसी घटना के बारे में सूचित करने के लिए किया जा सकता है या उपयोगकर्ता के रास्ते में आए बिना किसी प्रकार की सूचना प्रदर्शित कर सकता है।

स्रोत: https://developer.gnome.org/libnotify/

प्रति ऐप अप्रोच

notify-sendअपने स्थानीय सिस्टम के नोटिफ़ायर में संदेशों को शामिल करने के लिए एक तरीका इस ब्लॉग पोस्ट द्वारा उल्लिखित दृष्टिकोण का उपयोग करना है: एसएससी के माध्यम से आईआरसी सूचनाएँ और परिवाद । इस दृष्टिकोण को प्रत्येक प्रकार की अधिसूचना के अनुसार अनुकूलित किया जाना चाहिए जिसे आप अपने स्थानीय नोटिफ़ायर में वापस सुरंग करना चाहते हैं।

एसएसएच पर टनलिंग का परिवाद

अधिक सामान्य समाधान के libnotify-over-sshलिए आप जो खोज रहे हैं वह अधिक हो सकता है।

अंश

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

रिमोट सर्वर पर प्रदर्शित

यदि आप notify-sendकिसी दूसरे सर्वर पर संदेश भेजने के लिए किसी दूरस्थ सर्वर पर संदेशों को प्रदर्शित करने के लिए उपयोग करने का प्रयास कर रहे हैं ssh, तो आपको इस Q & A शीर्षक में दिए गए सुझावों में से एक का पालन करने की आवश्यकता होगी: सूचना-भेजें का उपयोग करना क्रोन के साथ । भले ही कई उत्तरों ने सुझाव दिया कि यह अनावश्यक था, मुझे निम्नलिखित काम करना था जैसा कि मेरे फेडोरा 20 सिस्टम पर टिप्पणियों में उल्लेख किया गया है कि दालचीनी का उपयोग करते हुए मेरे डेस्कटॉप के रूप में काम करने वाली चीजें प्राप्त करने के लिए।

notify-sendकाम पाने के लिए मुझे इस चर को रिमोट सिस्टम के डेस्कटॉप वातावरण से उचित मूल्य के साथ सेट करना पड़ा।

$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wzrbFpDUZQ,guid=82e5bffe1f819506faecc77a53d3ba73

मेरे सिस्टम पर मैं एक फ़ाइल का उपयोग करने में सक्षम था जिसे इस सटीक उद्देश्य के लिए बनाए रखा गया था।

$ ssh me@remote
$ source ~/.dbus/session-bus/6a34f24f9c504e3f813bc094ed0b67af-0
$ notify-send "hi"

नोट: DBUS फ़ाइल का नाम सत्र से सत्र में बदल जाएगा।


हम्मम .. मैंने कुछ स्पष्टीकरण जोड़ा। मुझे लगता है कि SSH पर संदेश नहीं भेजना चाहता। मैं एक टर्मिनल ऐप के रूप में अधिसूचित-भेजने के बारे में सोचता हूं जो मैं मेजबान (क्लाइंट नहीं) पीसी के लिए अंतःक्रियात्मक रूप से चला सकता हूं। मुझे लगता है कि मैं समझता हूं - सूचित-भेजना मेजबान मशीन पर प्रति ग्राहक अपने तरीके से है - जो आप कह रहे हैं। क्या इसका मतलब यह है कि एसएसएच सत्र में रहते हुए ऐसा करना संभव नहीं है? माइंड यू, मैं एसएसएच क्लाइंट, केवल एसएसएच होस्ट / सर्वर पर प्रदर्शित होने के लिए इसे प्राप्त करने की कोशिश नहीं कर रहा हूं।
अनिकेरू

@aikeru - notify-sendसुनने वाले सूचना दाता को संदेश भेज सकते हैं। जब आप SSH के माध्यम से लॉगिन करते हैं, तो इस वातावरण में w / इस नोटिफ़ायर से संवाद करने के लिए आवश्यक जानकारी नहीं है, अंतर्निहित मुद्दा है।
SLM

तो क्या वर्तमान परिवेश या उस जैसे कुछ को संलग्न करने का कोई तरीका है, जैसे कि उसे जानकारी की आवश्यकता है?
इकेरू

@aikeru - मैंने जो कुछ भी पाया है उससे पता चलता है कि सेटिंग $DISPLAY=:0काम करेगी, लेकिन यह मेरे लिए भी काम नहीं करती है। मैं अपने डेस्कटॉप के रूप में दालचीनी का उपयोग करते हुए फेडोरा 20 पर हूं। straceडिबग का उपयोग करने से पता चलता है कि एक कनेक्शन है जो एसएसएच से गुजरते समय नहीं किया जाता है, फिर भी यह जांच कर रहा है कि यह क्या अवरुद्ध है।
स्लम

@aikeru - अपडेट देखें।
स्लम

0

IMO, आप उपयोग कर सकते हैं:

ssh user@host 'export DISPLAY=:0 && notify-send "test message"'

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

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