User Manual

Version0.2.0
DateOctober 2026
Chapter 1

Welcome

1.1 · What RootSpeak is

RootSpeak — Advanced Messaging System for Linux lets whoever administers a Linux machine send a message to the users and know, for each of them, whether they have confirmed reading it. It is meant for the notices that matter: maintenance, a reboot, a new rule, an account about to expire.

The administrator writes the message in the full-screen interface of rspeak or with a command. RootSpeak delivers it wherever the user is: in terminal windows (including ssh connections), on the desktop, or at the next login if the user is not logged in at that moment. The user confirms with a click or a single letter, and the administrator sees who has confirmed, when and from where.

The path of a messageAdministratorsudo rspeak · TUI or commandsRootSpeakone mailbox per userIn the terminaltext at once, question at the promptOn the desktop“I have read it” / “Later” dialogAt the next loginfor whoever is not logged inConfirmation ✓who, when, from wherethe message list and rspeak status: who has confirmed and who has not
Figure 1.1 — A message reaches every session of the user; the first confirmation goes back to the administrator

For administrators, RootSpeak offers a single place in which to:

  • write a message and send it to one user, to a group, to everyone or only to whoever is logged in;
  • see how far each recipient has got: sent, delivered or confirmed;
  • remind whoever has not confirmed yet, revoke a mistaken message, give it an expiry;
  • find the history of every message in the system log;
  • delete old messages when they are no longer needed.
i
What a confirmation says. a confirmation is a statement by the user (“I have read it”), recorded with date, time and channel. RootSpeak cannot know whether the message was really read, and neither can any other messaging system.

1.2 · What it does, and what it does not

wall / write/etc/motd and bannersRootSpeak
Writes to the terminals of logged-in usersyesnoyes
Appears on the desktop (X11 and Wayland)nonoyes, in a dialog
Reaches users who are not logged innoyes, at every text loginyes, at the next login
Asks for a read confirmationnonoyes, for every message
Shows the message again to whoever has not confirmednonoyes, every 30 minutes
Tells the administrator who has read itnonoyes, with date, time and channel
Table 1.1 — RootSpeak and the classic Linux tools

RootSpeak, on the other hand, does not do these things, by design:

  • It never blocks anyone. No locked screen, no denied login, no disconnection: the user can always postpone and carry on working. The message comes back later.
  • It is not a chat. Users receive and confirm; they do not reply, do not write to others and have no commands to learn.
  • It does not use the network. It reaches the users of this machine, including those connected remotely with ssh, but not other machines.
  • It does not disturb automated programs. Backups, cron, copies with scp or rsync never see the RootSpeak question: it appears only in interactive shells.

1.3 · Who this manual is for

WhoWhat they do with RootSpeakChapters
Administrator of the machineInstalls RootSpeak, sends messages, follows the confirmations, revokes and reminds, changes the settings.2 - 7, 9 - 13
Whoever has to explain RootSpeak to the usersKnows what users see in the terminal and on the desktop, and how to answer their questions.8
Whoever assesses securityKnows who can use RootSpeak, who sees what and what a confirmation is worth.11
Table 1.2 — The readers of this manual

Anyone using RootSpeak for the first time can follow the guided path in chapter 4, which leads from installation to the first confirmation in a few steps. The users who receive the messages do not need to read anything: the dialog and the question explain themselves, and there is no command for them.

+
Further reading. the inner workings (message store, delivery, security) are described in the Technical Manual, installed next to this one in /usr/local/share/doc/rootspeak/.

1.4 · Conventions

ConventionMeaning
I have read itText that appears on the screen: buttons, window titles, fields, RootSpeak messages. RootSpeak speaks English, whatever the language of the user's session.
rspeak send --to marioCommands, file names and values to type exactly as shown.
Ctrl+S EnterKeys to press; the + sign means “together”.
sent delivered confirmedThe three states of a recipient, always in these colours, the same as in the TUI.
revoked expiredProperties of the message, not states of the recipients: from that moment on the message is no longer shown.
Blue Note boxInformation that helps understanding.
Green Tip boxA better or safer way to do something.
Yellow Warning boxA behaviour that may be surprising or cause data loss.
Table 1.3 — The conventions of the manual

In the examples admin is an administrator; mario, anna and luca are users of the machine server, and @developers is a group. In the dark boxes, lines starting with the prompt (admin@server:~$) are commands to type; orange lines are what RootSpeak shows to the users; red lines are errors. The TUI screenshots are real, taken from RootSpeak while running.

i
Version. this manual describes RootSpeak 0.2.0. The command rspeak version shows the installed version.
!
Always with sudo. rspeak always works as administrator (root) and asks for the sudo password, even just to show the help: this is a deliberate choice, not a bug.

1.5 · Licence

RootSpeak is freeware: it costs nothing, at home or at work, on any number of machines, also when you administer the machines of a company, a school or a customer. The terms are in the RootSpeak Freeware Licence, the file LICENSE published with the programs.

You may, free of chargeYou may not, without a written licence
use RootSpeak for anything, also as a tool in paid worksell it, or charge a fee for it
install it on any number of machines, also with your own deployment tools, and change its settingsinclude it in a product or service that is sold
copy it and give it to anyone, unchanged, with the licencemodify it, or decompile it beyond what the law allows
Table 1.4 — The licence in short
i
A written licence. to include RootSpeak in a product, or for anything else the licence does not allow, write to rootspeak@nicfio.it.
Chapter 2

Installation and first start

2.1 · Requirements

RootSpeak runs on a Linux distribution with systemd; without systemd it does not work. It is tested automatically, as root and with real users and sessions, on the current versions of Debian, Ubuntu, Fedora, RHEL and its rebuilds (CentOS Stream, Rocky Linux, AlmaLinux, Oracle Linux), openSUSE, SLES and Arch Linux: the list, with the result on each one, is in the technical manual, chapter “Tests and checks”. The desktop dialog has been tested with GNOME (Debian 13, Ubuntu 24.04, Rocky Linux 9 with SELinux), KDE Plasma (Fedora 44) and Cinnamon (the desktop of Linux Mint), on Wayland and on X11.

RequirementWhat it is for
systemdknowing who is logged in and where, and opening the dialog on the desktop
sudo and an administrators groupdeciding who may use rspeak: the group sudo on Debian and Ubuntu, wheel on the others
a shell: bash, zsh or fishthe confirmation question in terminals at every prompt; with sh, dash and ksh only at login
zenitythe “I have read it” / “Later” dialog on the desktop
notify-send (optional)the desktop notice when a confirmation could not be recorded
a 64-bit PC processor (x86-64)the programs of the archive are built for it
Table 2.1 — Requirements
DistributionPackages to install
Debian, Ubuntusudo apt install zenity libnotify-bin
Fedora, RHEL, CentOS Stream, Rocky, Alma, Oraclesudo dnf install zenity libnotify
openSUSE, SLESsudo zypper install zenity libnotify-tools
Arch Linuxsudo pacman -S zenity libnotify
Table 2.2 — The packages on each family of distributions
Installing the packages on Debian and Ubuntu
admin@server:~$ sudo apt install zenity libnotify-bin
i
Servers without a desktop. on machines without a desktop zenity and notify-send are not needed: RootSpeak uses only the terminals. The installation reports “Warning: zenity is missing” but carries on.
i
Two shells to know about. on Fedora and RHEL the login shell dash stops on a file of the distribution (/etc/profile.d/lang.sh) before reaching RootSpeak; on openSUSE the login shell must be /usr/bin/ksh93, not /usr/bin/ksh, which cannot start a login. Both are limits of the distributions, with or without RootSpeak.

2.2 · Downloading and installing

RootSpeak is free (chapter 1, “Licence”) and is downloaded from its website, rootspeak.nicfio.it: a single archive, the same for every supported distribution, with the programs already built, the installer, the settings file and the two manuals. Nothing needs to be compiled.

Installation in four stepsDownloadthe archive, from the website./install.shinstalls, with sudorspeak versiondoes it answer?rspeakthe TUI, empty
Figure 2.1 — From the download to the first start
  1. Download rootspeak-0.2.0-linux-x86_64.tar.gz and SHA256SUMS from the website into the same folder, and check that the archive arrived intact:
    admin@server:~$ sha256sum -c --ignore-missing SHA256SUMS
    rootspeak-0.2.0-linux-x86_64.tar.gz: OK
  2. Extract the archive and enter its folder:
    admin@server:~$ tar -xzf rootspeak-0.2.0-linux-x86_64.tar.gz
    admin@server:~$ cd rootspeak-0.2.0-linux-x86_64
  3. Run the installation: the script restarts itself with sudo and asks for your password. At the end it confirms “RootSpeak installed”, gives the paths of the command (usable by the sudo group) and of the manuals, and reminds you that sessions already open get the messages in the terminal at once, and the confirmation question from the next shell or the next login.
    admin@server:~/rootspeak-0.2.0-linux-x86_64$ ./install.sh
    [sudo] password for admin:
    RootSpeak installed. Command: /usr/local/bin/rspeak (usable by the sudo group).
    Manuals: /usr/local/share/doc/rootspeak/User Manual.html and Technical Manual.html
    Sessions already open get messages in the terminal at once, and the
    confirmation question from the next shell or the next login.
  4. Check that the command answers:
    admin@server:~$ rspeak version
    RootSpeak - Advanced Messaging System for Linux 0.2.0
+
Keep the folder. keep the extracted folder: ./install.sh --uninstall is run from there (“Upgrading and removing”, below). The archive also contains a short README.txt.
i
Users already logged in. users who are already logged in receive messages straight away, on the desktop too. The confirmation question in the terminal, instead, arrives from the next terminal window they open: the ones already open have not loaded RootSpeak yet.

2.3 · What gets installed

The installation puts everything in the usual Linux places. Besides these files it adds a line, marked # RootSpeak hook, at the end of /etc/bash.bashrc and, if zsh is installed, to the system zshrc: this is what makes the question appear in the desktop's terminals.

/usr/local/bin/rspeak  # the administrators' command (root:sudo, 750)
/usr/local/lib/rootspeak/  # the internal parts
├── rootspeak-user  # shows the messages and records the confirmations, as the user
├── rootspeak.bash  # bash hook
└── rootspeak.zsh  # zsh hook
/usr/local/share/doc/rootspeak/  # this manual and the technical manual
/etc/rootspeak/rootspeak.conf  # the settings (not overwritten by an upgrade)
/etc/profile.d/rootspeak.sh  # shell hook at login
/etc/fish/conf.d/rootspeak.fish  # fish hook
/etc/xdg/autostart/rootspeak-agent.desktop  # autostart on the desktop
/var/lib/rootspeak/  # messages and confirmations
├── sent/  # the reference copies (root only)
└── users/  # one mailbox per user
Figure 2.2 — The files installed by install.sh
WhereWhat it isWho uses it
/usr/local/bin/rspeakThe command. Only the administrators group can run it.administrators
/usr/local/lib/rootspeak/rootspeak-userThe helper that shows the messages and records the confirmations. It is not a command: users never launch it, it starts on its own.users' shells and desktops
/etc/rootspeak/rootspeak.confThe settings (chapter 10).everyone, read-only
/var/lib/rootspeak/The messages, the users' mailboxes, the confirmations.RootSpeak
/etc/xdg/autostart/rootspeak-agent.desktopStarts the desktop agent at every graphical login.the users' desktops
Table 2.3 — What gets installed

2.4 · The administrators

The rspeak command belongs to root and to the administrators group the machine already has: sudo on Debian and Ubuntu, wheel on Fedora and similar (failing that, admin or root). RootSpeak has no list of administrators of its own.

