Послать сообщение всем пользователям linux

Подскажите простейший способ отправить уведомление «графическим» пользователям.

Есть самописный демом, который мониторит некоторые события и при их возникновении нужно отправить уведомление пользователям.

На компьютере, в общем случае, запущено несколько сеансов в том числе по ssh.

Нужно что бы все пользователи получили уведомление о событии, независимо от того каким образом они вошли в систему. Для консольных пользователей это сделать не сложно.

Вопрос как это попроще сделать для графических пользователей, в виде всплывающего окна и независимо от используемой оболочки.

Желательно что бы любой пользователь мог «закрыть» событие так что бы окошко уведомления закрылось у всех прочих пользователей.

Поищи про notifyd, думаю, это то, что нужно. А если хочешь в C — то про libnotify.

Послать сообщение можно через write, «графические» пользователи тоже его получат.

«закрыть» событие так что бы окошко уведомления закрылось у всех прочих пользователей

А вот такое придётся писать самому, про стандартное ничего не слышал.

«графические» пользователи тоже его получат.

Не получат, специально только что проверил.

В продолжение к предыдущему. Ты хоть тонну сообщений посылай, если у юзера не запущен нотификатор (у меня, например, не запущен), то ничего он не получит! Разве что если сидит по ssh или в консольке — получит сообщения, посланные wall/write.

А зачем отключать демон уведомлений? ССЗБ? Тогда надо по-другому ставить вопрос: «Как отправить сообщение горе-пользователю, который заблокировал все способы получения сообщений?»

Что значит «зачем отключать»? Чтобы что-то отключить, надо его сначала включить. А я и не включал. Раньше пользовался notipy, но он уж слишком глюкавый.

Вопрос как это попроще сделать для графических пользователей, в виде всплывающего окна и независимо от используемой оболочки.

Можно использовать xmessage, gxmessage

Желательно что бы любой пользователь мог «закрыть» событие так что бы окошко уведомления закрылось у всех прочих пользователей.

Тогда надо какие-то костыли городить, которые б убивали эти всплывающие окошки от xmessage или gxmessage. KDialog еще есть например

To show GUI notifications:

  • notification server (most of desktop environments use their own implementations)
  • libnotify (Arch Linux, Fedora, openSUSE) or libnotify-bin (Debian GNU/Linux, Ubuntu)

Все полноценные ДЕ (гном мате кеды крыса циннамон) имееют включенный сервер уведомлений.

Проблема в том, что рутовый демон не может отправлять сообщения юзерам напямую. — Потребуется запускать уведомление от того же юзера и с перемеными DISPLAY и другими.

Решение — костыль: https://github.com/hakavlad/notify-send-root-wrapper — он сканирует /proc, находит залогиненных юзеров, находит нужные переменные, и отправляет уведомление всем залогиненным.

  • скрипт всасывает аргументы и передает в notify-send для уведомления всех.

nohang для уведомления залогиненных использует аналогичный подход, только вместо отдельного процесса запускает тред в себе.

notify-send-root-wrapper писался давно и может быть не идеален. Попробуй. Есть вопросы или проблемы — пиши в issue в https://github.com/hakavlad/notify-send-root-wrapper

Нужно что бы все пользователи получили уведомление о событии

если они сами выключили нотификатор, то не нужно

Источник

linux-notes.org

Отправить сообщение другому пользователю на сервере в Unix/Linux

Так бывает, что на сервере работают и другие пользователи одновременно с вами. Допустим вам, необходимо выполнить перезагрузку ОС так,чтобы другие юзеры не пострадали и успели сохранить свои данные до ребута. Сейчас я расскажу как можно это сделать несколькими способами.

Для начала, посмотрим кто находится в системе:

Так же, можно использовать:

Для примера, я залогинился на сервер дважды от одного и того же юзера.

-=== СПОСОБ 1 — Используем echo команду ==-

