Skip to content

About

Service forwarding wall messages via dbus

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

35 Commits

Folders and files

Repository files navigation

Wall Broadcaster

Wall Broadcaster is a service which registers itself as session with systemd-logind, listens to it's TTY for wall messages and forwards them via D-BUS. Clients, e.g. for graphical desktops, can listen to it and display the messages to the user.

In the past, terminals did register as own "session" with /run/utmp and displayed the wall messages to the user in the terminal. As consequence, people having a lot of terminals running got the message in every single terminal. This was so annyoing, that several GUI don't support this anymore. At the same time, desktop users without open terminal did never got this informations. With systemd-logind replacing utmp, this hack does not work anymore at all. So this service provides a new, generic solution which should work for all users.

Applications and services

wall-broadcaster service

The wall-broadcaster.service runs wall-broadcaster. This utility will open a PTY and registers itself as new session with this TTY on systemd-logind. It will watch for messages on that TTY and tries to parse them. Messages send by wall or write will be splitted in a summary and body and cleaned up, else the message will be forwarded as "body".

The information are then send via the org.opensuse.WallBroadcast dbus interface.

wall-bcst-gateway

This application will register to the system dbus and the user session dbus of the Desktop Environment and convert messages coming from org.opensuse.WallBroadcast to Freedesktop notifications. It's available as systemd user service and should be run by the user.

Run systemctl --user enable --now wall-bcst-gateway.service as user to enable and start the service.

wall-bcst-watcher

This is a small utility, which listens to org.opensuse.WallBroadcast messages prints them on stdout.

wall-bcst-watcher-gtk4

A GTK4 application, which listens to org.opensuse.WallBroadcast messages and opens a popup window for each message.

DBUS Protocol

The notification components are very similar to the Freedesktop Notifications Specification to make it easy to convert it to the desktop notification system.

Component Type Description
Application Name String(s) Optional name of the application sending the notification
Summary String(s) Single line overview
Body String(s) Multi-line text
Urgency Byte(y) 0=Low, 1=Normal, 2=Critical
Sender String(s) Optional name of the sender
  • Path=/org/opensuse/WallBroadcast
  • Interface=org.opensuse.WallBroadcast

Enable Service and Desktop Applications

wall-broadcaster

Reload systemd if necessary, enable the service, and start it.

sudo systemctl daemon-reload
sudo systemctl enable --now wall-broadcaster.service

wall-bcst-gateway

Link the desktop file into your autostart folder:

mkdir -p .config/autostart
ln -sf /usr/share/applications/wall-bcst-gateway.desktop .config/autostart/

wall-bcst-watcher-gtk4

Link the desktop file into your autostart folder:

mkdir -p .config/autostart
ln -sf /usr/share/applications/wall-bcst-watcher.desktop .config/autostart/

Testing

  • Open a new terminal and monitor the D-Bus signals using dbus-monitor:
    sudo dbus-monitor --system "sender='org.opensuse.WallBroadcast'"
  • In another terminal, trigger a wall message:
    echo "System maintenance in 5 minutes!" | wall
  • The dbus-monitor should print a MessageReceived signal with the parsed fields (Message, Sender, Priority, Receiver).

About

Service forwarding wall messages via dbus

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages