Making Linux Accessible for the Visually Impaired with Speakup
During the past ten years, evolutions in many fields of technology have influenced the lives of all of us, and especially the world's blind population. Advancements in speech synthesis have led to the usability of many different operating systems, Linux among them. One of these programs, and by far one of the best, is a screen review package called Speakup, written by Kirk Reiser with assistance from the user community. Speakup is unique in the sense that it integrates seamlessly into the kernel, allowing it to talk from startup to shutdown, and even to debug kernel errors, which I can testify to from personal experience. It also makes the installation of a Linux system much easier, because one does not usually require a serial console or sighted assistance to complete the installation process.
A screen review package is a program that takes the text displayed on the screen, and outputs it in spoken words. The actual speaking is done by a speech synthesizer, which can come in either hardware or software versions. Hardware synthesizers are either external boxes with headphone jacks and volume knobs that plug in to your computer via serial or USB ports, or ISA or PCI cards that have an output jack for a speaker or headphones. Software synthesizers are actual software programs that handle all the processing of the text into spoken words and output it through the computer's sound card. Speakup supports both hardware and software synthesizers, though software synthesizers require a user-space program and thus can't load at kernel boot, as we'll discuss later. Speakup's key features include seamless integration, logical key layout, support for laptop keyboards, easy adjustability of speech settings and support for software synthesizers.
Speakup is packed full of features, some of which you won't find in any other screen reader. In order to read text, Speakup uses an invisible review cursor. At the same time, however, Speakup tracks the system cursor, to facilitate navigation in menus, editors and similar situations. To perform tasks such as moving the review cursor around, Speakup uses the numeric keypad, hereafter referred to as the numpad.
The numpad Enter key silences speech until the next key press, which is very useful for quieting boot-up messages and/or frequently heard text. It also synchronizes the location of the review cursor with the system cursor, facilitating many different operations. Insert plus numpad Enter silences reading of new text until this combination is pressed again, but still allows you to move around the screen.
The numpad plus key reads the entire screen. The numpad 0, or insert, is used as a key modifier similar to Alt, Ctrl or Shift. Speakup also respects numlock, still allowing the user to enter numbers from the numpad if necessary. Numpad keys 7–9 go up a line, read the current line and go down a line, respectively. A similar arrangement is used for words on numpad 4–6, and with characters on numpad 1–3. The numpad slash marks a spot on the screen, and if there is a spot already marked, it copies the text into memory. Insert plus numpad slash inputs any previously copied text, which usually results in pasting it to the location of the system cursor.
The numpad minus parks the review cursor. Parking means that the review cursor's location will not be moved unless the user moves it; this is useful for tracking text that changes but is not at the cursor, requiring you to move to it constantly. This functionality is also in the windowing system, which will be covered shortly. Numpad star toggles on and off cursor tracking. This is different from parking the review cursor, because parking does not affect what is actually spoken, just where the review cursor is. Cursor tracking always speaks what is at the cursor, which is optimum for menus and editors, but occasionally you may need to turn it off.
For laptops, Speakup has a set of key assignments as well. These center around the Caps Lock key or Windows logo key if it is present on the keyboard. While the Caps Lock key is down, the letters I, O and U act as the numpad 7–9. Thus, you have a very similar arrangement to what you have on the numpad. Some things are different—for instance, Caps Lock plus Enter acts as numpad Enter, but overall it's very similar and easy to learn. When referring to either the the Caps Lock/Windows key or numpad Insert key simultaneously, they are called the Speakup key.
Adjusting speech settings, such as volume, rate, pitch and tone, can be done in two ways.
The first, and probably the easiest, is to use the Speakup key plus the numbers on the number row. The Speakup key plus 1 and 2 decrement and increment the volume, respectively; 3 and 4 do the same with pitch; and finally 5 and 6 do the same with rate. The Speakup key plus F9 and F10 control punctuation, and the Speakup key plus F11 and F12 control the punctuation only for reading.
The Speakup key plus F5 lets you edit the “some” punctuation level. It works by toggling the punctuation that you press, as to whether it is spoken in the specified level. The Speakup key plus F6 does the same for the “most” punctuation level, and Speakup key plus F7 lets you edit what delimiters are used when moving by words; usually it is spacing and certain punctuation.
The other method of changing speech settings is to use the Speakup entry under /proc. Under /proc/speakup, there are the usual items, such as volume, rate, pitch, voice, version and synth_name, as well as some more-advanced items dealing with timing and other things. Some of these values are read/write, and some are read-only. For instance, version gives the current revision of Speakup, including the CVS build date if applicable, but synth_name can be used both to get and set the synthesizer in use. synth_direct is a write-only entry that sends all text directly to the synthesizer. It is even possible to load a new keymap while the system is running, rather than having to rebuild the kernel. There are also values for punct_some, punct_most and delimiters, which do the same things as the key functions described above. There is also a script called speakupconfig, which saves all of your entries in /proc/speakup for the particular synthesizer in use and allows you to restore these settings later, allowing automated loading of settings.