Files
baudshell/README.md
T
2026-09-04 15:12:59 -04:00

1.9 KiB

baudshell

Run an interactive shell behind a simulated serial (baud-rate) throttle. Output scrolls across the screen one character at a time instead of appearing all at once, exactly as it would on a real slow serial terminal. It's the modern equivalent of watching a 9600-baud modem, and it makes old VT100/ANSI animations visible again that a fast terminal would otherwise render instantly.

Requires Python 3 and a terminal (a TTY) — it puts the terminal in raw mode for the session and restores it on exit.

Usage

./baudshell [BAUD]

BAUD is the serial rate to simulate, in bits/second. It is optional; the default is 9600. Lower is slower. You can also run it without the executable bit:

python3 baudshell [BAUD]

Examples

./baudshell          # bash at the default 9600 baud
./baudshell 2400     # slower still
./baudshell 300      # a classic 300-baud modem — a dramatic typewriter effect
./baudshell 115200   # nearly instantaneous

Type commands as usual. When you are done, type exit (or close the terminal); baudshell detects that the shell has exited and returns, leaving your terminal in its original state.

The throttle applies in both directions, just like a real serial line: your keystrokes are fed into the shell at the chosen rate, and the shell's output is emitted back to the terminal at that same rate.

How it works

The program launches bash --norc on a pseudo-terminal, then copies between your terminal and that PTY one byte at a time, sleeping 10 / baud seconds between bytes (a serial byte is 10 bits, so a baud-bit line carries baud/10 bytes/second). A non-positive or non-numeric rate prints an error and exits.

Also in this repo

baud.c is a small standalone C filter with the same throttling idea, for piping a file rather than driving a shell:

cc baud.c -o baud
cat animation.ans | ./baud 9600