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


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

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


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);
                        }
                }
        }
' -- "$@"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.