ściana nie nadaje się do terminali GUI 16.04


11

Tytuł podsumowuje. Uruchomienie wall <<< "TEST"pokazuje komunikat w dowolnym terminalu TTY, ale nie w żadnym terminalu GUI (testowane przy pomocy gnome-terminali sakura).

Mam kilka skryptów monitorowania baterii i temperatury, które polegają na wallprzesłaniu wiadomości, a po ostatniej aktualizacji do 16.04 zauważyłem, że przestały działać w GUI.

Nie mogę ustalić, czy jest to błąd, czy coś uniemożliwia wyświetlanie komunikatów w GUI.

Jak powinienem postąpić ?

Dodatkowe informacje:

Uruchomienie byobuw terminalu GUI pozwala zobaczyć komunikaty na ścianie


2
Prawdopodobnie związane z askubuntu.com/questions/12654/... (zajrzyj do xmessage, gxmessagelub notify-send)
Nick Weinberg,

6
Przeczytałem to dzisiaj dzisiaj. Tak, nieco spokrewnione, ale duży sprzeciw polega na tym, że 1) to pytanie pochodzi z 10.10, a ściana działała w 14.04 2) rozwiązania, pod warunkiem, że nie są dla mnie zadowalające. notify-send działa tylko dla krótkich wiadomości i tylko w GUI. wallma wygodę używania jednego polecenia dla wszystkich terminali, zamiast pisać coś dla tty ORAZ dla GUI ORAZ dla wszystkich innych sesji, które mogą odbywać się na innych DISPLAYs, więc nie jest to zbyt dobra alternatywa, przynajmniej
imho

Ostatnio miałem ten sam problem w 15.010. Im 16.04 Ubuntu Mate, i wydaje się tutaj funkcjonować. być może istnieje problem w podstawowej bibliotece. Może popatrz na to, co robi polecenie mesg? czy shutdown -k 5 działa na wszystkich terminalach wirtualnych? Czy zapis działa poprawnie? Sprawdzę kody źródłowe, jeśli znajdę inną maszynę, na której nie działa. Domyślam się, że jest to problem z biblioteką przestrzeni użytkownika.
j0h

1
@ j0h faktycznie problem jest spowodowany terminalem gnome. Kiedyś aktualizował rekordy logowania, więc na przykład, jeśli wcześniej whodziałałeś w terminalu gnome, pokazywałbym wszystkie twoje otwarte karty, ale już nie. Wall wysyła wiadomość tylko do sesji terminalowych, które aktualizują dane logowania. Mate domyślnie używa innego terminala. Zrozumiałem to dawno temu, ale tak naprawdę nigdy nie opublikowałem odpowiedzi. Zrobię to w pewnym momencie w tym tygodniu.
Sergiy Kolodyazhnyy

Mam pomysł, jak możesz to zhakować: <br>
Stancu Mihai,

Odpowiedzi:


5

Ze względu na sposób działania gnome-terminal wallnie rejestruje go jako terminalu. Bardziej szczegółowe wyjaśnienie można znaleźć tutaj . Zakładam, że to samo dotyczy sakury.

W oparciu o odpowiedź Stancu Mihai stworzyłem skrypt, który naśladuje sposób, w jaki wallzwykle działa, w tym baner z nazwą użytkownika i datownikiem (użyj -n lub --nobanner, aby usunąć baner). Skrypt obecnie nie obsługuje odczytu wiadomości z pliku.

Możesz zastąpić normalne wallpolecenie tym, dodając alias w ~/.bashrc:

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

Przykładowe użycie:

$ 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

Świetna robota @danmou!
Stancu Mihai

1

Tak, to prawda, że ​​gnome-terminal nie aktualizuje danych logowania, dlatego próbuję znaleźć inne rozwiązanie:

  1. Dowiedzmy się wszystkie aktywne pseudo terminale
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

Pomaga to wyświetlić listę wszystkich sesji terminalowych na pulpicie.

Kolejny sposób wysłania wiadomości do aktywnych sesji terminalowych pulpitu

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. Nie zapomnij o tty sesjach
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

Pomaga to w wyświetleniu listy wszystkich sesji pty

  1. Wysyłanie wiadomości do wszystkich
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. A teraz połączmy to wszystko razem. Możesz stworzyć fajny skrypt, który zastąpi obecną aplikację naścienną i zintegruje wszystkie powyższe rzeczy.
    Następnie możesz dodać do swojego ~ / .bashrc. alias wall="your_wall_replacement.sh" W ten sposób nie musisz usuwać bieżącej ściany

Przepraszam, jeśli coś jest nie tak, ponieważ ktoś nie pozwolił mi skupić się na tym temacie ... jeśli zauważycie coś dziwnego, proszę zostawić komentarz.

10x


Oto jedna linijka. Zamieniłem awk na cut, więc ma tylko jeden typ cytatu. 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

Jak inni sugerują, że istnieje wiele metod, umieściłem tutaj bardziej bezpośrednią (łatwą) metodę, którą znalazłem (przyjęcie echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: omawianego tutaj.)

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

Tutaj terminal-nomożna je uzyskać z drugiego terminala za pomocą polecenia „tty”.

tty

/dev/pts/12

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.