Можно отправить сообщение другому пользователю следующим образом:

  • echo -e «\033[0;31m Can I reboot this server… OK? \033[0m» — Команда.
  • /dev/pts/1 — Это открытая сессия пользователя.

PS: Я использую в данном примере подсветку, чтобы можно было сразу ее увидеть и другому пользователю все было понятно.

-=== СПОСОБ 2 — Используем write команду ==-

Так же, можно использовать следующий пример:

  • captain — Юзер которому нужно отправить сообщение.
  • pts/1 — Сессия данного юзера.

Напишите сообщение и отправьте его через нажатие ‘Enter’, и оно будет отправлено в терминал юзера. Используйте Ctrl+D чтобы прервать утилиту write.

Можно написать сообщение в файл (предположим — send_to_user.txt):

И потом, чтобы отправить данное послание, используйте:

Очень простая и полезная тулза.

-=== СПОСОБ 3 — Используем wall команду ==-

Для отправки широковещательного сообщения всем подключенным пользователям, используется команда wall (wall = write to all):

Но данное сообщение будет отправлено только после того, как вы нажмете — Ctrl+D

Можно написать сообщение в файл (предположим — send_to_user.txt):

И потом, чтобы отправить данное послание, используйте:

Вот и все, статья «Отправить сообщение другому пользователю в Unix/Linux» завершена.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Отправить сообщение другому пользователю на сервере в Unix/Linux

Так бывает, что на сервере работают и другие пользователи одновременно с вами. Допустим вам, необходимо выполнить перезагрузку ОС так,чтобы другие юзеры не пострадали и успели сохранить свои данные до ребута. Сейчас я расскажу как можно это сделать несколькими способами.

Читайте также:  Live usb с линуксом

Для начала, посмотрим кто находится в системе:

Так же, можно использовать:

Для примера, я залогинился на сервер дважды от одного и того же юзера.

-=== СПОСОБ 1 — Используем echo команду ==-

Можно отправить сообщение другому пользователю следующим образом:

  • echo -e «33[0;31m Can I reboot this server… OK? 33[0m» — Команда.
  • /dev/pts/1 — Это открытая сессия пользователя.

PS: Я использую в данном примере подсветку, чтобы можно было сразу ее увидеть и другому пользователю все было понятно.

-=== СПОСОБ 2 — Используем write команду ==-

Так же, можно использовать следующий пример:

  • captain — Юзер которому нужно отправить сообщение.
  • pts/1 — Сессия данного юзера.

Напишите сообщение и отправьте его через нажатие ‘Enter’, и оно будет отправлено в терминал юзера. Используйте Ctrl+D чтобы прервать утилиту write.

Можно написать сообщение в файл (предположим — send_to_user.txt):

И потом, чтобы отправить данное послание, используйте:

Очень простая и полезная тулза.

-=== СПОСОБ 3 — Используем wall команду ==-

Для отправки широковещательного сообщения всем подключенным пользователям, используется команда wall (wall = write to all):

Но данное сообщение будет отправлено только после того, как вы нажмете — Ctrl+D

Можно написать сообщение в файл (предположим — send_to_user.txt):

И потом, чтобы отправить данное послание, используйте:

Вот и все, статья «Отправить сообщение другому пользователю в Unix/Linux» завершена.

Источник

Отправка GUI сообщений нескольким хостам через ssh (bash)

Доброго времени суток, только начинаю освоение Linux, в данный момент это Linux Mint 19.1 Cinnamon , по работе иногда приходится сообщать о чём-либо сотрудникам, для этого есть чат в WhatsApp, но обычно они за ним не следят (зато следят за клипами на ютубе), поэтому я хотел реализовать отправку сообщений через ssh сразу всем сотрудникам. В данный момент они используют тот же дистрибутив, на удаленных машинах уже лежат ключ, в данный момент я с горем (гуглом) поплам написал (накопипастил) вот такой скрипт:

1.Он работает, но: После подключения к первому хосту — скрипт требует от меня взаимодействия, например, у первого хоста нет ключа, и вместо того, чтобы отправить команду второму хосту, скрипт настойчиво требует пароль от первого и пока не получит любой ввод, не начнет подключение ко 2-му.

2. Отправляю команду на 2й хост, команда выполняется успешно (на удаленной машине выскакивает окно), НО скрипт не продолжает выполнение, пока на удаленном компе не нажмут ОК.

3. Используется zenity т.к первое, что удачно заработало из найденного в интернете без установки доп. ПО + ,как я понял, можно поменять размер текста и окна, что очень важно для более взрослых сотрудников.

4. Я понимаю, что, возможно, подобный вопрос уже задавался n^12 раз, но решения конкретно моей проблемы я не нашёл.

5. Мне не принципиально использования именно такой схемы/кода и я готов работать/читать/смотреть любую информацию.

Мой первый пост, не убивайте 🙁

Не помогло

Локально работает, по ssh нет.

Не помогло

Ноль реакции. Пробую вручную вводить в терминал. Попробовал уже и & и nohup , пока что безуспешно. Гугл говорит, что notify-send «не умеет в сеть». Можем с вами связаться сейчас как-нибудь? У меня в профиле есть страница в вк. или запрещено правилами?

по работе иногда приходится сообщать о чём-либо сотрудникам, для этого есть чат в WhatsApp, но обычно они за ним не следят (зато следят за клипами на ютубе), поэтому я хотел реализовать отправку сообщений через ssh сразу всем сотрудникам

Решать социальные проблемы с помощью технических средств — это такое

Социум — тоже важно

Мобильная связь — чем не решение соц. проблем современного мира?

По сабжу: Через тот же zenity, как я понял, можно не просто отправлять сообщения, а также различные поля и формы, которые можно заполнить, например на смену пароля и прочие штуки, просто я до этого не дорос.

По коду: в данный момент понятно, что скрипт ждёт ответа от zenity 0-5 в зависимости от того, как было закрыто окно — это первая проблема. Вторая, как и была изначально — почему скрипт (цикл) не продолжает работу, а сидит и ждёт завершения предыдущей команды.

Предварительно ssh ключи эспортируй на пользователькие машины что бы был автологин в их сессии. Админу вбивать пароль моветон

А вообще жди дня, все спят

Ваша задача решается по другому

1 Делается сервер на котором есть процесс раздающий сообщения

2 На клиентах есть процесс слушающий постоянно сервер

Реализовать способов много, например у Firebird есть механизм POST_EVENT, можно налепить приложение на этом https://it.wikireading.ru/36885

Да просто оповещения это норм, ну типа «Приехала зарплата!» для тех кто возжелал получать наличкой 😀

А на самом деле весело что вроде как нет так сказать «из коробки» массовых оповещений кроме конечно же wall

В идеале конечно микросервер и клиентики склепать, только вот ТС сказал что он только-только вникает, я хз или в job или хотя бы на гите простеший клиент/сервер найти и заюзать.

Можем с вами связаться сейчас как-нибудь? У меня в профиле есть страница в вк. или запрещено правилами?

1) Это запрещено духом форумов (не у тебя одного может быть такая проблема). 2) Не ясно, чем это лучше этого форума. 3) С чего ты решил, что я советую навярняка, а не перебираю варианты? Прочти инфу в моем профиле.

Хитрожопый Всеволод 😀 Не не так, а Всеволод ясно солнышко первый — Хитрожопый )))))))))))))))))))))

Не помогло

Код выполнился, но уведомления на удаленном хосте не было, через

Читайте также:  Как убрать автоматическую блокировку компьютера windows

Уточню пару моментов 1. Ключ уже на удаленной машине есть 2. Использую sudo -u user т.к доступ есть к админке (sudo), а команды надо выполнить в активной сессии user. —————-

До клиент-сервер. пока не дорос, хотелось бы решить эту задачу в рамках скриптов, т.к конкретно сейчас это более быстро + поможет мне понять какую-то часть в синтаксисе.

Дело не в синтаксисах notify-send работает через dbus, вот и облом. zenity ЕМНИП всегда требует ввода, вот и облом. Может где и есть решение из коробки для гуя, но я хз какое. А дорос не дорос эт всё херня берёшь какойнить питон и пример типа https://habr.com/ru/post/149077/ и делаешь себе клиент сервер (клиент делаешь циклом что бы он всегда опрашивал сервер, и если что есть запускал notify-send уже по нормальному прямо в сессии пользователя) а сервер лишь шлёт 0-ничего не0 вывести как сообщение.Таким образом и растёшь. Обычные питоноскрипты. Или жди залётного, может кто-что подскажет. Или напиши в https://www.linux.org.ru/forum/job/ и за тебя всё сделают

Я так понимаю, в баш скрипте (ну и вообще в линуксе) можно использовать код от питона и других языков? и возможно даже вместе? И по вашей ссылке примерно показано как создать относительно простое решение моей проблемы. верно понял? Питон от баш или си шарп синтаксисом и сложностью сильно отличается? Пока что по работе что-то вроде полу хелп деск эникейщика, которому впихнули asterisk с битриксом и сказали избавиться от винды. вот теперь варюсь в этом, на аутсорсе ребята слишком дорогие оказались. поэтому вот пытаюсь во всем сразу немного разбираться. Сори за тупые вопросы.

баш скрипте (ну и вообще в линуксе) можно использовать код от питона и других языков?

Ну, да. Видал шебанг #! эта хрень указывает что после неё пойдёт программа, а на следующей строке пойдёт то что эта команда будет исполнять. В твоём случае это баш, но можно написать там python и тогда далее должен быть код на python. Можно в баше вызывать питон, а в питоне баш и как угодно ещё. Но лучше что-то одно. Хотя зависит от случая. Баш в принципе командный интерпретатор и служит для исполнения внешних команд, всё что ты вводишь в терминале ты водишь в баш/ или иной шел не важно.

