el muro no se transmite a terminales GUI el 16.04

11

El título lo resume. La ejecución wall <<< "TEST"muestra el mensaje en cualquier TTY pero no en ningún terminal GUI (probado con gnome-terminaly sakura).

Tengo varios scripts de monitoreo de batería y temperatura que dependen wallde un mensaje y después de una actualización reciente a 16.04, noté que dejaron de funcionar en la GUI.

No puedo determinar si esto es un error o algo impide que los mensajes se muestren en la GUI.

Cómo debo proceder ?

Información adicional:

Ejecutar byobuen una terminal gui permite ver mensajes en el muro

Sergiy Kolodyazhnyy
fuente
2
Posiblemente relacionadas con askubuntu.com/questions/12654/... (mirada en xmessage, gxmessageo notify-send)
Nick Weinberg
66
Lo he leído más temprano hoy. Sí, algo relacionado, pero la gran objeción es que 1) esa pregunta es de 10.10, y wall ha estado trabajando en 14.04 2) soluciones siempre que no sean satisfactorias para mí. notify-send funciona solo para mensajes cortos y solo en GUI. walltiene una buena conveniencia de usar un comando para todos los terminales, en lugar de escribir algo para tty AND para gui AND para todas las demás sesiones que pueden estar en otros DISPLAYs, por lo que esta no es una muy buena alternativa, al menos en mi opinión
Sergiy Kolodyazhnyy
Tuve el mismo problema recientemente en 15.010. Estoy en Ubuntu 16.04 Mate, y parece ser funcional aquí. quizás haya un problema en una biblioteca subyacente. Tal vez mira lo que hace el comando mesg? ¿funciona shutdown -k 5 en todos los terminales virtuales? ¿La escritura funciona correctamente? Veré los códigos fuente si encuentro otra máquina donde no funciona. Supongo que es un problema de biblioteca de espacio de usuario.
j0h
1
@ j0h en realidad, el problema se debe a gnome-terminal. Solía ​​actualizar los registros de inicio de sesión, por lo que, por ejemplo, si ejecutas whoantes en la terminal gnome, mostraría todas tus pestañas abiertas, pero ya no. Wall envía mensajes solo a las sesiones de terminal que actualizan los registros de inicio de sesión. Mate usa una terminal diferente por defecto. Me di cuenta de esto hace mucho tiempo, pero nunca publiqué una respuesta. Lo hará en algún momento esta semana.
Sergiy Kolodyazhnyy
Tengo una idea de cómo podría hackear esto: <br>
Stancu Mihai

Respuestas:

5

Debido a la forma en que funciona gnome-terminal, wallno lo registra como terminal. Una explicación más completa se puede encontrar aquí . Supongo que lo mismo es cierto para Sakura.

Basado en la respuesta de Stancu Mihai , he creado un script que imita la forma en que wallgeneralmente funciona, incluido el banner con el nombre de usuario y la marca de tiempo (use -n o --nobanner para eliminar el banner). El script actualmente no admite leer el mensaje de un archivo.

Puede reemplazar el wallcomando normal con este agregando un alias en ~/.bashrc:

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

Ejemplo de uso:

$ 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
danmou
fuente
¡Buen trabajo @danmou!
Stancu Mihai
1

Sí, es cierto que gnome-terminal no actualiza los registros de inicio de sesión, por eso trato de encontrar otra solución:

  1. Veamos todos los pseudo terminales activos
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

Esto le ayuda a enumerar todas las sesiones de terminal de escritorio.

Otra forma de enviar un mensaje a sesiones activas de terminal de escritorio

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. No te olvides de las sesiones tty
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

Esto le ayuda a enumerar todas las sesiones pty

  1. Enviar el mensaje a todos
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. Ahora vamos a poner todo junto . Puede crear un script agradable para reemplazar su aplicación de pared actual e integrar todo lo anterior.
    Después de eso, puede agregar a su ~ / .bashrc alias wall="your_wall_replacement.sh" De esta manera, no necesita eliminar el muro actual

Lo siento si algo no está bien, ya que alguien no me dejó concentrarme en este tema ... si ustedes notan algo extraño, por favor dejen un comentario.

10x

Stancu Mihai
fuente
Aquí hay una frase para ello. Reemplacé awk con cut, por lo que solo tiene un tipo de presupuesto. 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

Como otros sugieren que hay muchos métodos, pongo aquí un método más directo (fácil) que encontré (adopción de lo echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: discutido aquí).

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

Aquí terminal-nopodría obtenerse del otro terminal a través del comando "tty".

tty

/dev/pts/12

Braghadees
fuente