| | {{infobox |
| | | title = Eyes-Free Linux |
| | | chapter = Linux Handbook, chapter 23 — console screen readers, braille, and the accessible path |
| | | core | Linux is the most accessible OS at the console — the kernel itself can speak |
| | | tools | Speakup (in-kernel) · BRLTTY · Orca · espeakup · Fenrir |
| | | lineage | Kurzweil → Braille 'n Speak → Speakup's bns driver |
| | | featured = Slint — Slackware accessible from the installer |
| | | next | BLFS — building beyond the base system |
| | }} |
| | |
| | **Linux is the only OS whose console can speak from the kernel itself** — no desktop needed, no GUI required, speech from the moment init starts. This chapter covers the eyes-free path: **Speakup** (the kernel-level screen reader), **BRLTTY** (the braille daemon), **Orca** (the graphical one), **espeakup** (the bridge to software speech), and **Slint** — the distro that ships it all working. The lineage runs through this wiki's existing cluster — the machine that reads text onscreen descends from the one that read it off paper. |
| | |
| | ## The lineage — the hardware that taught software |
| | |
| | The chain this handbook's wiki already documents: the **[[Kurzweil Reading Machine]]** (1976 — the machine that read *paper*), the **[[Braille n Speak|Braille 'n Speak]]** (1987 — the notetaker that became a speech synthesizer), and **[[Speakup]]** (1998 — the screen reader that lives in the kernel). The kernel still ships `speakup_bns.c` — the driver that lets Speakup talk *through* a forty-year-old Braille 'n Speak. The three articles link by tech, not just theme. |
| | |
| | ## Speakup — the kernel speaks |
| | |
| | ```sh |
| | modprobe speakup_soft # load it, software synth |
| | speakup_soft.start=1 # or kernel cmdline |
| | espeakup # the daemon bridging speakup→espeak |
| | ``` |
| | |
| | Speakup lives in `drivers/accessibility/speakup/` — the kernel synthesizes speech as you navigate the console — **from boot**, before any userspace exists, all the way to a panic. It drives hardware synths (the DoubleTalk, the DECtalk line, the Braille 'n Speak via `bns`) or `espeakup`'s software bridge to eSpeak. The `speakup` keymap: review keys read the screen, the numpad navigates; `speakup.synth=soft` or `=bns` selects the voice. |
| | |
| | ## BRLTTY — the braille side |
| | |
| | ```sh |
| | brltty -b auto -x auto # auto-detect the display |
| | systemctl enable brltty |
| | ``` |
| | |
| | BRLTTY drives **refreshable braille displays** — the hardware that turns the console into tactile dots — handling every major display's protocol since 1995. It reads the screen, maps cursor position, handles keyboard input on display keys. Speakup speaks; BRLTTY braills; both make the console fully usable without sight. |
| | |
| | ## The rest of the ecosystem |
| | |
| | - **Orca** — the graphical screen reader — GNOME's eyes-free layer |
| | - **espeak-ng / speech-dispatcher** — the software synths + the speech service |
| | - **Fenrir** — the modern modular console reader |
| | - **Emacspeak** — the speaking Emacs environment — Raman, 1995 — still maintained |
| | - **Accessible-Coconut, Vinux, Sonar, TalkingArch** — the eyes-free distros — each a distro pre-configured for speech/braille from boot |
| | |
| | ## Slint — the featured accessible distro |
| | |
| | **Slint** is Slackware rebuilt for accessibility — the same system this handbook features, but the *installer itself speaks*. Slint boots a talking installer, ships Speakup+BRLTTY+Orca working out of the box, and is both the handbook's recommended host *and* its accessibility answer. Installing Linux blind is a solved problem — Slint solved it. |
| | |
| | ## The eyes-free LFS build |
| | |
| | Chapter 2's whole setup is console-only — `gdisk`, `mkfs`, `tar`, `configure` — nothing needs a GUI. Speakup reads every command's output; `configure`'s checks scroll and are read; `make`'s errors speak. The entire LFS build is achievable eyes-free on a Slint host — the toolchain's text-native design is the accessibility. The only friction: `make menuconfig`'s ncurses UI — navigable via review mode, or replaced by `make config`/`make olddefconfig`'s line-based alternatives. |
| | |
| + | ## The distro landscape — the eyes-free distros |
| + | |
| + | | Distro | The shape | |
| + | | --- | --- | |
| + | | **Slint** | Slackware + full a11y from the installer — the featured path | |
| + | | Vinux | Ubuntu + Orca/speakup preconfigured | |
| + | | Sonar | Manjaro-based | |
| + | | TalkingArch | Arch + speakup on the ISO | |
| + | | Accessible-Coconut | Ubuntu MATE + orca | |
| + | | Adriane | Knoppix's console-only a11y mode | |
| + | | Ubuntu/Fedora stock | Orca + speakup present — just not preconfigured | |
| + | |
| + | **Slint's** installer's *installer speaks* — boot the ISO to a talking menu — a blind user installs blind, from scratch. |
| + | |
| | ## The kernel config for accessibility |
| | |
| | ```sh |
| | # make menuconfig — Device Drivers → Accessibility → Speakup |
| | CONFIG_ACCESSIBILITY=y |
| | CONFIG_SPEAKUP=y |
| | CONFIG_SPEAKUP_SYNTH_SOFT=y # software synth |
| | CONFIG_SPEAKUP_SYNTH_BNS=y # the Braille 'n Speak driver |
| | CONFIG_SPEAKUP_SYNTH_DTLK=y # DoubleTalk |
| | ``` |
| | |
| | Inside an LFS system you configure it yourself — the kernel chapter's menuconfig includes `Accessibility → Speakup` — a feature most distros bury but LFS lets you build in. |
| | |
| | ## The Speakup keymap — reading by hand |
| | |
| | ```text |
| | Speakup review keys (the numpad): |
| | 8/2 — prev/next line 4/6 — prev/next word 7/9 — prev/next char |
| | 5 — say current char . — say line , — say word |
| | CapsLock+arrows — review movement PrintScreen — shut up |
| | Insert+1-9 — read line by number Speakup key (CapsLock) + F-keys — controls |
| | speakup.spkup keybindings — the full map in the kernel docs |
| | CapsLock+NumLock — cursor tracking toggle |
| | ``` |
| | |
| | The kernel doc `Documentation/accessibility/speakup/spkguide.txt` is the full manual — the review mode turns any console output navigable. |
| | |
| | ## The espeakup + speech-dispatcher plumbing |
| | |
| | ```sh |
| | modprobe speakup_soft # load the soft synth driver |
| | espeakup # bridge daemon — speakup → espeak-ng |
| | # or through speech-dispatcher: |
| | speechd-up # speakup → speech-dispatcher → any TTS |
| | spd-say "hello" # test speech-dispatcher |
| | ``` |
| | |
| | The chain: kernel-speakup → `/dev/softsynth` → espeakup/speechd-up daemon → espeak-ng/speech-dispatcher → audio. `echo "text" > /dev/softsynth` writes speech directly. |
| | |
| | ## The braille side's full surface |
| | |
| | ```sh |
| | brltty -b xw -d /dev/ttyUSB0 -t text # driver, device, table |
| | brltty -l debug # debug verbosity |
| | brltty.conf — driver/model/device/table/kernel prefs |
| | systemctl enable brltty # every boot |
| | ``` |
| | |
| | BRLTTY knows ~50 display protocols — `brltty -l` lists drivers; autodetect (`-b auto`) probes USB/Bluetooth/serial. |
| | |
| | ## The Orca/desktop layer |
| | |
| | ```sh |
| | orca # GNOME's screen reader |
| | orca -s # preferences |
| | orca --replace # restart it |
| | orca's modifier — Insert — the review key |
| | ``` |
| | |
| | Orca speaks the *graphical* desktop — AT-SPI2 carries accessibility info from apps. `orca` + GTK/Qt apps + Firefox/Chromium covered; a fully speaking desktop is standard GNOME. |
| + | |
| + | ## The reading workflows — how a screen gets read |
| + | |
| + | ```text |
| + | Speakup's vocabulary: |
| + | Insert+Keypad combos — the review layer: |
| + | PadEnter = say line Pad+ = say to-end Pad. = say screen |
| + | Pad0 = shut up Pad8 = say char Pad5 = say word |
| + | Pad2 = say phonetic-word Pad7/9 = prev/next line |
| + | Pad4/6 = prev/next word Pad1/3 = prev/next char |
| + | Pad* = say current line Pad/ = find |
| + | CapsLock is the speakup modifier on many layouts. |
| + | echo 'key' > /sys/accessibility/speakup/i18n/… — the runtime controls |
| + | ``` |
| + | |
| + | `/sys/accessibility/speakup/` is the live control plane — `echo` values to change voice, rate, punctuation, synth: `echo 9 > .../rate` speeds up; `echo soft > .../synth` switches to the softsynth. |
| + | |
| + | ## The espeakup/espeak-ng chain — the voice's plumbing |
| + | |
| + | ```text |
| + | speakup_soft (kernel) → creates /dev/softsynth → espeakup daemon reads it |
| + | → feeds the text to espeak-ng → espeak-ng synthesizes → ALSA → speakers |
| + | |
| + | speechd-up does the same via speech-dispatcher — the middle layer that |
| + | lets brltty + orca + speakup share one synthesizer. |
| + | ``` |
| + | |
| + | `/dev/softsynth` is the file-as-voice — write "hello" to it and the daemon speaks it. `modprobe speakup_soft start=1` brings it up; the daemon does the translating. |
| + | |
| + | ## The braille surface — brltty's full surface |
| + | |
| + | ```sh |
| + | brltty # autodetect the display |
| + | brltty -b xw -d ttyUSB0 # driver + device |
| + | brltty -q # quiet |
| + | brltty -e # the current screen as a table |
| + | brltty -l debug # debug log |
| + | ls /etc/brltty/ # the config — brltty.conf key tables |
| + | ``` |
| + | |
| + | `-b` picks the driver (xw, alva, fs, ht — every major braille-display maker); `-d` the device; `brltty.conf` maps keys. BRLTTY's been the display layer since 1995 — its driver list is the braille-hardware catalog. |
| | |
| | ## The console-reading disciplines |
| | |
| | - `less` pages predictably — screen readers read line-by-line; pagers are friends |
| | - `--no-pager`, `| cat` defeat auto-paging (git's pager speaks awkwardly) |
| | - `TERM` matters — dumb vs linux vs xterm changes how readers track output |
| | - Line-oriented tools (`grep -n`, `awk`, `sed`) are naturally readable; full-screen TUIs (ncurses) need review-mode fluency |
| | - `stty cols 80` keeps output within a braille display's width |
| | |
| | ## Timeline |
| | |
| | | | | |
| | | --- | --- | |
| | | 1976 | Kurzweil Reading Machine — reads paper | |
| | | 1987 | Braille 'n Speak — the notetaker | |
| | | 1995 | BRLTTY + Emacspeak | |
| | | 1998 | Speakup v0.01 — the kernel speaks | |
| | | 2000s | Orca, speech-dispatcher, eyes-free distros | |
| | | 2020 | Speakup reaches mainline — kernel 5.9 | |
| | |
| | ## See also |
| | |
| | - [[Speakup]] — the kernel screen reader's own article |
| | - [[Braille n Speak]] · [[Kurzweil Reading Machine]] — the lineage |
| | - [[Linux]] · [[LFS Kernel and Boot]] |
| | |
| | [[Category:Linux]] |
| | [[Category:Handbook]] |
| | [[Category:Accessibility]] |
| | |