RootSpeak Download
Advanced Messaging System for Linux

Tell every user. Know who read it.

RootSpeak, free of charge, lets the administrators of a Linux machine send messages to its users, in every terminal and on the desktop, and see for each person whether the message was delivered and confirmed.

In a terminalOn the desktop
The problem

A message into the dark.

wall and write reach only who is logged in at that moment, in a terminal, and leave no trace. E-mails get lost. Before a reboot, a maintenance window, a policy change or a security notice, the administrator has no way to know who has seen the message.

  • A reboot
  • A maintenance window
  • A policy change
  • A security notice
  • Who has seen the message?
How it works

Send it once. Watch it land.

1

Send

One command. Recipients: a user, a list, a Unix group (@group), all (every human user) or online (only those logged in now). Optional --expires 2h.

2

It reaches them wherever they are

In every open terminal (tty, ssh, tmux) and on the desktop (X11 and Wayland) at once; whoever is logged out finds it at the next login.

3

See who confirmed

For each recipient: sent, delivered or confirmed, with date, time and channel. rspeak status 1, rspeak list, or the TUI.

# rspeak send --to @developers --title "Server update" "Tonight at 11 pm the mail server is updated."
Message 1 sent to 14 users.

# rspeak status 1
Message 1 · Server update · 01/10 11:30 · from root
  │ Tonight at 11 pm the mail server is updated.

USER             STATE
anna             confirmed on 01/10 15:14 (desktop)
luca             confirmed on 01/10 11:37 (terminal pts/2)
mario            delivered, postponed on 01/10 15:20
sara             delivered
Features

Everything in orbit around one question.

Who has read the message?

Any recipients

A user, a list, a Unix group, all or online. Text from an argument, a file or stdin; an optional title; an expiry with --expires.

Three states per recipient

Sent, delivered, confirmed, each with date, time and channel: desktop or terminal.

Reminders until confirmed

Every 30 minutes by default. rspeak remind brings the question back at once.

Revoke and purge

rspeak revoke withdraws a message; rspeak purge deletes old ones.

A full-screen TUI

Browse, read who confirmed, write and send, remind, revoke. No ncurses.

History in the system journal

rspeak log, or journalctl -t rspeak.

Nothing for users to install

Users have no command and install nothing: they just receive and confirm.

Quiet for machines

Cron, scp, rsync, ssh without a terminal and services are never touched.

The confirmation records that the user states they have read the message, like read receipts in a messaging app.

The TUI

Mission control, in a terminal.

Run rspeak with no arguments: browse, read who confirmed, write and send, remind, revoke. One three-colour bar per message: 14 confirmed · 5 delivered · 2 sent.

┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 11:20:20 ─┐
│                                                                                                                  │
│   ID  DATE         MESSAGE                              RECIPIENTS                                               │
│    4  01/10 11:20  [revoked] Reboot · Reboot at 1 pm.   ▒▒▒▒▒▒▒▒▒▒▒▒  2 delivered                                │
│    3  01/10 11:20  Your account expires on Friday: ple  ▒▒▒▒▒▒▒▒▒▒▒▒  1 delivered                                │
│ >  2  01/10 11:20  Maintenance · On Saturday from 8 am  ██████▒▒▒▒▒░  4 confirmed · 3 delivered · 1 sent         │
│    1  01/10 11:20  Server update · Tonight at 11 pm th  ████████████  all confirmed (3)                          │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent                                                                               │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Enter open   n new   r revoke   m remind   p purge   / search   ? keys   q quit                                  │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
The real TUI: the list of sent messages
Respectful by design · Security

Calm for users. Tight for root.

It never blocks anyone

No lock screen, no logout. Users can always choose

Later
Reminders, gently
Every 30 minutes by default until they confirm; rspeak remind brings the question back at once.
Scripts are left alone
Non-interactive sessions (cron, scp, rsync, ssh without a terminal, services) are never touched.
Nothing to install for users
They have no command: they just receive and confirm.

Security

One machine, no network, no daemon
It uses what the system already has: logind, sudo, the shell, desktop autostart.
Only administrators send
The rspeak command belongs to the administrators' group that already exists (sudo or wheel) and always runs as root; users cannot run it.
Root never writes as root into mailboxes
Every access happens in a child process with the user's identity, with a time limit.
Written in C, tested hard
Every warning is an error, compiler hardening on; tested with AddressSanitizer and UBSan, static analysis and fuzzing of everything that reads users' files.
Messages cannot take over a terminal
Escape sequences in messages are cleaned.
Compatibility

Tested, not just claimed.

22

Tested automatically, as root with real users and sessions, on 22 distributions with systemd.

Debian 12Debian 13Ubuntu 22.04Ubuntu 24.04Ubuntu 26.04Fedora 44Fedora 45CentOS Stream 9CentOS Stream 10RHEL 9RHEL 10Rocky Linux 9Rocky Linux 10AlmaLinux 9AlmaLinux 10Oracle Linux 9Oracle Linux 10openSUSE Leap 16openSUSE TumbleweedSLES 15SLES 16Arch Linux

Desktops

GNOME on Debian, Ubuntu and Rocky Linux with SELinux enforcing; KDE Plasma on Fedora; Cinnamon. On Wayland and on X11.

Shells

bash, zsh, fish: the question at every prompt. ksh, dash, sh: at login.

Requirements

systemd. Packages .deb and .rpm: coming soon.

Download · Free

One archive. Every distribution.

The same archive for all 22 tested distributions: the programs are already built, nothing to compile.

rootspeak-0.2.0-linux-x86_64.tar.gz
Free

Version 0.2.0 · about 360 KB · Linux x86-64 with systemd. The programs, the installer and the two manuals.

$ tar -xzf rootspeak-0.2.0-linux-x86_64.tar.gz
$ cd rootspeak-0.2.0-linux-x86_64
$ ./install.sh
Download rootspeak-0.2.0 →

SHA256SUMS · LICENSE.txt · NOTICE.txt

Licence
Freeware

Free at home and at work, on any number of machines, also when you administer the machines of a company, a school or a customer. Copy it and give it away unchanged.

Not allowed without a written licence: selling it, including it in a product or service that is sold, modifying it. For that, write to rootspeak@nicfio.it.

Read the licence

Check the download

Put SHA256SUMS next to the archive: sha256sum -c --ignore-missing SHA256SUMS.

Desktop dialog

Needs zenity (packaged by every distribution). Servers without a desktop work without it.

Remove

./install.sh --uninstall keeps the messages; --purge removes them too.

FAQ

Questions

Is it really free?

Yes. RootSpeak is freeware: no trial, no account, no limits, at home or at work. Only selling it, including it in a product that is sold or modifying it needs a written licence.

Does it need a server or a network?

No. RootSpeak works on one machine: no network, no daemon. It uses what the system already has: logind, sudo, the shell and desktop autostart.

Do users need to install anything?

No. Users have no command and install nothing: they receive the message and confirm it.

What if a user is not logged in?

They get the message at their next login, in the terminal or on the desktop.

Can it lock the screen until they confirm?

No, by design. RootSpeak never blocks anyone: users can always choose «Later», and it reminds them every 30 minutes by default until they confirm.

Does «confirmed» prove they read it?

It records that the user states they have read the message, like read receipts in a messaging app, with date, time and channel.