И по вашей ссылке примерно показано как создать относительно простое решение моей проблемы… верно понял?

Ну тип того. Хотя если вообще непонятно могут быть сложности, но тут гордость лелеять не надо, просто копипастишь и играешься пока не поймёшь как оно работает, а потом для доработки гуглишь «как в python запустить внешнюю команду» и тому подобное.

Питон от баш или си шарп синтаксисом и сложностью сильно отличается?

Если с языками (любыми) дело имел мало то сильно.

Пока что по работе что-то вроде полу хелп деск эникейщика, которому впихнули asterisk с битриксом и сказали избавиться от винды… вот теперь варюсь в этом, на аутсорсе ребята слишком дорогие оказались…поэтому вот пытаюсь во всем сразу немного разбираться. Сори за тупые вопросы.

Все с чего-то начинают. Но тебе полюбому придётся какойто скриптовый язык общего назначения учить python или lua не знаю что понравится для автоматизации.

Попробуй пример с хабра воспроизведи на своей машине, потом подумай как сделать так что бы клиент постоянно опрашивал сервер, затем сделай так что бы он запускал команду уведомления если у сервера есть сообщение и когда всё будет готово добавишь скрипт клиента в автозагрузку всех машин где требуются уведомления и всё. Никаких ssh не надо, просто будешь серверу давать строку, а он отдавать её клиентам.

Или ща придёт человек внезапно сюда и даст готовое решение. Время 5 утра, мля пора спать

Копирнул код по сокетам питона. он не запустился потому что ему не понравилась ВИЗУАЛЬНАЯ вложенность цикла! Отступы, пробелы Вопрос: Что я вам плохого сделал? За что вы меня так? Это способ намекнуть, что лучше на панель, да? 🙁

———- Клиент-сервер на своем компе вроде запустил, вроде бы даже подключилось. только я так и не понял, как передать команду линуксовую?

Попробовал уже и & и nohup , пока что безуспешно.

Только что попробовал аналогичный скрипт (тот, который в ОП, правда с одним хостом, в цикле с другой переменной), с добавлением & после команды ssh (ВНЕ кавычек) — всё отработало нормально, появилось несколько окон не дожидаясь каких либо действий/ввода.

Настрой авторизацию по ключам, без этого жизни нет.

Простое не изящное решение ssh ‘. ‘ &

Приведите код скрипта, пожалуйста.

Вы код-то смотрели? Именно эту конструкцию и использую, но не работает.

Почему уже третий человек предлагает авторизацию по ключам, если в самом первом сообщении я указал, что ключ на хостах есть, и в коде нигде пароль я не передаю. Или так принято на форумах?

http://i.imgur.com/6SOtMVL.png Вот что выдает команда, если я закрою свой терминал — то на удаленном хосте окно остается, всё ок, но суть в том, что в моем терминале команда всё еще ждала ответа, следовательно, следующий круг цикла перебора хостов не запустится, причем даже с continue

просто в конце добавить ‘&’ — запустить команду в фоне и не ждать ее завершения

Для того чтобы не спрашивало при первом подключении к хосту (верификация приватного ключа хоста) можно указать опцию

Товарищ zaz выше уже опередил.

В условиях цикла код не отрабатывает. Первый раз команда отправляется, а дальше терминал ждёт ответа от хоста. Просто попробуйте отправить сообщение себе и на выдуманный второй хост и увидите, что пока не нажмете ОК — терминал на выдуманный хост даже не дунет. ХЕЛП 🙁

если в самом первом сообщении я указал, что ключ на хостах есть

например, у первого хоста нет ключа, и вместо того, чтобы отправить команду второму хосту, скрипт настойчиво требует пароль от первого

Видимо действительно «так принято на форумах» что у всех со зрением что-то не то.

Читайте также:  Права опытного пользователя windows

Хм, неверно поняли информацию. значит я неверно её донёс, признаю ошибку, виноват.

В общем ситуация следующая: код такой же как в топике, на обоих хостах есть ключ и запись в sudoers, вручную из терминала команда выполняется, но всё так же ждёт результат выполнения команды. Всевозможные добавки в виде & и nohup попробовал, даже пробовал запустить удаленно терминал и уже в нем выполнить команду — бестолку, всё замирает после первой команды.

Просто попробуйте отправить сообщение себе и на выдуманный второй хост и увидите, что пока не нажмете ОК — терминал на выдуманный хост даже не дунет.

Честное слово, сразу 3 окна вылезли, ничего не нажимал. Для скриншота потом уже сдвинул в сторону, для наглядности.

