wall sendet am 16.04 nicht an GUI-Terminals

11

Der Titel fasst es zusammen. Beim Ausführen wall <<< "TEST"wird die Nachricht in einem beliebigen TTY angezeigt, jedoch nicht in einem GUI-Terminal (getestet mit gnome-terminalund sakura).

Ich habe mehrere Skripte zur Batterie- und Temperaturüberwachung, die auf walleiner Meldung beruhen , und nach dem letzten Upgrade auf 16.04 habe ich festgestellt, dass sie in der GUI nicht mehr funktionieren.

Ich kann nicht feststellen, ob dies ein Fehler ist oder ob etwas die Anzeige der Nachrichten in der GUI verhindert.

Wie soll ich vorgehen ?

Zusätzliche Information:

Das Ausführen byobuin einem GUI-Terminal ermöglicht das Anzeigen von Wandnachrichten

Sergiy Kolodyazhnyy
quelle
2
Möglicherweise im Zusammenhang mit askubuntu.com/questions/12654/… (schauen Sie in xmessage, gxmessageoder notify-send)
Nick Weinberg
6
Ich habe das heute früher gelesen. Ja, etwas verwandt, aber großer Einwand ist, dass 1) diese Frage von 10.10 stammt und wall in 14.04 gearbeitet hat. 2) Lösungen, sofern sie für mich nicht zufriedenstellend sind. notify-send funktioniert nur für Kurznachrichten und nur in der GUI. wallEs ist sehr praktisch, einen Befehl für alle Terminals zu verwenden, anstatt etwas für tty UND für gui UND für alle anderen Sitzungen zu schreiben, die sich möglicherweise auf anderen DISPLAYs befinden. Dies ist also keine sehr gute Alternative, zumindest imho
Sergiy Kolodyazhnyy
Ich hatte das gleiche Problem vor kurzem in 15.010. Ich bin auf 16.04 Ubuntu Mate, und es scheint hier funktionsfähig zu sein. Möglicherweise liegt ein Problem in einer zugrunde liegenden Bibliothek vor. Schauen Sie sich vielleicht an, was der Befehl mesg bewirkt. funktioniert shutdown -k 5 auf allen virtuellen Terminals? Funktioniert das Schreiben richtig? Ich werde mir die Quellcodes ansehen, wenn ich eine andere Maschine finde, auf der sie nicht funktioniert. Ich vermute, es ist ein Problem mit der User-Space-Bibliothek.
j0h
1
@ j0h eigentlich ist das Problem auf gnome-terminal zurückzuführen. Früher wurden Anmeldedatensätze aktualisiert. Wenn Sie beispielsweise whozuvor im Gnome-Terminal ausgeführt wurden, werden alle geöffneten Registerkarten angezeigt, jedoch nicht mehr. Wall sendet eine Nachricht nur an die Terminalsitzungen, die Anmeldedatensätze aktualisieren. Mate verwendet standardmäßig ein anderes Terminal. Ich habe das schon vor langer Zeit herausgefunden, aber nie eine Antwort gepostet. Werde das irgendwann in dieser Woche tun.
Sergiy Kolodyazhnyy
Ich habe eine Idee, wie Sie dies hacken könnten: <br>
Stancu Mihai

Antworten:

5

Aufgrund der Funktionsweise des Gnome-Terminals wird walles nicht als Terminal registriert. Eine ausführlichere Erklärung finden Sie hier . Ich gehe davon aus, dass dies auch für Sakura gilt.

Basierend auf der Antwort von Stancu Mihai habe ich ein Skript erstellt , das die übliche Funktionsweise nachahmt wall, einschließlich des Banners mit Benutzername und Zeitstempel (verwenden Sie -n oder --nobanner, um das Banner zu entfernen). Das Skript unterstützt derzeit nicht das Lesen der Nachricht aus einer Datei.

Sie können den normalen wallBefehl durch diesen ersetzen, indem Sie einen Alias ​​hinzufügen in ~/.bashrc:

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

Anwendungsbeispiel:

$ 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
quelle
Großartige Arbeit @danmou!
Stancu Mihai
1

Ja, es stimmt, dass das Gnome-Terminal keine Anmeldedatensätze aktualisiert. Aus diesem Grund versuche ich, eine andere Lösung zu finden:

  1. Lassen Sie uns alle aktiven Pseudo-Terminals herausfinden
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

Auf diese Weise können Sie alle Desktop-Terminalsitzungen auflisten.

Eine andere Möglichkeit, eine Nachricht an aktive Desktop-Terminalsitzungen zu senden

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. Vergessen Sie nicht die Sitzungen
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

Auf diese Weise können Sie alle Pty-Sitzungen auflisten

  1. Senden der Nachricht an alle
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. Lassen Sie uns jetzt alles zusammenfassen. Sie können ein schönes Skript erstellen, um Ihre aktuelle Wall-App zu ersetzen und alle oben genannten Dinge zu integrieren.
    Danach können Sie zu Ihrem ~ / .bashrc hinzufügen. alias wall="your_wall_replacement.sh" Auf diese Weise müssen Sie die aktuelle Wand nicht löschen

Tut mir leid, wenn etwas nicht stimmt, da mich jemand nicht auf dieses Thema konzentrieren ließ ... Wenn ihr etwas Seltsames bemerkt, hinterlasst bitte einen Kommentar.

10x

Stancu Mihai
quelle
Hier ist ein Einzeiler dafür. Ich habe awk durch cut ersetzt, damit es nur eine Art von Zitat gibt. 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

Da andere vorschlagen, dass es viele Methoden gibt, habe ich hier eine direktere (einfache) Methode angegeben, die ich gefunden habe (Übernahme der echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: hier diskutierten).

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

Hier terminal-nokönnte das vom anderen Terminal durch den Befehl "tty" erhalten werden.

tty

/dev/pts/12

Braghadees
quelle