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
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
Jawaban:
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
-session
?
pgrep
seharusnya 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.
Saya menemukan proyek berikut yang mengimplementasikan pemberitahuan pengguna: tinynotify-send
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);
}
}
}
' -- "$@"