Обращаю внимание, что символ & относится в данном случае к команде ssh, а не zenity или скрипту в целом.

2>/dev/null добавил чтобы GTK-шные сообщения не портили скриншот.

Оповещения есть, но люди их игнорируют. Значит надо такие оповещения запилить, чтобы прямо в мозги залезали!

Разобрались, проблема была в том, как linux mint 19.1 cinnamon запускает скрипт, если запускать двойным щелчком, то система предлагает показать, либо запустить в терминале. Но запуск в терминале видимо какой-то багованный.

Сейчас запустил вручную скрипт через ./script.sh и всё отработало как надо. В общем повод сменить дистрибутив.

Тему можно закрывать, СПАСИБО.

Первый раз команда отправляется, а дальше терминал ждёт ответа от хоста.

Ничего он не ждет, то что в вашем скрине http://i.imgur.com/6SOtMVL.png это не более чем выхлоп на терминал. Но это не означает что нельзя набрать команду.

если запускать двойным щелчком
administrator
В общем повод сменить дистрибутив.

«Пора переустанавливать шиндоуз»

Тем не менее, скрипт не продолжал выполняться, пока не нажмут «ок» на удаленном хосте.

При запуске напрямую из терминала через ./script.sh проблема ушла. Проблема была в том, «как» ось запускала скрипт.

Оповещения есть, но люди их игнорируют. Значит надо такие оповещения запилить, чтобы прямо в мозги залезали!

SMS «Мама мне срочно нужны деньги, положи 500 руб на вот этот номер xxxxxxx» Говорят срабатывает 🙂
А если серьезно, то мне кажется даже удары током не помогут. В разное время, начиная с dos, уж делали прямо сильно красные предупреждения, ответ как обычно «а я не читал» и нажал «кнопка».

он не запустился потому что ему не понравилась ВИЗУАЛЬНАЯ вложенность цикла! Отступы, пробелы

Что я вам плохого сделал? За что вы меня так?

o_O? Всё нормально, ты был не в курсе форматирования отступами, а не скобками или операторами, теперь ты в курсе.

Это способ намекнуть, что лучше на панель, да? 🙁

Эмммм, нет. Но кто сказал что будет просто? Вернее тут и сложного ничего нет просто ты не знаешь некоторых вещей, по ходу дела ты будешь их узнавать и это в последствии не будет вызывать у тебя никаких проблем.

Клиент-сервер на своем компе вроде запустил, вроде бы даже подключилось…

Никаких вроде, тут либо да либо нет. Ты продключаешься.

только я так и не понял, как передать команду линуксовую?

тебе не надо слать команду, тебе надо слать текст.

Ладно хрен с тобой во тебе рабочий вариант

А теперь придумай так что бы ты серверу как то передавал сообщение для рассылки и это сообщение передавалось на хост только 1 раз

Ошейники с пьезоэлементом от зажигалки )) Бодрит!

Сообщение во весь экран с капчей типа 365*27

Тоже не сработает. Пожалуются что софт «не работает». Т.е. получаеться опять мимо. И вот это

Ошейники с пьезоэлементом от зажигалки

Тоже пожалуются, что софт током бьет.

ЗЫ Это я со своей многолетней практики пишу, до анального устройства не добрались конечно, но и предупреждения какие не делай, пофиг.

Спасибо за ваше терпение!)

Ну я вижу conn.send(‘«йя админ йя глаголю»’), только не могу понять куда этот текст передался. как с ним работать. я так понимаю там можно и команду передать, но как её прочитать =/

Клиент раз в 3 кекуды шлёт серверу ping тот отвечаент сообщением «йя админ йя глаголю» клиент получает его и склеивает с командой notify-send и исполняет на хосте клиента notify-send «йя админ йя глаголю» ты передаёшь не команды, а текст который клиент будет выводить. «йя админ йя глаголю» это data на Client. ping это data на сервере

олько не могу понять куда этот текст передался… клиенту, это сообщение клиент получает от сервера и выводит его пользователю

как с ним работать… Можешь написать там другой текст, можешь завести переменную куда будешь писать сообщениетектовое, можешь писать сообщение в файл откуда сервер будет читасть и если файл не пуст рассылать всем сообщение.

print data видишь? всё что передаётся печатается

ЗЫ Вот вспомнил, когда-то давно для оповещения диспетчеров забубенил wav-чик запуска pinball от nt4. По жалобам диспетчеров, вставляло не хило 🙂 Просыпались мгновенно 🙂 Поменяли на более «ласковое». Но это же только для случая когда человек спит.

Источник

Оцените статью