Skip to content

Rex

Rex is Superlogical’s terminal multiplexer. On dbb-server it is a personal server for the daz account. A client attaches to a session on that server. A program started in a session runs as daz.

The package channel is preview. bootstrap/rex.sh passes --channel preview. With no channel, the install script falls back to snapshot while stable has no release.

Account

Personal server. The process runs as daz.

Boot

systemd user unit, linger on, Restart=on-failure.

Access

Built-in Tailscale device dbb-rex. The device owner only.

The unit file in this repo is platform/systemd/user/rex.service. bootstrap/rex.sh copies it to ~/.config/systemd/user/rex.service, which replaces the packaged user unit of the same name. Linger is on for daz, so the user manager starts at boot and stays up after logout.

~/.config/systemd/user/rex.service
ExecStart=/usr/bin/rex server run --log-format text --tailscale --tailscale-hostname dbb-rex
Restart=on-failure

The packaged system units stay disabled: rex.service, rex.socket, rex-login-server.service, and rex-login-server.socket. The packaged user socket stays disabled. The server is not socket-activated. It does not run as root, and it does not run as the rex system account.

The command line is built-in Tailscale and the hostname dbb-rex. It does not set --tailscale-allow-tailnet-members, --allow-anonymous, a plain HTTP listener, a tailnet:// listener, or a tag. The host tailscaled process and tailscale serve are separate. This server does not use them.

The tailnet address is https://dbb-rex.tail8026fe.ts.net.

The device name is dbb-rex on the tailnet tail8026fe.ts.net. The address answers after the node is signed in. Until then, rex server status prints tailscale: needs login and an authenticate: URL. The device owner opens that URL. The server stores the login under ~/.local/state/rex/tsnet.

Rex for Mac adds the server with Add Remote Host and the address https://dbb-rex.tail8026fe.ts.net.

CLI host list
rex hosts add dbb-rex https://dbb-rex.tail8026fe.ts.net
Status
rex server status
systemctl --user status rex.service
Logs
journalctl --user -u rex.service

rex version prints the Superlogical version. rex -v raises diagnostic verbosity. It is not the version flag.

Ubuntu also publishes a package named rex, the Perl tool (R)?ex. /etc/apt/preferences.d/rex pins origin pkgs.superlogical.com at priority 1001, so apt installs the Superlogical package.

A client disconnect leaves the session running. exit-empty is false for this unit, so the server does not exit when the last client goes away.

A host reboot stops the process. The session does not keep running through the reboot. On a clean stop the server writes a snapshot under ~/.local/state/rex, and the next start restores it. --restore defaults to true.

Key expiry for the dbb-rex device is off in the Tailscale admin. An expired device key drops the node until the next sign-in. A reboot does not. The node login stays in ~/.local/state/rex/tsnet.

Rex admits a caller by the connection. It does not check a password or an SSH key. On this server the connection is the built-in Tailscale device, and the admitted caller is the device owner.

The server listens on two Unix sockets in /run/user/1000/rex, server.sock and login-server.sock, mode 0600, owner daz. It opens no TCP port. Built-in Tailscale uses a userspace stack and binds UDP on eno1 for its own packets. UFW is unchanged, and unsolicited incoming traffic stays denied.

login-server.sock belongs to the personal server. The packaged rex-login-server.service stays disabled. /etc/rex/accounts.jsonc ships empty, which admits nobody through that service.

Path What it is
/etc/apt/sources.list.d/rex.sources apt source. Suite preview, component main, architecture amd64.
/etc/apt/preferences.d/rex Pin for package rex, origin pkgs.superlogical.com, priority 1001.
/etc/apt/keyrings/rex-archive-keyring.gpg Repository signing key.
rex account Locked system account. Home /var/lib/rex. Shell nologin.
/usr/bin/rex The server and the CLI, one binary.
/usr/lib/systemd/system/rex.service Shared server unit. Disabled.
/usr/lib/systemd/system/rex.socket Socket activation for the shared server. Disabled.
/usr/lib/systemd/system/rex-login-server.service Login server unit. Disabled.
/usr/lib/systemd/system/rex-login-server.socket Socket activation for the login server. Disabled.
/usr/lib/systemd/user/rex.service Packaged personal server unit. The file in ~/.config/systemd/user/ replaces it.
/usr/lib/systemd/user/rex.socket Packaged user socket. Disabled.
/usr/share/terminfo/x/xterm-rex Terminfo entry xterm-rex.
/usr/share/terminfo/r/rex The same entry under the name rex.
/etc/ssh/ssh_config.d/50-rex.conf When TERM is xterm-rex, ssh sends xterm-256color to a host that is not listed in ~/.config/rex/terminfo-hosts.
/etc/rex/accounts.jsonc Login server accounts. Empty.
/etc/pam.d/rex-login-server PAM policy for the login server. Auth is denied. It does not ask for a password.
/var/lib/rex Home directory of the rex account. Mode 0700.

bootstrap/rex.sh installs the package, copies the user unit, turns linger on, and enables the user service. The Tailscale sign-in stays a manual step.