แจ้ง - ส่งไม่ทำงานภายใต้ ssh


10

บางทีนี่อาจจะเป็นคำตอบที่อื่น แต่ฉันไม่เห็น

ฉันใช้ Ubuntu 14.04 เมื่อฉัน SSH ลงในเครื่องของฉันตัวอย่างเช่น:

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

ฉันไม่เห็นสิ่งใดบนหน้าจอที่ฉันเข้าสู่ระบบ หากฉันนำหน้าnotify-sendด้วยDISPLAY=:0.0หรือDISPLAY=:0ไม่มีอะไรแตกต่างเกิดขึ้น ฉันไม่เคยเห็นการแจ้งเตือนใด ๆ ในเซสชันปัจจุบัน

มีเคล็ดลับ / การเปลี่ยนเพื่อให้ทำงานได้หรือไม่?

ในกรณีที่ไม่ชัดเจนอนุญาตให้ฉันย้ำ: จากคอมพิวเตอร์ A, ฉัน SSH ไปยังคอมพิวเตอร์ B. ภายในเซสชัน SSH ฉันต้องการที่จะดำเนินการแจ้งเตือนส่งเพื่อให้ทำงานบนคอมพิวเตอร์ B. ฉันคาดหวังว่าการแจ้งเตือนคำรามชนิดปรากฏ บนหน้าจอคอมพิวเตอร์ B.


สำหรับคนอื่น ๆ ที่พบว่าสิ่งนี้เป็นผลดีที่สุดผ่าน Google ใช้DISPLAY=:0 notify-send 'hello'งานได้สำหรับฉัน (ไม่ใช่สำหรับ aikeru) ลองทำก่อนขั้นตอนที่ซับซ้อนกว่านี้
ทำเครื่องหมาย

คำตอบ:


9

ฉันคิดว่าคุณสับสนกับเทคโนโลยีที่หลากหลายและวิธีการทำงาน ฉันไม่คาดหวังว่า daemon การแจ้งเตือนจากระบบใดระบบหนึ่งสามารถส่งข้อความผ่าน SSH การตั้งค่า$DISPLAYเป็นวิธีที่ X11 ส่งเอาต์พุตจากแอ็พพลิเคชันไปยังอีกแอปพลิเคชันเพื่อแสดงวัตถุประสงค์ แต่notify-sendกำลังส่งข้อความจริงไปยัง daemon การแจ้งเตือน ข้อความนี้ส่งโดยใช้libnotifyไลบรารี

สิ่งที่สกัดมา

libnotify เป็นไลบรารีที่ส่งการแจ้งเตือนเดสก์ท็อปไปยังภูตการแจ้งเตือนตามที่กำหนดไว้ในข้อมูลจำเพาะการแจ้งเตือนทางเดสก์ท็อป การแจ้งเตือนเหล่านี้สามารถใช้เพื่อแจ้งผู้ใช้เกี่ยวกับเหตุการณ์หรือแสดงข้อมูลบางรูปแบบโดยไม่ได้รับการช่วยเหลือจากผู้ใช้

ที่มา: https://developer.gnome.org/libnotify/

ตามวิธีการตรวจสอบ

วิธีหนึ่งในการเข้าร่วมnotify-sendข้อความไปยังระบบแจ้งเตือนในระบบของคุณคือการใช้วิธีการที่อธิบายไว้ในโพสต์บล็อกนี้: การแจ้งเตือน IRC ผ่าน SSH และเลิกใช้ วิธีการนี้จะต้องได้รับการปรับแต่งตามการแจ้งเตือนแต่ละประเภทที่คุณต้องการส่งสัญญาณกลับไปที่การแจ้งเตือนในท้องถิ่นของคุณ

การแชเนลของอุโมงค์ทำให้ SSH ผิดเพี้ยนไป

สำหรับวิธีแก้ปัญหาทั่วไปที่มากกว่าlibnotify-over-sshอาจเป็นสิ่งที่คุณกำลังมองหา

สิ่งที่สกัดมา

