beri tahu-kirim ke pengguna lain di sistem yang sama


12

Apakah mungkin menggunakan notify-send untuk mengirim pesan ke pengguna lain di sistem?
lebih disukai untuk pengguna tertentu, tetapi sistem yang luas juga akan berfungsi.

Ubuntu / Debian dengan libnotify terinstal


Lihat jawaban ini untuk contoh yang berfungsi dengan Ubuntu 16.04, bahkan dari skrip yang dimulai dengan root di crontab.
mivk

Jawaban:


6

Jika Anda memiliki kata sandi pengguna lain, Anda dapat melakukannya sudo -u somedude notify-send Hello. Somedude harus memulai sesi X.

Sunting: Ditemukan skrip ini untuk digunakan dengan cron:

#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin
export DISPLAY=:0.0
export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -session)/environ )
TIME=$1
shift
/usr/bin/notify-send -t 36000 $1 $2

dengan sedikit modifikasi, skrip itu melakukan apa yang perlu saya lakukan, terima kasih
madmaze

tidakkah kamu melewatkan satu tanda hubung sebelumnya -session?
vladkras

no @vladkras pgrepseharusnya mendapatkan pid dari manajer sesi-X, yaitu sesi-lxde, sesi-gnome, dll. Script itu adalah hack mentah yang terbaik dan sangat tergantung pada pengaturan sistem Anda. Itu bekerja ketika saya menjawab tetapi tidak bekerja tanpa modifikasi sekarang, 5 tahun kemudian.
micke

Ini juga tidak bekerja untuk saya
vladkras

1

Jika pengguna berada di terminal, perintah berikut akan digunakan -

write user [tty]

atau mengirim ke semua pengguna

wall


0

Saya membutuhkan alat serupa untuk mengirim pemberitahuan ke semua sesi. Inilah solusi saya: /unix//a/230062/93227

Ini memindai / proc untuk menemukan semua bus sesi dan kemudian mengeksekusi pemberitahuan-kirim pada masing-masing (sekali per bus). Semua argumen diteruskan tidak berubah ke notifikasi-kirim nyata.

#!/bin/bash

/bin/grep -sozZe '^DBUS_SESSION_BUS_ADDRESS=[a-zA-Z0-9:=,/-]*$' /proc/*/environ \
| /usr/bin/php -r '
        $busses = array();
        array_shift($argv);
        while($ln = fgets(STDIN)) {
                list($f, $env) = explode("\0", $ln, 2);
                if (file_exists($f)) {
                        $user = fileowner($f);
                        $busses[$user][trim($env)] = true;
                }
        }
        foreach ($busses as $user => $user_busses) {
                foreach ($user_busses as $env => $true) {
                        if (pcntl_fork()) {
                                posix_seteuid($user);
                                $env_array = array("DBUS_SESSION_BUS_ADDRESS" => preg_replace("/^DBUS_SESSION_BUS_ADDRESS=/", "", $env));
                                pcntl_exec("/usr/bin/notify-send", $argv, $env_array);
                        }
                }
        }
' -- "$@"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.