En utilisant la ligne de commande, je voudrais afficher une notification sur chaque écran X en cours d'exécution. (et console en cours d'exécution)
Quelque chose comme:
notify-send-all 'Warning' 'Nuclear launch in 5 minutes, please evacuate'
Existe-t-il un programme qui fera cela? Sinon, cela peut-il être implémenté avec bash?
command-line
xorg
tty
console
notifications
Stefan
la source
la source
Réponses:
Vous pouvez envoyer un message à toutes les consoles avec le mur de commandes.
Pour envoyer des notifications sous X, il y a notification-send qui envoie une notification à l'utilisateur actuel sur l'affichage actuel. (D'après votre question, je suppose que vous connaissez déjà celle-ci.) Vous pouvez vous en inspirer avec des scripts bash. Fondamentalement, vous devez savoir quels utilisateurs sont sur quels X-Displays. Une fois que vous avez obtenu ces informations, vous pouvez utiliser notify-send comme ceci:
Où fschmitt est l'utilisateur à l'affichage 0. Vous pouvez analyser la sortie de la commande "who" pour trouver tous les utilisateurs et leurs affichages. La sortie ressemble à ceci
Vous voyez, il y a deux utilisateurs qui exécutent des sessions X, markmerk3 à l'affichage 0 et seamonkey à l'affichage 1. Je pense que vous devez chercher pour tty [0-9] * puis vous assurer qu'à la fin de la ligne il y a (: [0 -9.] *) Pour se débarrasser des connexions à la console et extraire l'ID d'affichage de la chaîne entre parenthèses.
la source
who
vous indique qui est connecté et sur quel X affiche cette connexion. Vous pourriez juste devoir le filtrer quelque peu.who | awk '/\(:[0-9]+\)/ {gsub("[:|(|)]","");print "DISPLAY=:"$5 " sudo -u " $1 " notify-send \"Message\""}' | bash
. En outre, vous voudrez peut-être voir unix.stackexchange.com/questions/1596/…Ce fil est un peu ancien, désolé, mais j'espère pouvoir encore ajouter quelque chose d'utile au sujet. (Josef Kufner a également écrit un joli script, c'était juste un peu trop long à mon goût, et il utilise PHP)
J'avais également besoin d'un outil tel que décrit dans la question d'origine (pour envoyer un message à tous les utilisateurs X actifs). Et sur la base des réponses ici, j'ai écrit ce petit script bash uniquement, qui recherche les utilisateurs X actifs (en utilisant «qui»), puis en exécutant notify-send pour chaque utilisateur actif.
Et le meilleur: vous pouvez utiliser mon script exactement comme "notify-send", avec tous ses paramètres! ;-)
notifier-envoyer-tout:
Copiez le code ci-dessus dans un fichier nommé "notify-send-all", rendez-le exécutable et copiez-le dans / usr / local / bin ou / usr / bin (comme vous le souhaitez). Ensuite, exécutez-le par exemple en tant que root dans une session de console comme ceci:
notify-send-all -t 10000 "Warning" "The hovercraft is full of eels!"
Je l'utilise depuis plusieurs mois maintenant, sur différentes machines, et je n'ai eu aucun problème jusqu'à présent, et je l'ai testé avec les ordinateurs de bureau MATE et Cinnamon. Également exécuté avec succès dans cron et anacron.
J'ai écrit ce script pour / sous ArchLinux, alors dites-moi si vous rencontrez des problèmes sur une autre distribution Linux ou un autre bureau.
la source
|egrep
?? egrep est-il une commande?awk '{print $1$5}'
il est préférable d'utiliserawk '{print $1$NF}'
, de sorte qu'il ne se casse pas sur certains paramètres régionaux où la date est formatée avec des espaces (par exempleJun 3
au lieu de2017-06-03
). Voici également une version pour avertir un utilisateur spécifique au lieu de tous les utilisateurs: gist.github.com/shvchk/ba2f0da49bf2f571d6bf606d96f289d7grep -E
et ajouté/bin
au chemin (voir la modification). N'hésitez pas à revenir si vous vousJ'en avais également besoin pour certaines notifications à l'échelle du système. Voici ma solution. 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.
la source
Dans Ubuntu 16.04, je voulais des notifications à partir d'un script exécuté en tant que root à partir de crontab. Après avoir défini les variables d'environnement,
sudo -u $user
n'a pas fonctionné pour une raison quelconque, maissh -c "..." $user
fonctionne.J'utilise donc maintenant cette fonction:
Comment trouver la variable DBUS_SESSION_BUS_ADDRESS dépend probablement de votre distribution. Dans Ubuntu 16.04, c'est dans
/run/user/$UID/dbus-session
, qui peut simplement être sourcé.id -u
est utilisé dans la fonction ci-dessus pour obtenir l'UID à partir du nom d'utilisateur renvoyé parwho
.la source
Voici une mise à jour du script d'Andy: La façon dont il a déterminé que
DBUS_SESSION_BUS_ADDRESS
cela ne fonctionne pas sur Centos 7. De plus, lawho
commande n'a pas répertorié certaines sessions pour une raison quelconque, donc j'analyse laps aux
sortie à la place. Ce script suppose que les utilisateurs sont connectés à l'aide de X2GO (nxagent
), mais il devrait être simple de s'adapter à d'autres cas.la source
la source