- How to Send a Message to Logged Users in Linux Terminal
- If You Appreciate What We Do Here On TecMint, You Should Consider:
- Thread: Howto send a broadcast message to all users?
- Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Re: Howto send a broadcast message to all users?
- Linux Howtos, Linux Tutorials
- Linux Howtos, Linux Tutorials
- Monday, February 22, 2010
- How to broadcast a Message through Terminal to Login users In Fedora, Centos, RedHat, Ubuntu
- Глубокое погружение в Linux namespaces, часть 4
- Команда ip
- Именованные пространства имён Network
- Сетевое изолирование
- Устройства veth
- Реализация
- Netlink
- Netlink Message Format
- Атрибуты Netlink
How to Send a Message to Logged Users in Linux Terminal
How can I send a messages to logged on users in a Linux server? If you are asking this question, then this guide will help you learn how to do that. We will demonstrate how to send a message to all or a specific logged on user, on the terminal in Linux.
Linux offers a variety of means for sending messages to users logged on to a server as explained in the two methods below.
In the first method, we will use wall command – write a message to all currently logged in users on the terminal as shown.
Send Message to Logged Users
To disable the normal banner printed by wall, for example:
Add the -n (Suppress the banner) flag, this however, can only be used by the root user.
In the second method, we will use write command, which comes pre-installed on all if not most Linux distributions. It allows you to send a message to another user in the terminal using tty.
First check the all logged on users with the who command as shown.
Find Logged in Users
There are currently two users are active on the system (tecmint and root), now the user aaronkilik is sending a message to the root user.
Send Message to User
Read Also:
That’s all! Do share with us other methods or commands for sending messages to all logged on users through the terminal in Linux. If you have any queries, please use the feedback form below.
If You Appreciate What We Do Here On TecMint, You Should Consider:
TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.
If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.
We are thankful for your never ending support.
Источник
Thread: Howto send a broadcast message to all users?
Thread Tools
Display
Howto send a broadcast message to all users?
I’m looking for a solution to broadcast messages on the network.
All systems are Linux / Ubuntu.
It would be used in case the server has to be rebooted.
It saves me a walk to every office in the building.
Re: Howto send a broadcast message to all users?
So far I have found a sort of solution.
This solution uses a combination of samba and linpopup.
Since we are only using Ubuntu in our network, we don’t want to install samba.
(Just for messaging purposes).
So anybody knows any other solution?
Maybe we could use a messenger like tool, but it has to popup on top of everything.
And we need the option to sent to all users at once.
Re: Howto send a broadcast message to all users?
You can set the time and broadcast a message to all users logged on.
Re: Howto send a broadcast message to all users?
Thanks for your reply, but it’s not what I meant.
Problem is, that people are working on our server with applications like Frontaccounting, Sugarcrm and Xoops.
So I would like to be able to broadcast a message from this server to all clients on the network. Using this, I can inform people of the fact that the server will for example be rebooted in 15 minutes.
The people who need to receive the message are not logged in on the system using SSH or whatever. All of the applications used by the users are web-based. So their in fact apache users and they don’t have an user account on the system.
Re: Howto send a broadcast message to all users?
Dunno if it’s what you’re looking for — but try man wall.
Re: Howto send a broadcast message to all users?
Doesn’t Man Wall only sent a message to the users logged in on the system?
(either local or remote)
From what i tested this doesn’t sent a message to the users using the web-server.
(our users are constantly using SugarCRM, so I want to sent a broadcast to them in case of server reboot)
Re: Howto send a broadcast message to all users?
Nobody?
I would swear that what i want to accomplish, is not that odd.
I can’t imagine that in the bigger companies the system administrator walks or calls to everyone to inform them about the upcoming server maintenance?
It doesn’t matter what program i use, or how i have to use it, the only requirment is that i can type the message once, and so it is displayed to all desktops in the company.
Re: Howto send a broadcast message to all users?
Nobody?
I would swear that what i want to accomplish, is not that odd.
I can’t imagine that in the bigger companies the system administrator walks or calls to everyone to inform them about the upcoming server maintenance?
It doesn’t matter what program i use, or how i have to use it, the only requirment is that i can type the message once, and so it is displayed to all desktops in the company.
install pidgin, add an account, select bonjour.
it basically uses zeroconf, it’s a simple lan/ ip messenger.
if that’s not what you need i can have a look around ?
Re: Howto send a broadcast message to all users?
install pidgin, add an account, select bonjour.
it basically uses zeroconf, it’s a simple lan/ ip messenger.
if that’s not what you need i can have a look around ?
Well, no hijacking intended, but without installing anything, is there another way? I admit, this may seem dumb, but for example, I have a logged-in «safety» user via ctrl+alt+F2, and when I alt+F7 to my admin user and broadcast a message with wall, the «safety» user receives no message despite receiving the message on the admin user’s terminal. If this is off subject, please say so, and I will edit my post to blank.
Edit: I had to:
mesg y
as the «safety» user. Is there a way to force messages to all users even if messages are set to n?
Last edited by AggravatedGestalt; January 13th, 2011 at 03:19 AM .
Источник
Linux Howtos, Linux Tutorials
Linux Howtos, Linux Tutorials, Linux Videos and Discussion Board for Newbies to Professional and experts
Linux Howtos, Linux Tutorials
Monday, February 22, 2010
How to broadcast a Message through Terminal to Login users In Fedora, Centos, RedHat, Ubuntu
Do you want to sent message to all logged in users in your system (This works great when you are a System Administrator and many users are logged into same System)?
If you are Running Any Linux Distribution like Fedora, Centos, RedHat, Ubuntu you can send or broadcast message to all user logged in using «WALL» command. To use it on the command line / Terminal.
METHOD 1
========
[root@localhost
]# wall «Your message Goes here»
Now all users can see the Message Broadcasted by You
[ashwin@localhost tmp]$
Broadcast message from root (pts/2) (Mon Feb 22 12:10:35 2010):
Your message Goes here
METHOD 2
========
[shankar@localhost
]$ wall [Press Enter]
Write You Message Here.
Testing Wall OutPut On All Terminals.
Finished
Press Ctrl + D for EOF (End of File)
]#
Broadcast message from shankar (pts/3) (Mon Feb 22 12:14:55 2010):
Write You Message Here.
Testing Wall OutPut On All Terminals.
Finished
All Users can view the Message on their Terminal as below
]#
Broadcast message from shankar (pts/3) (Mon Feb 22 12:14:55 2010):
Write You Message Here.
Testing Wall OutPut On All Terminals.
Finished
Limitations of Wall :
1. The total length of the message is limited to 22 lines.
2. Broadcasted Messages are limited to The System Itself.
Advantages of Wall
1. During an Activity / Crisis on the system all users can be notified immediately
2. No need to Send Email to the users who are Logged into the System.
Источник
Глубокое погружение в Linux namespaces, часть 4
В завершающем посте этой серии мы рассмотрим Network namespaces. Как мы упоминали в вводном посте, network namespace изолирует ресурсы, связанные с сетью: процесс, работающий в отдельном network namespace, имеет собственные сетевые устройства, таблицы маршрутизации, правила фаервола и т.д. Мы можем непосредственно увидеть это на практике, рассмотрев наше текущее сетевое окружение.
Команда ip
Поскольку в этом посте мы будем взаимодействовать с сетевыми устройствами, мы вернем жесткое требование наличия прав суперпользователя, которое мы смягчили в предыдущих постах. С этого момента мы будем предполагать, что как ip , так и isolate будут запускаться с sudo .
Звездой шоу здесь является команда ip — швейцарский армейский нож для работы с сетью в Linux — и мы будем активно использовать её в этом посте. Прямо сейчас мы только что выполнили подкоманду link list , чтобы увидеть, какие сетевые устройства в настоящее время доступны в системе (здесь есть lo — loopback-интерфес и `ens33, ethernet-интерфейс LAN.
Как и со всеми другими пространствами имён, система стартует с начальным network namespace, которому принадлежат все процесс процессы, если не задано иное. Выполнение команды ip link list как есть показывает нам сетевые устройства, принадлежащие изначальному пространству имён (поскольку и наш шелл, и команда ip принадлежат этому пространству имён).
Именованные пространства имён Network
Давайте создадим новый network namespace:
И снова мы использовали команду ip . Подкоманда netns позволяет нам играться с пространствами имён network: например, мы можем создавать новые сетевые пространства network с помощью подкоманды add команды netns и использовать list для их вывода.
Вы могли заметить, что list возвращал только наш вновь созданный namespace. Разве он не должен возвращать по крайней мере два, одним из которых был бы исходным namespace, о котором мы упоминали ранее? Причина этого в том, что ip создаёт то, что называется named network namespace, который является просто network namespace, идентифицируемый уникальным именем (в нашем случае coke ). Только именованные пространства имён network отображаются подкомандой list , а изначальный network namespace не именованный.
Проще всего получить именованные пространства имён network. Например, в каждом именованном network namespace создаётся файл в каталоге /var/run/netns и им сможет воспользоваться процесс, который хочет переключиться на свой namespace. Другое свойство именованных пространств имён network заключается в том, что они могут существовать без наличия какого-либо процесса — в отличие от неименованных, которые будут удалены как только завершатся все принадлежащие им процессы.
Теперь, когда у нас есть дочерний network namespace, мы можем взглянуть на сеть с его точки зрения.
Мы будем использовать приглашение командной строки C$ для обозначения шелла, работающего в дочернем network namespace.
Запуск субкоманды exec $namespace $command выполняет $command в именованном network namespace $namespace . Здесь мы запустили шелл внутри пространства имён coke и посмотрели доступные сетевые устройства. Мы видим, что, по крайней мере, наше устройство ens33 исчезло. Единственное устройство, которое видно, это лупбек и даже этот интерфейс погашен.
Мы должны теперь свыкнуться с тем, что настройки по умолчанию для пространств имён обычно очень строгие. Для пространств имён network, как мы видим, никаких устройств, помимо loopback , не будет доступно. Мы можем поднять интерфейс loopback без всяких формальностей:
Сетевое изолирование
Мы уже начинаем понимать, что запустив процесс во вложенном network namespace, таком как coke , мы можем быть уверены, что он изолирован от остальной системы в том, что касается сети. Наш шелл-процесс, работающий в coke , может общаться только через loopback . Это означает, что он может общаться только с процессами, которые также являются членами пространства имён coke , но в настоящее время других таких процессов нет (и, во имя изолированности, мы хотели бы, чтобы так и оставалось), так что он немного одинок. Давайте попробуем несколько ослабить эту изолированность. Мы создадим туннель, через который процессы в coke смогут общаться с процессами в нашем исходном пространстве имён.
Сейчас любое сетевое общение должно происходить через какое-то сетевое устройство, а устройство может существовать ровно в одном network namespace в данный конкретный момент времени, поэтому связь между любыми двумя процессами в разных пространствах имён должна осуществляться как минимум через два сетевых устройства — по одному в каждом network namespace.
Устройства veth
Для выполнения этого нашего требования, мы будем использовать сетевое устройство virtual ethernet (или сокращённо veth ). Устройства veth всегда создаются как пара устройств, связанных по принципу туннеля, так что сообщения, отправленные на одном конце, выходят из устройства на другом. Вы могли бы предположить, что мы могли бы легко иметь один конец в исходном network namespace, а другой — в нашем дочернем network namespace, а всё общение между пространствами имён network проходило бы через соответствующее оконечное устройство veth (и вы были бы правы).
Наше устройство veth1 теперь появилось в пространстве имён coke . Но чтобы заставить пару veth работать, нам нужно назначить там IP-адреса и поднять интерфейсы. Мы сделаем это в каждом соответствующем network namespace.
Мы должны увидеть, что интерфейс veth1 поднят и имеет назначенный нами адрес 10.1.1.2 . Тоже самое должно произойти с veth0 в исходном пространстве имён. Теперь у нас должна быть возможность сделать интер-namespace ping между двумя процессами, запущенными в обоих пространствах имён.
Реализация
Как обычно, теперь мы попытаемся воспроизвести то, что мы рассматривали до сих пор, в коде. В частности, нам нужно будет сделать следующее:
- Выполнить команду в новом network namespace.
- Создать пару veth (veth0 veth1).
- Переместить устройство veth1 в новый namespace.
- Назначить IP-адреса обоим устройствам и поднять их.
Шаг 1 прост: мы создаём наш командный процесс в новом пространстве имён network путём добавления флага CLONE_NEWNET к clone :
Netlink
Для остальных шагов мы будем преимущественно использовать Netlink интерфейс чтобы общаться с Linux. Netlink в основном используется для связи между обычными приложениями (вроде isolate ) и ядром Linux. Он предоставляет API поверх сокетов на основе протокола, который определяет структуру и содержание сообщения. Используя этот протокол, мы можем отправлять сообщения, которые получает Linux и преобразует в запросы вроде создать пару veth с именами veth0 и veth1.
Давайте начнем с создания нашего сокета netlink. При этом мы укажем, что хотим использовать протокол NETLINK_ROUTE — этот протокол охватывает реализации сетевой маршрутизации и управления устройствами.
Netlink Message Format
Сообщение в netlink — это четырехбайтовый выровненный блок данный, содержащий заголовок ( struct nlmsghdr ) и полезную нагрузку. Формат заголовка описан здесь. Модуль The Network Interface Service (NIS) определяет формат ( struct ifinfomsg ), с которого должна начинаться полезная нагрузка, относящаяся к управлению сетевым интерфейсом.
Наш следующий запрос будет представлен следующей структурой C :
Атрибуты Netlink
Модуль NIS требует, чтобы полезная нагрузка была закодирована как атрибуты Netlink. Атрибуты обеспечивают способ сегментировать полезную нагрузку на подсекции. Атрибут имеет тип и длину в дополнение к полезной нагрузке, содержащей сами данные.
Полезная нагрузка в сообщении Netlink будет закодирована как список атрибутов (где любой такой атрибут, в свою очередь, может иметь вложенные атрибуты), а у нас будет несколько вспомогательных функций для заполнения его атрибутами. В коде атрибут представлен в заголовочном файле linux/rtnetlink.h структурой rtattr как:
rta_len — это длина полезной нагрузки атрибута, что следует в памяти сразу за структурой rt_attr struct (то есть следующие rta_len байты). Как интерпретируется содержимое этой полезной нагрузки, задается rta_type , а возможные значения полностью зависят от реализации получателя и отправляемого запроса.
В попытке собрать всё это вместе, давайте посмотрим, как isolate делает netlink запрос для создания для создания пары veth с помощью следующей функции create_veth , которая выполняет шаг 2 :
Как мы видим, нам нужно быть точными в том, что мы отправляем сюда: нам нужно было закодировать сообщение точно так, как оно будет интерпретироваться реализацией ядра, и здесь нам потребовалось три вложенных атрибута для этого. Я уверен, что это где-то задокументировано, хотя, немного погуглив, мне не удалось этого найти — в основном я разобрался с помощью strace и исходного кода команды ip .
Далее, для шага 3 , этот метод, который, учитывая имя интерфейса ifname и network namespace файлового дескриптора netns , перемещает устройство, связанное с этим интерфейсом, в указанный network namespace.
После создания пары veth и перемещения одного конца в наш целевой network namespace, на шаге 4 мы назначаем IP-адреса обоим конечным устройствам и поднимаем их интерфейсы. Для этого у нас есть вспомогательная функция if_up , которая, учитывая имя интерфейса ifname и IP-адрес ip , назначает ip устройству ifname и поднимает его. Для краткости мы не показываем их тут, но вместо этого они могут быть найдены здесь.
Наконец, мы объединяем эти методы, чтобы подготовить наш network namespace для нашего командного процесса.
Затем мы можем вызвать prepare_netns сразу после того, как мы закончим настройку нашего user namespace.
Источник