นี่เป็นสคริปต์ไคลเอนต์เซิร์ฟเวอร์ perl ที่ฉันเขียนเพื่อให้เซิร์ฟเวอร์ของฉันสามารถส่งข้อความใส่ร้ายให้กับเครื่องของฉันได้ ฉันใช้สิ่งนี้เป็นหลักกับ weechat แต่มีคุณสมบัติที่จะทำให้เป็นเรื่องทั่วไปมากขึ้น เมื่อเรียกไคลเอ็นต์พร้อมกับแท็ก weechat เซิร์ฟเวอร์จะตรวจสอบชื่อของหน้าต่างที่โฟกัสอยู่ในปัจจุบัน หากเริ่มต้นด้วย weechat การแจ้งเตือนจะถูกระงับหากไม่มีการแจ้งเตือนการส่งถูกเรียก

แสดงบนเซิร์ฟเวอร์ระยะไกล

หากในอีกทางหนึ่งคุณเพียงแค่พยายามใช้notify-sendเพื่อแสดงข้อความบนเซิร์ฟเวอร์ระยะไกลที่คุณเคยใช้sshในการเชื่อมต่อคุณจะต้องปฏิบัติตามคำแนะนำอย่างใดอย่างหนึ่งที่ทำในคำถาม & คำตอบนี้: การใช้การแจ้งเตือน - ส่ง กับ cron แม้ว่าคำตอบหลายข้อเสนอแนะว่าสิ่งนี้ไม่จำเป็น แต่ฉันก็ต้องทำสิ่งต่อไปนี้ตามที่คนอื่นพูดถึงในความคิดเห็นเกี่ยวกับระบบ Fedora 20 ของฉันโดยใช้ Cinnamon เป็นเดสก์ท็อปของฉันเพื่อให้สิ่งต่าง ๆ ทำงานได้

เพื่อให้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 ฉันคิดว่า ฉันคิดว่าการแจ้งเตือน - ส่งเป็นแอปเทอร์มินัลที่ฉันสามารถเรียกใช้แบบโต้ตอบกับโฮสต์ (ไม่ใช่ไคลเอนต์) พีซี ฉันคิดว่าฉันเข้าใจ - การแจ้งเตือน - ส่งเป็นไคลเอนต์ต่อ se บนเครื่องโฮสต์ในแบบของตัวเอง - เป็นสิ่งที่คุณพูด หมายความว่าสิ่งนี้ไม่สามารถทำได้ขณะอยู่ในเซสชัน SSH หรือไม่? โปรดทราบว่าฉันไม่ได้พยายามทำให้เรื่องนี้ปรากฏบนไคลเอ็นต์ SSH เฉพาะโฮสต์ / เซิร์ฟเวอร์ SSH
aikeru

@aikeru - notify-sendสามารถส่งข้อความไปที่ daemon ที่ใช้ฟังได้ เมื่อคุณเข้าสู่ระบบผ่าน SSH สภาพแวดล้อมนี้ไม่ได้มีข้อมูลที่จำเป็นในการสื่อสารกับแจ้งเตือนนี้เป็นปัญหาพื้นฐาน
slm

ดังนั้นมีวิธีใดที่จะแนบกับสภาพแวดล้อมปัจจุบันหรืออะไรทำนองนั้นว่ามันมีข้อมูลที่จำเป็น?
aikeru

@ aikeru - สิ่งที่ฉันพบมากแสดงให้เห็นว่าการตั้งค่า$DISPLAY=:0จะใช้งานได้ แต่ก็ไม่ได้ผลสำหรับฉันเช่นกัน ฉันใช้ Fedora 20 โดยใช้ Cinnamon เป็นเดสก์ท็อปของฉัน การใช้straceเพื่อแก้ไขข้อบกพร่องนี้แสดงว่ามีการเชื่อมต่อที่ไม่ได้ทำเมื่อผ่าน SSH ยังคงตรวจสอบสิ่งที่บล็อกนี้
slm

@aikeru - ดูการอัปเดต
slm

0

IMO คุณอาจใช้:

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

แน่นอนว่าสมมติว่า ": 0" นี้เป็นมูลค่าที่แท้จริงของตัวแปร DISPLAY หากเป็นผู้ใช้คนเดียวที่เข้าสู่ระบบฉันคิดว่าเราต้องใช้คำพิเศษ "ส่งออก" ที่นี่เพราะเราส่งคำสั่งสองคำและถ้าเราส่งออก ตัวแปรจะพร้อมใช้งานสำหรับคำสั่งที่สอง "แจ้งเตือน - ส่ง" อักขระ "&&" ทำให้เราสามารถเรียกใช้สองคำสั่งในหนึ่งบรรทัด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.