Include the Speakup Screen Reader in the Ubuntu kernels, and provide some extra user-space enhancements to make working with speakup easier for users.


The Speakup screen reader is one of the most well known screen readers available for the Linux console. Ubuntu has a screen reader for the GNOME desktop, but does not yet have one that can be used on the console, especially in cases where X/GNOME may not be available. Blind users may also wish to be able to administer servers which only have the console available, and may need direct access, requiring a screen reader to accomplish their work.

Use cases

  • David is a regular user of the various GNOME screen readers to accomplish daily tasks. However, for some reason, X will not boot, probably due to an error in his X config file. He needs a screen reader for the console so he can go and manually edit the file.
  • Joe is totally blind, and wants to set up a server install of Ubuntu. He needs a screen reader for the install, as well as for the running system, so he can easily get the server up and running, and will have a way to get feedback if he ever has to return to do work on the server locally.


This specification will discuss getting the speakup patches included into the Ubuntu kernel tree, as well as some userspace enhancements to make working with speakup easier for the user.


Speakup can either get built directly into the kernel and be active as soon as the kernel boots, or it can be built as a set of modules, allowing the user to load the screen reader when they need it. Since only a small number of users may use speakup, it makes sense to build it as modules, and write userspace scripts to load/unload as necessary.

Speakup consists of several kernel modules. Two modules are the core of the screen reader, one of which is only loaded when the user enables keyboard help, to learn about the various keystrokes that speakup has. The rest of the modules are for the different speech synthesizers that speakup supports. Speakup provides an easy mechanism for switching between speech synthesizers, as well as changing various speech parameters for the currently loaded speech synthesizer. Luckily, these parameters can be changed by normal users, and speakup handles the loading of modules automatically, if the need arises.

Speakup also comes with various user-space utilities to load and save speakup configurations, and allow users to create and use custom keystrokes. These utilities, along with some extra scripts for better user configuration management will be provided in a package called speakup-userspace. Of particular note, is an init script which will load the speakup module at system startup, so that users can simply type a command to start using speakup with a speech synthesizer. Note that the speakup module loaded on its own will not have any effect on the currently running system.


  • Speakup would be patched into the kernel, and built as modules, with no default synthesizer set. Currently, speakup is maintained in CVS, with patches against key kernel files kept in a separate directory. Patching speakup into the kernel involves patching core kernel files such as the keyboard driver, and the virtual terminal driver in vt.c. The speakup code itself is then copied into the drivers/char/speakup directory. The patching of the kernel itself has very little impact on the core of the kernel.
  • Since software speech will be the most commonly used of all the synthesizer drivers in speakup, it is important that the speakup core module and any synthesizer driver the user may have configured gets loaded after the sound card is brought up. An init script would check for a configuration file such as /etc/default/speakup for settings related to whether it loads a synthesizer driver at startup, and if so, which driver.
  • Since speakup effects keys pressed even on the tty where X is loaded, a script will also be placed in /etc/X11/Xsession.d which will disable speakup for that console. Again, this script will simply use the speakup proc interface.
  • A kernel udeb containing speakup modules, as well as a speakup userspace udeb package will be created to allow for the use of speakup in the Debian Installer environment.
  • For software speech synthesizer support in d-i, a udeb will also have to be created for kernel sound modules, any necessary utilities, and libraries for setting sound volume.

Outstanding issues

  • As software speech synthesizers will be the most common form of synthesis used with speakup, speech-dispatcher needs to be seeded to main, and reworked to ensure flite does not get included by default.
  • Discussion needs to be had with the speakup upstream maintainers to see about moving the speakup code into a git tree. This would allow Ben Collins to more easily pull speakup changes into the Ubuntu kernel.
  • Examine the various software synthesis options available to see which one would be the most lightweight and least resource hungry in terms of disk space, and memory usage.
  • Discuss with Colin Watson about how we could go about implementing software speech for d-i.

BoF agenda and discussion


SpeakupInclusion (last edited 2008-08-06 16:21:31 by localhost)