दीवार 16.04 को GUI टर्मिनलों पर प्रसारित नहीं होती है


11

शीर्षक इसे गाता है। चल रहा है wall <<< "TEST"किसी भी TTY में पता चलता है, लेकिन किसी भी संदेश जीयूआई टर्मिनलों में नहीं (के साथ परीक्षण किया gnome-terminalऔर sakura)।

मेरे पास कई बैटरी और तापमान निगरानी स्क्रिप्ट हैं जो wallएक संदेश पर भरोसा करते हैं और हाल ही में 16.04 में अपग्रेड होने के बाद मैंने देखा है कि उन्होंने जीयूआई में काम करना बंद कर दिया है।

मैं यह निर्धारित नहीं कर सकता कि यह बग है या कुछ संदेश जीयूआई में प्रदर्शित होने से रोक रहा है।

मुझे कैसे आगे बढ़ना चाहिए ?

अतिरिक्त जानकारी:

byobuएक गिनी टर्मिनल में चलने से दीवार संदेश देखने की अनुमति मिलती है


2
संभवतः से संबंधित askubuntu.com/questions/12654/... (में देखो xmessage, gxmessageया notify-send)
निक वेनबर्ग

6
मैंने पहले आज पढ़ा है। हां, कुछ हद तक संबंधित है, लेकिन बड़ी आपत्ति यह है कि 1) वह प्रश्न 10.10 से है, और दीवार 14.04 2 में काम कर रही है ) बशर्ते कि समाधान मेरे लिए संतोषजनक नहीं हैं। notify-send केवल लघु संदेशों के लिए और केवल GUI में काम करता है। wallसभी टर्मिनलों के लिए एक आदेश का उपयोग करने की अच्छी सुविधा है, इसके बजाय कुछ लिखने के लिए tty और gui और अन्य सभी सत्रों के लिए जो अन्य DISPLAYs पर हो सकते हैं , इसलिए यह एक बहुत अच्छा विकल्प नहीं है, कम से कम imho
Sergiy Kolodyazznyy

मैं हाल ही में 15.010 में एक ही मुद्दा था। 16.04 उबंटू मेट पर Im, और यह यहाँ कार्यात्मक प्रतीत होता है। शायद एक अंतर्निहित पुस्तकालय में एक मुद्दा है। शायद यह देखें कि मेसग कमांड क्या करता है? शटडाउन -k 5 सभी आभासी टर्मिनलों पर काम करता है? क्या फ़ंक्शन ठीक से लिखता है? अगर मुझे दूसरी मशीन मिल जाए तो मैं स्रोत कोड देखूंगा। Im एक उपयोगकर्ता-अंतरिक्ष पुस्तकालय समस्या का अनुमान लगा रहा है।
jhh

1
@ j0h वास्तव में, मुद्दा सूक्ति-टर्मिनल के कारण है। यह लॉगिन रिकॉर्ड को अपडेट करता था, इसलिए उदाहरण के लिए यदि आप whoपहले गनोम टर्मिनल में चलते हैं , तो मैं आपके सभी खुले टैब दिखाऊंगा, लेकिन अब और नहीं। वॉल केवल उन टर्मिनल सत्रों को संदेश भेजता है जो लॉगिन रिकॉर्ड को अपडेट करते हैं। मेट डिफ़ॉल्ट रूप से अलग टर्मिनल का उपयोग करता है। मुझे यह बहुत पहले पता चला था लेकिन वास्तव में कभी कोई जवाब नहीं दिया। इस सप्ताह कुछ बिंदु पर ऐसा करेंगे।
सेर्गेई कोलोडियाज़नी

मेरे पास एक विचार है कि आप इसे कैसे हैक कर सकते हैं: <br>
स्टैंचु मिहाई

जवाबों:


5

गनोम-टर्मिनल जिस तरह से काम करता है, उसके कारण wallइसे टर्मिनल के रूप में पंजीकृत नहीं किया जाता है। एक अधिक गहन विवरण यहां पाया जा सकता है । मेरा मानना ​​है कि सकुरा के लिए भी यही सच है।

स्टैंचू मिहाई के उत्तर के आधार पर , मैंने एक स्क्रिप्ट बनाई है, जो wallआमतौर पर काम करने के तरीके की नकल करती है, जिसमें उपयोगकर्ता नाम और टाइमस्टैम्प (बैनर को हटाने के लिए -n या - nobanner) के साथ बैनर भी शामिल है। वर्तमान में स्क्रिप्ट किसी फ़ाइल से संदेश पढ़ने का समर्थन नहीं करती है।

आप wallइसमें एक उपनाम जोड़कर सामान्य आदेश को बदल सकते हैं ~/.bashrc:

echo 'alias wall="~/your/path/to/wall.sh"' >> ~/.bashrc

उदाहरण का उपयोग:

$ wall "some message"

Broadcast message from username@hostname (pts/19) (Wed Mar 29 11:07:35 2017):

some message

$ wall -h

Usage:
 wall [options] [message]

Write a message to all users.

Options:
 -n, --nobanner          do not print banner
 -h, --help              display this help and exit

महान काम @danmou!
स्टैंचु मिहाई

1

हां यह सच है कि सूक्ति-टर्मिनल यह लॉगिन रिकॉर्ड्स को अपडेट नहीं करता है, इस कारण से मैं एक और समाधान निकालने की कोशिश करता हूं:

  1. आइए सभी सक्रिय छद्म टर्मिनलों का पता लगाएं
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

यह आपको सभी डेस्कटॉप टर्मिनल सत्रों को सूचीबद्ध करने में मदद करता है।

सक्रिय डेस्कटॉप टर्मिनल सत्रों को संदेश भेजने का दूसरा तरीका

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. Tty सींस के बारे में मत भूलना
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

यह आपको सभी पीटीआई सत्रों को सूचीबद्ध करने में मदद करता है

  1. सभी को संदेश भेजना
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. अब यह सब एक साथ रखें आप अपने वर्तमान दीवार ऐप को बदलने और उपरोक्त सभी चीजों को एकीकृत करने के लिए एक अच्छी स्क्रिप्ट बना सकते हैं।
    उसके बाद आप अपने ~ / .bashrc alias wall="your_wall_replacement.sh" में जोड़ सकते हैं इस तरह से आपको वर्तमान दीवार को हटाने की आवश्यकता नहीं है

क्षमा करें यदि कुछ सही नहीं है, जैसा कि किसी ने मुझे इस विषय पर ध्यान केंद्रित नहीं करने दिया ... यदि आप लोग कुछ अजीब नोटिस करते हैं तो कृपया एक टिप्पणी छोड़ दें।

10x


यहां इसके लिए वन-लाइनर दिया गया है। मैंने awk को कट से बदल दिया, इसलिए इसमें केवल एक प्रकार की बोली है। ps -ef | grep -e " tty" -e " pts/" | tr -s " " | cut -d " " -f 6 | sort -u | while read TTY; do echo "MESSAGE" | tee /dev/$TTY 1>/dev/null; done
CJxD

0

जैसा कि दूसरों का सुझाव है कि कई विधियां हैं, मैंने यहां एक और अधिक प्रत्यक्ष (आसान) तरीका खोजा, जिसे मैंने पाया ( echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: यहां चर्चा की गई गोद लेना )।

echo "Your message" > /dev/pts/$terminal-no

यहाँ terminal-no"tty" कमांड के माध्यम से दूसरे टर्मिनल से प्राप्त किया जा सकता है।

tty

/dev/pts/12

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