Skip to content
ALB Wiki

Diff — Eyes-Free Linux

Comparing rev 7 → rev 8

{{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.
+
The chain this handbook's wiki already documents: the **[[Kurzweil Reading Machine]]** (1976 — the machine that read *paper*), the **[[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 — discontinued (last releases ~2017) |
| Sonar | Arch-based — inactive |
| 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 all       Pad+ = say to-end      Pad. = say screen
    Pad0 = shut up           Pad8 = say line        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 fs -d ttyUSB0       # driver + device (fs=FreedomScientific, al=Alva, ht=HandyTech)
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 (fs FreedomScientific, al Alva, ht HandyTech, pm Papenmeier, vo Voyager — 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 |
| 2010 | Speakup reaches mainline — kernel 2.6.36 (staging) |
## See also
- [[Speakup]] — the kernel screen reader's own article
-
- [[Braille n Speak]] · [[Kurzweil Reading Machine]] — the lineage
+
- [[Braille 'n Speak]] · [[Kurzweil Reading Machine]] — the lineage
+
- [[Braille]] · [[Louis Braille]] · [[Abraham Nemeth]] · [[Nemeth Braille Code]] — the codes
+
- [[Adriane Knoppix]] · [[Slint Linux|Slint]] · [[Vinux]] · [[Sonar Linux|Sonar]] · [[Accessible-Coconut]] · [[Stormux]] · [[Vojtux]] — the distros
- [[Linux]] · [[LFS Kernel and Boot]]
+
- [The Library](/library/) — braille codes and translation on the main site
[[Category:Linux]]
[[Category:Handbook]]
[[Category:Accessibility]]
[[Category:Linux Handbook]]