The command and its permissions: root and the sudo group, nobody else
admin@server:~$ stat -c '%U:%G %a %n' /usr/local/bin/rspeak
root:sudo 750 /usr/local/bin/rspeak
ToCommandWhen it takes effect
give access to RootSpeaksudo usermod -aG sudo annafrom anna's next login
take it awaysudo gpasswd -d anna sudofrom anna's next login
find out who can use itgetent group sudoimmediately
Table 2.4 — Managing the administrators
!
A single group. joining the sudo group means being able to become root on the whole machine, not only to use RootSpeak. This is intended: sending messages to all users is an administrator's task.

2.5 · First start

Right after installation it is worth doing three checks, none of which disturbs anyone.

  1. Open the built-in help: rspeak --help (chapter 9). Leave it with q.
  2. Check the list of messages: it is empty, because nothing has been sent yet.
    admin@server:~$ rspeak list
    No messages sent.
  3. Open the TUI by typing rspeak on its own: it shows “No messages sent.” and the keys at the bottom. Leave it with q.
  4. For a complete test, send a message to yourself, as in chapter 4.
+
Try it on yourself. a message sent to yourself shows in a few seconds everything the users will see: the text in the terminal, the question at the prompt, the dialog on the desktop.

2.6 · Upgrading and removing

ToCommandWhat happens
Upgradedownload and extract the new archive, then ./install.sh from its folderInstalls the new version; messages and settings are kept. The desktop agents of the previous version are closed: a new one starts with the first message or at the next login.
Remove RootSpeak./install.sh --uninstallRemoves the command, the hooks and the manuals; messages (/var/lib/rootspeak) and settings (/etc/rootspeak) are kept, for a possible reinstallation.
Remove everything./install.sh --purgeAs above, and in addition deletes the messages and the settings.
Table 2.5 — Upgrading and removing
Removal: messages and settings stay
admin@server:~/rootspeak-0.2.0-linux-x86_64$ ./install.sh --uninstall
RootSpeak removed. Messages (/var/lib/rootspeak) and configuration (/etc/rootspeak) kept.
!
Before --purge. --purge also deletes the record of who confirmed what. If it needs to be kept, copy /var/lib/rootspeak elsewhere first. The events remain in the system log in any case.
Chapter 3

RootSpeak at a glance

3.1 · Two ways of working

RootSpeak can be used in two ways, which do exactly the same things. Typed on its own in a terminal, rspeak opens the TUI, a full-screen interface inside the terminal: the list of messages, the state of every recipient, the keys to act. Followed by a command (rspeak send, rspeak status…) it does one single thing and returns to the prompt.

The TUI and the commandsIn the TUI: rspeak, on its ownWith commands: rspeak COMMANDnwrite and sendEnterrecipients and historyrrevokemremindppurge/searchsendsendlist · status · loglist, state, historyrevokerevokeremindremindpurgepurgeversion · --helpversion, helpyou see everything, it updates itselfhandy in scripts and over sshThe same RootSpeak actionssame result, same trace in the log
Figure 3.1 — Two ways of using RootSpeak; every TUI key runs the corresponding command
SituationBetter to use
following a message while the confirmations come inthe TUI: it updates itself every 3 seconds
writing a long message calmlythe TUI, with your own editor (Ctrl+E)
sending a notice from a script or from cronrspeak send
copying the state into a report or an emailrspeak status or rspeak log
a small terminal (fewer than 80 columns or 20 lines)the commands: rspeak on its own shows the help
Table 3.1 — When to use the TUI and when the commands
i
Same commands. every TUI action runs the corresponding command and shows its answer: what you learn in one way also applies to the other.

3.2 · How the TUI is laid out

The main screen of the TUI is the list of sent messages. All RootSpeak screens have the same frame: the title at the top left, the time of the last update at the top right, the content in the middle and, at the bottom, the line of keys that can be pressed at that moment.

┌─ RootSpeak · sent messages ──────────────updated at 10:49:29 ─┐ ID DATE MESSAGERECIPIENTS 3 01/10 10:49 Your account expires…> 2 01/10 10:49 Maintenance · On Satur… 1 01/10 10:49 Server update · Tonigh…1 delivered4 confirmed · 3 delivered · 1 sentall confirmed (3)█ confirmed ▒ delivered ░ sent├────────────────────────────────────────────────────Enter open n new r revoke m remind p purge / search ? keys q quit1234567
Figure 3.2 — The parts of the main screen; the real screenshot follows below
PartWhat it shows
1TitleWhere you are: RootSpeak · sent messages, Message 2 · Maintenance, New message.
2UpdateThe time at which RootSpeak last reread the message store. It changes every 3 seconds: if it stops, the TUI is no longer receiving updates.
3HeaderThe columns: message number, date and time of sending, title and first line of the text, recipients.
4Selected lineIn reverse video and preceded by >: the message that Enter, r and m act on. Move it with ↑ ↓.
5RecipientsThe three-colour bar and the phrase with the recipients in the three states (chapter 3.3).
6LegendThe colours of the bar; during a search, also the text searched for.
7KeysWhat can be done now. It changes with the screen and with the confirmation windows.
Table 3.2 — The parts of the screen
┌─ 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                                  │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 3.3 — The list of messages: real TUI screenshot, in a 116-column terminal
  • The messages are sorted newest first. [revoked] and [expired] before the text mark those that are no longer shown to the users.
  • In a terminal narrower than 110 columns the phrase gives way to just the count of confirmations out of the total, for example 4/8; the bar stays.
  • If the terminal becomes smaller than 80 columns or 20 lines while the TUI is open, the TUI closes and the terminal returns to how it was.
  • With the NO_COLOR variable the TUI has no colours (chapter 10.3).

3.3 · The three states of a recipient

There is only one concept you need to know to use RootSpeak: every recipient of every message is in one of three states. There are no others.

Sent, delivered, confirmedsentthe message has leftdeliveredcopy in their mailboxconfirmed ✓“I have read it” or ycopy writtenthe user confirmspostpones (“Later”, n): stays deliveredProperties of the message, not states of the recipientsrevoked: rspeak revoke, key rexpired: the --expires time has passedfor each recipient, exactly one of the three states
Figure 3.4 — The three states of a recipient; revocation and expiry stop the message without changing the states. The user confirms with “I have read it” or y, and postpones with “Later” or n
StateWhat it meansWhat RootSpeak does
sentThe message has left, but the copy is not yet in the user's mailbox: usually because it could not be written, for example with a full disk.Retries by itself the next time rspeak is used: a command such as list or status, or opening the TUI.
deliveredThe copy is in the user's mailbox: they see it at once if logged in, otherwise at the next login. They have not confirmed yet.Shows the message to them again until they confirm; if they postpone, it waits 30 minutes.
confirmedThe user has stated that they have read it, with a click or by answering y.No longer shows it to them, in any session. Records date, time and channel.
Table 3.3 — The three states of a recipient

revoked and expired, on the other hand, are properties of the message: from that moment on the message is no longer shown or shown again to anyone, and whoever had not confirmed stays delivered, with the indication “not confirmed (revoked)” or “not confirmed (expired)”.

The bar and the phrase6 marks: confirmed5: delivered1: sent4 confirmed · 3 delivered · 1 sent8 recipients, 12 marks: each state takes its share; whoever is still “sent” always gets at least one mark
Figure 3.5 — How to read the bar of a message with 8 recipients

The list summarises each message with its recipients in the three states, in two forms: the bar of 12 coloured marks and the phrase, for example “4 confirmed · 3 delivered · 1 sent”. When everyone has confirmed, the phrase becomes “all confirmed (8)” and the bar is entirely green.

+
What about those who postpone? whoever has postponed is not in a separate state: they stay delivered. The message details say when they last postponed (chapter 6.2).

3.4 · Map of commands and keys

I want to…In the TUIWith a commandWhere
send a messagen, then Ctrl+Srspeak send --to … "text"chapter 5
see all messagesthe main screenrspeak listchapter 6.1
see who has confirmedEnter on the messagerspeak status IDchapter 6.2
see the history of a messageEnter, then Tabrspeak log IDchapter 6.4
find a message/—chapter 6.6
revoke a messagerrspeak revoke IDchapter 7.1
remind whoever has not confirmedmrspeak remind IDchapter 7.2
delete old messagesprspeak purge 90dchapter 7.3
the list of keys?—chapter 3.4
the complete help—rspeak --helpchapter 9
quitq—
Table 3.4 — All of RootSpeak in one table

In the TUI the ? key opens the list of keys over the message list; any key closes it. The complete list of commands is in rspeak --help.

┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 12:49:09 ─┐
│                                                                                                                  │
│   ID  DATE         MESSAGE                              RECIPIENTS                                               │
│ >  3  01/10 12:49  Your account expires on Friday: ple  ▒▒▒▒▒▒▒▒▒▒▒▒  1 delivered                                │
│    2  01/10 12:49  Maintenance · On Saturday from 8 am  ██████▒▒▒▒▒▒  1 confirmed · 1 delivered                  │
│    1  01/10 12:49  Server update · Tonight at 11 pm th  ████████████  all confirmed (2)                          │
│                          ┌─ Keys ─────────────────────────────────────────────────────┐                          │
│                          │                                                            │                          │
│                          │  ↑ ↓ PgUp PgDn   move through the list                     │                          │
│                          │  Enter           open the message: recipients and history  │                          │
│                          │  n               write and send a new message              │                          │
│                          │  r               revoke the selected message               │                          │
│                          │  m               remind whoever has not confirmed          │                          │
│                          │  p               delete old messages                       │                          │
│                          │  /               search the messages by text or title      │                          │
│                          │  q               quit                                      │                          │
│                          │                                                            │                          │
│                          │  The list updates by itself every 3 seconds.               │                          │
│                          │  The complete guide: rspeak --help.                        │                          │
│                          │                                                            │                          │
│                          │  any key to continue                                       │                          │
│                          └────────────────────────────────────────────────────────────┘                          │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent                                                                               │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ any key to continue                                                                                              │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 3.6 — The list of TUI keys (key ?)
Chapter 4

First steps

4.1 · The path

This path leads from a freshly installed RootSpeak to the first confirmation, in four stages. The recipient of the first message can be the administrator themselves: that way you see with your own eyes what the users receive. Each stage refers to the chapter that explains it in detail.

From nothing to the first confirmation1. Installthe archive, ./install.sh2. Write and sendrspeak, key n3. The user confirmsdialog or terminal4. CheckEnter on the message
Figure 4.1 — The four stages of the first steps
StageWhat you doChapter
1Install RootSpeak and check that it answerschapter 2
2Write the message in the TUI (or with rspeak send) and send itchapter 5
3The recipient sees the dialog or the question and confirmschapter 8
4Open the message and see who has confirmedchapter 6
Table 4.1 — The path

4.2 · Sending the first message

The simplest way is the TUI. Here the message goes to Mario; to try it on yourself, just type your own name.

  1. Open a terminal and type rspeak. When prompted, enter your password: rspeak always asks for it, because it works as administrator.
    admin@server:~$ rspeak
    [sudo] password for admin:
  2. In the list of messages press n: the New message screen opens.
  3. In the To field type mario and press Tab: on the right 1 recipient appears.
  4. In the Title field type Maintenance; leave Expires empty and move to Text with Tab.
  5. Type the text: On Saturday from 8 am to 12 noon the server will be off. Start a new line with Enter.
  6. Press Ctrl+S. The summary Send the message? appears: press y to confirm.
  7. The Message sent window reports the answer of RootSpeak, for example “Message 1 sent to 1 user.” Any key takes you back to the list, where the message is at the top.

The same message, with a single command (same text, same reply):

