|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ P T ┃
Length: 22963 (0x59b3) Types: TextFile Names: »Paper.jacob«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen └─ ⟦this⟧ »cph85dist/wm/Paper.jacob«
.rm CH .ds CF "\(hy \\n(PN \(hy .\" .ds >. . .rm <. .ds >, , .rm <, .ds [. " [ .ds .] ] .\" .TL User-Level Window Managers for UNIX .AU Robert J.K. Jacob .AI Naval Research Laboratory Washington, D.C. 20375 .AB .I Wm manages a collection of windows on a display terminal. Each window has its own shell or other interactive program, running in parallel with those in the other windows. This permits a user to conduct several interactions with the system in parallel, each in its own window. The user can move from one window to another, re-position a window, or create or delete a window at any time without losing his or her place in any of the windows. Windows can overlap or completely obscure one another; obscured windows can be "lifted" up and placed on top of the other windows. .PP This paper describes how such a window manager for UNIX\(dg .FS .PP \(dgUNIX is a trademark of Bell Laboratories. .FE is implemented as a set of user processes, without modifications to the UNIX kernel. It shows how the simple, but well-chosen facilities provided by the original (Version 6) UNIX kernel are sufficient to support .I wm . In addition, subsequent versions of .I wm exploit features of the kernel introduced into newer versions of UNIX to provide faster and more sophisticated window operations, still implemented entirely at the user level. .AE .SH Introduction .PP This paper describes the design of a display window manager for UNIX implemented entirely as a set of user processes, without modifications to the UNIX kernel. It shows how the simple facilities provided by the original (Version 6) UNIX kernel are sufficient to support such a window manager. In addition, more recent versions of the window manager exploit features of the kernel introduced into newer versions of UNIX to provide faster and more sophisticated operations in windows, still implemented entirely outside the kernel. .PP This window manager, .I wm , provides a UNIX user the ability to conduct several interactions in parallel, each in a different window on a text display terminal. The windows may be created, moved, and temporarily or permanently erased at any time. They may also overlap or completely obscure one another, and such hidden or partially hidden windows may be "lifted" and placed on top of the other windows as desired. Figure 1 shows a snapshot of a .I wm session in progress. .SH User Interface .PP The notion of organizing computer data spatially was propounded and exploited by Nicholas Negroponte in the Spatial Data Management System\*(<.\*([.2,\|3\*(.]\*(>. In .I wm , however, spatial cues are used only to specify a context for a dialogue. Once a window is selected, further interactions within that window make use of the power and abstraction of more conventional user interface techniques. Teitelman\*([.8\*(.] made good use of display screen windows for a collection of parallel interactions with an INTERLISP system. More recently, several personal computers and workstations have adopted this window-oriented style of dialogue as their principal mode of interaction. Other systems similar to the present one have also been provided under UNIX\*(<.\*([.4,\|7,\|9\*(.]\*(>. .PP Traditional user interfaces for computers that handle parallel processes place all inputs and outputs in one chronological stream, identifying the process associated with each, but interleaving the data. The Berkeley job control facilities for UNIX provide a first attempt at improving this situation\*(<.\*([.5\*(.]\*(>. .PP By contrast, a window-based user interface enables a user to manage a collection of dialogues by associating a spatial location with each dialogue, in much the same way one organizes a desk. On a desk, all input papers on all topics are not (one hopes) placed on a single pile in chronological order, but rather they are divided into piles by topic. When input for a particular topic is received, the corresponding pile is located, lifted, and placed on top of other papers, and the necessary work is done on that pile. Each topic may thus be associated with and remembered in terms of a location on the desk. Recent empirical evidence showed that such a window-oriented user interface induced better user performance than a more traditional scrolled message interface in a particular situation involving several parallel interactions\*(<.\*([.6\*(.]\*(>. .PP .I Wm conducts several concurrent dialogues with a UNIX user. Each takes the form of a UNIX shell, to which UNIX commands can be given and from which other interactive programs can be initiated. Each dialogue is conducted in a separate area of the screen or .I window designated by the user. At any moment, one of the windows is considered the current input window, and all keyboard inputs (except for .I wm commands themselves) are sent to the shell or program associated with that window. At any time (including in the middle of typing a command in a window), the designation of the current window may be changed and a different dialogue begun or resumed. Outputs resulting from these dialogues will appear in their appropriate windows as they are generated, regardless of which window is the current input window. Output destined for a portion of a window that is obscured by another window will appear whenever that portion of the window is uncovered. Windows can be "piled" on one another in any sequence. .PP .I Wm was originally designed for use in an intelligent terminal that could communicate with several computers simultaneously. Each dialogue with a different computer was associated with a window. The method is equally applicable to a collection of dialogues, all with the same computer but on different topics. Still, any or all of the present windows can run programs to conduct interactive dialogues with other computers (such as .I telnet ). .SH Design for "Vanilla" UNIX .PP To implement a system of this sort, it is necessary for one user process to be able to manage a collection of other user processes and to mediate all of their inputs and outputs. For the inputs, it must act as a switch, directing input from the keyboard to different programs in response to user commands. For the program outputs, it must place the output of each program in its correct position on the screen. .PP If adequate primitives for creating and manipulating processes and for catching their inputs and outputs are provided by the operating system, a window manager can be built entirely as a user program. The original design of UNIX, with its .I pipe and .I fork mechanisms provides a user the right primitives to design such a system in an elegant fashion without kernel modifications. .PP .I Wm initiates and manages its own collection of UNIX processes, including those run in response to entered commands. Any conventional UNIX program can be used from .I wm , provided it does not make significant assumptions about the nature of its input and output devices\-that is, it should treat input and output from a pipe as equivalent to input and output from a terminal or other source. .PP .I Wm runs as .I 2n+2 parallel UNIX processes of four different types (where .I n is the number of windows in use). The division into processes is dictated by the fact that the original UNIX .I read call on an empty pipe or input device causes a process to block until input becomes available. Hence there is a separate process for each pipe or device that must be read asynchronously. Each such process contains a loop that reads from its particular pipe or device, processes the input, and then waits for more. Figure 2 shows the processes and pipes that comprise .I wm . .PP The .B main process reads from and waits for input from the keyboard. Input consisting of text is sent to the shell process associated with the current window and also to the .B scrn process, described below, for echoing. Input consisting of .I wm commands is interpreted by .B main , translated into one or more primitive commands plus arguments, and sent to .B scrn for execution. Simple changes in the input command language are thus localized in .B main . To change the name, input syntax, or prompt for a command, only the code in .B main need be modified. Since input commands are reduced to a somewhat more general set of primitive commands, some simple new commands may be implemented entirely in .B main as aliases for specific uses or combinations of the existing primitive commands. .PP The .B scrn process handles all outputs to the screen. All processes that want to affect the screen must thus place requests to do so on a common pipe. .B Scrn reads these instructions from the pipe and makes appropriate modifications to the screen. .I Wm commands that affect the screen layout, such as moving a window, are placed on this pipe by .B main and handled by .B scrn . Output text characters from the individual shell processes that belong in a window are also placed on this pipe along with a window identifier and a bit indicating whether the character should be displayed immediately or just remembered for the next time the display is refreshed. .B Scrn then compares the desired configuration of the screen to a buffer containing the actual configuration and transmits the necessary updates.\(dg\ .FS .PP \(dgThe update algorithm is less sophisticated than the optimization performed in the .I curses package\*(<,\*([.1\*(.]\*(>, but .I curses was not available in Version 6 UNIX. This update algorithm is also somewhat easier to adapt to unusual terminals, as seen below. .FE .PP There is a .B shell process associated with each window. This is simply the standard UNIX .I sh (or any other designated program). These .B shell processes have no direct access to the terminal, but run as captives of .I wm , connected by pipes, so that their inputs and outputs can be mediated. The input to each of these processes is a pipe from .B main , since .B main knows which window is the current input window and can place the typed input text on the pipe to the corresponding .B shell process. All outputs of the .B shell processes must be sent to .B scrn to be displayed, but they must first be tagged with the name of the window in which they belong. .PP To do this, each window has a .B shmon process that monitors the output of the corresponding .B shell process. The output of each .B shell process is a pipe to a corresponding .B shmon process. Each time output appears on that pipe, .B shmon reads it, packages it with a header identifying its window, and then places it on the common request pipe to .B scrn . .PP .I Wm comprises about 1000 lines of C code\-about 500 each for the .B main and .B scrn processes and less than 50 for the .B shmon process. .SH Remarks and Problems with "Vanilla" UNIX .PP Each window in .I wm emulates an individual glass teletype. Inputs appear in the bottom and scroll off the top of a window. Since the standard input and output for all programs run by .I wm are really pipes, all programs run under .I wm should treat their inputs and outputs simply as streams of characters, without distinctions between terminals and pipes. The fact that UNIX and most of its original programs permit a pipe to be substituted for a terminal input or output stream is an elegant aspect of UNIX that is crucial to .I wm . This obtains for most UNIX programs; they perform individual "building-block" functions and are thus intended to be equally usable individually from the terminal or as filters connected to other programs to perform more complex tasks. Programs that try to determine whether they have access to a real terminal may behave differently or even refuse to run with .I wm . For example, .I stty is meaningless when applied to a pipe rather than a terminal, .I vi will refuse to run from a pipe, and .I csh will not allow job control if it cannot access the terminal. (However, note that .I wm is really an alternate approach to controlling concurrent jobs.)\ .PP A very rudimentary facility for supporting a whole-screen-oriented program is provided. It creates a special temporary window, creates a .I termcap description of a "terminal" that occupies only the corresponding area of the actual screen, and then provides that description and direct access to the terminal to the screen-oriented program until the latter exits. .PP Since .I wm operates with the terminal in raw mode, it must provide for itself the input line editing functions normally provided by the teletype driver. .PP Because of the architecture of .I wm , there are no pipes that connect one window to another, hence there is no explicit facility for communication between windows. It can be achieved, however, through the file system. A program in one window can append to a file while one in another window continuously tries to read from the end of that file. .SH Terminal Dependencies .PP While the newer version of .I wm uses .I curses to perform all terminal-dependent operations in a terminal-independent fashion, terminal dependencies can be isolated fairly easily even without .I curses . All terminal-dependent code in the original .I wm is restricted to a collection of five simple procedures. They were originally written separately for each type of terminal, but have also been written in terms of the terminal-independent interface, .I termcap , for systems that have it. .PP The five procedures perform the following tasks: .RS .IP \fBttyinit\fP 15 Performs any necessary initialization for the terminal. .IP \fBttyclose\fP 15 Performs any necessary closing for the terminal before .I wm exits or suspends. .IP \fBttymov\fP 15 Moves the terminal cursor to a given row and column. .IP \fBclearscreen\fP 15 Clears the terminal screen. .IP \fBclearline\fP 15 Clears from the cursor to end of the current line (not mandatory). .RE .LP For each of several common terminals, the definitions of these procedures comprise about 15 lines of code altogether. .PP This approach isolates terminal dependencies sufficiently that .I wm can also be adapted for use on graphic displays by replacing the above procedures and making other minor changes. Such a version of .I wm has been written to produce output suitable for the standard UNIX plot filters (plus some added commands for raster graphic displays) and used with a Genisco frame buffer. Windows may be in various colors and may use different fonts for their text. .SH Design for Version 4.2 UNIX .PP Berkeley Version 4.2 VAX UNIX provides new features that make it possible to improve .I wm significantly. By using pseudo-terminals instead of pipes for interprocess communication, several of the problems discussed above disappear. In addition, the synchronous input/output multiplexing feature of the new UNIX makes the former division of .I wm into processes as dictated by the blocking read unnecessary. A revised version of .I wm , then, solves many of the earlier problems and runs in a single process (plus the user's shells). It is, however, less interesting and certainly less portable than the initial version. Again, the facilities are provided entirely in user-level processes, without the need for kernel modifications. .PP This version of .I wm reads from the keyboard and also from the pseudo-terminals associated with each window, in a round-robin, using the multiplexed read call .I (select) . Keyboard input consisting of text is sent to the pseudo-terminal associated with the current window. The pseudo-terminal driver itself handles echoing (when enabled) and intraline editing, obviating the need for .I wm to duplicate these functions. Keyboard input consisting of .I wm commands is processed directly; text input is sent to the appropriate pseudo-terminal. Output from the pseudo-terminals is read by .I wm , interpreted in terms of the cursor control commands of a simple virtual terminal defined by .I wm , and then added to the appropriate screen window for processing by the .I curses package\*(<.\*([.1\*(.]\*(>. .PP This version of .I wm comprises about 1000 lines of C code, all in a single process. Figure 3 shows the architecture of the program. .SH Remarks and Problems with Version 4.2 UNIX .PP Since each window is implemented with a pseudo-terminal, the fact that a program is running in a window rather than on a real terminal is transparent to most programs. Specifically, most screen editors and games may be used, and .I stty may be called to change characteristics such as echoing or line editing individually for each window. For example, note that one of the windows in Figure 1 is running .I vi , which has adjusted itself to the window size. Some programs, however, assume that their output devices are of some minimum size; they will not run well in very small windows. Also, programs that attempt to manipulate the controlling terminals of process groups will not work properly under .I wm . For this reason, .I csh cannot currently be run in the individual windows instead of .I sh . .PP It is generally not possible to move a window while an interactive program (other than a shell) is running in it. First, this is necessary because, whenever a window is moved, .I wm sends a shell command to change the .I TERMCAP variable for the shell in that window, to describe its new size. A more fundamental reason is that the .I curses library routines (sensibly) do not expect the terminal description to change while a program is running, and so make no provision for checking for or adapting to such changes. .PP Since pseudo-terminals are a system-wide resource and are usually fixed in number, the total number of windows that can be in use by all users at any one time is limited to the number of pseudo-terminals made available to .I wm . .PP A facility for communicating between windows is now easy to provide. Since each window uses a pseudo-terminal, any data sent to its slave pseudo-terminal will appear in the window; and pseudo-terminals are in the name space of the UNIX file system and thus available to other processes. To simplify use of this feature, when a window is created and a pseudo-terminal obtained for it, a link to the name of its slave pseudo-terminal is created in the user's current directory. Any program inside or outside .I wm can then write to or read from that file name without prearrangement. .SH Program Versions .PP These programs are written in C for use with UNIX. There are three principal versions: .B wm.v6 , .B wm.v7 , and .B wm.v42 . The first, as described above, runs under unmodified Version 6 UNIX on a PDP-11. The code for this version was frozen and abandoned several years ago, but it is still available. .B Wm.v7 runs under Version 7 UNIX, and the same code also runs on Berkeley 2.8 and also on a VAX on Berkeley 4.1 and 4.2. No changes in the source code are required between the PDP-11 and VAX, except that constants for the maximum number and size of windows are limited by the available memory on a PDP-11. This version is similar in design to .B wm.v6 , which was described above, but has a number of improvements. The newest version, .B wm.v42 , runs only under Berkeley 4.2 on a VAX, as described in this paper. It uses the .I select synchronous input/output multiplexing call, which is unique to 4.2, and also other features that are found in some, but not all, versions of UNIX, such as pseudo-terminals and .I curses . At this writing, this version is not yet thoroughly tested on 4.2. An intermediate version for use with Versions 2.8 or 4.1 can also be constructed by adapting some of the features of .B wm.v42 to .B wm.v7 . For example, the use of .I curses can certainly be adapted to 2.8; pseudo-terminals are available on some versions of 4.1; and some versions of 4.1 can also simulate a non-blocking read on a pseudo-terminal or a short time-out. .SH Availability .PP Three versions of .I wm are available to interested researchers. .RS .IP "\fBwm.v6\fP" 10 For Version 6 UNIX. .IP "\fBwm.v7\fP" 10 For Version 7 UNIX, also runs on Berkeley 2.8, 4.1, and 4.2. .IP "\fBwm.v42\fP" 10 For Berkeley 4.2 UNIX only (but has some features than can be retrofitted to .B wm.v7 ). .RE .LP The code can be obtained over the Arpanet by sending a request to .\" the two (hy is to prevent the hyphenation algorithm from splitting nrl-css jacob@nrl\(hycss. The author can also be reached via uucp at ...!decvax!linus!nrl\(hycss!jacob. .SH Conclusions .PP It is demonstrably feasible to provide a useful and efficient display window management facility in UNIX at the user level, without support from kernel modifications. Such a facility can even be provided for the original Version 6 UNIX, although some improvements are obtainable by exploiting features provided by more recent versions of UNIX. .SH Acknowledgments .PP I would like to thank Mark Cornwell, Rudy Krutar, Alan Parker, and Mark Weiser for helpful discussions of this work. .]< .\"Arnold.K.-1980-1 .ds [F 1 .]- .ds [A K. Arnold .ds [T Screen Updating and Cursor Movement Optimization .ds [R University of California, Berkeley .ds [D 1980 .nr [T 0 .nr [A 0 .nr [O 0 .][ 4 tech-report .\"Bolt.R.-1979-2 .ds [F 2 .]- .ds [A R. Bolt .ds [T Spatial Data Management .ds [I Architecture Machine Group, Massachusetts Institute of Technology .ds [R Technical Report .ds [D 1979 .nr [T 0 .nr [A 0 .nr [O 0 .][ 4 tech-report .\"Herot.C.F.-1980-3 .ds [F 3 .]- .ds [A C.F. Herot .as [A ", R. Carling .as [A ", M. Friedell .as [A ", and D. Kramlich .ds [T A Prototype Spatial Data Management System .ds [J Computer Graphics .ds [V 14 .ds [N 3 .ds [P 63-70 .nr [P 1 .ds [D 1980 .nr [T 0 .nr [A 0 .nr [O 0 .][ 1 journal-article .\"Horton.M.-1982-4 .ds [F 4 .]- .ds [A M. Horton .ds [I personal communication .ds [D September 8, 1982 .nr [T 0 .nr [A 0 .nr [O 0 .][ 2 book .\"Joy.W.-1980-5 .ds [F 5 .]- .ds [A W. Joy .ds [T An Introduction to the C Shell .ds [R University of California, Berkeley .ds [D November 1980 .nr [T 0 .nr [A 0 .nr [O 0 .][ 4 tech-report .\"Murrel.S.-1983-6 .ds [F 6 .]- .ds [A S. Murrel .ds [T Computer Communication System Design Affects Group Decision Making .ds [J Proc. Human Factors in Computer Systems Conference .ds [D 1983 .ds [P 63-67 .nr [P 1 .nr [T 0 .nr [A 0 .nr [O 0 .][ 1 journal-article .\"Pike.R.-1983-7 .ds [F 7 .]- .ds [A R. Pike .ds [T Graphics in Overlapping Bitmap Layers .ds [J ACM Transactions on Graphics .ds [V 2 .ds [N 2 .ds [D 1983 .nr [T 0 .nr [A 0 .nr [O 0 .][ 1 journal-article .\"Teitelman.W.-1979-8 .ds [F 8 .]- .ds [A W. Teitelman .ds [T A Display Oriented Programmer's Assistant .ds [J International Journal of Man-Machine Studies .ds [V 11 .ds [P 157-187 .nr [P 1 .ds [D 1979 .nr [T 0 .nr [A 0 .nr [O 0 .][ 1 journal-article .\"Weiser.M.-1983-9 .ds [F 9 .]- .ds [A M. Weiser .as [A ", C. Torek .as [A ", R. Trigg .as [A ", and R. Wood .ds [T The Maryland Window System .ds [R Technical Report 1271 .ds [I Computer Science Department, University of Maryland .ds [D 1983 .nr [T 0 .nr [A 0 .nr [O 0 .][ 4 tech-report .]>