powiadom-wyślij do innego użytkownika w tym samym systemie

12

Czy można używać funkcji send-send do wysyłania wiadomości do innych użytkowników w systemie?
najlepiej dla określonego użytkownika, ale działałby również cały system.

Ubuntu / Debian z zainstalowanym libnotify

madmaze
źródło
Zobacz tę odpowiedź na przykład, który działa z Ubuntu 16.04, nawet ze skryptu uruchomionego przez root w crontab.
mivk

Odpowiedzi:

6

Jeśli masz hasło innych użytkowników, możesz to zrobić sudo -u somedude notify-send Hello. somedude musi rozpocząć sesję X.

Edycja: Znaleziono ten skrypt do użytku z cronem:

#!/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
Micke
źródło
z niewielką modyfikacją, skrypt robi to, co powinienem zrobić, dzięki
madmaze,
nie przegapiłeś wcześniej jednego myślnika -session?
vladkras,
@ vladkras nie pgreppowinien otrzymywać pid menedżera sesji X, tj. sesji lxde, sesji gnome itp. Ten skrypt jest w najlepszym razie prymitywnym włamaniem i zależy bardzo od konfiguracji systemu. Działało, kiedy odpowiedziałem, ale nie działa teraz bez modyfikacji, 5 lat później.
micke
Dla mnie to też nie działa
vladkras,
1

Jeśli użytkownicy są na terminalach, przydatne będą następujące polecenia -

write user [tty]

lub wysłać do wszystkich użytkowników

wall
bryan
źródło
1

Natknąłem się na następujący projekt, który implementuje powiadomienie użytkownika: tinynotify-send

jesiony
źródło
0

Potrzebowałem podobnego narzędzia do wysyłania powiadomień do wszystkich sesji. Oto moje rozwiązanie: /unix//a/230062/93227

Skanuje / proc, aby znaleźć wszystkie magistrale sesji, a następnie wykonuje powiadomienie-wysyłanie na każdym z nich (raz na magistralę). Wszystkie argumenty są przekazywane niezmienione do rzeczywistego powiadomienia-wysłania.

#!/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);
                        }
                }
        }
' -- "$@"
Josef Kufner
źródło