admin@server:~$ rspeak send --to mario --title Maintenance "On Saturday from 8 am to 12 noon the server will be off."
Message 1 sent to 1 user.
+
The number. the message number (here 1) is needed for the commands status, log, revoke and remind. In the TUI it is not needed: you pick the message from the list.

4.3 · What the user sees

If Mario is logged in, the message reaches him at once, in all his sessions. On the desktop this dialog appears, above the other windows:

Figure 4.2 — The confirmation dialog on Mario's desktop: the title and the text, and the buttons “Later” and “I have read it”

In terminal windows the text appears at once, under the heading “RootSpeak · Message from the administrator”; at the next prompt RootSpeak asks for the confirmation, and after the answer y replies “[RootSpeak] Confirmed.”:

In Mario's terminal
── RootSpeak · Message from the administrator · Maintenance · 01/10 10:49 ──
On Saturday from 8 am to 12 noon the server will be off.
────────────────────────────────────────
[RootSpeak] Do you confirm you have read the message? [y/N] y
[RootSpeak] Confirmed.
mario@server:~$
i
One confirmation is enough. confirming once, anywhere, is enough: the dialog closes by itself if Mario answers in the terminal, and vice versa. If Mario is not logged in, he will find the message at his next login. chapter 8 describes everything the users see.

4.4 · Seeing who has read it

In the list the message shows its recipients in the three states: before Mario logs in “1 delivered”, after his confirmation “all confirmed (1)”. With Enter you open the message and see the state of every recipient, with date, time and channel of the confirmation.

The same, with a command
admin@server:~$ rspeak status 1
Message 1 · Maintenance · 01/10 10:49 · from admin
  │ On Saturday from 8 am to 12 noon the server will be off.

USER             STATE
mario            confirmed on 01/10 10:50 (desktop)
If the state is…It meansWhat to do
deliveredMario has the copy but has not confirmed yetwait, or remind him (chapter 7.2)
confirmed (desktop)he pressed I have read it in the dialognothing: it is done
confirmed (terminal pts/1)he answered y in a terminal windownothing: it is done
Table 4.2 — Reading the result
+
And then? the TUI updates itself every 3 seconds: keeping it open on the message, you see the confirmations arrive one after another.
Chapter 5

Writing and sending messages

5.1 · Choosing the recipients

The To field of the TUI and the --to option of the commands say who receives the message. Several recipients can be given, separated by commas and without spaces: anyone who appears more than once, for example because they belong to two groups, receives the message only once.

You writeWho receives itExample
a namethat user, even if not logged inmario
several nameseach of themmario,anna,luca
@groupthe members of a system group, including those who have it as their primary group@developers
allevery user of the machine, logged in or not: UID of 1000 or above (the limits in /etc/login.defs) and a real shell, that is, not nologin or falseall
onlineamong the users of all, whoever is logged in right now, in any way (desktop, console, ssh)online
a combinationthe union of all of themmario,@developers
Table 5.1 — How to specify the recipients
Who receives the messageall: every user of the machinewith a UID of 1000 or above and a real shell; no root, no service accountsonlinewhoever is logged in now@developersthe members of a grouplogged in andin the groupmarioone user
Figure 5.1 — Recipients can be combined: --to mario,@developers sends to Mario and to the whole group
i
Good to know. a group given with @ includes all its members, even the accounts that all leaves out. In the TUI, when you move from the To field to the next one, the number of recipients appears on the right, or an error if a name does not exist: this is checked before sending.
!
online is a snapshot. online is evaluated at the moment of sending: someone who logs in a minute later does not receive the message. For a notice that must reach everyone sooner or later, use all.

5.2 · Title and text

The title is optional and fits on one line: it appears at the top of the message in the terminal, in the desktop dialog and in the TUI list. The text can have several lines.

HowWhereExample
typed in the TUIthe Text field; Enter starts a new line—
typed in your own editorTUI, Ctrl+E (chapter 5.5)—
in quotes, at the end of the commandrspeak sendrspeak send --to mario "Message text"
from a filerspeak send --filerspeak send --to @developers --file notice.txt
from another commandrspeak send, with no text and no --filedf -h | rspeak send --to anna
typed on the spotrspeak send in a terminal: type the text, then Ctrl+Drspeak send --to mario
Table 5.2 — The ways to supply the text
notice.txt, sent below to everyone with a title
From Monday 19 October passwords expire every 90 days.
At the first login after the expiry the system will ask you to change it.
For problems: IT office, extension 214.
admin@server:~$ rspeak send --to all --title "New rule for passwords" --file notice.txt
Message 3 sent to 24 users.
RuleWhy
at most 64 KB of text (65536 bytes: about 30 pages)beyond that, the desktop dialog could not show it; RootSpeak refuses with “message too long”. The TUI shows the count below the text, in red when the limit is exceeded
the text cannot be empty or made only of spacesRootSpeak refuses with “empty message”
blank lines at the end of the text are removedthe message ends with the last line written
the title fits on one lineline breaks and tabs in the title become spaces
invisible characters and colour codes are removeda message cannot disrupt the users' terminals (chapter 11.4)
Table 5.3 — The rules for the text
i
Order matters. in commands, the options must be written before the text: everything after the first word that is not an option is part of the message.

5.3 · The expiry

Every message asks for confirmation. For notices that are only valid for a short time, such as “the service restarts in 5 minutes”, you add an expiry: once that moment has passed the message is no longer shown or asked again, and whoever has not seen it in time will never see it.

Expiry or notStops mattering after a while?expiry: 15m, 2h, 3d…afterwards it is no longer shown or asked againno expirystays until everyone confirmsyesnoin both cases confirmation is requested
Figure 5.2 — The expiry is for notices that are only valid for a short time
You write (the Expires field or --expires)The message expires
30min 30 minutes
2hin 2 hours
3din 3 days
2026-10-04 12:00Sunday 4 October 2026 at 12:00 (in the command, in quotes: --expires "2026-10-04 12:00")
tomorrow 18:00tomorrow at 18:00
Table 5.4 — How to specify the expiry. In the example below the message expires after 15 minutes
admin@server:~$ rspeak send --to online --expires 15m "The web service restarts at 13:00."
Message 2 sent to 3 users.
  • On expiry, a dialog that is still open closes by itself, and a question waiting in the terminal is interrupted with “[RootSpeak] The message has expired.”
  • A confirmation given after the expiry does not count: the recipient stays delivered, “not confirmed (expired)”.
  • In the list the message appears with [expired] in front; the detail view says when it expired.
i
Dates. dates in words are read by the system's date command, which understands them in English only ("saturday 12:00", "tomorrow 18:00"). The year-month-day hours:minutes format always works. A date already in the past is refused with “the expiry is already in the past”.

5.4 · Writing in the TUI

In the TUI the n key opens the New message screen: three one-line fields and the text box below them.

┌─ New message ────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                                                                                  │
│  To         [ @developers                                                              ]  2 recipients           │
│  Title      [ Maintenance                                                              ]  optional, one line     │
│  Expires    [ 2d                                                                       ]  optional: 30m, 2h, 3d  │
│  Text       ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐ │
│             │ On Saturday from 8 am to 12 noon the server will be off.                                         │ │
│             │ Please save your work by Friday evening.                                                         │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             └──────────────────────────────────────────────────────────────────────────────────────────────────┘ │
│             97 of 65536 bytes                                                                                    │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Tab next field   Ctrl+E open in the editor   Ctrl+S send   Esc cancel                                            │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 5.3 — The New message screen (real screenshot)
FieldWhat to writeRequired
Tothe recipients, as in chapter 5.1; on the right, when you leave the field, how many there areyes
Titleone lineno
Expires30m, 2h, 3d or a date, as in chapter 5.3no
Textthe message, on several lines; below it, the count, for example “97 of 65536 bytes”yes
Table 5.5 — The fields of a new message
KeysWhat they do
Tab / Shift+Tabnext / previous field, including the text
Enter or ↓ in a fieldmoves to the field below
Enter in the textstarts a new line
← → ↑ ↓, Home Endmove the cursor
⌫ Deldelete a character
Ctrl+Eopens the text in your own editor (chapter 5.5)
Ctrl+Ssends, after the summary
Escdiscards; if something has already been written it asks for confirmation: Discard the message?
Table 5.6 — The keys of a new message

Ctrl+S shows a summary with the recipients (and how many there are), title, expiry and length of the text. y sends, n or Esc returns to the message without losing anything.

┌─ New message ────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                                                                                  │
│  To         [ @developers                                                              ]  2 recipients           │
│  Title      [ Maintenance                                                              ]  optional, one line     │
│  Expires    [ 2d                                                                       ]  optional: 30m, 2h, 3d  │
│  Text       ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐ │
│             │ On Saturday from 8 am to 12 noon the server will be off.                                         │ │
│             │ Please save your work by Friday evening.                                                         │ │
│             │                                                                                                  │ │
│                           ┌─ Send the message? ──────────────────────────────────────┐                           │
│                           │                                                          │                           │
│                           │  To: @developers (2 recipients)                          │                           │
│                           │  Title: Maintenance                                      │                           │
│                           │  Expires: 2d                                             │                           │
│                           │  Text: 97 bytes                                          │                           │
│                           │                                                          │                           │
│                           │   y  Confirm       n  Cancel                             │                           │
│                           └──────────────────────────────────────────────────────────┘                           │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             │                                                                                                  │ │
│             └──────────────────────────────────────────────────────────────────────────────────────────────────┘ │
│             97 of 65536 bytes                                                                                    │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ y confirm   n or Esc cancel                                                                                      │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 5.4 — The summary before sending
  • If sending succeeds, Message sent appears with the reply from RootSpeak; any key returns to the list.
  • If something goes wrong, Sending result appears with the reason: a wrong recipient (for example “rspeak: no such user: mrio”) stops the sending, and any key returns to the message so it can be corrected; a copy that could not be written is listed, and RootSpeak retries by itself at the next command.

5.5 · Your own editor

For long texts your own editor is more convenient. Ctrl+E closes the TUI for a moment and opens the text written so far in the editor; when you save and quit you return to the TUI with the updated text.

  1. In the new message, press Ctrl+E.
  2. Write or paste the text in the editor, save and quit (with nano: Ctrl+O, Enter, Ctrl+X).
  3. Check the text in the box and send with Ctrl+S.
Editor usedWhen
the one set in VISUAL or, if that is missing, in EDITORif sudo keeps these variables (chapter 10.3)
nanootherwise
viif nano is not installed
Table 5.7 — Which editor opens
i
Security. the editor runs with the administrator's identity, not as root: it opens a temporary file that belongs to the administrator and that RootSpeak deletes on return.

5.6 · What happens when sending

When a message is sent, RootSpeak saves it, puts a copy in each recipient's mailbox and makes it appear at once wherever the user is logged in. It all happens in a few moments.

Sending step by stepAdministratorCtrl+S or rspeak sendRootSpeakmessage storeMario's mailbox/var/lib/rootspeak/usersMario's sessionsterminals and desktopmessage and recipientsreference copy, number 3copy for Mario (as Mario)delivered text in every open terminalwakes the desktop agent: dialog“Message 3 sent to 1 user.”later, at the next prompt or at login confirmation question, until confirmed
Figure 5.5 — What happens when a message is sent to Mario
Reply from RootSpeakWhat it means
Message 3 sent to 24 users.All the copies are in the mailboxes: every recipient is delivered.
Message 3 delivered to 23 of 24 recipients.
rspeak: message 3 not delivered to: sara (see the log; the next rspeak command will retry)
A copy could not be written, usually because the disk is full: Sara is sent. RootSpeak retries by itself (chapter 12.4).
Message 3 revoked while sending: delivery stopped.Another administrator revoked it while it was being sent.
rspeak: …An error: the message was not sent (chapter 12.1).
Table 5.8 — The replies when sending

