aynı sistemdeki diğer kullanıcıya bildir-gönder


12

Sistemdeki diğer kullanıcılara mesaj göndermek için bildir-gönder özelliğini kullanmak mümkün müdür?
tercihen belirli bir kullanıcıya, ancak sistem geneli de çalışır.

Libnotify yüklü Ubuntu / Debian


Crontab'da root tarafından başlatılan bir komut dosyasından bile Ubuntu 16.04 ile çalışan bir örnek için bu cevaba bakınız .
mivk

Yanıtlar:


6

Diğer kullanıcı şifreniz varsa bunu yapabilirsiniz sudo -u somedude notify-send Hello. bazen X oturumu başlatılmalıdır.

Edit: Bu komut dosyasını cron ile kullanmak için bulundu:

#!/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

hafif bir değişiklikle, bu komut dosyası yapmak için ihtiyacım olanı yapar, teşekkürler
madmaze

daha önce bir tire işareti kaçırmadın -sessionmı?
vladkras

@vladkras'ın pgrepX oturumu yöneticisinin pidini alması gerekiyordu, yani lxde oturumu, gnome oturumu vb. Yanıt verdiğimde çalıştı, ancak 5 yıl sonra değişiklik yapmadan çalışmıyor.
micke

Benim için de işe yaramıyor
vladkras

1

Kullanıcılar terminallerde ise aşağıdaki komutlar kullanılacaktır -

write user [tty]

veya tüm kullanıcılara göndermek için

wall


0

Tüm oturumlara bildirim göndermek için benzer bir araca ihtiyacım vardı. İşte benim çözümüm: /unix//a/230062/93227

Tüm oturum veri yollarını bulmak için tarar / proc yapar ve ardından her birinde (otobüs başına bir kez) bildir-gönder işlemini yürütür. Tüm argümanlar değişmeden gerçek bildir-gönder olarak iletilir.

#!/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);
                        }
                }
        }
' -- "$@"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.