notifica-invia ad altro utente sullo stesso sistema


12

È possibile utilizzare Notify-Send per inviare messaggi ad altri utenti sul sistema?
preferibilmente per un utente specificato, ma funzionerebbe anche a livello di sistema.

Ubuntu / Debian con libnotify installato


Vedi questa risposta per un esempio che funziona con Ubuntu 16.04, anche da uno script avviato da root in crontab.
marzo

Risposte:


6

Se hai la password degli altri utenti puoi farlo sudo -u somedude notify-send Hello. somedude deve aver avviato una X-session.

Modifica: trovato questo script per l'uso con 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

con una leggera modifica, quella sceneggiatura fa quello che mi serve, grazie
madmaze,

non ti sei perso un trattino prima -session?
Vladkras,

no @vladkras pgrepdovrebbe ottenere il pid del gestore di X-session, cioè lxde-session, gnome-session ecc. Questo script è nella migliore delle ipotesi un rozzo hack e dipende molto dalla configurazione del sistema. Ha funzionato quando ho risposto, ma non funziona senza modifiche ora, 5 anni dopo.
micke,

Neanche per me funziona
vladkras il

1

Se gli utenti sono sui terminali saranno utili i seguenti comandi:

write user [tty]

o per inviare a tutti gli utenti

wall


0

Avevo bisogno di uno strumento simile per inviare notifiche a tutte le sessioni. Ecco la mia soluzione: /unix//a/230062/93227

Esegue la scansione / proc per trovare tutti i bus di sessione e quindi esegue notifica-invio su ciascuno di essi (una volta per bus). Tutti gli argomenti vengono passati invariati alla notifica-invio reale.

#!/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);
                        }
                }
        }
' -- "$@"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.