Benachrichtigen-Senden an einen anderen Benutzer auf demselben System

11

Ist es möglich, mit notify-send Nachrichten an andere Benutzer im System zu senden?
Am besten für einen bestimmten Benutzer, aber auch systemweit.

Ubuntu / Debian mit installiertem libnotify

Madmaze
quelle
In dieser Antwort finden Sie ein Beispiel, das mit Ubuntu 16.04 funktioniert, auch aus einem Skript, das von root in crontab gestartet wurde.
Mivk

Antworten:

6

Wenn Sie das Passwort eines anderen Benutzers haben, können Sie dies tun sudo -u somedude notify-send Hello. Irgendjemand muss eine X-Sitzung gestartet haben.

Bearbeiten: Gefunden dieses Skript für die Verwendung mit 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
micke
quelle
mit geringfügigen Änderungen macht das Skript, was ich tun muss, danke
Madmaze
Hast du vorher keinen Bindestrich verpasst -session?
Vladkras
no @vladkras pgrepsoll die PID des X-Session Managers bekommen, dh lxde-session, gnome-session etc. Dieses Skript ist bestenfalls ein grober Hack und hängt stark von Ihrer Systemeinstellung ab. Es hat funktioniert, als ich geantwortet habe, aber jetzt, 5 Jahre später, funktioniert es nicht mehr ohne Änderungen.
Micke
Es funktioniert auch nicht für mich
Vladkras
2

Wenn sich die Benutzer an Terminals befinden, sind die folgenden Befehle hilfreich:

write user [tty]

oder an alle Benutzer senden

wall
bryan
quelle
1

Ich bin auf folgendes Projekt gestoßen, das eine Benutzerbenachrichtigung implementiert: tinynotify-send

Eschenwälder
quelle
0

Ich benötigte ein ähnliches Tool, um Benachrichtigungen an alle Sitzungen zu senden. Hier ist meine Lösung: https://unix.stackexchange.com/a/230062/93227

Es scannt / prozessiert, um alle Sitzungsbusse zu finden, und führt dann auf jedem davon eine Benachrichtigung aus (einmal pro Bus). Alle Argumente werden unverändert an real notify-send übergeben.

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