The text written to the terminals when the message is sent appears even if the user is working; the confirmation question, instead, only arrives when the user is back at the prompt, so as not to interrupt a command halfway.

5.7 · Ready-made commands

I want to…Command
notify a user and know whether they have read itrspeak send --to anna "Your account expires on Friday."
warn whoever is logged in that I am about to rebootrspeak send --to online --expires 15m "Reboot at 13:00: save your work."
tell everyone about a new rulerspeak send --to all --title "Password" --file rule.txt
write to a work grouprspeak send --to @developers --expires 2d "Deadline: Thursday at 18:00."
write to two people and a grouprspeak send --to mario,anna,@interns "Meeting at 11."
send the output of a commanddf -h /home | rspeak send --to anna --title "Disk space"
send a notice from cron, every Monday at 8:000 8 * * 1 /usr/local/bin/rspeak send --to all --file /etc/weekly-notice.txt
Table 5.9 — Ready-made commands for the most common cases
+
Automatic sending. in cron (root's crontab, sudo crontab -e) rspeak is already root and does not ask for the password. It is best to give the full path of the command.
Chapter 6

Following the confirmations

6.1 · The list of messages

The main screen of the TUI (chapter 3.2) and the rspeak list command show all the messages sent, each summarised by its recipients in the three states. The TUI puts the most recent first and updates by itself; rspeak list lists them from the oldest, once.

The same four messages as in the screenshot in chapter 3
admin@server:~$ rspeak list
ID    DATE         TEXT                                      RECIPIENTS
1     01/10 10:49  Tonight at 11 pm the mail server is upda  all confirmed (3)
2     01/10 10:49  On Saturday from 8 am to 12 noon the ser  4 confirmed · 3 delivered · 1 sent
3     01/10 10:49  Your account expires on Friday: please d  1 delivered
4     01/10 10:49  [revoked] Reboot at 1 pm.                 2 delivered
ColumnIn the TUIIn rspeak list
IDthe message numberthe same: it is used for status, log, revoke and remind
DATEday and time of sending (day/month hours:minutes)the same
MESSAGE / TEXTtitle in bold, then the first line of the textthe first line of the text, cut at 40 characters
RECIPIENTSthree-colour bar and phrase (below 110 columns, confirmations out of the total)the phrase
Table 6.1 — The columns of the list
Mark in front of the textMeaning
[revoked]the message has been revoked (chapter 7.1): it is no longer shown
[expired]the expiry has passed: it is no longer shown
[send cancelled: interrupted before it was saved]only in rspeak list: a sending stopped before the message was even saved (chapter 12.4)
Table 6.2 — The marks in the list
i
Recipients. the phrase counts recipients, not the people who have seen the message: “3 delivered” means three people with the copy in their mailbox who have not confirmed yet, logged in or not.

6.2 · The state of each recipient

Pressing Enter on the list opens the selected message: at the top title, date, sender, expiry and any revocation, then the first lines of the text, then two tabs. The Recipients tab shows the state of each user, with the colours of the bar.

┌─ Message 2 · Maintenance ────────────────────────────────────────────────────────────────── updated at 11:20:20 ─┐
│  Maintenance · 01/10 11:20 · from root                                                                           │
│  │ On Saturday from 8 am to 12 noon the server will be off for disk maintenance.                                 │
│  │ Please save your work by Friday evening.                                                                      │
│                                                                                                                  │
│   Recipients (8)   History     ██████▒▒▒▒▒░  4 confirmed · 3 delivered · 1 sent                                  │
│                                                                                                                  │
│  USER          STATE                                                                                             │
│  admin         confirmed on 01/10 11:20 (terminal pts/0)                                                         │
│  anna          confirmed on 01/10 11:20 (desktop)                                                                │
│  dario         sent, not delivered: the copy could not be written (see the log; the next rspeak command will ret │
│  fabio         confirmed on 01/10 11:20 (desktop)                                                                │
│  kora          delivered, postponed on 01/10 11:20                                                               │
│  luca          delivered                                                                                         │
│  mario         delivered, postponed on 01/10 11:20                                                               │
│  zeno          confirmed on 01/10 11:20 (terminal pts/2)                                                         │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Tab recipients/history   ↑/↓ scroll   m remind   r revoke   Esc back                                             │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 6.1 — A message opened in the TUI: the state of each recipient

The same list, for one message at a time, is obtained with rspeak status followed by the number:

The state of the recipients with a command; each status line is explained in the table below
admin@server:~$ rspeak status 2
Message 2 · Maintenance · 01/10 10:49 · from root
  │ On Saturday from 8 am to 12 noon the server will be off for disk maintenance.
  │ Please save your work by Friday evening.

USER             STATE
admin            confirmed on 01/10 10:49 (terminal pts/0)
anna             confirmed on 01/10 10:49 (desktop)
dario            sent, not delivered: the copy could not be written (see the log; the next rspeak command will retry)
fabio            confirmed on 01/10 10:49 (desktop)
kora             delivered, postponed on 01/10 10:49
luca             delivered
mario            delivered, postponed on 01/10 10:49
zeno             confirmed on 01/10 10:49 (terminal pts/2)
Status lineStateWhat it means
sent, not deliveredsentthe copy is not yet in the mailbox: RootSpeak retries
sent, not delivered: the copy could not be written (see the log; the next rspeak command will retry)sentthe sending ran into an error for this user, usually a full disk
delivereddeliveredhas the copy; has not confirmed yet
delivered, written to 2 terminalsdeliveredwas logged in when the message was sent, and the text appeared in two terminal windows
delivered, postponed on 01/10 10:49deliveredanswered “Later” or n; the time is that of the last postponement
delivered, not confirmed (revoked)deliveredthe message was revoked before this user confirmed
delivered, not confirmed (expired)deliveredthe message expired before this user confirmed
delivered, not confirmed (expired; confirmation arrived after the expiry)deliveredconfirmed, but too late: the confirmation does not count
confirmed on 01/10 10:49 (desktop)confirmedpressed “I have read it” in the dialog
confirmed on 01/10 10:49 (terminal pts/2)confirmedanswered y in a terminal window or in an ssh connection (pts)
confirmed on 01/10 10:49 (terminal tty3)confirmedanswered y on a console of the machine
Table 6.3 — The status lines of a recipient

Above the list, rspeak status writes REVOKED on … if the message has been revoked and EXPIRED if the expiry has passed. In the TUI the same information is in the line at the top, in red for a revocation.

+
Message keys. in the Recipients tab you scroll with ↑ ↓ and PgUp PgDn; m reminds and r revokes this very message; Esc returns to the list.

6.3 · The life of a message

Every message has a history made of events: the sending, the delivery to each recipient, the postponements, the reminders, the confirmations, a possible revocation. Events change the state of a recipient at only two points: when the copy arrives in the mailbox and when the user confirms.

States and events16:5517:0217:3217:4017:41sentrspeak senddeliveredcopy in the mailboxpostponedstays deliveredremindedrspeak remindconfirmed“I have read it”There are only three states: postponing and reminding are eventsthat stay in the log, and the state remains “delivered” until the confirmation.
Figure 6.2 — The life of a message for one recipient, from sending to confirmation
EventWho causes itEffect on the recipient's state
sendingthe administratoreveryone sent for an instant
deliveryRootSpeaksent → delivered
postponementthe user: “Later” or nnone: stays delivered
reminderthe administrator (m, rspeak remind)none: stays delivered, but is asked again immediately
confirmationthe user: “I have read it” or ydelivered → confirmed
revocationthe administrator (r, rspeak revoke)none; the message becomes revoked and is no longer shown
expirytimenone; the message becomes expired and is no longer shown
Table 6.4 — Events and states
!
No going back. a confirmation is final: it cannot be undone, neither from the TUI nor from the commands. To ask everyone again, send a new message.

6.4 · The history of a message

The message's History tab, opened with Tab, lists the events of the message taken from the system log, oldest first, with date and time to the second.

┌─ Message 2 · Maintenance ────────────────────────────────────────────────────────────────── updated at 11:20:26 ─┐
│  Maintenance · 01/10 11:20 · from root                                                                           │
│  │ On Saturday from 8 am to 12 noon the server will be off for disk maintenance.                                 │
│  │ Please save your work by Friday evening.                                                                      │
│                                                                                                                  │
│   Recipients (8)   History     ██████▒▒▒▒▒░  4 confirmed · 3 delivered · 1 sent                                  │
│                                                                                                                  │
│  2026-10-01 11:20:19  message 2 delivered to admin (terminals written: 0)                                        │
│  2026-10-01 11:20:19  message 2 delivered to anna (terminals written: 0)                                         │
│  2026-10-01 11:20:19  message 2: ERROR, copy for dario not written                                               │
│  2026-10-01 11:20:19  message 2 delivered to fabio (terminals written: 0)                                        │
│  2026-10-01 11:20:19  message 2 delivered to kora (terminals written: 0)                                         │
│  2026-10-01 11:20:19  message 2 delivered to luca (terminals written: 0)                                         │
│  2026-10-01 11:20:19  message 2 delivered to mario (terminals written: 0)                                        │
│  2026-10-01 11:20:19  message 2 delivered to zeno (terminals written: 0)                                         │
│  2026-10-01 11:20:19  message 2 sent by root to: admin anna dario fabio kora luca mario zeno                     │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                            
Figure 6.3 — The history of a message in the TUI

With a command, the same history is read with rspeak log:

The history with a command; each kind of line is explained in the table below
admin@server:~$ rspeak log 2
Message 2 · Maintenance · 01/10 10:49
2026-10-01 10:49:29  message 2 delivered to admin (terminals written: 0)
2026-10-01 10:49:29  message 2 delivered to anna (terminals written: 0)
2026-10-01 10:49:29  message 2: ERROR, copy for dario not written
2026-10-01 10:49:29  message 2 delivered to mario (terminals written: 0)
2026-10-01 10:49:29  message 2 sent by root to: admin anna dario fabio kora luca mario zeno
2026-10-01 10:49:42  user anna: confirmed reading message 2 (desktop)
2026-10-01 10:50:03  user mario: postponed message 2 (terminal)
2026-10-01 10:56:36  message 2: 3 recipients reminded by admin
LineWhen it appears
message N delivered to U (terminals written: K)for each copy that reached a mailbox; K is the number of terminal windows in which the text appeared when it was sent
message N sent by A to: …at the end of each sending, with the list of recipients
message N: ERROR, copy for U not writtenwhen a delivery fails
message N delivered to U (recovery)when RootSpeak completes a delivery that had been left behind
user U: postponed message N (terminal) or (desktop)when the user postpones
user U: confirmed reading message N (channel)on confirmation
user U: ERROR, confirmation of message N not recorded (…)when the confirmation could not be saved, for example with a full disk
message N: K recipients reminded by Aat each reminder
message N revoked by Aon revocation
Table 6.5 — The lines of the history
i
History and state. the history comes from the system log, which the machine may rotate and delete after a while according to its settings. The state of the recipients, on the other hand, comes from the RootSpeak message store and remains until the message is deleted.

6.5 · The system log

Every event is also written to the machine's system log, with the tag rspeak. It is the trail to use if someone asks “who sent what, and when”, even for messages that have already been deleted.

The system log: the same lines as in the history above
admin@server:~$ sudo journalctl -t rspeak --since today
Oct 01 10:49:29 server rspeak[20914]: message 2 delivered to anna (terminals written: 0)
Oct 01 10:49:29 server rspeak[20914]: message 2 sent by root to: admin anna dario fabio kora luca mario zeno
Oct 01 10:49:42 server rspeak[21310]: user anna: confirmed reading message 2 (desktop)
To see…Command
all of today's RootSpeak eventssudo journalctl -t rspeak --since today
the events of the last hoursudo journalctl -t rspeak --since "1 hour ago"
the events as they arrivesudo journalctl -t rspeak -f
the history of one message, neatly orderedrspeak log 2
Table 6.6 — Reading the log
  • User events (postponements, confirmations) are written by the users themselves: rspeak log checks who wrote them and flags suspicious ones (chapter 11.5).
  • Deleting with rspeak purge removes the message from the message store, but its events remain in the log.

6.6 · Searching for a message

When there are many messages, the / key of the TUI shows only those that contain a given text, searched in the title and in the whole message, ignoring upper and lower case.

┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 12:49:16 ─┐
│                                                                                                                  │
│   ID  DATE         MESSAGE                              RECIPIENTS                                               │
│    3  01/10 12:49  Your account expires on Friday: ple  ▒▒▒▒▒▒▒▒▒▒▒▒  1 delivered                                │
│ >  2  01/10 12:49  Maintenance · On Saturday from 8 am  ██████▒▒▒▒▒▒  1 confirmed · 1 delivered                  │
│    1  01/10 12:49  Server update · Tonight at 11 pm th  ████████████  all confirmed (2)                          │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                           ┌─ Search ─────────────────────────────────────────────────┐                           │
│                           │                                                          │                           │
│                           │  Show only the messages containing:                      │                           │
│                           │                                                          │                           │
│                           │  [ server  ]                                             │                           │
│                           │                                                          │                           │
│                           │                                                          │                           │
│                           └──────────────────────────────────────────────────────────┘                           │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent                                                                               │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Enter confirm   Esc cancel                                                                                       │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 6.4 — Searching: type the text and press Enter
┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 12:49:20 ─┐
│                                                                                                                  │
│   ID  DATE         MESSAGE                              RECIPIENTS                                               │
│ >  2  01/10 12:49  Maintenance · On Saturday from 8 am  ██████▒▒▒▒▒▒  1 confirmed · 1 delivered                  │
│    1  01/10 12:49  Server update · Tonight at 11 pm th  ████████████  all confirmed (2)                          │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent      search: «server» (Esc to clear)                                          │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Enter open   n new   r revoke   m remind   p purge   / search   ? keys   q quit                                  │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 6.5 — The result: the searched text at the bottom right
KeyWhat it does
/opens the search; if there already was one, offers it again for editing
Enterapplies the search
Esc in the search dialogleaves the list as it was
Esc in the listclears the search and shows all the messages again
Table 6.7 — The search keys
i
No results. if no message contains the text, the list says “No message contains the search text.” Accented letters must be typed in the same upper or lower case as in the message.
Chapter 7

Revoking, reminding, cleaning up

7.1 · Revoking a message

A message sent by mistake, or no longer valid, is revoked: in the TUI with r on the selected message (in the list or in the open message), from the command line with rspeak revoke. Before revoking, the TUI always asks for confirmation.

┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 12:49:09 ─┐
│                                                                                                                  │
│   ID  DATE         MESSAGE                              RECIPIENTS                                               │
│    3  01/10 12:49  Your account expires on Friday: ple  ▒▒▒▒▒▒▒▒▒▒▒▒  1 delivered                                │
│ >  2  01/10 12:49  Maintenance · On Saturday from 8 am  ██████▒▒▒▒▒▒  1 confirmed · 1 delivered                  │
│    1  01/10 12:49  Server update · Tonight at 11 pm th  ████████████  all confirmed (2)                          │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                           ┌─ Revoke message 2? ──────────────────────────────────────┐                           │
│                           │                                                          │                           │
│                           │  «Maintenance» · 1 confirmed · 1 delivered               │                           │
│                           │                                                          │                           │
│                           │  Whoever has not seen it yet will not see it;            │                           │
│                           │  open dialogs and questions close by themselves.         │                           │
│                           │                                                          │                           │
│                           │   y  Confirm       n  Cancel                             │                           │
│                           └──────────────────────────────────────────────────────────┘                           │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent                                                                               │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ y confirm   n or Esc cancel                                                                                      │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 7.1 — The revocation confirmation: title and recipients in the three states
With a command
admin@server:~$ rspeak revoke 4
Message 4 revoked.
RevocationAdministratorr key or rspeak revokeRootSpeakmessage storeAnnadialog openLucanot logged in yetrevokes message 4marks the message as revokedremoves the copy from Luca's mailboxremoves the copy; the dialog closes by itself“Message 4 revoked.”later Luca logs in: sees nothing
Figure 7.2 — What happens when a message is revoked
WhoWhat happens
whoever has not seen it yet (not logged in)will never see it: the copy disappears from their mailbox
whoever has a confirmation dialog openthe dialog closes by itself within a second
whoever has the question in the terminalthe question is interrupted with “[RootSpeak] The administrator has revoked the message.”
whoever had already confirmedstays confirmed: confirmations already received count
whoever confirms after the revocationthe confirmation does not count: stays delivered, “not confirmed (revoked)”
the administratorin the list the message has [revoked] in front; rspeak status writes REVOKED on …
Table 7.1 — The effects of revocation
!
Text already written stays. the text that already appeared in the terminals when the message was sent cannot be erased: it is already on the user's screen. Revocation only stops the confirmation requests and the dialogs.
i
Revocation during sending. if the message is still being sent to many recipients, the revocation waits a moment and stops the delivery at the next recipient; whoever already has the copy loses it. If some mailbox cannot be reached, RootSpeak says so (“some copies could not be removed from the mailboxes”) and retries by itself.

7.2 · Reminding those who have not confirmed

Whoever postponed sees the message again after 30 minutes. If it is needed sooner, send a reminder: in the TUI with m, from the command line with rspeak remind. The question comes back at the next prompt and the dialog reappears at once on the desktop, even if the user had just postponed it.

┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 11:20:26 ─┐
│                                                                                                                  │
│   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)                          │
│                                                                                                                  │
│                                                                                                                  │
│                           ┌─ Remind message 2? ──────────────────────────────────────┐                           │
│                           │                                                          │                           │
│                           │  3 recipients have not confirmed yet.                    │                           │
│                           │                                                          │                           │
│                           │  They are asked again now: at the next prompt            │                           │
│                           │  and with the dialog on the desktop.                     │                           │
│                           │                                                          │                           │
│                           │   y  Confirm       n  Cancel                             │                           │
│                           └──────────────────────────────────────────────────────────┘                           │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent                                                                               │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ y confirm   n or Esc cancel                                                                                      │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 7.3 — The reminder confirmation, with how many people it concerns
With a command
admin@server:~$ rspeak remind 2
Message 2: 3 recipients reminded.
RecipientReminded?
delivered (has the copy, has not confirmed)yes: question at the next prompt, dialog at once
confirmedno: not disturbed
sentno: does not have the copy yet; RootSpeak retries the delivery by itself
Table 7.2 — Who receives the reminder
  • A revoked or expired message cannot be reminded: the command replies “rspeak: message 4 has been revoked: nobody to remind” or “rspeak: message 4 has expired: nobody to remind”.
  • If everyone has already confirmed, nobody is disturbed and the command says so: “Message 2: everyone has already confirmed, nobody to remind.”
  • The reminder is recorded in the message's history and in the log, together with who asked for it.
  • For users who are not logged in, a reminder changes nothing: they will see the message at their next login anyway.
+
In moderation. an occasional reminder works better than many: people who get the dialog in front of them every five minutes tend to confirm without reading.

7.3 · Deleting old messages

Messages and confirmations stay in the message store until they are deleted. Purging removes the messages sent more than a certain time ago, together with the copies and confirmations in the users' mailboxes.

  1. In the list press p: Delete old messages opens, with 90d already filled in.
  2. Change the duration if needed (90d days, 12h hours, 30m minutes) and press Enter.
  3. Read the summary Delete old messages? and confirm with y.
  4. The next dialog shows the reply from RootSpeak, for example “Deleted 12 messages older than 90d.”
┌─ RootSpeak · sent messages ──────────────────────────────────────────────────────────────── updated at 12:49:14 ─┐
│                                                                                                                  │
│   ID  DATE         MESSAGE                              RECIPIENTS                                               │
│    3  01/10 12:49  Your account expires on Friday: ple  ▒▒▒▒▒▒▒▒▒▒▒▒  1 delivered                                │
│ >  2  01/10 12:49  Maintenance · On Saturday from 8 am  ██████▒▒▒▒▒▒  1 confirmed · 1 delivered                  │
│    1  01/10 12:49  Server update · Tonight at 11 pm th  ████████████  all confirmed (2)                          │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                         ┌─ Delete old messages ────────────────────────────────────────┐                         │
│                         │                                                              │                         │
│                         │  Delete the messages sent more than (for example 90d, 12h):  │                         │
│                         │                                                              │                         │
│                         │  [ 90d  ]                                                    │                         │
│                         │                                                              │                         │
│                         │                                                              │                         │
│                         └──────────────────────────────────────────────────────────────┘                         │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│                                                                                                                  │
│ █ confirmed   ▒ delivered   ░ sent                                                                               │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Enter confirm   Esc cancel                                                                                       │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Figure 7.4 — The duration prompt
With a command
admin@server:~$ rspeak purge 90d
Deleted 12 messages older than 90d.
  • A deleted message disappears from the list and from rspeak status; if someone had not confirmed it yet, they will no longer be asked.
  • A sending still in progress is not touched.
  • The system log keeps the events of the message and that of the deletion (“message 1 deleted by admin (older than 90d)”).
  • Message numbers are not reused: the next message takes the number after the last one.
!
Final. deletion cannot be undone. If you need to keep the list of confirmations, first save the output of rspeak status for the messages you care about.

7.4 · When an action cannot be carried out

Not every action makes sense on every message. When a key has no effect, the TUI simply does nothing; the commands, instead, reply with an error.

ActionNot possible when…Command reply
r / rspeak revokethe message is already revokedno error: “Message 4 revoked.”
m / rspeak remindthe message is revokedrspeak: message 4 has been revoked: nobody to remind
m / rspeak remindthe message has expiredrspeak: message 4 has expired: nobody to remind
m / rspeak remindnobody is deliverednothing in the TUI; the command replies Message 4: everyone has already confirmed, nobody to remind. or, if some copies are still sent, Message 4: 0 recipients reminded.
Enter / rspeak statusthe number does not existrspeak: no such message: 99
p / rspeak purgethe duration is badly writtenrspeak: invalid duration: 3 (for example 90d, 12h, 30m)
Table 7.3 — When an action cannot be carried out
i
Always a confirmation. no TUI action starts without a confirmation: the message to revoke, the people to remind and the messages to delete are always shown first. n or Esc cancel.

All these actions are reserved to administrators and are recorded in the log under their name: for rspeak the author is whoever used sudo, not root (chapter 11.1).

Chapter 8

What users see

8.1 · On the desktop

On the desktop the message appears by itself, on top of the other windows, a few moments after it is sent. The user does not have to do anything to receive it: at graphical login a small RootSpeak program starts, the desktop agent, which waits for messages. RootSpeak speaks English, whatever the language of the session; the message text arrives exactly as the administrator wrote it.

Figure 8.1 — The confirmation dialog (on GNOME; its look follows the desktop theme), with the buttons “Later” and “I have read it”
The user…What happens
presses “I have read it”The message is confirmed and never appears again, in any session.
presses “Later” or closes the dialogThe message is postponed: the dialog comes back after 30 minutes, until the user confirms.
does nothingThe dialog stays there without blocking anything: the user can keep working in the other windows.
logs outThe dialog closes; the message appears again at the next login.
Table 8.1 — What the user can do with the dialog
  • The top of the dialog shows the message title and the date it was sent; if the message has no title, only the date.
  • If there are several messages, the dialogs appear one at a time, from the oldest to the most recent.
  • The dialog closes by itself if the user confirms from a terminal, if the administrator revokes the message or if the message expires.
Figure 8.2 — The rare notice of a confirmation that could not be saved
i
Confirmation not recorded. if the confirmation cannot be saved (for example because the disk is full), the desktop shows the notice above and the message is asked again: the confirmation is never lost silently. The notice requires notify-send.

8.2 · In the terminal

In every terminal window of the user, whether local, inside the desktop, in tmux or connected through ssh, the text appears the moment the message is sent, even while the user is working:

When the message is sent: header with title and date, then the text
mario@server:~/projects$ make
gcc -O2 -c main.c

── RootSpeak · Message from the administrator · Maintenance · 30/09 16:55 ──
On Saturday from 8 am to 12 noon the server will be off.
────────────────────────────────────────
gcc -O2 -o test main.o

As soon as the user is back at the prompt (if already at the prompt, just press Enter), RootSpeak shows the message again and asks for confirmation:

At the next prompt: the message again, and the question
── RootSpeak · Message from the administrator · Maintenance · 30/09 16:55 ──
On Saturday from 8 am to 12 noon the server will be off.
────────────────────────────────────────
[RootSpeak] Do you confirm you have read the message? [y/N] y
[RootSpeak] Confirmed.
mario@server:~/projects$
The user answersWhat happens
y and Enter“[RootSpeak] Confirmed.”: the message is confirmed everywhere.
anything else, even just Enter“[RootSpeak] You will be asked again in 30 minutes.”
nothing, because they confirmed on the desktop“[RootSpeak] Message already confirmed elsewhere (for example on the desktop).”: the question closes by itself
nothing, and the message is revoked“[RootSpeak] The administrator has revoked the message.”
nothing, and the message expires“[RootSpeak] The message has expired.”
Table 8.2 — The answers to the question

After a postponement, until the next question, only a one-line reminder appears at each prompt:

If the user postpones: a one-line reminder at each prompt
[RootSpeak] Do you confirm you have read the message? [y/N] n
[RootSpeak] You will be asked again in 30 minutes.
mario@server:~/projects$ ls
main.c  main.o  test
[RootSpeak] You have 1 message from the administrator to confirm.
mario@server:~/projects$
i
Full-screen programs. if the user is running a full-screen program, such as an editor, the text sent to the terminal is drawn over the screen, as happens with wall. Nothing is lost: the screen fixes itself, or with Ctrl+L, and the question only comes when the user leaves the program.

8.3 · Shells

The confirmation question in the terminal depends on the user's shell. The text shown when the message is sent, instead, always arrives, whatever the shell.

ShellText when sentConfirmation question
bashyesat every prompt; at login also if it had been postponed
zshyesat every prompt; at login also if it had been postponed
fishyesat every prompt; at login also if it had been postponed
sh, dash, ksh and the others that read /etc/profileyesonly at login
tcsh, csh and the shells that do not read /etc/profileyesno (the dialog remains, if the user has a desktop)
Table 8.3 — Shells and the confirmation question
  • The question only appears in interactive shells: scripts, cron, scp, rsync and commands run with ssh server command never see it.
  • Terminal windows already open when RootSpeak is installed receive the text, but the question only from the next window or the next login.
  • If zsh is installed after RootSpeak, re-running ./install.sh is enough to get the question in zsh; fish, instead, gets it even if installed later.
!
Logins with su. with su - mario the terminal window still belongs to whoever opened it: the text sent with the message does not appear, the question at the prompt does. With ssh mario@server everything works normally.

8.4 · Users who are not logged in

Users who are not logged in find the message at their next login, however they log in. Meanwhile it is already delivered: the copy is in their mailbox, waiting for them.

Delivery at the next loginAdministratorsendsRootSpeakLuca's mailboxLucanot logged inmessage for lucaLuca is not logged in: the message waitsthe next day, Luca logs in login (desktop, console or ssh)dialog, or text and question“I have read it” or “y”in the list: all confirmed
Figure 8.3 — A message for someone who is not logged in
LoginWhat the user sees
desktopthe dialog, as soon as the session opens
console or sshtext and question right after login, before the first prompt; at login the question is asked even if the user had postponed it
a command over ssh, scp, a servicenothing: it is not an interactive login
Table 8.4 — The message at the next login

8.5 · Several sessions, one confirmation

A user with several open sessions, for example the desktop and two ssh connections, receives the message in all of them. Confirming once is enough.

One confirmation is valid for all sessionsAnna's desktopdialogRootSpeakAnna's terminalsshdialog “I have read it” / “Later”text and question “Do you confirm…?”Anna presses “I have read it”records the first confirmation“Message already confirmed elsewhere”
Figure 8.4 — The first confirmation closes all the other requests

The dialog closes by itself if the user confirms from a terminal, and the question in the terminal closes if the user confirms on the desktop. The message status keeps the first confirmation, with the channel it came from: desktop or terminal pts/2.

i
Separate postponements. postponing, instead, applies to the channel where it is done: a user who presses “Later” on the desktop still sees the question in the terminal, and vice versa.

8.6 · Postponing and reminders

RootSpeak never blocks work: the user can always postpone. But whoever postpones is asked again, at regular intervals, until they confirm.

Postponements and reminders16:5516:5717:2717:3017:31Sendrspeak sendLaterpostponedBack againpostpones againReminderrspeak remindI have read it ✓confirmed30 minutesa reminder does not wait: the dialog comes back at once
Figure 8.5 — A message postponed, asked again, reminded and finally confirmed
WhenIn the terminalOn the desktop
after a postponementa one-line reminder at each promptno dialog
after 30 minutestext and question at the next promptthe dialog comes back (within a minute)
at logintext and question at once, even if the user had postponedthe dialog when the session opens
after a remindertext and question at the next promptthe dialog at once
on expiry or revocationnothing morenothing more
Table 8.5 — When the message comes back

The 30-minute interval is the same for the dialog and for the terminal and can be changed in the settings (chapter 10). Meanwhile the administrator sees in the message details who postponed and when.

8.7 · Explaining RootSpeak to users

Users have no RootSpeak commands and do not need to learn anything. It can still help to answer a few questions: the table collects the most common ones, with short, accurate answers to pass on as they are.

The user's questionAnswer
“What is this window?”A message from the administrators of the machine. “I have read it” confirms you have read it; “Later” postpones it by half an hour.
“Does anything happen if I press Later?”No, you can keep working. The message comes back after 30 minutes until you confirm.
“Do I have to confirm in the terminal too?”No: one confirmation is valid everywhere. The question in the terminal closes by itself.
“Can I read a message again after confirming it?”No: after the confirmation it does not appear again. If needed, ask the administrator.
“Can I reply?”No: RootSpeak is only for notices from the administrators. To reply, use the usual channels.
“Can other people see my messages?”No: everyone sees only the messages sent to them.
Table 8.6 — Users' questions
+
The first message. for an important notice it is worth telling users, with the first message, what the dialog and the question are: the first message can explain RootSpeak itself.
Chapter 9

The built-in help

9.1 · Opening the built-in help

Everything needed to use rspeak is also inside the command itself: rspeak --help (or rspeak help or rspeak -h) opens a full-screen guide, divided into five tabs.

┌─ rspeak — guide ───────────────────────────────────────────────────────────┐
│  Info  Commands  Options  Examples  Files                                  │
├────────────────────────────────────────────────────────────────────────────┤
│ NAME                                                                       │
│    rspeak — messages to users with read confirmation                       │
│                                                                            │
│ SYNOPSIS                                                                   │
│    rspeak send --to DEST [options] [TEXT]                                  │
│    rspeak list                                                             │
│    rspeak status ID                                                        │
│    rspeak                                                                  │
│    rspeak revoke ID                                                        │
│    rspeak remind ID                                                        │
│    rspeak log ID                                                           │
│    rspeak purge DURATION                                                   │
│    rspeak version                                                          │
│                                                                            │
│ DESCRIPTION                                                                │
│    RootSpeak lets administrators send text messages to the users of the    │
├────────────────────────────────────────────────────────────────────────────┤
│ ←/→ tabs · ↑/↓ scroll · PgUp/PgDn · g/G · q quit             lines 1-16/25 │
└────────────────────────────────────────────────────────────────────────────┘
Figure 9.1 — The built-in help, Info tab (real screenshot, 78-column terminal)
TabContains
Infoname, syntax of all the commands, description of RootSpeak, version and path of this manual
Commandsrspeak on its own, send, list, status, revoke, remind, log, purge, version, help
Optionsthe options of send: recipients, title, expiry, file
Examplesready-to-copy commands
Fileswhere settings, messages, log and manual are
Table 9.1 — The tabs of the built-in help
┌─ rspeak — guide ───────────────────────────────────────────────────────────┐
│  Info  Commands  Options  Examples  Files                                  │
├────────────────────────────────────────────────────────────────────────────┤
│ Send options                                                               │
│                                                                            │
│  --to DEST                                                                 │
│     Recipients, separated by commas without spaces: a user (mario), a Unix │
│     group (@developers), all (every human user) or online (only those      │
│     logged in now).                                                        │
│                                                                            │
│  --title TITLE                                                             │
│     Title shown in the message header and in the desktop dialog.           │
│                                                                            │
│  --expires DURATION                                                        │
│     Expiry, after which the message is no longer shown: 30m, 2h, 3d or a   │
│     date and time ("2026-10-04 12:00").                                    │
│                                                                            │
│  --file FILE                                                               │
│     Reads the message text from FILE.                                      │
├────────────────────────────────────────────────────────────────────────────┤
│ ←/→ tabs · ↑/↓ scroll · PgUp/PgDn · g/G · q quit             lines 1-16/16 │
└────────────────────────────────────────────────────────────────────────────┘
Figure 9.2 — The Options tab
i
Always with sudo. like every rspeak command, the built-in help also asks for the sudo password. The texts of the Commands and Options tabs are the same as in chapter 13 of this manual.

9.2 · Moving around the built-in help

KeysAction
← →, Tab Shift+Tab, h lprevious or next tab
Enternext tab
1 … 5go straight to a tab
↑ ↓, k jscroll by one line
PgUp PgDn, b Spacescroll by one page
g G, Home Endstart or end of the tab
q, Escleave the built-in help
Table 9.2 — The keys of the built-in help

At the bottom right the help shows which lines of the tab are being viewed, for example “lines 1-16/25”. Each tab remembers where you had got to. The help adapts when the window is resized; on exit the terminal goes back exactly as it was.

+
For vi users. the keys h j k l are the same as in vi and less: if you know them, you can use them here too.

9.3 · Small terminals and plain text

The same guide has three forms, and rspeak picks the right one by itself.

Three forms of the same guideIs the output a terminal?At least 44 × 10?Tabbed guideas in the figures aboveSingle pagewith less (or PAGER)Plain text80 columns, no coloursyesno, a pipeyesno
Figure 9.3 — The help picks by itself the form that suits where it is shown
SituationWhat rspeak --help shows
a normal terminalthe tabbed guide
a very small terminal (fewer than 44 columns or 10 lines)the same guide as a single page, to scroll through with the pager: less, or the program set in PAGER; q to quit
the output goes to a file or to another commandplain text at 80 columns, without colours; compared with the tabs it also has the environment variables and the exit status of the commands (chapter 13.5)
Table 9.3 — The built-in help in the different situations
Searching the built-in help with grep
admin@server:~$ rspeak --help | grep -A2 -- '--expires DURATION'
       --expires DURATION
              Expiry, after which the message is no longer shown: 30m, 2h, 3d or
              a date and time ("2026-10-04 12:00").
i
And rspeak on its own? rspeak on its own, too, in a pipe or in a terminal smaller than 80 columns or 20 lines, shows the built-in help instead of the TUI.
Chapter 10

Settings

10.1 · The settings file

RootSpeak has two settings, and they live in a single file, /etc/rootspeak/rootspeak.conf. They are fine as installed; change them only for particular needs.

/etc/rootspeak/rootspeak.conf, as RootSpeak installs it
# RootSpeak - Advanced Messaging System for Linux: configuration
# A data file, not a script: KEY=value lines with positive whole numbers.
# Unknown keys and invalid values are ignored.

# After how many minutes a message postponed by the user is shown again
RSPEAK_REMIND_MINUTES=30

# Every how many seconds the desktop agent checks the messages again
# (new messages wake it at once anyway)
RSPEAK_AGENT_POLL=60
SettingDefaultWhat it decides
RSPEAK_REMIND_MINUTES30after how many minutes a postponed message is asked again, in the terminal and on the desktop; it is also the number written in “You will be asked again in 30 minutes”
RSPEAK_AGENT_POLL60how often, in seconds, the desktop agent checks the messages again as a safeguard. New messages and reminders arrive at once anyway. Lower values use slightly more battery
Table 10.1 — The settings
File ruleExample
one line per setting, KEY=valueRSPEAK_REMIND_MINUTES=15
only whole numbers greater than zero, at most six digitsRSPEAK_AGENT_POLL=120
spaces do not matterRSPEAK_REMIND_MINUTES = 15
anything after # is a commentRSPEAK_AGENT_POLL=30 # laptops on charge
invalid lines, unknown keys and wrong values are ignored: the default appliesRSPEAK_REMIND_MINUTES=half-an-hour → 30
Table 10.2 — How the file is written
i
Data only. the file contains only data: it is not a script and is never executed. A typing mistake does not stop RootSpeak, it only makes it use the default value.

10.2 · Changing a setting

Postponement and checkspostponed+ RSPEAK_REMIND_MINUTESthe message comes backat the next prompt, or in the dialogdesktop agent checks, every RSPEAK_AGENT_POLL secondsrspeak send or remindwakes it at once
Figure 10.1 — What the two settings control
  1. Open the file with administrator rights:
    admin@server:~$ sudo nano /etc/rootspeak/rootspeak.conf
  2. Change the value, for example RSPEAK_REMIND_MINUTES=15, save and exit.
  3. There is nothing to restart: the value applies at once to terminals (from the next prompt) and to the desktop from the agent's next check.
NeedSetting
urgent notices: ask again more oftenRSPEAK_REMIND_MINUTES=10
users complaining about the requestsRSPEAK_REMIND_MINUTES=60 or more
battery-powered laptopsRSPEAK_AGENT_POLL=300: new messages still arrive at once
Table 10.3 — Recommended values
!
Permissions. the file must remain owned by root and writable only by root, as the installation leaves it: all users read it, to know when to ask the messages again.
i
Upgrades. a RootSpeak upgrade does not overwrite /etc/rootspeak/rootspeak.conf; ./install.sh --purge deletes it.

10.3 · Colours, pager and editor

A few environment variables change the behaviour of rspeak for the administrator who sets them. Since rspeak always re-runs itself with sudo, they only get through if sudo keeps them.

VariableEffectDefault
NO_COLORif set, TUI and built-in help without colourscolours
PAGERthe program that pages the built-in help in small terminals (chapter 9.3)less
VISUAL, EDITORthe editor opened with Ctrl+E in the new message (chapter 5.5)nano, then vi
Table 10.4 — Environment variables

To have sudo keep them, add a line to its settings, always with visudo:

Keeping the variables through sudo
admin@server:~$ sudo visudo -f /etc/sudoers.d/rootspeak
# in the file:
Defaults env_keep += "NO_COLOR PAGER VISUAL EDITOR"
!
For all of sudo. this line applies to every command run with sudo, not just rspeak. Add only the variables you need.
+
Editor and security. the editor opened by rspeak runs with the administrator's identity, not as root: keeping EDITOR does not give it extra powers.
Chapter 11

Security and privacy

11.1 · Who can use RootSpeak

Only the machine's administrators can use rspeak: the members of the sudo group (wheel on Fedora and similar systems). RootSpeak keeps no list of its own: whoever joins or leaves the group gains or loses access from their next login to the machine (chapter 2.4).

An ordinary user cannot even start the command
mario@server:~$ rspeak list
bash: /usr/local/bin/rspeak: Permission denied
  • rspeak always works as administrator, even to show the help or the version: if it is not already root, it restarts itself with sudo, which asks for the password.
  • In messages and in the log the author is the administrator who used sudo, not a generic “root”: “message 3 sent by admin to: …”. Whoever runs rspeak directly as root (for example from cron) appears as root.
  • Users have no RootSpeak command at all: they can neither send messages nor see who has confirmed.

11.2 · Who sees the messages

Each user sees only the messages sent to them. The message store in /var/lib/rootspeak/ is split into two parts with different permissions.

The message store/var/lib/rootspeak/sent/: the reference copiesroot onlythe administrators, with rspeakmessage, recipients, deliveries, revocation:this is where rspeak status reads who has been reached/var/lib/rootspeak/users/: one mailbox per userusers/mario/Mario only (and root)users/anna/Anna only (and root)users/luca/Luca only (and root)to be readconfirmations, postponementsAnna cannot open Mario's mailbox, and no user can open sent/
Figure 11.1 — Who can read what in the RootSpeak message store
/var/lib/rootspeak/  # root, readable by everyone (listing only)
├── sent/  # root, 700: root only
│   └── 3/  # message 3: text, recipients, deliveries, revocation
└── users/
    └── mario/  # Mario's, 700: Mario and root only
        ├── inbox/  # messages to confirm
        ├── read/  # confirmed or expired messages
        ├── acks/  # the confirmations, with date and channel
        └── state/  # the postponements
Figure 11.2 — The message store seen from above
WhoWhat they see
an administratorall the messages sent, the recipients, the confirmations, the history
a useronly the messages addressed to them, one at a time, until they confirm them
the other usersnothing of a colleague's messages, not even that they exist
Table 11.1 — Who sees what
i
Root does not go in as root. RootSpeak always enters a user's mailbox with that user's identity, even when the administrator is in command: this way a user cannot trick root into writing where it should not.

11.3 · What a confirmation is worth

The confirmation records that the user states they have read the message, with date, time and channel, like the read receipts of a messaging app. It cannot prove that they really read it.

The confirmation saysThe confirmation does not say
that the user pressed “I have read it” or answered “y”that they read it carefully
when (day and time) and from where (desktop or which terminal)who was in front of the screen
that the message had neither expired nor been revoked at that momentthat they understood the content
Table 11.2 — What a confirmation is worth
i
A statement. the mailbox belongs to the user: an expert user could record a confirmation without opening the dialog. It is still their own statement, like the click on “I have read it”.
+
When more is needed. for notices that require a real commitment (a rule to follow, an authorisation) the RootSpeak confirmation is a reminder, not a signature: a separate document is needed.

11.4 · Safe text

Before saving a message, RootSpeak removes from the text and the title the invisible characters and the codes that change the colours, title or behaviour of terminal windows. A message therefore cannot alter users' terminals, even if the text was pasted from an unknown source.

Safe textPasted textwith colours, titles, invisible charactersRootSpeak cleans itbefore saving itSafe textletters, tabs, line breaksno message can change the colours, title or behaviour of a user's terminal
Figure 11.3 — The text of every message is cleaned before it is saved
In the textWhat happens
letters, digits, punctuation, accented letters, symbolskept
tabs and line breakskept (in the title, line breaks become spaces)
colour and cursor-movement codesremoved
codes that change the terminal window's titleremoved
other invisible control charactersremoved
Table 11.3 — What is left of the text

What RootSpeak reads from the users' mailboxes (confirmations, postponements) is also cleaned before it is shown to the administrator.

11.5 · How reliable the log is

The system log is a convenient trail, but anyone on the machine can write lines tagged rspeak into it. That is why rspeak log and the TUI check who really wrote each event and flag the suspicious ones.

A forged confirmation: Luca (UID 1003) wrote a line in Anna's name; the other lines are ordinary ones, like those in chapter 6.4
admin@server:~$ rspeak log 3
Message 3 · New password rule · 30/09 19:05
2026-09-30 19:05:12  message 3 delivered to anna (terminals written: 1)
2026-09-30 19:05:12  message 3 sent by admin to: anna luca
2026-09-30 19:06:40  [not trustworthy: written by UID 1003] user anna: confirmed reading message 3 (desktop)
EventMust have been written by
sending, delivery, reminder, revocation, deletionroot (that is, rspeak)
postponement, confirmation, confirmation not recordedthe user it refers to
Table 11.4 — Who writes each event
!
Trust the state. a line marked “not trustworthy” must be disregarded. The true state of a recipient is the one shown in the message details and by rspeak status, which comes not from the log but from the message store: there confirmed means that the confirmation is in the user's mailbox.
Chapter 12

Troubleshooting

12.1 · Error messages

When a command fails, rspeak prints a line in red that starts with rspeak:, says what to correct and exits with status 1. In the TUI the same line appears in the result dialog.

A typical error: a misspelt user name
admin@server:~$ rspeak send --to mrio "Meeting at 11."
rspeak: no such user: mrio
MessageWhat it meansWhat to do
missing --tono recipientadd --to (chapter 5.1)
missing value for --toan option without its value (the same applies to --title, --expires, --file)write the value after the option
no such user: NAMEthe name is not a user of the machinecheck the name
no such group: NAMEthe group after @ does not existcheck the group name
no recipientsthe recipients given are empty, for example online when nobody is logged inchoose other recipients
empty messagethe text is missing, or contains only spaceswrite the text
message too long: N bytes (at most 65536)the text exceeds 64 KBshorten it, or put the full text in a shared file and send the message with its path
invalid expiry: Xthe expiry was not understooduse 2h or "2026-10-04 12:00" (chapter 5.3)
the expiry is already in the pastthe date given is in the pastcorrect the date
unknown option: Xmisspelt optionrspeak --help
unknown command: X (rspeak --help for the guide)misspelt commandrspeak --help
too many arguments for remind: 4 (rspeak --help for the guide)one word too many, for example two message numbers: each command takes onerepeat the command for each message
missing message IDstatus, revoke, remind or log without a numberadd the number, taken from rspeak list
no such message: IDno message with that number (or already deleted)check with rspeak list
missing duration, for example 90d
invalid duration: X (for example 90d, 12h, 30m)
rspeak purge without a duration or with a misspelt durationwrite a number followed by d, h or m
message N has been revoked: nobody to remind
message N has expired: nobody to remind
reminder for a message that is no longer shownnothing; to ask again, send a new message
message N not delivered to: … (see the log; the next rspeak command will retry)the copy could not be written for those users; the others received itfix the cause, often a full disk (chapter 12.4)
message N revoked, but some copies could not be removed from the mailboxes: the next rspeak command will retryduring the revocation a user's mailbox could not be reachednothing: RootSpeak retries
FILE: …with --file: the file does not exist or cannot be read; the explanation is the system's own (for example No such file or directory)check the path
Table 12.1 — The error messages

12.2 · Frequent problems

ProblemLikely causeRemedy
rspeak: command not foundRootSpeak is not installedrun ./install.sh (chapter 2.2)
Permission deniedwhoever runs it is not an administratorthis is intended (chapter 11.1)
rspeak on its own shows the help instead of the TUIthe terminal is smaller than 80 columns or 20 rows, or the output is not a terminalenlarge the window, or use the commands
the TUI closed by itselfthe window was shrunk below 80 × 20enlarge it and reopen rspeak
the text reaches the terminal but the question does notthe terminal window was open before the installation; or the shell is sh, dash or ksh (question only at login) or tcsh (no question); or zsh was installed after RootSpeakopen a new window or log in again; for zsh installed later, run ./install.sh again (chapter 8.3)
no dialog appears on the desktopzenity is missing, or the graphical session was started before the installation and the agent did not startinstall zenity; the agent starts by itself with the first new message or at the next login
two identical dialogsthe same message was sent twice (two different numbers in the list)revoke the duplicate (chapter 7.1)
a user who logged in with su does not see the text when it is sentwith su the terminal window still belongs to whoever opened itthey still see the question at the next prompt; with ssh everything works normally
a user sees “The confirmation could not be recorded”their mailbox is not writable, for example because the disk is fullfree some space: the message is asked again and the confirmation is not lost
a recipient stays senttheir copy could not be writtensee chapter 12.4
Ctrl+E opens nano and not my editorsudo does not keep VISUAL and EDITORchapter 10.3
a user says they saw nothing—follow the procedure in chapter 12.3
Table 12.2 — Frequent problems

12.3 · “I didn't see any message”

It is the most common question. The answer is almost always in the message details and in its history.

The diagnosisWhat state is it?sentthe copy did not arrive: 12.4deliveredhas the copy, has not confirmedconfirmedstated they have read itLogged in? Postponing?message details and historyFrom where, and whendesktop or terminal, with the timeThe starting point is always the message details (Enter in the TUI, or rspeak status)
Figure 12.1 — Where to start when a user says they did not see a message
  1. Open the message in the TUI (Enter) or run rspeak status ID, and find the user's line.
  2. If it is confirmed, the line says when and from where: for example “confirmed on 30/09 16:56 (desktop)”. The user has confirmed, perhaps without reading carefully (chapter 11.3).
  3. If it is delivered, look at the details: “written to 2 terminals” means that the text appeared on their screens; “postponed on …” that they saw the question or the dialog and postponed it. If neither is there, they have probably not logged in yet.
  4. If it is sent, the copy did not reach their mailbox: see chapter 12.4.
  5. In the History tab (Tab), or with rspeak log ID, you find all the events, postponements included, to the second.
  6. If needed, remind them (chapter 7.2): the dialog comes back on their desktop at once.
+
Unusual shells. a user who works only through ssh and with a shell such as tcsh does not get the question in the terminal: they see the text when it is sent, but can confirm only from the desktop. With bash, zsh or fish the problem does not arise.

12.4 · Interrupted sendings

If a sending is interrupted halfway (the disk fills up, rspeak is stopped, the power goes) RootSpeak does not lose the message: the next time it is used, it resumes from where it stopped.

RecoverySending interruptedfull disk, power cut…Next rspeaklist, status, TUI…Recoveryrewrites the missing copiesAll deliveredor a notice of who is missing
Figure 12.2 — RootSpeak completes the deliveries left behind by itself
NoticeWhat it meansWhat to do
rspeak: completed delivery of message N to K recipientsthe missing copies have been written: those recipients are now deliverednothing
rspeak: message N still not delivered to K recipients (see rspeak status N)for someone the copy still cannot be writtenfix the cause, usually disk space; then use rspeak again
rspeak: message N was interrupted before being saved and has been cancelledthe sending stopped before the message was even saved: nobody received itsend it again
[send cancelled: interrupted before it was saved] in rspeak listthe same case, in the listsend it again
Table 12.3 — The recovery notices
i
When it starts. recovery starts at the beginning of rspeak send, list, status, revoke, remind, log and when the TUI opens. Nothing is needed other than using RootSpeak.
!
Full disk. with a full disk the users' confirmations cannot be saved either: users see “The confirmation could not be recorded” and the message is asked again. Freeing space in /var/lib solves both.

12.5 · Useful files and folders

WhatWhere
the command/usr/local/bin/rspeak
the settings/etc/rootspeak/rootspeak.conf
messages and confirmations/var/lib/rootspeak/
the logsudo journalctl -t rspeak
the helprspeak --help
the manuals/usr/local/share/doc/rootspeak/User Manual.html and Technical Manual.html
the shell hooks/etc/profile.d/rootspeak.sh, /usr/local/lib/rootspeak/rootspeak.bash, rootspeak.zsh, /etc/fish/conf.d/rootspeak.fish
the desktop autostart/etc/xdg/autostart/rootspeak-agent.desktop
the codehttps://github.com/nic-fio/ROOTSPEAK (private)
Table 12.4 — Where to find things
+
Where to look. when something does not add up, the places to look are, in order: the message details, its history, the log with sudo journalctl -t rspeak, and the built-in help.
Chapter 13

Command reference

13.1 · Syntax

This chapter lists all the commands and options of rspeak. The texts of the commands, options and examples are the same as those of the built-in help (rspeak --help, chapter 9): this page is generated from the same texts, so the two cannot diverge.

The syntax, from the help in text form
admin@server:~$ rspeak --help | head -16
RSPEAK(1)                        rspeak manual                         RSPEAK(1)

NAME
       rspeak — sends messages to the users of the machine and tracks their read
       confirmation

SYNOPSIS
       rspeak send --to DEST [options] [TEXT]
       rspeak list
       rspeak status ID
       rspeak
       rspeak revoke ID
       rspeak remind ID
       rspeak log ID
       rspeak purge DURATION
       rspeak version
PartMeaning
IDthe number of a message, as it appears in the list
DESTthe recipients: names, @group, all, online, separated by commas without spaces
DURATIONa number followed by m (minutes), h (hours) or d (days); for --expires also a date and a time
[options], [TEXT]the parts in square brackets can be omitted
Table 13.1 — How to read the syntax
i
Always as root. every command, version and --help included, restarts itself with sudo if it is not already root.

13.2 · Commands

The commands of rspeak, with the text of the built-in help.

(no command)
In a terminal, opens the interactive interface: the messages with their recipients and history; write and send, revoke, remind, delete old messages. In a pipe, shows this guide.
send [options] [TEXT]
Sends a message to the recipients given with --to. Without TEXT or --file, the text is read from stdin.
list
Lists the messages sent, with how many recipients have confirmed each one.
status ID
Shows the text of the message and the state of each recipient: sent, delivered (in their mailbox) or confirmed, with date, time and channel.
revoke ID
Revokes a message: whoever has not seen it yet will not see it, and dialogs and questions still open close by themselves.
remind ID
Reminds whoever has not confirmed yet: the question comes back at their next prompt and the dialog reappears on the desktop, even if they had postponed it.
log ID
Shows the history of the message from the system log: sending, deliveries, postponements, confirmations and revocation, with date and time.
purge DURATION
Deletes the messages sent more than DURATION ago (for example 90d), with the copies and confirmations in the users' mailboxes; the events stay in the system log.
version
Shows the RootSpeak version.
help, --help, -h
Shows this guide.

13.3 · Send options

The options of rspeak send. They must be written before the text of the message; in the TUI they correspond to the fields of the new message (chapter 5.4).

--to DEST
Recipients, separated by commas without spaces: a user (mario), a Unix group (@developers), all (every human user) or online (only those logged in now).
--title TITLE
Title shown in the message header and in the desktop dialog.
--expires DURATION
Expiry, after which the message is no longer shown: 30m, 2h, 3d or a date and time ("2026-10-04 12:00").
--file FILE
Reads the message text from FILE.
OptionTUI field
--toTo
--titleTitle
--expiresExpires
--fileText, or Ctrl+E to open it in the editor
Table 13.2 — Options and TUI fields

13.4 · Examples

CommandWhat it does
rspeak send --to mario "Your account expires on Friday."Message with read confirmation to a single user.
rspeak send --to @developers --title Maintenance --file notice.txtText taken from a file, with a title, to every member of the developers group.
rspeak send --to online --expires 15m "Reboot at 13:00."Urgent notice to whoever is logged in now; after 15 minutes it is no longer shown or asked about.
rspeak send --to all --expires 3d "New password policy."To every user; after three days it stops being shown.
rspeak listWhich messages were sent and how many confirmations they have.
rspeak status 12Who confirmed message 12, when and from where.
rspeak log 12The history of message 12: sending, deliveries, postponements, confirmations.
rspeak purge 90dDeletes the messages older than 90 days, with copies and confirmations.
rspeak revoke 12Revokes message 12.
rspeak remind 12Asks again, right now, whoever has not confirmed message 12.
Table 13.3 — The examples of the built-in help

13.5 · Exit status and environment

Exit statusMeaning
0Completed successfully.
1Error: the error message, starting with “rspeak:”, says which (chapter 12.1).
Table 13.4 — The exit status of the commands

The exit status makes it possible to use rspeak in scripts:

In a script
admin@server:~$ rspeak send --to online --expires 15m "Reboot at 1 pm." || echo "sending failed"
Message 7 sent to 3 users.
VariableEffect
PAGERthe program that pages the help on small terminals (default: less)
NO_COLORif set, disables colours
VISUAL, EDITORthe editor opened with Ctrl+E in the new message
Table 13.5 — The environment variables (they reach rspeak only if sudo keeps them, chapter 10.3)
Chapter 14

Glossary

14.1 · Terms

Map of the termsMessagenumber, title, textPropertiesexpiry, revocationRecipientsnames, @group, all, onlineState of each recipientsentdeliveredconfirmedEventsin the log and in the historysessions: desktop, terminals, loginconfirmation channel: desktop or terminal
Figure 14.1 — The words of RootSpeak and how they fit together
all
Special recipient: all the users of the machine with a UID of 1000 or above and a real shell.
built-in help
The tabbed help that opens with rspeak --help.
channel
Where a confirmation came from: desktop or terminal pts/N or terminal ttyN.
confirmation
The user's statement that they have read a message: a click on “I have read it” or the answer “y”. It is final and applies to all their sessions.
confirmed
Third state of a recipient: they have stated that they read the message. It is their statement, not proof that they really read it.
delivered
Second state: the copy of the message is in the user's mailbox, and the user has not confirmed yet. Whoever postpones stays delivered.
desktop agent
The small RootSpeak program that starts at every graphical login and shows the confirmation dialogs. It is not a command: it starts by itself.
event
A fact in the history of a message (sending, delivery, postponement, reminder, confirmation, revocation, deletion), written to the system log.
expiry
The moment after which a message is no longer shown (--expires). Expired is a property of the message, not a state of the recipients.
mailbox
The space where RootSpeak keeps a user's messages, their confirmations and their postponements. Only they (and root) can open it.
message store
The folder /var/lib/rootspeak/: the reference copies of the messages and the users' mailboxes.
online
Special recipient: among the users of all, those logged in at the moment of sending.
postpone
Pressing “Later” or answering anything other than “y”: the message is shown again after 30 minutes. It is not a state.
purge
Deleting the messages older than a given duration: rspeak purge or the p key in the TUI.
recipients
The users who receive a message: names, @group, all, online.
recovery
The automatic completion of a sending left halfway, the next time rspeak is used.
remind
Asking again, immediately, for the confirmation from those who are still delivered: rspeak remind or the m key in the TUI.
revoke
Withdrawing a message with rspeak revoke or the r key: whoever has not seen it will no longer see it. Revoked is a property of the message, not a state of the recipients.
sent
First state: the message has left, but the copy is not yet in the user's mailbox.
session
A user's access to the machine: the desktop, a console, an ssh connection.
system log
The machine's log (the journal), where RootSpeak writes its events with the tag rspeak.
TUI
The full-screen interface, inside the terminal, that opens when you type rspeak on its own.