beri tahu-kirim tidak berfungsi di bawah ssh

10

Mungkin ini dijawab di tempat lain, tetapi saya tidak melihatnya.

Saya menjalankan Ubuntu 14.04. Ketika saya SSH ke mesin saya, misalnya:

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

Saya tidak melihat apa pun di monitor tempat saya masuk ke mesin. Jika saya awali notify-senddengan DISPLAY=:0.0atau DISPLAY=:0tidak ada yang berbeda terjadi. Saya tidak pernah melihat pemberitahuan pada sesi saat ini.

Apakah ada beberapa trik / saklar untuk membuat ini berfungsi?

Dalam hal ini tidak jelas, izinkan saya untuk mengulangi: Dari Komputer A, saya SSH ke Komputer B. Dalam sesi SSH, saya ingin mengeksekusi pemberitahuan-kirim untuk dijalankan di Komputer B. Saya berharap pemberitahuan jenis growl muncul pada monitor Komputer B.

aikeru
sumber
Bagi orang lain yang menemukan ini sebagai hasil teratas melalui Google, DISPLAY=:0 notify-send 'hello'bekerja untuk saya (bukan untuk aikeru), coba itu sebelum langkah yang lebih rumit.
Markus

Jawaban:

9

Saya pikir Anda membingungkan berbagai teknologi dan cara kerjanya. Saya tidak berharap bahwa daemon notifikasi dari satu sistem dapat mengirim pesan melalui SSH. Pengaturan $DISPLAYadalah bagaimana X11 mengirim output dari aplikasi ke aplikasi lain untuk tujuan tampilan, tetapi notify-sendmengirim pesan aktual ke daemon notifikasi. Pesan ini dikirim menggunakan libnotifyperpustakaan.

kutipan

libnotify adalah pustaka yang mengirim pemberitahuan desktop ke daemon pemberitahuan, sebagaimana ditentukan dalam spesifikasi Pemberitahuan Desktop. Pemberitahuan ini dapat digunakan untuk memberi tahu pengguna tentang suatu peristiwa atau menampilkan beberapa bentuk informasi tanpa mengganggu pengguna.

Sumber: https://developer.gnome.org/libnotify/

Per pendekatan aplikasi

Salah satu metode untuk menggabungkan notify-sendpesan ke pemberi notifikasi sistem lokal Anda adalah dengan menggunakan pendekatan yang digariskan oleh posting blog ini berjudul: Pemberitahuan IRC melalui SSH dan libnotify . Pendekatan ini perlu disesuaikan untuk setiap jenis notifikasi yang ingin Anda tunnel kembali ke notifier lokal Anda.

Tunneling libnotify melalui SSH

Untuk solusi yang lebih umum libnotify-over-sshmungkin lebih banyak yang Anda cari.

kutipan

Ini adalah skrip perl server klien yang saya tulis sehingga server saya bisa mengirim pesan libnotify ke mesin lokal saya. Saya menggunakan ini terutama dengan Weechat tetapi memiliki fitur untuk membuatnya lebih umum. Saat memanggil klien dengan tag Weechat, server memeriksa nama jendela fokus saat ini. Jika dimulai dengan Weechat, notifikasi ditekan jika notify-send dipanggil.

Ditampilkan di server jarak jauh

Jika di sisi lain Anda hanya mencoba menggunakan notify-senduntuk menampilkan pesan pada server jauh yang Anda gunakan sshuntuk terhubung, Anda mungkin harus mengikuti salah satu saran yang dibuat dalam tanya jawab ini berjudul: Menggunakan notify-send dengan cron . Meskipun beberapa jawaban menyarankan bahwa ini tidak perlu, saya harus melakukan yang berikut seperti yang disebutkan dalam komentar pada sistem Fedora 20 saya menggunakan Cinnamon sebagai desktop saya untuk membuat semuanya berfungsi.

Untuk mulai notify-sendbekerja saya harus mengatur variabel ini dengan nilai yang sesuai dari lingkungan desktop sistem jarak jauh.

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

Pada sistem saya, saya dapat menggunakan file yang dikelola untuk tujuan yang tepat ini.

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

CATATAN: Nama file DBUS akan berubah dari sesi ke sesi.

slm
sumber
Hmmm .. Saya menambahkan beberapa klarifikasi. Saya tidak ingin mengirim pesan melalui SSH, saya pikir. Saya menganggap memberitahukan-kirim sebagai aplikasi terminal yang dapat saya jalankan secara interaktif ke PC host (bukan klien). Saya rasa saya mengerti - beri tahu-kirim adalah klien pada mesin host dengan caranya sendiri - adalah apa yang Anda katakan. Apakah itu berarti ini tidak mungkin dilakukan saat sesi SSH? Pikiran Anda, saya tidak mencoba agar ini muncul di klien SSH, hanya host / server SSH.
aikeru
@aikeru - notify-senddapat mengirim pesan ke daemon notifier mendengarkan. Saat Anda masuk melalui SSH, lingkungan ini tidak memiliki info yang diperlukan untuk berkomunikasi dengan pemberi tahu ini, adalah masalah mendasar.
slm
Jadi apakah ada cara untuk melampirkan ke lingkungan saat ini atau sesuatu seperti itu, sehingga memiliki info yang dibutuhkan?
aikeru
@aikeru - banyak dari apa yang saya temukan menunjukkan bahwa pengaturan $DISPLAY=:0akan berfungsi, tetapi ini tidak bekerja untuk saya juga. Saya menggunakan Fedora 20 menggunakan Cinnamon sebagai desktop saya. Menggunakan straceuntuk debug ini menunjukkan bahwa ada koneksi yang tidak selesai ketika melewati SSH, masih menyelidiki apa yang memblokir ini.
slm
@aikeru - lihat pembaruan.
slm
0

IMO, mungkin Anda bisa menggunakan:

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

Ini tentu saja dengan asumsi ": 0" adalah nilai nyata dari variabel DISPLAY, jika itu adalah satu-satunya pengguna yang saat ini masuk. Saya pikir kita harus menggunakan kata khusus "ekspor" di sini karena kita mengirim dua perintah dan jika kita mengekspor variabel itu akan tersedia untuk digunakan untuk perintah kedua "notify-send". Karakter "&&" memungkinkan kita untuk meluncurkan dua perintah dalam satu baris.

Marco A. Rodriguez G.
sumber