notificar-enviar a otro usuario en el mismo sistema

12

¿Es posible utilizar el envío de notificaciones para enviar mensajes a otros usuarios en el sistema?
preferiblemente para un usuario específico, pero todo el sistema también funcionaría.

Ubuntu / Debian con libnotify instalado

laberinto
fuente
Consulte esta respuesta para ver un ejemplo que funciona con Ubuntu 16.04, incluso desde un script iniciado por root en crontab.
mivk

Respuestas:

6

Si tiene la contraseña de otros usuarios, puede hacerlo sudo -u somedude notify-send Hello. somedude debe tener una sesión X iniciada.

Editar: Encontré este script para usar 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
micke
fuente
con una ligera modificación, que script hace lo que necesito que haga, gracias
madmaze
¿No te perdiste un guión antes -session?
vladkras
pgrepse supone que no @vladkras obtendrá el pid del administrador de la sesión X, es decir, lxde-session, gnome-session, etc. Ese script es un hack crudo en el mejor de los casos y depende mucho de la configuración de su sistema. Funcionó cuando respondí, pero no funciona sin modificaciones ahora, 5 años después.
micke
Tampoco funciona para mí
vladkras
1

Si los usuarios están en terminales, los siguientes comandos serán de utilidad:

write user [tty]

o para enviar a todos los usuarios

wall
Bryan
fuente
1

Me topé con el siguiente proyecto que implementa una notificación de usuario: tinynotify-send

fresnos
fuente
0

Necesitaba una herramienta similar para enviar notificaciones a todas las sesiones. Aquí está mi solución: /unix//a/230062/93227

Escanea / procesa para encontrar todos los buses de sesión y luego ejecuta notificar-enviar en cada uno de ellos (una vez por bus). Todos los argumentos se pasan sin cambios a la notificación de envío real.

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