стіна не транслюється на термінали GUI 16.04


11

Назва підсумовує це. Запуск wall <<< "TEST"показує повідомлення в будь-якому TTY, але не в будь-яких терміналах графічного інтерфейсу (тестується з gnome-terminalта sakura).

У мене є кілька сценаріїв моніторингу акумулятора та температури, які покладаються на wallповідомлення, і після недавнього оновлення до 16.04 я помітив, що вони перестали працювати в графічному інтерфейсі.

Я не можу визначити, це помилка чи щось заважає відображати повідомлення в графічному інтерфейсі.

Як слід діяти?

Додаткова інформація:

Запуск byobuу терміналі gui дозволяє переглядати стінні повідомлення


2
Можливо, пов’язаний з askubuntu.com/questions/12654/… (заглянути в xmessage, gxmessageабо notify-send)
— Нік Вайнберг

6
Я читав це раніше сьогодні. Так, дещо пов’язане, але велике заперечення полягає в тому, що 1) це питання з 10.10, і стіна працює в 14.04 2) рішення за умови, що для мене це не задовільно. notify-send працює лише для коротких повідомлень і лише в GUI. wallмає добру зручність використання однієї команди для всіх терміналів, замість того, щоб писати щось для tty AND для gui AND для всіх інших сеансів, які можуть бути на інших DISPLAYs, тому це не дуже хороша альтернатива, принаймні imho
— Сергій Колодяжний

У мене був такий самий випуск нещодавно в 15.010. Я на 16.04 Ubuntu Mate, і він, здається, тут функціональний. можливо, в базовій бібліотеці виникла проблема. Може, подивіться, що робить команда mesg? чи працює shutdown -k 5 на всіх віртуальних терміналах? Чи правильно функціонує запис? Я перегляну вихідні коди, якщо знайду іншу машину, де її не працює. Я здогадуюсь про свою проблему з бібліотекою простору користувачів.
— j0h

1
@ j0h насправді, проблема пов'язана з gnome-терміналом. Він використовувався для оновлення записів для входу, тому, наприклад, якщо ви працюєте whoв терміналі gnome раніше, я показував би всі ваші відкриті вкладки, але не більше. Стіна надсилає повідомлення лише тим термінальним сеансам, які оновлюють записи входу. Mate за замовчуванням використовує інший термінал. Я зрозумів це давно, але ніколи насправді не публікував відповіді. Зробимо це в якийсь момент цього тижня.
— Сергій Колодяжний

У мене є ідея, як ви могли зламати це: <br>
— Stancu Mihai

Відповіді:


5

Через те, як працює gnome-термінал, wallне реєструє його як термінал. Більш ретельне пояснення можна знайти тут . Я припускаю, що те саме стосується і сакури.

На основі відповіді Станку Міхай я створив сценарій, який імітує спосіб wallроботи, включаючи банер з ім'ям користувача та часовою позначкою (для видалення банера використовуйте -n або --nobanner). Наразі скрипт не підтримує зчитування повідомлення з файлу.

Ви можете замінити звичайну wallкоманду на цю, додавши псевдонім у ~/.bashrc:

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

Приклад використання:

$ 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!
— Stancu Mihai

1

Так, правда, що gnome-terminal не оновлює записи входу, тому що я намагаюся знайти інше рішення:

  1. Давайте дізнаємося всі активні псевдотермінали
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

Це допоможе вам перелічити всі сеанси настільних терміналів.

Ще один спосіб відправити повідомлення на активні сеанси настільних терміналів

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. Не забувайте про десятки сесій
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

Це допоможе вам перелічити всі сеанси, що стосуються pty

  1. Надсилання повідомлення всім
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. Тепер давайте складемо все разом. Ви можете створити приємний сценарій, щоб замінити поточний настінний додаток та інтегрувати все вищезгадане.
    Після цього ви можете додати до свого ~ / .bashrc alias wall="your_wall_replacement.sh" Таким чином, вам не потрібно видаляти поточну стінку

Вибачте, якщо щось не так, оскільки хтось не дозволив мені зосередитись на цій темі ... якщо ви помітили щось дивне, залиште коментар.

10х


Ось один-лайнер для цього. Я замінив awk на cut, тому він містить лише один тип цитат. 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

Оскільки інші припускають, що існує багато методів, я ставлю тут більш прямий (простий) метод, який я знайшов (прийняття echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: обговорюваного тут.)

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

Тут terminal-noможна отримати з іншого терміналу через команду "tty".

tty

/dev/pts/12

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.