le mur n'est pas diffusé aux terminaux GUI le 16.04


11

Le titre le résume. Running wall <<< "TEST"affiche le message dans n'importe quel TTY mais pas dans aucun terminal GUI (testé avec gnome-terminalet sakura).

J'ai plusieurs scripts de surveillance de la batterie et de la température qui reposent sur wallun message et après la récente mise à niveau vers 16.04, j'ai remarqué qu'ils ont cessé de fonctionner dans l'interface graphique.

Je ne peux pas déterminer s'il s'agit d'un bogue ou si quelque chose empêche les messages d'être affichés dans l'interface graphique.

Comment dois-je procéder ?

Information additionnelle:

L'exécution byobudans un terminal gui permet de voir les messages du mur


2
Peut - être lié à askubuntu.com/questions/12654/... (regard sur xmessage, gxmessageou notify-send)
Nick Weinberg

6
Je l'ai lu plus tôt dans la journée. Oui, quelque peu lié, mais la grande objection est que 1) cette question est de 10h10, et le mur a fonctionné en 14.04 2) les solutions fournies ne sont pas satisfaisantes pour moi. notify-send ne fonctionne que pour les messages courts et uniquement dans l'interface graphique. walla une bonne commodité d'utiliser une commande pour tous les terminaux, au lieu d'écrire quelque chose pour tty ET pour gui ET pour toutes les autres sessions qui peuvent être sur d'autres DISPLAYs, donc ce n'est pas une très bonne alternative, du moins à mon humble avis
Sergiy Kolodyazhnyy

J'ai eu le même problème récemment dans 15.010. Im sur 16.04 Ubuntu Mate, et il semble être fonctionnel ici. il y a peut-être un problème dans une bibliothèque sous-jacente. Peut-être regardez ce que fait la commande mesg? shutdown -k 5 fonctionne-t-il sur tous les terminaux virtuels? L'écriture fonctionne-t-elle correctement? Je vais regarder les codes sources si je trouve une autre machine où cela ne fonctionne pas. Je suppose que c'est un problème de bibliothèque d'espace utilisateur.
j0h

1
@ j0h en fait, le problème est dû à gnome-terminal. Il avait l'habitude de mettre à jour les enregistrements de connexion, donc par exemple si vous exécutez whodans le terminal gnome auparavant, je montrerais tous vos onglets ouverts mais plus maintenant. Le mur envoie un message uniquement aux sessions de terminal qui mettent à jour les enregistrements de connexion. Mate utilise un terminal différent par défaut. J'ai compris cela il y a longtemps, mais je n'ai jamais publié de réponse. Le fera à un moment donné cette semaine.
Sergiy Kolodyazhnyy

J'ai une idée de comment vous pourriez pirater ceci: <br>
Stancu Mihai

Réponses:


5

En raison du fonctionnement de gnome-terminal, wallne l'enregistre pas en tant que terminal. Une explication plus approfondie peut être trouvée ici . Je suppose que c'est la même chose pour sakura.

Sur la base de la réponse de Stancu Mihai , j'ai créé un script qui imite le wallfonctionnement habituel, y compris la bannière avec le nom d'utilisateur et l'horodatage (utilisez -n ou --nobanner pour supprimer la bannière). Le script ne prend actuellement pas en charge la lecture du message à partir d'un fichier.

Vous pouvez remplacer la wallcommande normale par celle-ci en ajoutant un alias dans ~/.bashrc:

echo 'alias wall="~/your/path/to/wall.sh"' >> ~/.bashrc

Exemple d'utilisation:

$ wall "some message"

Broadcast message from username@hostname (pts/19) (Wed Mar 29 11:07:35 2017):

some message

$ wall -h

Usage:
 wall [options] [message]

Write a message to all users.

Options:
 -n, --nobanner          do not print banner
 -h, --help              display this help and exit

Excellent travail @danmou!
Stancu Mihai

1

Oui, il est vrai que gnome-terminal ne met pas à jour les enregistrements de connexion, en raison de cela, j'essaie de trouver une autre solution:

  1. Découvrons tous les pseudo terminaux actifs
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

Cela vous aide à répertorier toutes les sessions de terminal de bureau.

Une autre façon d'envoyer un message aux sessions de terminal de bureau actives

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. N'oubliez pas les sessions tty
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

Cela vous aide à répertorier toutes les sessions pty

  1. Envoi du message à tous
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. Maintenant, mettons tout cela ensemble Vous pouvez créer un joli script pour remplacer votre application murale actuelle et intégrer les éléments ci-dessus.
    Après cela, vous pouvez ajouter à votre ~ / .bashrc alias wall="your_wall_replacement.sh" De cette façon, vous n'avez pas besoin de supprimer le mur actuel

Désolé si quelque chose ne va pas, car quelqu'un ne m'a pas laissé me concentrer sur ce sujet ... si vous remarquez quelque chose de bizarre, veuillez laisser un commentaire.

10x


Voici une doublure pour cela. J'ai remplacé awk par cut, donc il n'y a qu'un seul type de devis. ps -ef | grep -e " tty" -e " pts/" | tr -s " " | cut -d " " -f 6 | sort -u | while read TTY; do echo "MESSAGE" | tee /dev/$TTY 1>/dev/null; done
CJxD

0

Comme d'autres suggèrent qu'il existe de nombreuses méthodes, j'ai mis ici une méthode plus directe (facile) que j'ai trouvée (adoption de echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: discutée ici.)

echo "Your message" > /dev/pts/$terminal-no

Ici, le terminal-nopourrait être obtenu de l'autre terminal via la commande "tty".

tty

/dev/pts/12

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.