notifier-envoyer à un autre utilisateur sur le même système

12

Est-il possible d'utiliser notify-send pour envoyer des messages à d'autres utilisateurs du système?
de préférence à un utilisateur spécifié, mais l'ensemble du système fonctionnerait également.

Ubuntu / Debian avec libnotify installé

labyrinthe
la source
Voir cette réponse pour un exemple qui fonctionne avec Ubuntu 16.04, même à partir d'un script démarré par root dans crontab.
mivk

Réponses:

6

Si vous avez le mot de passe des autres utilisateurs, vous pouvez le faire sudo -u somedude notify-send Hello. une séance doit avoir démarré une X-session.

Edit: Trouvé ce script à utiliser avec 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
la source
avec une légère modification, ce script fait ce dont j'ai besoin, merci
madmaze
vous n'avez pas manqué un trait d'union avant -session?
vladkras
aucun @vladkras pgrepn'est censé obtenir le pid du gestionnaire X-session, c'est-à-dire lxde-session, gnome-session etc. Ce script est au mieux un hack grossier et dépend beaucoup de la configuration de votre système. Cela a fonctionné quand j'ai répondu mais ne fonctionne pas sans modification maintenant, 5 ans plus tard.
micke
Cela ne fonctionne pas non plus pour moi
vladkras
1

Si les utilisateurs sont sur les terminaux, les commandes suivantes seront utiles -

write user [tty]

ou pour envoyer à tous les utilisateurs

wall
Bryan
la source
1

Je suis tombé sur le projet suivant qui implémente une notification utilisateur: tinynotify-send

frênes
la source
0

J'avais besoin d'un outil similaire pour envoyer une notification à toutes les sessions. Voici ma solution: /unix//a/230062/93227

Il scanne / proc pour trouver tous les bus de session, puis il exécute notify-send sur chacun d'eux (une fois par bus). Tous les arguments sont passés inchangés en véritable notification-envoi.

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