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.
anna@lab:~$ ── RootSpeak · Message from the administrator · 01/10 15:13 ── Server off on Saturday from 8 to 12. ──────────────────────────────────────── [RootSpeak] Do you confirm you have read the message? [y/N] y [RootSpeak] Confirmed. anna@lab:~$
Maintenance · 01/10 15:13
Server off on Saturday from 8 to 12.
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?
Send it once. Watch it land.
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.
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.
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
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.
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 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘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 remindbrings 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
rspeakcommand belongs to the administrators' group that already exists (sudoorwheel) 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.
Tested, not just claimed.
Tested automatically, as root with real users and sessions, on 22 distributions with systemd.
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.
One archive. Every distribution.
The same archive for all 22 tested distributions: the programs are already built, nothing to compile.
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
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 licenceCheck 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.
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.