Usando la línea de comando, me gustaría mostrar una notificación en cada pantalla X en ejecución. (y ejecutando la consola)
Algo como:
notify-send-all 'Warning' 'Nuclear launch in 5 minutes, please evacuate'
¿Hay algún programa que haga esto? Si no, ¿se puede implementar con bash?
command-line
xorg
tty
console
notifications
Stefan
fuente
fuente
Respuestas:
Puede enviar un mensaje a todas las consolas con el panel de comandos.
Para enviar notificaciones bajo X, hay un envío de notificaciones que envía una notificación al usuario actual en la pantalla actual. (De su pregunta, supongo que ya conoce esta.) Puede construir sobre esto con algunas secuencias de comandos bash. Básicamente, debe averiguar qué usuarios están en qué pantallas X. Una vez que obtenga esta información, puede usar la opción de enviar y enviar notificaciones de la siguiente manera:
Donde fschmitt es el usuario en la pantalla 0. Puede analizar la salida del comando "who" para encontrar todos los usuarios y sus pantallas. La salida se ve así
Verá, hay dos usuarios ejecutando sesiones X, markmerk3 en la pantalla 0 y seamonkey en la pantalla 1. Creo que necesita grep para tty [0-9] * y luego asegurarse de que al final de la línea hay (: [0 -9.] *) Para deshacerse de los inicios de sesión de la consola y extraer la identificación de la pantalla de la cadena entre paréntesis.
fuente
who
le dice quién ha iniciado sesión y en qué pantalla X está ese inicio de sesión. Es posible que deba filtrarlo un poco.who | awk '/\(:[0-9]+\)/ {gsub("[:|(|)]","");print "DISPLAY=:"$5 " sudo -u " $1 " notify-send \"Message\""}' | bash
. Además, es posible que desee ver unix.stackexchange.com/questions/1596/…Este hilo es un poco viejo, lo siento, pero espero poder agregar algo útil al tema. (también Josef Kufner escribió un buen script, fue demasiado largo para mi gusto y usa PHP)
También necesitaba una herramienta como se describe en la pregunta original (para enviar un mensaje a todos los usuarios X activos). Y en base a las respuestas aquí, escribí este pequeño script solo para bash, que busca usuarios X activos (usando 'who'), y luego ejecuta notificar-enviar para cada usuario activo.
Y lo mejor: ¡puedes usar mi script exactamente como "notificar-enviar", con todos sus parámetros! ;-)
notificar-enviar-todo:
Copie el código anterior en un archivo llamado "notify-send-all", hágalo ejecutable y cópielo en / usr / local / bin o / usr / bin (como desee). Luego ejecútelo, por ejemplo, como root en una sesión de consola como esta:
notify-send-all -t 10000 "Warning" "The hovercraft is full of eels!"
Lo uso desde hace varios meses, en diferentes máquinas, y hasta ahora no tuve ningún problema, y lo probé con los escritorios MATE y Cinnamon. También lo ejecutó con éxito dentro de cron y anacron.
Escribí este script para / bajo ArchLinux, así que dígame si tiene problemas en otras distribuciones de Linux o escritorios.
fuente
|egrep
?? ¿egrep es un comando?awk '{print $1$5}'
eso, es mejor usarloawk '{print $1$NF}'
, para que no se rompa en algunas configuraciones regionales donde la fecha está formateada con espacios (por ejemplo, enJun 3
lugar de2017-06-03
). Aquí también hay una versión para notificar a un usuario específico en lugar de a todos los usuarios: gist.github.com/shvchk/ba2f0da49bf2f571d6bf606d96f289d7grep -E
y agregar/bin
a la ruta (ver la edición). Siéntase libre de revertir si se oponeTambién necesitaba esto para algunas notificaciones de todo el sistema. Aquí está mi solución. 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.
fuente
En Ubuntu 16.04, quería notificaciones de un script que se ejecutaba como root desde crontab. Después de configurar las variables de entorno,
sudo -u $user
no funcionó por alguna razón, perosh -c "..." $user
funciona.Así que ahora uso esta función:
Cómo encontrar la variable DBUS_SESSION_BUS_ADDRESS probablemente depende de su distribución. En Ubuntu 16.04, está en
/run/user/$UID/dbus-session
, que simplemente puede obtenerse.id -u
se usa en la función anterior para obtener el UID del nombre de usuario devuelto porwho
.fuente
Aquí hay una actualización del script de Andy: la forma en que determinó
DBUS_SESSION_BUS_ADDRESS
que no funciona en Centos 7. Además, elwho
comando no enumeró algunas sesiones por alguna razón, por lo que analizo elps aux
resultado en su lugar. Este script asume que los usuarios han iniciado sesión con X2GO (nxagent
), pero debería ser sencillo de ajustar para otros casos.fuente
fuente