thông báo-gửi không hoạt động theo ssh


10

Có lẽ điều này được trả lời ở một nơi khác, nhưng tôi đã không nhìn thấy nó.

Tôi đang chạy Ubuntu 14.04. Khi tôi SSH vào máy của tôi, ví dụ:

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

Tôi không thấy bất cứ điều gì trên màn hình nơi tôi đăng nhập vào máy. Nếu tôi tiền tố notify-sendvới DISPLAY=:0.0hoặc DISPLAY=:0không có gì khác nhau xảy ra. Tôi chỉ không bao giờ thấy bất kỳ thông báo về phiên hiện tại.

Có một số mẹo / chuyển đổi để làm việc này?

Trong trường hợp điều này không rõ ràng, hãy cho phép tôi nhắc lại: Từ Máy tính A, tôi SSH vào Máy tính B. Trong phiên SSH, tôi muốn thực thi gửi thông báo để chạy trên Máy tính B. Tôi mong muốn thông báo kiểu gầm gừ xuất hiện trên màn hình của Máy tính B.


Đối với những người khác thấy đây là kết quả hàng đầu thông qua Google, DISPLAY=:0 notify-send 'hello'đã làm việc cho tôi (không phải cho aikeru), hãy thử điều đó trước các bước phức tạp hơn.
Đánh dấu

Câu trả lời:


9

Tôi nghĩ rằng bạn đang nhầm lẫn các công nghệ khác nhau và cách chúng hoạt động. Tôi không mong đợi rằng daemon thông báo từ một hệ thống có thể gửi tin nhắn qua SSH. Đặt cài đặt $DISPLAYlà cách X11 gửi đầu ra từ một ứng dụng sang một ứng dụng khác để hiển thị các mục đích, nhưng nó notify-sendđang gửi một thông điệp thực sự đến daemon thông báo. Tin nhắn này được gửi bằng libnotifythư viện.

đoạn trích

libnotify là một thư viện gửi thông báo trên màn hình tới một daemon thông báo, như được định nghĩa trong thông số Thông báo trên Màn hình. Các thông báo này có thể được sử dụng để thông báo cho người dùng về một sự kiện hoặc hiển thị một số dạng thông tin mà không cần theo cách của người dùng.

Nguồn: https://developer.gnome.org/libnotify/

Mỗi cách tiếp cận ứng dụng

Một phương pháp để nối các notify-sendtin nhắn với trình thông báo hệ thống cục bộ của bạn là sử dụng một cách tiếp cận như được nêu trong bài đăng trên blog này có tiêu đề: Thông báo IRC thông qua SSH và libnotify . Cách tiếp cận này sẽ cần được tùy chỉnh theo từng loại thông báo mà bạn muốn chuyển trở lại trình thông báo cục bộ của mình.

Đường hầm libnotify qua SSH

Đối với một giải pháp tổng quát hơn libnotify-over-sshcó thể là nhiều hơn những gì bạn đang tìm kiếm.

đoạn trích

Đây là một kịch bản perl máy chủ khách hàng tôi đã viết để máy chủ của tôi về cơ bản có thể gửi tin nhắn libnotify đến máy cục bộ của tôi. Tôi sử dụng chủ yếu với weechat nhưng có một tính năng để làm cho nó tổng quát hơn. Khi gọi máy khách bằng thẻ weechat, máy chủ sẽ kiểm tra tên của cửa sổ tập trung hiện tại. Nếu nó bắt đầu bằng weechat, thông báo sẽ bị chặn nếu không thông báo-gửi được gọi.

Hiển thị trên máy chủ từ xa

Nếu mặt khác, bạn chỉ đơn giản là cố gắng sử dụng notify-sendđể hiển thị tin nhắn trên máy chủ từ xa mà bạn đã sử dụng sshđể kết nối, thì có thể bạn sẽ cần phải làm theo một trong những gợi ý được đưa ra trong Hỏi & Đáp này có tiêu đề: Sử dụng thông báo gửi với cron . Mặc dù một số câu trả lời cho rằng điều này là không cần thiết, tôi đã phải làm như sau khi những người khác đề cập trong các nhận xét về hệ thống Fedora 20 của tôi sử dụng Cinnamon làm máy tính để bàn của tôi để mọi thứ hoạt động.

Để notify-sendlàm việc, tôi phải đặt biến này với giá trị phù hợp từ môi trường máy tính để bàn của hệ thống từ xa.

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

Trên hệ thống của mình, tôi đã có thể sử dụng một tệp được duy trì cho mục đích chính xác này.

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

LƯU Ý: Tên của tệp DBUS sẽ thay đổi từ phiên này sang phiên khác.


Hmmm .. tôi đã thêm một số làm rõ. Tôi không muốn gửi tin nhắn qua SSH, tôi nghĩ vậy. Tôi nghĩ về việc gửi thông báo như một ứng dụng đầu cuối mà tôi có thể chạy tương tác với máy chủ (không phải máy khách). Tôi nghĩ rằng tôi hiểu - thông báo-gửi là một khách hàng trên máy chủ theo cách riêng của mình - là những gì bạn đang nói. Điều đó có nghĩa là điều này không thể thực hiện được trong phiên SSH? Nhắc bạn, tôi không cố làm cho nó xuất hiện trên máy khách SSH, chỉ có máy chủ / máy chủ SSH.
aikeru

@aikeru - notify-sendcó thể gửi tin nhắn đến trình nền trình thông báo nghe. Khi bạn đăng nhập qua SSH, môi trường này không có thông tin cần thiết để liên lạc với trình thông báo này, là vấn đề cơ bản.
slm

Vì vậy, có cách nào để gắn vào môi trường hiện tại hoặc một cái gì đó tương tự, như vậy nó có thông tin cần thiết không?
aikeru

@aikeru - phần lớn những gì tôi tìm thấy cho thấy cài đặt $DISPLAY=:0sẽ hoạt động, nhưng điều này cũng không hiệu quả với tôi. Tôi đang dùng Fedora 20 với Cinnamon làm máy tính để bàn. Sử dụng straceđể gỡ lỗi này cho thấy có một kết nối không được thực hiện khi đi qua SSH, vẫn đang điều tra xem cái gì đang chặn điều này.
slm

@aikeru - xem cập nhật.
slm

0

IMO, có thể bạn có thể sử dụng:

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

Tất nhiên, điều này giả sử ": 0" là giá trị thực của biến HIỂN THỊ, nếu đó là người dùng duy nhất hiện đang đăng nhập. Tôi nghĩ rằng chúng tôi phải sử dụng từ đặc biệt "xuất" ở đây vì chúng tôi đang gửi hai lệnh và nếu chúng tôi xuất biến nó sẽ có sẵn để sử dụng cho lệnh thứ hai "notify-send". Các ký tự "&&" chỉ đơn giản cho phép chúng tôi khởi chạy hai lệnh trong một dòng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.