Linux Large Text For Low Vision HOWTO (Draft) INTRODUCTION The objective is to creat a non-graphical, (large) text-based user interface for Email, Internet browsing, word processing, etc. I hope the following information will provide some useful hints and perhaps a starting point for a "Linux Large Text For Low Vision HOWTO." Most of the work remains to be done, such as trying these methods on various Linux boxes with various users, especially low-vision users, and then documenting and incorporating that experience into a HOWTO. My experience with the following large-text methods has been on two computers: a 120 MHz Pentium and a more recent 500 MHz AMD, using RedHat 6.2 and 7.2 on both computers. With different computers and different distributions of Linux, large-text methods will probably be somewhat different. The large-text interface is basically one or more Xterms (terminal windows) running in X Windows, using the Gnome display manager and the Enlightenment window manager. The "virtual screen" grows to fit the character (or font) size. With characters about one-inch high (a font size of 112), the virtual screen can be imagined as a four-by-eight foot sheet of plywood, oriented horizontally. This virtual screen can be "moved around under the monitor screen" as the user reads it or writes on it. These up, down, right, left "screen moves" can be bound to various keys via window manager configuration. For the last four months I have been using my 500 MHz AMD computer with RedHat 7.2, but with Enlightenment -0.15.5-48 (the version that comes with RedHat 6.2) as the window manager. It has been working well for both large-text use and for standard use. However, prior to this, for over a year I was experimenting with various large-text methods and "crashed" my computers several times, resulting in: delayed boot ups with error messages; reduced, missing, or no functionality; and "core dump" icons and files. I believe these problems occurred because I changed file permissions and/or ownerships and perhaps because I used aliases instead of scripts for some complex commands (See "Linux Problem Solver" by Brian Ward, p. 221.). For the last four months I have avoided both of these practices. This necessitates (when using the Bash shell, standard with RedHat) preceding my script commands with sh space or dot (period) space. There are ways around this in Bash, using chmod to change permissions, but I don't recommend them. To see what shell my system is using I use the echo command: "echo $SHELL". Also, to avoid changing permissions I briefly change to root when connecting to or disconnecting from my ISP or shutting down. If I had time, I would re-install Linux (RedHat 6.2, 7.2 and possibly SuSE) on both my computers, carefully documenting every step, for inclusion into the HOWTO. But with my current work schedule and other time constraints, I'm afraid my progress would be slow and would delay the emergence of a "Linux Large Text For Low Vision HOWTO." So, at this point, I will summarize what I've learned in the hopes that volunteers will continue. I will continue exploring Linux large text capabilities and sharing anything I find that seems useful. DISCLAIMER Experiment with the following methods at your own risk. In what follows I describe what seemed to work for me, on my computer systems. I can't guarantee the results other users will have on other computer systems. Experimentation should only be done on a computer you can afford to have crash, losing all stored data, and necessitating re-installing Linux. HARDWARE CONSIDERATIONS The methods described here don't require an expensive computer. An older computer, such as my 120 MHz Pentium, can be used by itself or it can share a monitor, printer, keyboard, mouse, etc., with one or more other computers; and switch boxes are available to make this more convenient. Also, an additional hard-drive can be installed on an existing computer and used only for Linux/Low-Vision. My 120 MHz Pentium has its original Windows 95, and Linux is installed on a separate hardrive. (See the appropriate documentation for hardware questions.) LINUX INSTALLATION Linux should be installed and set up by a person with reasonably "normal" vision. There is no information provided here for installation and initial large-text setup by a person with low vision. When installing RedHat, I select Custom Installation and I select the "everything" option, which requires more disk space, but ensures I have lots of applications installed. For my 17-inch monitor, I select a resolution of 800 x 600 and a color depth of 256 colors (8-bit). You may have to find your own values here. For setting up modem, ISP connection, printer, etc., I recommend the GUI tools that come with the distribution. I currently have my computer come up in a line-mode prompt (runlevel 3) from which I use the startx command to enter X Windows. XTERM The first step is getting large text in an xterm. To find out what fonts are available on my RedHat Linux system, I type xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m-*' (This command and a good description of font specifications is given on pages 449- 450 in the "GNU Emacs Manual," Fourteenth Edition, Version 20.7, by Richard M. Stallman. Also, there is a good font HOWTO, and man X has relevant information.) Scalable fonts--the kind that look good to me at any size--have the pattern 0-0-0-0-m-0 instead of specific numbers for pixels, height, etc. The scalable fonts can be found by themselves by typing xlsfonts -fn '*-*-*-*-*-*-*-0-0-0-0-m-0-iso8859-*' Once a suitable font is chosen, the following command will open an xterm with nearly any font size. For example, using a font of 112 xterm -fn "-adobe-courier-medium-r-normal--112-*-*-*-m-*-iso8859-1" It might be a good idea to try this now (using a font installed on your system), to see if your monitor and setup are working OK. The "virtual screen" can be moved around by "grabbing it" with the mouse, which is done by holding the alt key and the left-hand mouse button. To close this screen, you'll have to slide it to the left until you see the close button in the upper-right-hand corner. This is not a very pleasant way to move the screen for any length of time, so we'll soon move on to window managers and their configuration. Later, a script can be written to open an xterm with a font of nearly any size, by replacing 112 in the above command with the size that suits you. I have used font sizes up to 312 (which makes the letters about 3 inches high); and there is nothing special about my choice of numbers; 100, 93, 300, 277, etc. will bring up fonts of the corresponding sizes. If you want to specify the font size each time you open a large-text xterm, you can replace the 112 in the above command with $1 xterm -fn "-adobe-courier-medium-r-normal--$1-*-*-*-m-*-iso8859-1" I wrote this command in the Emacs editor and called it xxx (Emacs xxx being the command used in an xterm to get into Emacs). I have to predede xxx with a dot space when I run it, as I do with all my scripts, as explained in the Introduction. Also, for the above command, with the $1 in it, the xxx is followed by the desired font size, for example: . xxx 150 Note: There are a lot more arguments that can be specified when opening an xterm, such as foreground and background colors and location of the xterm in the monitor (xterm -geometry +0+0 -fn etc.). The -geometry +0+0 argument locates the xterm's upper-left-hand corner in the monitor's upper-left-hand corner, and seems to be necessary when using Enlightenment Configuration Shortcuts, Run Command, to bind a key to the command. I haven't needed the -geometry argument when using scripts. (For more information, use the command: "man xterm" or consult one of the many books available on Linux, some of which are listed at the end of this document.) ADDING A NEW USER At this point, it is probably best to add a new user, especially if you are going to change from the default window manager. The new window manager and its configuration can just be for that new user. The documentation for your Linux distribution can probably explain how to do this. ( For someone using RedHat 6.2, this may not be necessary.) WINDOW MANAGERS There are many window managers available for Linux. I have only tried Sawfish and Enlightenment for use with large text. SAWFISH Sawfish is the default window manager when using Gnome in RedHat 7.2. It is usable for large text, but as far as I can see, it only gives one variable for the screen moves. The variable is called "slide Pixels," and a value of 600 is a reasonable compromise. ENLIGHTENMENT Enlightenment -0.15.5-48 is my preferred window manager. With this version of Enlightenment, each up, down, right, and left move (which is bound to a key or key combination, using the shortcuts item on the configuration menu) can be given its own move value. This allows much better control of screen movement. RedHat 6.2, since it uses the preferred Enlightenment as the default in Gnome, seems more integrated; and 6.2 will probably install and run well on some older computers, as it does on my 1997, 120 MHz Pentium. CONFIGURATION To enter the Enlightenment or Sawfish configuration menu, the middle mouse button is pressed when the mouse is over a bare area of the desktop. For Enlightenment, the shortcuts submenu is chosen, and there are lots of options. The most useful of these for me have been the following: Scroll Windows by [X Y] pixels Run Command Annihilate Window Note: The large fonts seem to work best if the "Size of Virtual Screen" (in the Configuration Desktops menu) is left at the default 1x1. Also, for the "Keyboard focus follows" options (in the Configuration Basic Options menu), "Sloppy Pointer" may be the best choice. USING THE KEYBOARD (ONLY) I use the far right-hand keypad for most Shortcut bindings. I've used the following keys and corresponding X Y values for Scroll Windows: KP_Right -700 0, KP_Left 700 0, KP_Home 4900 0 (like Return or Enter for 112 font), KP_Prior (Page Up) 0 500, KP_Next (Page Down) 0 -500, KP_Up 0 100, KP_Down 0 -100, Ctl (Control Key, used as a "Modifier")KP_Right -100 0, Ctl KP_Left 100 0, Ctl KP_Prior 0 2500, Ctl KP_Next 0 -2500, Ctl KP_Home -4900 0 (moves screen from left-most edge to right-most edge, like opposite of Enter) For a font other than 112, experiment to find convenient values. For Run Command, I've used KP_Begin (5 on my keypad!) to run an xterm command, like the one mentioned above for large fonts, with a font size of 16, comfortable for my late-middle-aged eyes. I use KP_Add (+ key) for an xterm with 112-sized font. Note: Once a suitable font is found for a low-visioned user, and Scroll Windows have been given convenient X Y values, a key should be bound to Run Command, using "xterm -geomety +0+0 -fn (font info here, etc.)". This way, the user just hits a certain key or key combination to open an xterm with the chosen font. I use Delete (Del on keypad) to Annihilate Window, which is a lot more convenient than scrolling to the far upper RH corner to hit the X close window button. Note: Position the large-text window so that its upper-left-hand corner is in the monitor's upper-left-hand corner before annihilating it. Otherwise, your launching window will be "lost in virtual flatspace." For a low visioned user, this should be a GUI-less interface. This shouldn't be a problem, if a reasonably experienced Linux user is available to install Linux and set it up. With RedHat, the computer can be configured to come up in text mode or in X Windows. The login might be a little tricky for a low-visioned user, but the distinctive lack of screen activity when it's ready to accept a login would probably be recognizable. Locator dots are available to help with orientation on the keyboard. The dots are raised so they can be felt, and they have adhesive to stick onto the desired keys. XTERM APPLICATIONS As mentioned in the Introduction, this is basically an "xterm user interface." The Pine Email program, the editor Vi, the text-based Internet browser Lynx, and I would guess many other programs can be run in a large-text (or "large-font") xterm, and the programs also run with the same large font. I've used Pine this way quite a bit, and it works well, as does Lynx. However, with Lynx, the particular website has a lot to do with how well it works with a large-text xterm. I've read online English literature from www.literature.org, and I was surprised at how well www.cnn.com worked the other night when I first tried that address. The Emacs editor has to be entered a little differently. From an xterm of any sized font, "emacs" is followed by the same font info that follows the xterm command: emacs -fn "-adobe...etc. I've gone through the emacs tutorial with a font of 112, and it worked pretty well. Note: If emacs is to be used a lot, it might be best to bind the above command to a key, using Enlightenment Configuration. ISP/INTERNET CONNECTION I spent too much time struggling with text-based Internet connect/disconnect commands. What finally made it easier is using the "ps -ax | more" command before and after connecting to or disconnecting from my ISP, using the default GUI method. This let me see the command's text version. With RedHat 6.2, I found "/sbin/ppp-watch ifcfg-ppp0" to connect, and I can use killall "/sbin/ppp-watch" to disconnect. (With RedHat 6.2 I can also use "wvdial &" to connect and "killall wvdial" to disconnect.) With RedHat 7.2, I found "/sbin/ppp-watch ppp0 ifcfg-ppp0" to connect and "killall /sbin/ppp-watch" to disconnect. Note: As mentioned in the Introduction, I briefly change to root to use these commands. Also, I'm using fetchmail to retrieve my Email, and the command that I'm using is "fetchmail -p POP3 -u tdan pop.foxinternet.com," with "tdan" my username and "pop.foxinternet.com" my mail server. WHEN X FAILS Two useful commands for bailing out that work with these versions of RedHat Linux (and probably other Linux distributions) are Control Alt Delete, which gives a safe reboot from console mode, and Control Alt Backspace, which exits X Windows and returns to the console mode. Note: For a low-visioned user, Control Alt Delete will be more useful if there is a way to configure it so that the computer halts after the shutdown, instead of rebooting. This may be possible, but I haven't worked on it yet. I'm currently using "/sbin/shutdown -h now" to shutdown the computer from an xterm window. As mentioned in the Introduction, I have to be in root to do this, as I also have to be in root to connect to or disconnect from my ISP. I only stay in root for long enough to do these tasks, because being in root when not necessary is risky and not recommended. ADDITIONAL ISSUES These methods are meant to be independent of mouse and GUI, but if the mouse pointer is out of the xterm window, "focus," or use of the window may be temporarily lost. There may be ways to deal with this using Enlightenment Configuration, or creating a large, visible pointer, or perhaps just clamping the mouse roller so that the pointer is always positioned in an unobtrusive corner of the screen. However, this is something I haven't experimented enough with. What would really be nice, if possible, would be converting a joystick to a two-axis foot rocker and programming it for right, left, up, down, scrolling ("virtual screen" movement). This would leave the hands free for normal keyboard typing. The electro-mechanical aspect seems doable, but I don't know what kind of drivers and software exist for using joysticks with Linux for scrolling. Keeping track of the much more visible, rectangular text cursor, especially when writing, takes getting used to. It follows the text being entered and carriage returns (Enter key), not screen moves. One more thing that should probably be mentioned are the error messages that seem to follow use of large-text xterms. They don't seem to correspond to any serious problems on my computer, but they might cause concern to the person setting up a low-vision Linux system. A low-visioned user might not see them, as they often are in a standard font size, as are the normal messages that appear as the computer is booting up. Note: On further consideration, these error messages seem to appear when starting a large-text xterm from another xterm and then returning to the original xterm. If the low-visioned user has a key bound to the large-text xterm command, and then runs Email, Lynx, Vi, etc. from thant terminal, there probably won't be error messages. SOURCES "The Concise Guide to XFree86 for Linux," by Aron Hsiao, c. 2000, Que Corporation "The Joy of X," by Niall Mansfield, c. 1993, Addison-Wesley "Linux Programmer's Reference, Second Edition," by Richard Petersen, c. 2000, Osborne/McGraw-Hill "Red Hat Linux: The Complete Reference," by Richard Petersen, c. 2000, Osborne/McGraw-Hill "GNU Emacs Manual, 14th Edition, Version 20.7," by Richard Stallman, c. 2000, Free Software Foundation, Inc. "The Linux Problem Solver," by Brian Ward, c. 2000, No Starch Press Also, there are lots of relevant man pages, on-line documents, HOWTOs, etc.