home *** CD-ROM | disk | FTP | other *** search
Wrap
Subject: Frequently Asked Questions about X with Answers [long monthly posting] [Last changed: 30 Jun 91] [For distribution with R5, parts of this document relating to older problems or containing commercial announcements have been removed.] This article contains the answers to some Frequently Asked Questions (FAQ) often seen in comp.windows.x. It is posted to help reduce volume in this newsgroup and to provide hard-to-find information of general interest. Please redistribute this article! This article includes answers to the following questions, which are loosely grouped into categories. Questions marked with a + indicate questions new to this issue; those with significant changes of content since the last issue are marked by *: 0) TOPIC: BASIC INFORMATION SOURCES AND DEFINITIONS 1) What books and articles on X are good for beginners? 2) [Removed] 3) [Removed] 4) What X-related public mailing lists are available? 5) How do I ask a net-question so as to maximize helpful responses? 6) What publications discussing X are available? 7) How can I meet other X developers? (What is XUG? AFUX? EXUG?) 8) What are these common abbreviations? 9) What is the ICCCM? (How do I write X-friendly applications?) 10) What is the X Consortium, and how do I join? 11) Just what are OPEN LOOK and Motif? 12) [Removed] 13) [Removed] 14) What is PEX? 15) TOPIC: USING X IN DAY-TO-DAY LIFE 16) What are all these different window managers? 17) Why does my X session exit when I kill my window manager? 18) Is there a way for my WM to produce my .xinitrc, like toolplaces? 19) How do I use another window manager with DEC's session manager? 20) How do I change the keyboard auto-repeat rate? 21) How do I remap the keys on my keyboard to produce a string? 22) How do I make a screendump of the X display? 23) How do I make a color PostScript screendump of the X display? 24) How can I print the current selection? 25) Why are my xterm menus so small? 26) Where can I find a dictionary server for xwebster? 27) How do I convert/view Mac/TIFF/GIF/Sun/PICT/img/FAX images in X? 28) How can I change the titlebar of my xterm window? 29) Where can I find the xterm control sequences? [edited] 30) How do I keep my $DISPLAY when I rlogin to another machine? 31) How can I design my own font? 32) Why does adding a font to the server not work? 33) How do I convert a ".snf" font back to ".bdf" font? 34) What is a general method of getting a font in usable format? 35) How do I use HP ".scf" fonts on my MIT R4 server? 36) How do I use DECwindows ".pcf" fonts on my MIT R4 server? 37) How do I use DECwindows fonts on my non-DECwindows server? 38) How do I add ".bdf" fonts to my DECwindows server? 39) Why can't I set the backgroundPixmap resource in a defaults file? 40) Why does the R3 xterm, et al, fail against the R4 server? 41) [Removed] 42) How can I have xclock or oclock show different timezones? 43) I have xmh, but it doesn't work. Where can I get mh? 44) Why am I suddenly unable to connect to my Sun X server? 45) Why can't I override translations? Only the first item works. 46) How do I report bugs in X? 47) TOPIC: OBTAINING X AND RELATED SOFTWARE AND HARDWARE 48) Is X public-domain software? 49) [Removed] 50) [Removed] 51) [Removed] 52) [Removed] 53) [Removed] 54) [Removed] 55) [Removed] 56) Where can I obtain other X sources? 57) Where can I obtain interesting widgets? 58) Where can I obtain alternate language bindings to X? 59) What is the xstuff mail-archive? 60) [Removed] 61) [Removed] 62) [Removed] 63) [Removed] 64) [Removed] 65) [Removed] 66) [Removed] 67) Where can I get an "X terminal" server for my low-end Sun 3/50? 68) [Removed] 69) [Removed] 70) [Removed] 71) Where can I obtain an X-based plotting program? 72) [Removed] 73) [Removed] 74) [Removed] 75) [Removed] 76) Where can I get an X-based TeX or DVI previewer? 77) [Removed] 78) [Removed] 79) Where can I find X tools callable from shell scripts? 80) [Removed] 81) [Removed] 82) TOPIC: BUILDING THE X DISTRIBUTION 83) How do I build X with gcc? 84) [Removed] 85) What are these I/O errors running X built with gcc? 86) What are these problems compiling X11R4 with "gcc -traditional"? 87) What are these problems compiling X11R4 on the older Sun3? 88) What are these problems compiling the X11R4 server on SunOS 4.1.1? 89) What are these problems using R4 shared libraries on SunOS 4? 90) [Removed] 91) [Removed] 92) TOPIC: BUILDING X PROGRAMS 93) What is Imake? 94) Where can I get imake? 95) I have a program with an Imakefile but no Makefile. What to do? 96) Why can't I link to the Xlib shape routines? 97) What are these problems with "_XtInherit not found" on the Sun? 98) Why can't I compile my R3 Xaw contrib programs under R4? 99) TOPIC: PROGRAMMING PROBLEMS AND PUZZLES 100) Why doesn't my program get the keystrokes I select for? 101) How do I figure out what window manager is running? 102) Is there a skeleton X program available? 103) Why does XtGetValues not work for me? 104) Why don't XtConfigureWidget/XtResizeWidget/XtMoveWidget work? 105) How can my application tell if it is being run under X? 106) How do I make a "busy cursor" while my application is computing? 107) How do I query the user synchronously using Xt? 108) How do I fork without hanging my parent X program? 109) Why does XtAppAddInput not work as described? 110) How do I simulate a button press/release event for a widget? 111) Why doesn't anything appear when I run this simple program? 112) What is the difference between a Screen and a screen? 113) [Removed] 114) How do I determine the name of an existing widget? 115) What widget is appropriate to use as a drawing canvas? 116) Why do I get a BadDrawable error drawing to XtWindow(widget)? 117) Can XGetWindowAttributes get a window's background pixel/pixmap? 118) Why doesn't GXxor produce mathematically-correct color values? 119) Why does the pixmap I copy to the screen show up as garbage? 120) How can my application iconify itself? 121) How do I check whether a window ID is valid? 122) Why can't my program work with tvtwm or swm? 123) Can I have two applications draw to the same window? 124) How do I keep a window from being resized by the user? 125) How do I render rotated text? 126) Why can't my program get a standard colormap? 127) What is the X Registry? (How do I reserve names?) If you have suggestions or corrections for any of these answers or any additional information, please send them directly to xug@expo.lcs.mit.edu; the information will be included in the next revision (or possibly the one after that; thanks for the many suggestions which haven't been incorporated yet). This posting is intended to be distributed at approximately the beginning of each month. New versions may be archived on export.lcs.mit.edu, uunet, and 132.206.1.1. The information contained herein has been gathered from a variety of sources. In many cases attribution has been lost; if you would like to claim responsibility for a particular item, please let us know. Conventions used below: telephone numbers tend to be Bell-system unless otherwise noted; prices on items are not included. All trademarks are the property of their respective owners. ---------------------------------------------------------------------- Subject: 0) TOPIC: BASIC INFORMATION SOURCES AND DEFINITIONS ---------------------------------------------------------------------- Subject: 1) What books and articles on X are good for beginners? Ken Lee of the DEC Western Software Laboratory (klee@wsl.dec.com) regularly posts to comp.windows.x and ba.windows.x a bibliography containing cites of all known reference books and how-to manuals and also cites of selected technical articles on X and X programming; it is ftp-able as export.lcs.mit.edu:/contrib/Xbibliography and gatekeeper.dec.com:/archive/pub/X11/contrib/Xbibliography Here is an unordered set of the reference books and tutorials most useful for beginners; most appear on that list [comments are gathered from a variety of places and are unattributable]: Asente, Paul J., and Swick, Ralph R., "X Window System Toolkit, The Complete Programmer's Guide and Specification", Digital Press, 1990. The bible on Xt. A treasury of information, excellent and invaluable. Distributed by Digital Press, ISBN 1-55558-051-3, order number EY-E757E-DP; and by Prentice-Hall, ISBN 0-13-972191-6. Also available through DEC Direct at 1-800-DIGITAL. [The examples are on export.lcs.mit.edu in contrib/ and on gatekeeper.dec.com (16.1.0.2) in pub/X11/contrib as asente-swick.examples.tar.Z. They were also recently posted to comp.sources.x as xt-examples/part0[1-5].] Jones, Oliver, Introduction to the X Window System, Prentice-Hall, 1988, 1989. ISBN 0-13-499997-5. An excellent introduction to programming with Xlib. Written with the programmer in mind, this book includes many practical tips that are not found anywhere else. This book is not as broad as the O'Reilly Xlib tutorial, but Jones is an experienced X programmer and this shows in the quality and depth of the material in the book. Originally written for X11R1, recent printings have included corrections and additions. The sixth printing should have X11R4 material. Young, Doug. "The X Window System: Applications and Programming with Xt (Motif Version)," Prentice Hall, 1989 (ISBN 0-13-497074-8). The excellent tutorial "X Window Systems Programming and Applications with Xt," (ISBN 0-13-972167-3) updated for Motif. [The examples from the Motif version are available on export in ~ftp/contrib/young.motif.tar.Z] Scheifler, Robert, and James Gettys, with Jim Flowers, Ron Newman, and David Rosenthal, "X Window System: The Complete Reference to Xlib, X Protocol, ICCCM, XLFD, Second Edition," Digital Press, 1990. "The Bible", an enhanced version of X documentation by the authors of the Xlib documentation. This is the most complete published description of the X programming interface and X protocol. It is the primary reference work and is not introductory tutorial documentation; additional tutorial works will usually be needed by most new X programmers. Digital Press order EY-E755E-DP. DP ISBN 1-55558-050-5; Prentice-Hall ISBN 0-13-972050-2 Nye, Adrian, "Xlib Programming Manual, Volume 1" and "Xlib Reference Manual, Volume 2," O'Reilly and Associates, 1988. A superset of the MIT X documentation; the first volume is a tutorial with broad coverage of Xlib, and the second contains reference pages for Xlib functions and many useful reference appendices. ISBN 0-937175-26-9 (volume 1) and ISBN 0-937175-27-7 (volume 2). [A version updated for X11R4 is available (4/90).] Nye, Adrian, and Tim O'Reilly, "X Toolkit Programming Manual, Volume 4," O'Reilly and Associates, 1989. The folks at O'Reilly give their comprehensive treatment to programming with the MIT Intrinsics; R4 versions are now available, as is a Motif 1.1 version (Volume 4M). O'Reilly, Tim, ed., "X Toolkit Reference Manual, Volume 5," O'Reilly and Associates, 1989. A professional reference manual for the MIT X11R3 Xt; some information on X11R4 is included. Mansfield, Niall. "The X Window System: A User's Guide," Addison-Wesley, 1989. A tutorial introduction to using X, soon to be upgraded for R4. ISBN 0-201-51341-2. Miller, John David. "An Open Look at UNIX", M&T Books, 1990. An Xt book with information on OLIT and the OPEN LOOK extensions to for interfacing with the file and workspace managers. ISBN 1-55851-058-3 (with disk). Quercia, Valerie and Tim O'Reilly. "X Window System User's Guide," O'Reilly and Associates, 1989. A tutorial introduction to using X. ISBN 0-937175-36-6. Also available in R4 and Motif flavors. Rosenthal, David S.H., "Inter-Client Communication Conventions Manual Version 1.0 (MIT Consortium Standard)." The first real ICCCM, available on the R4 tape; a version is also available from the xstuff mail-archive-server. (Prentice-Hall ordering is 201-767-5937. O'Reilly ordering is 800-338-NUTS.) In addition, check the X11R4 core distribution in doc/tutorials for some useful papers and tutorials, particularly the file doc/tutorials/answers.txt. "Late Night's Top Ten X11 Questions" by Dave Lemke (lemke@ncd.com) and Stuart Marks (smarks@sun.com) answers other common questions and some of these here in more detail. ---------------------------------------------------------------------- Subject: 4) What X-related public mailing lists are available? The xpert mailing list is the general, public mailing list on X maintained by the X Consortium. The mailings are gatewayed, so xpert is almost identical to the comp.windows.x Usenet newsgroup. *** If you get comp.windows.x, you don't need to *** *** be added to the xpert mailing list. *** Otherwise, you can join the list to receive X information electronically. It is best to find a local distribution; perhaps someone within your company is already receiving the mailing. As a last resort, send mail to xpert-request@expo.lcs.mit.edu with a valid return electronic address. A mailing list for major X announcements (new releases, public reviews, adoption of standards, but NOT advertisements, patches, or questions) is available by request from xannounce-request@expo.lcs.mit.edu. Messages sent to xannounce will automatically be sent to the xpert mailing list. They will not be sent to the Usenet news group comp.windows.x; however, they will appear in the Usenet news group comp.windows.x.announce. Note: Only redistribution addresses will be accepted for this list -- i.e. no personal addresses. If you wish to receive xannounce yourself, please contact your mail administrator to set up a local redistribution list and to put you on it. In addition, the X Consortium sponsors these public lists: bug-clx CLX bug reports and discussions x-ada X and ada x11-3d people interested in X and 3d graphics ximage people interested in image processing and X xvideo discussion of video extensions for X To subscribe to one of these lists, assuming no-one in your organization already receives it, send mail to <list>-request@expo.lcs.mit.edu with the Subject line including the name of the LIST in caps and the request "addition request". In the body of the message be sure to give an address for your local distribution which is accessible from MIT (eddie.mit.edu). A mailing list for topics related to OPEN LOOK is sponsored by Greg Pasquariello of Unify corporation; send to openlook-request@unify.com (or openlook-request%unify.uucp@uunet.uu.net) for information. A mailing list for bugs in the publicly-available version of XView source, in particular, is sponsored by Sun; send for information to xviewbug-trackers-request@sun.com. A mailing list for topics related to Motif is sponsored by Kee Hinckley of Alfalfa Software, Inc.; send to motif-request@alfalfa.com for information. (This group is gatewayed to comp.windows.x.motif.) A mailing list for topics related to the XPM pixmap-format is sponsored by Arnaud Le Hors of Group Bull; send to xpm-talk-request@mirsa.inria.fr for information. [1/91] A mailing list discussing InterViews can be subscribed to by sending to interviews-request@interviews.stanford.edu. A mailing list (amiga-x11@nic.funet.fi) for topics related to the port of X11 to the Amiga can be subscribed by sending to mailserver@nic.funet.fi a message containing Subject: Adding myself to AMIGA-X11 SUBS AMIGA-X11 Your Real Name ---------------------------------------------------------------------- Subject: 5) How do I ask a net-question so as to maximize helpful responses? When asking for help on the net or X mailing lists, be sure to include all information about your setup and what you are doing. The more specific you are, the more likely someone will spot an error in what you are doing. Without all the details, people who want to help you often have to guess -- if they are able to respond at all. Always mention what version of X you are using and where you got it from. If your server came from a different source as the rest of your X system, give details of that, too. Give the machine type, operating system, and O/S version for both the client and server machine. It may also be appropriate to mention the window manager, compiler, and display hardware type you are using. Then tell exactly what you are doing and exactly what happens. If it is a command that fails, include the exact transcript of your session in the message. If a program you wrote doesn't work the way you expect, include as much of the source necessary for readers to reproduce the problem. ---------------------------------------------------------------------- Subject: 6) What publications discussing X are available? The trade magazines (Unix World, Unix Review, Computer Language, etc.) are publishing more articles on X. In addition to XNextEvent: - O'Reilly and Associates announced at the 5th MIT conference a quarterly journal, The X Resource, devoted to a variety of X topics. Editorial information: Adrian Nye, adrian@ora.com. - The X Journal is slated to start bi-monthly publication September 1991 on a variety of X topics. Editorial information: Jerry Smith, Editor, 615-886-3429, jsmith%spectro.uucp@uunet.uu.net. Subscription information: The X Journal, Subscriber Services, Dept XXX, P.O. BOX 3000, Denville, NJ 07834, USA. ---------------------------------------------------------------------- Subject: 7) How can I meet other X developers? (What is XUG? AFUX? EXUG?) The national X User's Group was formed in January of 1988. Its purpose is to encourage X development by providing information on the X Window System to all who are interested. [This FAQ is a service of XUG.] - Local Area Groups: [this list is always in the process of being updated; some of these groups are known to be zombies]: Atlanta, GA James Tio, 404-441-4784 Bay Area, CA Jim Turner, 415-960-0123 Boston Mitch Trachtenberg, mitch@lta.com Chicago Jerry Walton, 219-736-2667 Cleveland Mike Kolberg, 216/243-1198 Colorado Jim West, 719/260-3463, west@widgit.enet.dec.com South Florida ("SFXUG") Gary M. Paxinos, 407-243-2405, pax@megasys.com Morgan Von Essen, morgan@metrolink.com Mahesh Neelakanta, mahesh@shark.cs.fau.edu Houston Dinah G. McNutt, dinah@bcm.tmc.edu 713-798-5890 Huntsville, Ala. Pete Shea 205-837-9230 Los Angeles ("LAX") Debbie Catalano, catalano@inference.com, 213-322-5004 x194 Michigan ("MIX") JT Vogt, JLV@MD-DET.Prime.COM, (313) 689-0100 or Brian Smithson (313) 354-5118 Pittsburgh, PA John Kochmar, kochmar@sei.cmu.edu (412)268-6396 Princeton, NJ Joe Camaratta, 609-734-6500 Research Triangle Park Steven Thiedke, 919/481-1353 Washington, DC Thomas Fagre, 703/866-7425 Canada Ken Ristevski, 416-470-1203 Cambridge, UK Ray Anderson, +44 223 462131 Israel Warren Burstein, warren@worlds.uu.net Yosi Ben-Harosh, +972 52 522266 Milan, Italy Richard Glover, (39) 961-743-486 Singapore Chee Keong Law, 772-3116 ISSLCK%NUSVM.BITNET@mitvma.mit.edu To join, form a local group, contribute to XNextEvent (the several- times-yearly newsletter which includes articles of general interest, or help out in any other way, contact Alex Fisher at XUG, c/o Integrated Computer Solutions, 201 Broadway, Cambridge, MA 02139-9890, 617/621-0060#108, or email to the human at xug@expo.lcs.mit.edu. In addition, there are meetings of these groups: - Bay Area Motif Developers Group and Drinking Society Ron Edmark edmark@isi.com The French X User Group is called AFUX and is based in Sophia Antipolis by CERICS. Information can be obtained from Miss Vasseur or Miss Forest; BP 148;157, rue Albert Einstein; 06561 Valbonne Cedex; Phone: +33 93 95 45 00 / 45 01; Fax: +33 93 95 48 57. [10/90] The European X User Group was formed in 1989 to represent X users in Europe. It holds technical conferences at regular intervals. The EXUG also publishes a regular newsletter which is distributed free of charge to members. The EXUG also runs a email mailing list for members which is frequently used to address issues of European interest in X. The EXUG can be contacted by email at: exug@unipalm.uucp or by snail mail at: The EXUG, Mitchell House, 185 High Street, Cottenham, Cambridge CB4 4RX, England; phone +44 954 51727. [from Bevis King (brwk@doc.ic.ac.uk), 4/90] GXUGiV is the German X User's Group in Vorbereitung ("in preparation") being formed for X programmers and users; it is associated with the EXUG. All interested should contact Olaf Heimburger (+49 30 7 79 54 64; and at mcvax!unido!tub!olaf). ---------------------------------------------------------------------- Subject: 8) What are these common abbreviations? Xt: The X Toolkit Intrinsics is a library layered on Xlib which provides the functionality from which the widget sets are built. An "Xt-based" program is an application which uses one of those widget sets and which uses Intrinsics mechanisms to manipulate the widgets. Xmu: The Xmu library is a collection of Miscellaneous Utility functions useful in building various applications and widgets. Xaw: The Athena Widget Set is the MIT-implemented sample widget set distributed with X11 source since X11R2. Xm: The OSF/Motif widget set from the Open Software Foundation; binary kits are available from many hardware vendors Xhp (Xw): The Hewlett-Packard Widget Set was originally based on R2++, but several sets of patches exist which bring it up to R3, as it is distributed on the X11R4 tapes. Supplemental patches are available to use it with R4. CLX: The Common Lisp X Interface is a Common Lisp equivalent to Xlib. XDMCP: The X Display Manager Protocol provides a uniform mechanism for a display such as an X terminal to request login service from a remote host. XLFD: The X Logical Font Description Conventions describes a standard logical font description and conventions to be used by clients so that they can query and access those resources. RTFM: Common expert-speak meaning "please locate and consult the relevant documentation -- Read the Forgotten Manual". UTSL: A common expression meaning "take advantage of the fact that you aren't limited by a binary license -- Use The Source, Luke". ---------------------------------------------------------------------- Subject: 9) What is the ICCCM? (How do I write X-friendly applications?) The Inter-Client Communication Conventions Manual is one of the official X Consortium standards documents that define the X environment. It describes the conventions that clients must observe to coexist peacefully with other clients sharing the same server. If you are writing X clients, you need to read and understand the ICCCM, in particular the sections discussing the selection mechanism and the interaction between your client and the window manager. Get it either: - as part of the R4 distribution from MIT. - in the 2nd edition of the Scheifler/Gettys "X Window System" book. - as an appendix in the new version of O'Reilly's Volume 0, "X Protocol Reference Manual." A version in old copies of their Volume 1 is obsolete. The version in the DP book is much more readable, thanks to the efforts of Digital's editors to improve the English and the presentation. [from David Rosenthal, 10/90] Alternate definition: the ICCCM is generally the M in "RTFM" and is the most-important of the least-read X documents. ---------------------------------------------------------------------- Subject: 10) What is the X Consortium, and how do I join? The MIT X Consortium was formed in January of 1988 to further the development of the X Window System and has as its major goal the promotion of cooperation within the computer industry in the creation of standard software interfaces at all layers in the X Window System environment. MIT's role is to provide the vendor-neutral architectural and administrative leadership required to make this work. Membership in the Consortium open to any organization. There are two categories of membership, Member (for large organizations) and Affiliate (for smaller organizations). Most of the Consortium's activities take place via electronic mail, with meetings when required. As designs and specifications take shape, interest groups are formed from experts in the participating organizations. Typically a small multi-organization architecture team leads the design, with others acting as close observers and reviewers. Once a complete specification is produced, it may be submitted for formal technical review by the Consortium as a proposed standard. The standards process typically includes public review (outside the Consortium) and a demonstration of proof of concept. Your involvement in the public review process or as a Member or Affiliate of the Consortium is welcomed. Write to: Bob Scheifler, MIT X Consortium, Laboratory for Computer Science, 545 Technology Square, Cambridge, MA 02139. [For complete information see the XCONSORTIUM man page from the X11R4 distribution, from which this information is adapted.] [2/90] ---------------------------------------------------------------------- Subject: 11) Just what are OPEN LOOK and Motif? OPEN LOOK and Motif are two graphical user interfaces (GUIs). OPEN LOOK was developed by Sun with help from AT&T and many industry reviewers; Motif was developed by the Open Software Foundation (OSF) with input from many OSF members. OPEN LOOK is primarily a user-interface specification and style-guide; there are several toolkits which can be used to produce OPEN LOOK applications. Motif includes an API specification; the only sanctioned Motif toolkit is the one from OSF. However, there are other toolkits which can be used to produce programs which look and behave like OSF/Motif; one of these, Solbourne's OI, is a "virtual toolkit" which provides a common subset of OPEN LOOK and Motif, at the user's choice. OPEN LOOK GUI is also the name of a product from AT&T, comprising their OPEN LOOK Intrinsics Toolkit and a variety of applications. [Thanks to Ian Darwin, ian@sq.com, 5/91] ---------------------------------------------------------------------- Subject: 14) What is PEX? The PHiGS Extension to X is a proposed X Consortium standard awaiting proof of concept; PHiGS stands for "Programmer's Hierarchical Interactive Graphics System" and is essentially a library of functions that simplifies the creation and manipulation of 3D graphics. Many platforms are capable of performing in hardware the computations involved in rendering 3D objects; the server extension would allow the client (PHIGS in this case) to take advantage of the specialized hardware for 3D graphics. Sun Microsystems is currently contracted to develop a freely redistributable (copyright similar to the current X copyright) sample implementation. The current schedule calls for a first non-beta release of this implementation to be available to Consortium members in early 1991 and to the world with X11R5. Several vendors are currently selling independently- developed PEX servers for their workstations. The current PEX document is version V5.0P, on export.lcs.mit.edu in the directory pub/PEX/. [8/90; modified 12/90] ---------------------------------------------------------------------- Subject: 15) TOPIC: USING X IN DAY-TO-DAY LIFE ---------------------------------------------------------------------- Subject: 16) What are all these different window managers? The window manager in X is just another client -- it is not part of the X window system, although it enjoys special privileges -- and so there is no single window manager; instead, there are many which support different ways for the user to interact with windows and different styles of window layout, decoration, and keyboard and colormap focus. In approximate chronological order (generally, the more recent ones are more conformant with the ICCCM): wm: this simple title-bar window manager was quickly phased out uwm: the Universal Window Manager is still popular for its speed, although it is outdated. Moved to contrib/ on the R4 tape. twm (old): Tom's Window Manager was among the first non-MIT window managers and offered the user a great deal of customization options in a re-parenting window manager. awm: the Ardent Window Manager remains a hotbed for hackers and offers some features (dynamic menus) not found on more current window managers cwm: cwm is part of the Andrew system. Notable for being the only window manager whose name is also an English word. rtl: Siemen's window manager tiles windows so that they don't overlap and resizes the window with the focus to its preferred size dxwm: Digital's dxwm is part of the DECwindows offering hpwm: HP's window manager offers a 3D look; it is a precursor of mwm mwm: the Motif window manager is part of the OSF/Motif toolkit tekwm: Tektronix's window manager offering olwm (Sun): olwm implements the OPEN LOOK GUI and some of the Style Guide functionality olwm (AT&T): ditto gwm: Bull's Generic Window Manager emulates others with a built-in Lisp interpreter m_swm: the Sigma window manager is on the R4 tape pswm: Sun's PostScript-based pswm is part of the OpenWindows release swm: Solbourne's swm is based on its OI toolkit and offers multiple GUI support and also a panned virtual window; configuration information comes from the resources file twm (new): MIT's new Tab Window Manager from the R4 tape is a reworked twm and is the basis for several derivatives vtwm: vtwm offers some of the virtual-desktop features of swm, with a single-root window implementation; it is based on the R4 twm tvtwm: Tom's Virtual Tab Window Manager is also based on the R4 twm and provides a virtual desktop modeled on the virtual-root window of swm olvwm: the vtwm-style virtual-desktop added to Sun's olwm NCDwm: the window manager local to NCD terminals offers an mwm look XDSwm: the window manager local to Visual Technology's terminals [5/91] ---------------------------------------------------------------------- Subject: 17) Why does my X session exit when I kill my window manager? What is probably happening is that you are running your window manager as the last job in your .xsession or .xinitrc file; your X session runs only as long as the last job is running, and so killing your window manager is equivalent to logging out. Instead, run the window manager in the background, and as the last job instead invoke something safe like: exec xterm -name Login -rv -iconic Your X session will continue until you explicitly logout of this window, whether or not you kill your window manager. ---------------------------------------------------------------------- Subject: 18) Is there a way for my WM to produce my .xinitrc, like toolplaces? Although no known window manager directly supports such a feature, there is a contributed application which does much of what you are looking for, although it is not as complete as the SunView program toolplaces. Look for the application "xplaces" on an archive-server near you. There are several versions of this program floating around; look for a recent vintage. [10/90] ---------------------------------------------------------------------- Subject: 19) How do I use another window manager with DEC's session manager? DEC's session manager will start dxwm up by default. To override this, add to your .Xdefaults file something like this line, naming the full pathname: sm.windowManagerName: /usr/bin/X11/your_favorite_wm ---------------------------------------------------------------------- Subject: 20) How do I change the keyboard auto-repeat rate? You can turn auto-repeat on or off by using "xset r on|off". The X protocol, however, doesn't provide for varying the auto-repeat rate, which is a capability not supported by all systems. Some servers running on systems that support this (the Xsun server from MIT, for example), however, may provide command-line flags to set the rate at start-up time. If you have control over server start-up, you can invoke the server with the chosen settings. ---------------------------------------------------------------------- Subject: 21) How do I remap the keys on my keyboard to produce a string? There is no method of arranging for a particular string to be produced when you press a particular key. The xmodmap client, which is useful for moving your CTRL and ESC keys to useful places, just rearranges keys and does not do "macro expansion." Some (few) clients, including xterm and several X-based editors, accept a translation resource such as: xterm*VT100.Translations: #override \ <Key>F1: string("setenv DISPLAY unix:0") which permits the shorthand F1 to be pressed to reset the display locally within an xterm; it takes effect for new xterm clients. Window managers, which could provide this facility, do not yet; nor has a special "remapper" client been made available. ---------------------------------------------------------------------- Subject: 22) How do I make a screendump of the X display? The xwd client in the R3 and R4 distributions can be used to select a window or the background. It produces an XWD-format file of the image of that window. The file can be post-processed into something useful or printed with the xpr client and your local printing mechanism. You can use this command: csh% sleep 10; xwd -root > output.xwd & and then spend 10 seconds or so setting up your screen; the entire current display will be saved into the file output.xwd. Note that xwd also has an undocumented -id flag for specifying the window id on the command-line. Two publicly-available programs which allow interactive definition of arbitrary portions of the display and built-in delays are asnap and xgrabsc. Xgrabsc was both recently [8/90] posted to comp.sources.x. xsnap includes some asnap features and supersedes it; it also renders XPM output. It is available on export, as well. [11/90] Also: some vendors' implementations of X (e.g. DECWindows and OpenWindows 2.0) include session managers or other desktop programs which include "print portion of screen" or "take a snapshot" options. Also: some platforms have tools which can be used to grab the frame-buffer directly. The Sun systems, for example, have a 'screendump' program which produces a Sun raster file. Some vendors' implementations of lpr (e.g. Sony) include direct support for printing xwd files, but you'll typically need some other package to massage the output into a useful format which you can get to the printer. To post-process the xwd output of some of these tools, you can use xpr, which is part of the R4 distribution. Also on several archives are xwd2ps and XtoPS, which produce Encapsulated PostScript with trimmings suitable for use in presentations (see export.lcs.mit.edu:contrib/xwd2ps.tar.Z and contrib/ImageMagick.tar.Z). Also useful is the PBMPLUS package on many archive servers. ---------------------------------------------------------------------- Subject: 23) How do I make a color PostScript screendump of the X display? If you need color PostScript in particular, you can - grab the screen-image using xgrabsc to begin with, which can produce color PostScript. - grab the screen-image using xwd and post-process xwd into color PS. You can do this using xwd2ps or the XtoPS program from the ImageMagick distribution. The PBMPLUS package is also good for this. ---------------------------------------------------------------------- Subject: 24) How can I print the current selection? You could paste it into an xterm after executing the lpr command. However, a program by Richard Hesketh (rlh2@ukc.ac.uk) specifically for manipulating the selection will help; e.g. xselection PRIMARY | lpr finds the primary selection and prints it. This command can be placed in a window-manager menu or in shell-scripts. xselection also permits the setting of the selection and other properties. It is probably available on fine archive-servers everywhere. Also available is ria.ccs.uwo.ca:pub/xget_selection.tar.Z, which can be adapted to do this. ---------------------------------------------------------------------- Subject: 25) Why are my xterm menus so small? You are probably setting the geometry small accidentally. If you give a resource specification like this: xterm*geometry: 80x24 then you are asking for all widgets under xterm to have their geometry set to 80x24. For the main window, this is OK, as it uses characters for its size. But its popup menus don't; they are in pixels and show up small. To set only the terminal widget to have the specified geometry, name it explicitly: xterm*VT100.geometry: 80x24 ---------------------------------------------------------------------- Subject: 26) Where can I find a dictionary server for xwebster? Webster's still owns the copyright to the on-line copies of Webster's Dictionary which are found at various (university) sites. After it became aware that these sites were then acting as servers for other sites running xwebster and gnuemacs-webster, it asked that server sites close off external access. [The NeXT machine apparently is also licensed to have the dictionary. A Webster daemon for NeXT machines is available from uvax.cs.indiana.edu (129.79.254.192) in "pub/webster/NeXT-2.0".] Unless you want to get a legal on-line copy yourself or can find a site which can grant you access, you are probably out of luck. However, if you are a legitimate site, you'll want to pick up the latest xwebster, as-is on export:contrib/xwebster.tar.Z [11/90]; the file xwebster.README includes discussions of the availability, illegality, and non-availability of dictionary servers. [courtesy steve@UMIACS.UMD.EDU (Steve Miller) and mayer@hplabs.hp.com (Niels Mayer) 11/90] ---------------------------------------------------------------------- Subject: 27) How do I convert/view Mac/TIFF/GIF/Sun/PICT/img/FAX images in X? The likeliest program is an incarnation of Jef Poskanzer's useful++ Portable Bitmap Toolkit, which includes a number of programs for converting among various image formats. It includes support for many types of bitmaps, gray-scale images, and full-color images. PBMPLUS has been updated since it was posted to the net about 11/22/89 and is also more recent than the one on the R4 tape under contrib/clients/pbmplus. The current version is in "active beta" [3/91] on export:/contrib/pbmplus.tar.Z. The package has been independently updated to support XPM images for pixmaps. There are also several patches to various modules floating around. Useful for viewing some image-formats is Jim Frost's xloadimage, a version of which is in the R4 directory contrib/clients/xloadimage -- there are later versions available; version 3.0.1 shipped 5/91 and is on export /contrib/xloadimage.3.01.tar.Z. An alternate image-viewer is xv (X Image Viewer), written by bradley@halibut.cis.upenn.edu (John Bradley) and distributed as comp.sources.x Volume 10:79. It is also on export as xv.pl3.tar.Z. XV displays many image formats and permits editing of GIF files, among others. [12/90] The Fuzzy Pixmap Manipulation, by Michael Mauldin <mlm@nl.cs.cmu.edu>. Conversion and manipulation package, similar to PBMPLUS. Version 1.0 available via FTP as nl.cs.cmu.edu:/usr/mlm/ftp/fbm.tar.Z, uunet.uu.net:pub/fbm.tar.Z, and ucsd.edu:graphics/fbm.tar.Z. The Img Software Set, by Paul Raveling <raveling@venera.isi.edu>, reads and writes its own image format, displays on an X11 screen, and does some image manipulations. Version 1.3 is available via FTP on expo.lcs.mit.edu as contrib/img_1.3.tar.Z, along with large collection of color images. Xim, by Philip R. Thompson, reads and writes its own image format, displays on an X11 screen, and does some image manipulations. Available in your nearest X11R4 source tree as contrib/clients/xim. A more recent version is available via ftp from video.mit.edu. It uses x11r4 and the OSF/Motif toolkit to provide basic interactive image manipulation and reads/writes GIF, xwd, xbm, tiff, rle, xim, and other formats. ImageMagick by cristy@dupont.com can be retrieved as the file contrib/ImageMagick.tar.Z (no patch level) from export.lcs.mit.edu. It is a collection of utilities to transform and display images on any X server. The tool uses the MIFF format; filters to and from MIFF from other popular formats (PPM, TIFF, GIF, SUN Raster, etc) are included. xtiff is a tool for viewing a TIFF file in an X window. It was written to handle as many different kinds of TIFF files as possible while remaining simple, portable and efficient. xtiff illustrates some common problems with building pixmaps and using different visual classes. It is distributed as part of Sam Leffler's libtiff package and it is also available on export.lcs.mit.edu, uunet.uu.net and comp.sources.x. [dbs@decwrl.dec.com, 10/90] xtiff 2.0 was announced in 4/91; it includes Xlib and Xt versions. An alpha version of Lee Iverson's (leei@McRCIM.McGill.EDU) image-viewing *widget* is available as /contrib/vimage.tar.Z on export.lcs.mit.edu and in /pub/maspar on moe.mcrcim.mcgill.edu. [5/91] Look for patches, too. [6/91] [some material from Larry Carroll (larryc@poe.jpl.nasa.gov), 5/91] ---------------------------------------------------------------------- Subject: 28) How can I change the titlebar of my xterm window? The solution involves sending an escape sequence to xterm which will cause it to update the property which the window manager relies upon for the string which appears in the window titlebar. A solution is as easy as typing this in an xterm running a shell: echo "ESC]2;TEXT^G" where ESC is the escape key, TEXT is the string you wish to have displayed, and ^G is a Control-G (the BEL character). Here is a more complicated csh alias which changes the titlebar to the current working directory when you change directories: alias newcd 'cd \!* ; echo ESC]2\;$cwd^G' The digit '2' in these strings indicates to xterm that it should change only the title of the window; to change both the title and the name used in the icon, use the digit '0' instead, and use '1' to change only the icon name. These sequences work for both R3 and R4 xterm windows; the R4 xterm, however, does not accept the looser sequences which worked under R3 and demands a semicolon, above, for example, where the R3 xterm allowed any character. Note: another way to do this, which prevents an incorrect display of the local directory if a modified `cd` is used in a subshell, is to wrap the escape sequences into the PS1 prompt itself. ---------------------------------------------------------------------- Subject: 29) Where can I find the xterm control sequences? [edited] The best source of such information is the file mit/clients/xterm/ctlseqs.ms. This document is not installed as part of the installation. In a pinch, a VT100 manual will do. ---------------------------------------------------------------------- Subject: 30) How do I keep my $DISPLAY when I rlogin to another machine? There are several ways to avoid having to do a "setenv DISPLAY ..." whenever you log in to another networked UNIX machine running X. One solution is to use the xrlogin program from der Mouse (mouse@larry.mcrcim.mcgill.edu). You can ftp caveat-emptor versions from 132.206.1.1, in X/xrlogin.c and X/xrlogind.c. The program packages up $TERM and $DISPLAY into a single string, which is stuffed into $TERM. rlogin then propagates $TERM normally; your .cshrc on the remote machine should contain eval `xrlogind` where xrlogind is a program that checks $TERM and if it is of the special format it recognizes, unpacks it and spits out setenv and unsetenv commands to recreate the environment variables. [11/90] In addition, if all you need to do is start a remote X process on another host, and you find rsh <HOST> -n /usr/bin/X11/xterm -display $DISPLAY too simple (DISPLAY must have your real hostname), then this version of xrsh can be used to start up remote X processes. The equivalent usage would be xrsh <HOST> xterm #! /bin/sh # start an X11 process on another host # Date: 8 Dec 88 06:29:34 GMT # From: Chris Torek <chris@mimsy.umd.edu> # rsh $host -n "setenv DISPLAY $DISPLAY; exec $@ </dev/null >&/dev/null" # # An improved version: # rXcmd (suggested by John Robinson, jr@bbn.com) # (generalized for sh,ksh by Keith Boyer, keith@cis.ohio-state.edu) # # but they put the rcmd in ()'s which left zombies again. This # script combines the best of both. case $# in [01]) echo "Usage: $0 host x-cmd [args...]";; *) case $SHELL in *csh*) host="$1"; shift xhost "$host" > /dev/null rsh "$host" -n \ "setenv TERM xterm; setenv DISPLAY `hostname`:0; \ exec $* </dev/null >& /dev/null" & ;; *sh) host="$1"; shift xhost "$host" > /dev/null rsh "$host" -n \ "TERM=xterm export TERM; \ DISPLAY=`hostname`:0 export DISPLAY; \ LD_LIBRARY_PATH=/usr/X11/lib export LD_LIBRARY_PATH; \ PATH=\$PATH:/usr/X11/bin:/usr/bin/X11:/usr/local/bin; \ export PATH; \ exec $* < /dev/null > /dev/null 2>&1" & ;; esac ;; esac ---------------------------------------------------------------------- Subject: 31) How can I design my own font? One way is to use the "bitmap" client or some other bitmap-editor (e.g. Sun's icon-editor tool, post-processed with pbmplus) to design the individual characters and then to do some large amount of post-processing to concatenate them into the BDF format. The R3 contrib/ area (in fonts/utils/ and in clients/xtroff) contained a number of useful utilities, including some to convert between BDF font format and a simple character format which can be edited with any text editor. An easier way is to use the "xfed" client to modify an existing font; a recent version is on the R4 tape in contrib/clients/xfed. Xfed is available for anonymous ftp on unido.informatik.uni-dortmund.de (129.217.64.60) as file /pub/windows/X/Diverse-X11-Sourcen/xfed.tar.Z. The xfedor client from Group Bull permits creation of bitmaps, cursors, XPM1 pixmaps, and fonts. Binaries for common machines are on avahi.inria.fr/pub; in addition, the sources, with plenty of caveats, have been placed [5/91] in export:/contrib. If you are a MetaFont user you can use "mftobdf" from the SeeTeX distribution to convert PK, GF, and PXL fonts to BDF format; the distribution is on foobar.colorado.edu and on export.lcs.mit.edu. ---------------------------------------------------------------------- Subject: 32) Why does adding a font to the server not work? After you have built the font using your system's font-compiler, installed it in some directory, and run `mkfontdir` or your system's equivalent in that directory, be sure to use `xset +fp $dir` to add that full path-name to the server's font-path, or if the directory is already in the path, use `xset fp rehash` so that the new fonts in that directory are actually found; it is this last step that you're probably leaving out. ---------------------------------------------------------------------- Subject: 33) How do I convert a ".snf" font back to ".bdf" font? A tool called "snftobdf 1.4" is part of the bdftools package, which is available from export.lcs.mit.edu:contrib/bdftools.tar.Z and from crl.nmsu.edu:pub/misc/bdftools.tar.Z. Sources have been posted to fj.sources on JUNET and should be appearing on comp.sources.x. [2/91] ---------------------------------------------------------------------- Subject: 34) What is a general method of getting a font in usable format? der Mouse's getbdf is one solution; it connects to a server and produces a .BDF file for any font the server is willing to let it. It can be used as an anything-to-BDF converter, but requires access to a server that can understand the font file, thus is both more and less powerful than other tools such as snftobdf. getbdf is on 132.206.1.1 in X/getbdf.c or available via mail from mouse@lightning.McRCIM.McGill.EDU. [5/91] ---------------------------------------------------------------------- Subject: 35) How do I use HP ".scf" fonts on my MIT R4 server? The X server from HP uses fonts whose names have the .scf suffix. These are just compressed .snf fonts which are produced with the normal bdftosnf program. You should be able to uncompress the font and add it to your font area, possibly with a rename to .snf. Remember to run mkfontdir and to rehash the font path. ---------------------------------------------------------------------- Subject: 36) How do I use DECwindows ".pcf" fonts on my MIT R4 server? The DECwindows server stores fonts in a ".pcf" format which is not recognized by the X11R4 server. There are several "font extractor" tools that you can use to get the .pcf files from the DEC server and write the information to a .bdf file, which you can then recompile to .snf fonts using the font-compiler from the MIT distribution; the bdftools package is reported to contain such an extractor. ---------------------------------------------------------------------- Subject: 37) How do I use DECwindows fonts on my non-DECwindows server? The DECwindows fonts typically don't exist on a non-DEC installation, but rewrite rules can be used to alias fonts used by DECwindows applications to standard MIT fonts of similar characteristics and size. Pick up the file contrib/DECwindows_on_X11R4_font.aliases from export.lcs.mit.edu; this file is for a standard MIT R4 server. It can also serve as a starting point for creating a similar aliases file for the Open Windows server or other servers which do not use the MIT font scheme. ---------------------------------------------------------------------- Subject: 38) How do I add ".bdf" fonts to my DECwindows server? The format of fonts preferred by DEC's X server is the ".pcf" format. You can produce this compiled format from the .bdf format by using DEC's dxfc font-compiler. Note that the DEC servers can also use raw .bdf fonts, with a performance hit. ---------------------------------------------------------------------- Subject: 39) Why can't I set the backgroundPixmap resource in a defaults file? I want to be able to do something like this: xclock*backgroundPixmap: /usr/include/X11/bitmaps/rootweave You can't do this. The backgroundPixmap resource is a pixmap of the same depth as the screen, not a bitmap (which is a pixmap of depth 1). Because of this, writing a generic String to Pixmap converter is impossible, since there is no accepted convention for a file format for pixmaps. Therefore, neither the X Toolkit or the Athena widget set define a String to Pixmap converter, because there is no converter you cannot specify this value as a resource. The Athena widget set does define a String to Bitmap converter for use in many of its widgets, however. [courtesy Chris D. Peterson (now kit@ics.com), 4/90] However: A specific converter which encapsulates much of the functionality of the xloadimage package by Jim Frost was posted 12/90 by Sebastian Wangnick (basti@unido.informatik.uni-dortmund.de); it permits loading of a number of image formats as a pixmap. The leading general-purpose format for pixmaps is the XPM format used by Groupe Bull in several of its programs, including the GWM window manager, by AT&T in its olpixmap editor, and by ICS in its interface builder. XPM distribution, available on export as contrib/xpm.tar.Z, includes read/write routines which can easily be adapted to converters by new widgets which want to allow specification of pixmap resources in the above manner. See information on the xpm-talk mailing list above. XPM 3.0a was announced in 4/91 and is available from export.lcs.mit.edu and avahi.inria.fr. ---------------------------------------------------------------------- Subject: 40) Why does the R3 xterm, et al, fail against the R4 server? The value given to a window's do_not_propagate mask is the likely culprit. R3 allowed bogus values to be set, and early version of both Andrew and Interviews did, as well. Similar problems also occur in the R3 Motif PanedWindow widget. If it is impossible to fix client source, use 'xset bc' to put the X11R4 server into bug-compatibility mode. ---------------------------------------------------------------------- Subject: 42) How can I have xclock or oclock show different timezones? One solution is xchron, in Volume 6 of comp.sources.x, which can show the time for timezones other than the local one. Alternatively, you can probably set the timezone in the shell from which you invoke the xclock or oclock, or use a script similar to this: #!/bin/sh TZ=PST8PDT xclock -name "San Jose" 2> /dev/null & TZ=EST5EDT xclock -name "Cambridge" 2> /dev/null & ---------------------------------------------------------------------- Subject: 43) I have xmh, but it doesn't work. Where can I get mh? The xmh mail-reader requires the Rand mh mail/message handling system, which is not part of the UNIX software distribution for many machines. The current version of mh is typically on ics.uci.edu in /mh; it was updated in mid-December 1990 to 6.7.1. [1/91] ---------------------------------------------------------------------- Subject: 44) Why am I suddenly unable to connect to my Sun X server? After a seemingly random amount of time after the X server has been started, no other clients are able to connect to it. The default cron cleanup jobs supplied by Sun (for 4.0.3, at least) delete "old" (unreferenced) files from /tmp -- including /tmp/.X11-unix, which contains the socket descriptor used by X. The solution is to add "! -type s" to the find exclusion in the cron job. [10/90] ---------------------------------------------------------------------- Subject: 45) Why can't I override translations? Only the first item works. You probably have an extra space after the specification of the first item, like this: basic*text.translations: #override \ Ctrl<Key>a: beginning-of-line() \n\ Ctrl<Key>e: end-of-line() ^ extra space The newline after that space is ending the translation definition. [Thanks to Timothy J. Horton, 5/91] ---------------------------------------------------------------------- Subject: 46) How do I report bugs in X? Generally, report bugs you find to the organization that supplied you with the X Window System. If you received the source distribution directly from MIT, please read the file mit/doc/bugs/bug-report for instructions (see also "getting patches for R4", below). ---------------------------------------------------------------------- Subject: 47) TOPIC: OBTAINING X AND RELATED SOFTWARE AND HARDWARE ---------------------------------------------------------------------- Subject: 48) Is X public-domain software? No. The X software is copyrighted by various institutions and is not "public domain", which has a specific legal meaning. However, the X distribution is available for free and can be redistributed without fee. Contributed software, though, may be placed in the public domain by individual authors. ---------------------------------------------------------------------- Subject: 56) Where can I obtain other X sources? User-contributed software is distributed through the newsgroup comp.sources.x, moderated by Dan Heller (argv@sun.com); also check that group for posting information. Richard Hesketh (rlh2@ukc.ac.uk) has been creating a list of freely- available X sources. The list is stored on export.lcs.mit.edu in contrib as x-source-list.Z. It lists the main storage locations for the program and international sites from which it may be ftp'ed. The machine export.lcs.mit.edu has a great deal of user-contributed software in the contrib/ directory; a good deal of it is present in current or earlier versions on the X11R3 and X11R4 contrib tapes. There is a new directory contrib/R4fixes/ for fixes to R4 contrib software. [Jim Fulton, 2/90] The material on giza.cis.ohio-state.edu, which tends to duplicate the export archives, is also available via anonymous UUCP from osu-cis, at TB+ and V.32 speeds. Write to uucp@cis.ohio-state.edu (same as osu-cis!uucp) for instructions. [the archive is now maintained by Karl Kleinpaste] A new west-coast UUCP X11 Archive is administered by Mark Snitily (mark@zok.uucp) and contains the full X11R4 distribution, the XTEST distribution, an entire archive of comp.sources.x and other goodies. The machine zok has a TB+ modem which will connect to 19.2K, 2400, 1200 baud (in that order). The anonymous UUCP account is UXarch with password Xgoodies. The modem's phone number is 408-996-8285. A sample Systems (or L.sys) entry might be: zok Any ACU 19200 4089968285 in:--in: UXarch word: Xgoodies To get a current listing of the files that are available, download the file "/usrX/ls-lR.Z". A full subject index of the comp.sources.x files is available in the file "/usrX/comp.sources.x/INDEX". The machine has just the one modem, so please do not fetch large amounts of data at one sitting. [courtesy Mark Snitily, 2/90] FTP sites and software available: This list is a lightly-edited (e.g. `grep X`) condensation of sites posted by odin@pilot.njin.net (Jon Granrose) [9/90]. a.cs.uiuc.edu 128.174.252.1 TeX, dvi2ps, gif, texx2.7 avahi.inria.fr 192.5.60.47 xfedor brazos.rice.edu 128.42.42.2 pub/X11R3/core.src cayuga.cs.rochester.edu 192.5.53.209 Xfig, JOVE, NL-KR mail list cheddar.cs.wisc.edu 128.105.2.143 Common Lisp stuff, X11 crl.dec.com 192.58.206.2 X11R4 cs.toronto.edu 128.100.1.65 UofT BIND, X applications dinorah.wustl.edu 128.252.118.101 X11R3/core.src, portability dolphin.mit.edu 18.86.0.5 X11r3 device driver for S, emil.csd.uu.se 130.238.4.2 Old GNU, X R10 export.lcs.mit.edu 18.30.0.238 X, portable bitmaps, CLX and export.lcs.mit.edu CLUE, gwm extro.ucc.su.oz.au 129.78.64.1 images, gnu, icon, kermit, extro.ucc.su.oz.au Ghostscript patches faui43.informatik.uni-erlangen.de 131.188.1.43 NeWS X11 amiga atari faces fcs280s.ncifcrf.gov 129.43.1.11 xtrek5.4 finsun.csc.fi 128.214.46.40 X11R4 ftp-list foobar.colorado.edu 128.138.243.105 BDF fonts, xtex freja.diku.dk 129.142.96.1 nn, gnu, x11r4, tex, isode fresnel.stanford.edu 36.10.0.77 X11R4 for Iris gatekeeper.dec.com 16.1.0.2 X11, recipes, cron, map giza.cis.ohio-state.edu 128.146.8.61 X, PEX hemuli.tik.vtt.fi 130.188.52.2 WorldMap X bind.4.8 finger hpcvaaz.cv.hp.com 15.255.72.15 MitX11R4 Motif hpserv1.uit.no 128.39.60.50 HP stuff, X11, unix, etc hydra.helsinki.fi 128.214.4.29 misc, TeX, X interviews.stanford.edu 36.22.0.175 InterViews X toolkit iraun1.ira.uka.de 129.13.10.90 GNU X11 comp.sources.unix irisa.irisa.fr 131.254.2.3 comp.sources.x j.cc.purdue.edu 128.210.5.1 comp.sources.x jpl-mil.jpl.nasa.gov 128.149.28.2 TeX, mac, GNU, X11R2, X11R3 kappa.rice.edu 128.42.4.7 X11R3, GNU for Sequent S27 labrea.stanford.edu 36.8.0.47 GNU, X, official TeX sources larry.mcrcim.mcgill.edu 132.206.4.3 RFCs, X, local nameserver lll-crg.llnl.gov 128.115.1.1 X11R4 ltisun.epfl.ch 128.178.38.6 xconq m9-520-1.mit.edu 18.80.0.45 xim utils maddog.llnl.gov 128.115.10.1 AWM X tutorial, PCP mcs213k.cs.umr.edu 131.151.6.11 xgif, shuttle me10.lbl.gov 128.3.128.110 X11 binaries for hp-ux, me10 nic.funet.fi 128.214.6.100 GNU, X11, networking, msdos, oddput.efd.lth.se 130.235.48.4 xps (postscript previewer) peace.waikato.ac.nz 130.217.64.62 x11r4 polyslo.calpoly.edu 129.65.17.1 xtrek, top 2.0, spaceout, qed.rice.edu 128.42.4.38 GNU, X11R3, plot2ps sources research.att.com 192.20.225.2 TeX, gcc, ghostscript, f2c scam.berkeley.edu 128.32.138.1 X sources, etc. schizo.samsung.com 134.228.1.2 comp.sources.x sequent.kent.edu 131.123.2.50 x11r4 for esix shambhala.berkeley.edu 128.32.132.54 xrn, xgraph shemp.cs.ucla.edu 131.179.128.34 XWIP sirius.ucs.adelaide.edu.au 129.127.40.3 X11R4 slug.pws.bull.com 128.35.10.203 comp.sources.x, gif, X11R4, slug.pws.bull.com X11R3, R4contrib, gnu, ti.com 128.247.159.141 CLX trout.nosc.mil 132.249.16.12 X11R3, benchmarks, popd, GNU ucbvax.berkeley.edu 128.32.130.12 nntp, gnews, awm, empire unido.informatik.uni-dortmund.de 129.217.64.60 atari, mac, benchmarks, unido.informatik.uni-dortmund.de utils, x11, sysadm tools vaxa.isi.edu 128.9.0.33 clf-act, X, db winnie.princeton.edu 128.112.128.180 music software (unix & NeXT) wpi.wpi.edu TeX_DS3100, TeX_Umax, misc X wuarchive.wustl.edu 128.252.135.4 GNU, X.11R3, GIF, IEN, RFCs, wuarchive.wustl.edu comp.sources.x, msdos, xanth.cs.odu.edu 128.82.8.1 comp.sources.x, xanth.cs.odu.edu 128.82.4.1 comp.sources.games, X10R4 xview.ucdavis.edu 128.120.1.150 xview These sites mirror export and are of particular use for Australasia: Anonymous ftp: ftp.Adelaide.EDU.AU pub/X/R4/ pub/sources/x/ ACSnet Fetchfile: sirius.ua.oz X/R4/ sources/x/ In addition, UUNET Source Archives (703-876-5050) tracks comp.sources.x and provides 800MB+ of compressed programs on 6250 bpi tapes or 1/4" tapes (or Exabyte 8mm cartridges?). ---------------------------------------------------------------------- Subject: 57) Where can I obtain interesting widgets? The Free Widget library sponsored by Brian Totty (totty@cs.uiuc.edu) is now [12/90] available on a.cs.uiuc.edu (128.174.252.1) in pub/fwf.shar.Z. The set of widgets there is intended to form the basis for future contributions. To be added to the discussion list, contact free-widgets-request@ eagle.cnsf.cornell.edu. The current set includes a pixmap editor. Additional widgets are available on the contrib/ portion of the X11R4 tapes; these include the Xcu set. O'Reilly Volume 4, Doug Young's book, the Asente/Swick book, and Jerry Smith's "Object-oriented Programming with the X Window System Toolkits" all include details on writing widgets and include several useful widgets; sources are typically on export and/or UUNET. The Dirt interface builder includes the libXukc widet set which extends the functionality of Xaw. A graph widget and other 2D-plot and 3D-contour widgets by Sundar Narasimhan (sundar@ai.mit.edu) are available from ftp.ai.mit.edu as /com/ftp/pub/users/sundar/graph.tar.Z. The graph widget has been updated [3/91] with documentation and histogram capabilities. Ken Lee's Xm widget (beta) that uses Display PostScript to draw labels at a non-horizontal angle is on export in contrib/dpslabel.tar.Z. An alpha version of Lee Iverson's (leei@McRCIM.McGill.EDU) image-viewing *widget* is available as /contrib/vimage.tar.Z on export.lcs.mit.edu and in /pub/maspar on moe.mcrcim.mcgill.edu. The package also includes an ImageViewPort widget and a FileDialog widget. [5/91] Other available file-requestor widgets include the FileSelector from the Free Widget Foundation, the XiFileSelector from Iris Software's book, and the xdbx file-selector extracted by David Nedde (daven@wpi.wpi.edu). ---------------------------------------------------------------------- Subject: 58) Where can I obtain alternate language bindings to X? Versions of the CLX Lisp bindings are part of the X11R3 and X11R4 core source distributions. The latest version of CLX (R4.5) is available from export for ftp as contrib/CLX.R4.5.tar.Z. [6/91] Ada bindings were written by Mark Nelson and Stephen Hyland at SAIC for the DOD. The bindings can be found on hapo.sei.cmu.edu or on wsmr-simtel20.army.mil and are also in the Ada Software Repository (ASR). R3 bindings should be available by the end of 1/90. [1/90] Prolog bindings (called "XWIP") written by Ted Kim at UCLA while supported in part by DARPA are available by anonymous FTP from export.lcs.mit.edu:contrib/xwip.tar.Z or ftp.cs.ucla.edu:pub/xwip.tar.Z. These prolog language bindings depend on having a Quintus-type foreign function interface in your prolog. The developer has gotten it to work with Quintus and SICStus prolog. Inquiries should go to xwip@cs.ucla.edu. [3/90] GHG is developing X bindings and a complete Ada re-implementation of X; check Lionel Hanley at 713-488-8806. [4/90] Ada bindings to Motif, explicitly, will eventually be made available by the Jet Propulsion Laboratories, probably through the normal electronic means. Advance information can be obtained from dsouleles@dsfvax.jpl.nasa.gov, who may respond as time permits. Another set of bindings for Motif 1.1 is being done by the University of Lowell; it can be ftp'ed from 129.63.1.1 as Motif1.1-g++.tar.Z in graphics/MotifC++. A Technical Report on the binding is included. [4/91] ---------------------------------------------------------------------- Subject: 59) What is the xstuff mail-archive? The xstuff server is a mail-response program. That means that you mail it a request, and it mails back the response. Any of the four possible commands must be the first word on a line. The xstuff server reads your entire message before it does anything, so you can have several different commands in a single message (unless you ask for help). The xstuff server treats the "Subject:" header line just like any other line of the message. The archives are organized into a series of directories and subdirectories. Each directory has an index, and each subdirectory has an index. The top-level index gives you an overview of what is in the subdirectories, and the index for each subdirectory tells you what is in it. 1) The command "help" or "send help" causes the server to send you a more detailed version of this help file. 2) if your message contains a line whose first word is "index", then the server will send you the top-level index of the contents of the archive. If there are other words on that line that match the name of subdirectories, then the indexes for those subdirectories are sent instead of the top-level index. For example, you can say "send index fixes" (or "index fixes"). A message that requests an index cannot request data. 3) if your message contains a line whose first word is "send", then the xstuff server will send you the item(s) named on the rest of the line. To name an item, you give its directory and its name. For example send fixes 1 3 4 You may issue multiple send requests. The xstuff server contains many safeguards to ensure that it is not monopolized by people asking for large amounts of data. The mailer is set up so that it will send no more than a fixed amount of data each day. If the work queue contains more requests than the day's quota, then the unsent files will not be processed until the next day. Whenever the mailer is run to send its day's quota, it sends the requests out shortest-first. 4) Some mailers produce mail headers that are unusable for extracting return addresses. If you use such a mailer, you won't get any response. If you happen to know an explicit path, you can include a line like path foo%bar.bitnet@mitvma.mit.edu or path bar!foo!frotz in the body of your message, and the daemon will use it. The xstuff server itself can be reached at xstuff@expo.lcs.mit.edu. If your mailer deals in "!" notation, try sending to {someplace}!mit-eddie!expo.lcs.mit.edu!xstuff. [based on information from the MIT X Consortium, 8/89, 4/90.] ---------------------------------------------------------------------- Subject: 67) Where can I get an "X terminal" server for my low-end Sun 3/50? Seth Robertson (seth@ctr.columbia.edu) has written Xkernel; the current version [1.2 gamma as of 3/91, 2.0 expected RSN] is on sol.ctr.columbia.edu [128.59.64.40] in /pub/Xkernel.gamma. It turns a Sun 3/50 into a pseudo- X terminal; most of the overhead of the operating system is side-stepped, so it is fairly fast and needs little disk space. A similar approach is to run the regular X server by making /etc/init a shell script which does the minimal setup and then invokes Xsun, like this script from mouse@lightning.mcrcim.mcgill.EDU: #! /bin/sh exec >/dev/console 2>&1 /etc/fsck -p /dev/nd0 case $? in 0) ;; 4) /etc/reboot -q -n ;; 8) echo ND fsck failed - get help /etc/halt ;; 12) echo Interrupted /etc/reboot ;; *) echo Unknown error in reboot fsck - get help /etc/halt ;; esac /bin/dd if=/tmp-fs of=/dev/nd2 bs=512 count=128 >/dev/null 2>&1 /etc/mount /dev/nd2 /tmp /etc/ifconfig le0 netmask 255.255.255.0 broadcast 132.206.41.255 /etc/mount -o ro apollo:/u2/x11/lib /local/lib/X11 /etc/route add default 132.206.41.1 1 >/dev/null set `/etc/ifconfig le0` exec /Xsun -once -multidisp -mux -query `(sh -vn </local/lib/X11/xdm-servers/$2 2>&1)` ---------------------------------------------------------------------- Subject: 71) Where can I obtain an X-based plotting program? These are mostly available from uucp sites such as uunet or other sites as marked. gnuplot X (xplot), PostScript and a bunch of other drivers. cs.duke.edu:/dist/sources/gnuplot/gnuplot2.02.tar.Z [128.109.140.1] monu1.cc.monash.edu.au:/pub/gnuplot2.02.tar.Z [130.194.1.101] irisa.irisa.fr:/pub/gnuplot2.02.tar.Z [131.254.2.3] comp.sources.misc/volume8 gl_plot X output only [?] comp.sources.unix/volume18 graph+ yallara.cs.rmit.oz.au:/pub/graph+.tar.Z [131.170.24.42] comp.sources.unix/volume8 pdraw,drawplot 2D and 3D X,PS scam.berkeley.edu:/src/local/3dplot.tar.Z [128.32.138.1] scam.berkeley.edu:/src/local/contour.tar.Z [128.32.138.1] scam.berkeley.edu:/src/local/drawplot.tar.Z [128.32.138.1] uunet:~ftp/contrib/drawplot.tar.Z xgraph plot, zoom. Outputs PS or HPGL. shambhala.berkeley.edu:/pub/xgraph-11.tar.Z [128.32.132.54] sun1.ruf.uni-freiburg.de:X11/contrib/xgraph-11.tar.Z [132.230.1.1] nisc.jvnc.net:pub/xgraph-11.tar.Z [128.121.50.7] comp.sources.x/volume3 or many other sites xvgr An XView xgraph++ program. sun.soe.clarkson.edu:pub/src/xvgr-1.06alpha.tar.Z [128.153.12.3] uvax.rrz.uni-koeln.de:pub/windows/xcontrib/xvgr-1.06alpha.tar.Z [2/91. Thanks to: emv@ox.com (Ed Vielmetti) ; geoff@Veritas.COM (Geoffrey Leach) ; Paul A. Scowen (uk1@spacsun.rice.edu) ; black@beno.CSS.GOV (Mike Black)] ---------------------------------------------------------------------- Subject: 76) Where can I get an X-based TeX or DVI previewer? The xtex previewer for TeX files is available from a number of archive sites, including uunet; the current version is usually on foobar.colorado.edu (128.138.243.105) in SeeTeX-2.17.0.tar.Z; pre-converted fonts are also on that machine. The distribution all includes "mftobdf" which converts PK, GF, and PXL fonts to BDF format, where they can then be compiled for use by your local X server. Xtex 2.17 was announced 3/1/91. The xdvi dvi-previewer is fairly comprehensive and easy to use. It is also available from a number of sites, including uunet and export.lcs.mit.edu. ---------------------------------------------------------------------- Subject: 79) Where can I find X tools callable from shell scripts? I want to have a shell script pop up menus and yes/no dialog boxes if the user is running X. Several tools in the R3 contrib/ area were developed to satisfy these needs: yorn pops up a yes/no box, xmessage displays a string, etc. There are several versions of these tools; few, if any, have made it to the R4 contrib/ area, though they may still be available on various archive sites. In addition, Richard Hesketh (rlh2@ukc.ac.uk) has posted the xmenu package to comp.sources.x ("v08i008: xmenu") for 1-of-n choices. [7/90] Two versions of XPrompt have been posted to comp.sources.x, the latter being an unauthorized rewrite. [R. Forsman (thoth@reef.cis.ufl.edu), 1/91] There is a version of XMenu available from comp.sources.x; it is being worked on and will likely be re-released. ---------------------------------------------------------------------- Subject: 82) TOPIC: BUILDING THE X DISTRIBUTION ---------------------------------------------------------------------- Subject: 83) How do I build X with gcc? MIT is now using regularly the Free Software Foundation's GNU-CC to build the X distribution and uses gcc-built servers to test performance increases. [These options are gathered from several descriptions of building X with gcc 1.34, 1.35, and 1.36, and are possibly outdated]: Use the options -O -fstrength-reduce -fpcc-struct-return -traditional may also be necessary if your version of gcc is sufficiently old (but don't use with 1.38). Do not use -finline-functions, particularly on the R4 server. ---> Make sure to run 'fixincludes' from the gcc distribution ---> before doing anything, or you will get fatal errors such as: ---> xterm: Error 15, errno 25: Inappropriate ioctl for device. HOWEVER, there is a bug in gcc 1.34 and 1.36 (but not in 1.35 or 1.37) which miscompiles things of the form (expr == 0 ? exp1 : exp2). The fix needed in X11R4 (and probably X11R3) is to change the definition of XtNewString in Intrinsic.h to: #define XtNewString(str) \ ((str) != NULL ? (strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) : NULL) A work-around is also in fix-2 to X11R4. ---------------------------------------------------------------------- Subject: 85) What are these I/O errors running X built with gcc? When I try to run xinit or the Xsun server I get the error "Getting interface configuration: Operation not supported on socket. Fatal server bug! no screens found." Running the gcc fixincludes script apparently didn't work. You can do this simple test: #include <sys/ioctl.h> SIOCGIFCONF Run that through cc -E and gcc -E. The last line of output is the piece of interest; it should be identical (modulo irrelevant differences like whitespace). If the gcc version has 'x' where the cc version has 'i', your fixincludes run didn't work for some reason or other; go back to your gcc sources and run `fixincludes`; then rebuild the X distribution. If they are identical, try running a make clean in mit/server and rebuilding, just to make sure everything gets compiled with the proper include files. [courtesy der Mouse, mouse@LARRY.MCRCIM.MCGILL.EDU; 9/90] ---------------------------------------------------------------------- Subject: 86) What are these problems compiling X11R4 with "gcc -traditional"? There are known problems with gcc 1.38 which cause use of the -traditional to produce errors along the lines of "gcc: Program cpp got fatal signal 6". The fix is to upgrade to 1.39. [from Darryl Okahata (darrylo%hpnmd@relay.hp.com); 2/91] ---------------------------------------------------------------------- Subject: 87) What are these problems compiling X11R4 on the older Sun3? In mit/server/ddx/sun/sunCG3C.c, we have found "missing" defines for CG3AC_MONOLEN, CG3BC_MONOLEN, CG3AC_ENBLEN, CG3BC_ENBLEN. What should these be? The R4 Errata list distributed after X11R4 mentions that you can add these lines to the file on older SunOS versions (e.g. 3.5) to compile: #define CG3AC_MONOLEN (128*1024) #define CG3AC_ENBLEN CG3AC_MONOLEN #define CG3BC_MONOLEN CG3AC_MONOLEN #define CG3BC_ENBLEN CG3AC_MONOLEN However, the Sun3 should not actually ever have the CG3 device, and so references to it can be removed from mit/server/ddx/sun/sunInit.c and the Imakefile. [11/90] ---------------------------------------------------------------------- Subject: 88) What are these problems compiling the X11R4 server on SunOS 4.1.1? The file <sundev/cg6reg.h> isn't being found. Sun omitted <sundev/cg6reg.h> from SunOS 4.1.1. Remove the #include from sunCG6C.c and replace it with the line #define CG6_VADDR_COLOR 0x70016000 The file has changed from earlier versions of SunOS and should not be copied from another distribution. ---------------------------------------------------------------------- Subject: 89) What are these problems using R4 shared libraries on SunOS 4? All of the executables that I try to run have the following results: ld.so: libXmu.so.4: not found or even: ld.so: call to undefined procedure __GetHostname from 0xf776a96c If you are building with shared libraries on a Sun, remember that you need to run "ldconfig" as root after installing the shared libraries (if you've installed X on a file-server, run it on the server's clients, too). While building and installing the distribution, you need to be careful to avoid linking against any existing X shared libraries you might have (e.g. those distributed with OpenWindows). You should make sure you do not have LD_LIBRARY_PATH set in your environment during the build or the installation. If you are going to keep xterm and xload as setuid programs, please note that the shared libraries must be installed in /usr/lib, /usr/local/lib, or /usr/5lib for these programs to work (or else those programs must be linked statically). [courtesy MIT X Consortium] Note also that the program mkfontdir is run as part of the build; it attempts, however, to use the shared libraries before they have been installed. You can avoid the errors by building mkfontdir statically (pass -Bstatic to most C compilers). ---------------------------------------------------------------------- Subject: 92) TOPIC: BUILDING X PROGRAMS ---------------------------------------------------------------------- Subject: 93) What is Imake? Imake is not a replacement for the make program; instead, it is a makefile-generator that takes advantages of the include-file and macro- processing capabilities of the C preprocessor cpp to generate makefiles suitable for building software on a particular system. Although it is not specific to X, the X release uses it to help solve a number of the configuration issues that arise in making such a large system widely portable. Imake has a fairly steep learning curve, in part because the process by which the system-specific configuration files, system-independent configuration files, and individual Imakefiles are melded to produce a Makefile is not obvious. You can obtain information on imake from these sources: - Paul Dubois (dubois@primate.wisc.edu) has written a useful explanation of how Imake works and how to use it in configuring X for non- supported systems; the document is available from indri.primate.wisc.edu (128.104.230.11) in the directory ~ftp/pub/imake-stuff; look for config-X11R4.ms (troff) and config-X11R4.ps (PostScript). Some supplemental appendices are nearby. - the R4 release notes and imake man page include information on using Imake to build X - on the R4 tapes, contrib/doc/imake/imake.tex is Mark Moraes' R3/R4 guide to imake. - and check the R4 mit/config directory for the source files [1/91] ---------------------------------------------------------------------- Subject: 94) Where can I get imake? A version is distributed with the X11R4 release. An earlier version is distributed with the X11R3 release; some third-party toolkits redistribute versions of imake along with their own implementations of the template and configuration files. There are no real standards for such configuration files, although most current contributed software expects the templates distributed with X11R4. There are no known archive sites which have imake in a form in which it can be downloaded without downloading most of the X11 release. [2/91] ---------------------------------------------------------------------- Subject: 95) I have a program with an Imakefile but no Makefile. What to do? If you have R4 installed on your system, run "xmkmf". This is a script which runs imake for you with the correct arguments. The output is a Makefile configured for your system and based on the Imakefile. Then run make, which will use that new Makefile to compile the program. ---------------------------------------------------------------------- Subject: 96) Why can't I link to the Xlib shape routines? When I try to compile certain programs, I get the following link error: Undefined: _XShapeQueryExtension _XShapeCombineMask These routines are actually part of the Shape Extension to X (SHAPE) which was introduced in the MIT X11R4 distribution and allows non-rectangular windows. Like the other sample server extensions, the shape extension will only run on a server which supports it. Pre-X11R4 servers, as well as many vendor-supplied servers, do not support the shape extension, in which case they will display rectangular windows anyway. In order to use the shape extension, you must link to the library libXext.a. In the X11R4 distribution, this library and the associated includes will be in the mit/extensions directory. If you do not have these files, do not despair: many freeware programs which use the shape extension can also be compiled without it by removing the -DSHAPE define from the Makefile; you can probably do this and compile successfully against your older vendor-supplied X libraries. [from John B. Melby, melby%yk.fujitsu.co.jp@uunet.uu.net, 3/91] ---------------------------------------------------------------------- Subject: 97) What are these problems with "_XtInherit not found" on the Sun? When I run a X program that I wrote on a SunOS 4.0.3 or 4.1 machine I get the error "ld.so: symbol not found _XtInherit". What you are seeing is a side-effect of a kludge in the R4 libXt.a to get Sun shared libraries working. Apparently, you can't share a function that is both called and compared, as _XtInherit is. This was handled by putting _XtInherit in the same file as a function that is always used, thereby guaranteeing that it would be loaded -- that is, in Initialize.c, where XtToolkitInitialize() and XtInitialize() reside. These routines would normally be called. You are probably seeing this error because your program is not a normal Xt-based program and does not call XtToolkitInitialize() anywhere. 1) it may be a program that uses Xt functions but never opens a connection to the X server. [OSF/Motif's 1.1.0 UIL had this problem; it called XtMalloc() and other Xt functions.] The solution is to add the call to your program; the function does not have to be executed, just linked in. 2) alternatively, your program doesn't need any Xt functions and is correct in not calling XtToolkitInitialize() -- it may be an Xlib or XView program. In this case, you can remove -lXt from your link command. It should not be necessary to link the shared libraries statically, although this will certainly solve the problem. [from Jordan Hayes (now jordan@tcs.COM) and Danny Backx (db@sunbim.be); 11/90] ---------------------------------------------------------------------- Subject: 98) Why can't I compile my R3 Xaw contrib programs under R4? I have a program that worked well under X11R3. When I try to link it under X11R4, I get this message: Undefined: _XtScrollBarSetThumb _XtTextSetInsertionPoint _XtTextReplace There were several name changes in the Athena widget set (in addition to the header files moving into <X11/Xaw/>); these are mentioned in the R4 release notes. In this case, these functions are not really Xt functions but are part of the Xaw text widget and so have been renamed from Xt* to Xaw*. [10/90] ---------------------------------------------------------------------- Subject: 99) TOPIC: PROGRAMMING PROBLEMS AND PUZZLES ---------------------------------------------------------------------- Subject: 100) Why doesn't my program get the keystrokes I select for? The window manager controls how the input focus is transferred from one window to another. In order to get keystrokes, your program must ask the window manager for the input focus. To do this, you must set up what are called "hints" for the window manager. If your applications is Xlib-based, you can use something like the following: XWMHints wmhints; ... wmhints.flags = InputHint; wmhints.input = True; XSetWMHints(dpy, window, &hints) If your application is based on the Xt Intrinsics, you can set the XtNinput resource to be True (as you probably want to in any case); if you don't have source, you can start up the application with the resource '*input:True'. Certain window managers, notably dxwm and olwm, are very picky about having this done. If you are using Sun's OpenWindows olwm, you can also add this resource to your defaults file to use clients that aren't ICCCM-compliant. OpenWindows.FocusLenience: true [mostly courtesy Dave Lemke of NCD and Stuart Marks of Sun] ---------------------------------------------------------------------- Subject: 101) How do I figure out what window manager is running? You can't reliably tell; whatever mechanism you could use could be spoofed in any case. For most cases, you shouldn't care which window manager is running, so long as you do things in an ICCCM-conformant manner. There are some cases in which particular window managers are known to do things wrong; checking for particular hints placed on the window by the window manager so that you can sidestep the problem may be appropriate in these cases. Alternatively, it may be appropriate to determine which window manager is running in order to take advantage of specific added features (such as olwm's push-pin menus). ---------------------------------------------------------------------- Subject: 102) Is there a skeleton X program available? There is no general framework such as the TransSkel program for the Macintosh which handles lots of the odds and ends and overhead of development under a window system and which can be used as a platform for additional development. In X, the problem is typically solved by using an interactive application builder tool or by using cut&paste on existing X applications. Good applications which you might look to manipulate when you want to "test just this one little thing" include contrib/clients/xskel, a simple R4 program that puts up a window and allows sketching in it and offers a starting point for quick hacks, the Xaw examples in the examples/ directory in the R3 and R4 distributions, and the Xlib "Hello World" example in the R3 doc/HelloWorld and R4 doc/tutorials/HelloWorld; an updated version of this program which uses R4 Xlib calls and current ICCCM conventions was posted in 2/90 to comp.windows.x by Glenn Widener of Tektronix. [3/90] ---------------------------------------------------------------------- Subject: 103) Why does XtGetValues not work for me? The XtGetValues interface for retrieving resources from a widget is sensitive to the type of variable. Your code may be doing something like this: { Arg args[3]; int i; int sensitive; /* oops; wrong data type */ i=0; XtSetArg (args[i], XtNsensitive, &sensitive); i++; XtGetValues(widget, args, i ); ... } But XtNsensitive is a Boolean, which on most machines is a single byte; declaring the variable "sensitive" as Boolean works properly. This problem comes up often when using particular toolkits that redefine the Xt types Dimension and Position; code that assumes they are int will have similar problems if those types are actually short. In general: you are safe if you use the actual type of the resource, as it appears in the widget's man page. [11/90] ---------------------------------------------------------------------- Subject: 104) Why don't XtConfigureWidget/XtResizeWidget/XtMoveWidget work? You're probably trying to use these functions from application code. They should be used only internally to widgets; these functions are for a parent widget to change the geometry of its children. Other promising functions, XtMakeGeometryRequest() and XtMakeResizeRequest(), are also for use only by widgets, in this case by a child to request a change from its parent. The only way for your application to request a geometry change for a widget is to issue an XtSetValues call setting some of the geometry resources. Although this will result in the widget-internal functions' being called, your application code must use the standard XtSetValues interface or risk the widgets' data becoming corrupted. ---------------------------------------------------------------------- Subject: 105) How can my application tell if it is being run under X? A number of programs offer X modes but otherwise run in a straight character-only mode. The easiest way for an application to determine that it is running on an X display is to attempt to open a connection to the X server: display = XOpenDisplay(display_name); if (display) { do X stuff } else { do curses or something else } where display_name is either the string specified on the command-line following -display, by convention, or otherwise is (char*)NULL [in which case XOpenDisplay uses the value of $DISPLAY, if set]. This is superior to simply checking for the existence a -display command-line argument or checking for $DISPLAY set in the environment, neither of which is adequate. [5/91] ---------------------------------------------------------------------- Subject: 106) How do I make a "busy cursor" while my application is computing? Is it necessary to call XDefineCursor() for every window in my application? The easiest thing to do is to create a single InputOnly window that is as large as the largest possible screen; make it a child of your toplevel window and it will be clipped to that window, so it won't affect any other application. (It needs to be as big as the largest possible screen in case the user enlarges the window while it is busy or moves elsewhere within a virtual desktop.) Substitute "toplevel" with your top-most widget here (similar code should work for Xlib-only applications; just use your top Window): unsigned long valuemask; XSetWindowAttributes attributes; /* Ignore device events while the busy cursor is displayed. */ valuemask = CWDontPropagate | CWCursor; attributes.do_not_propagate_mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask); attributes.cursor = XCreateFontCursor(XtDisplay(toplevel), XC_watch); /* The window will be as big as the display screen, and clipped by its own parent window, so we never have to worry about resizing */ XCreateWindow(XtDisplay(toplevel), XtWindow(toplevel), 0, 0, 65535, 65535, (unsigned int) 0, CopyFromParent, InputOnly, CopyFromParent, valuemask, &attributes); When you want to use this busy cursor, map and raise this window; to go back to normal, unmap it. This will automatically keep you from getting extra mouse events; depending on precisely how the window manager works, it may or may not have a similar effect on keystrokes as well. In addition, note also that most of the Xaw widgets support an XtNcursor resource which can be temporarily reset, should you merely wish to change the cursor without blocking pointer events. [thanks to Andrew Wason (aw@cellar.bae.bellcore.com), Dan Heller (argv@sun.com), and mouse@larry.mcrcim.mcgill.edu; 11/90,5/91] ---------------------------------------------------------------------- Subject: 107) How do I query the user synchronously using Xt? It is possible to have code which looks like this trivial callback, which has a clear flow of control. The calls to AskUser() block until answer is set to one of the valid values. If it is not a "yes" answer, the code drops out of the callback and back to an event-processing loop: void quit(w, client, call) Widget w; XtPointer client, call; { int answer; answer = AskUser(w, "Really Quit?"); if (RET_YES == answer) { answer = AskUser(w, "Are You Really Positive?"); if (RET_YES == answer) exit(0); } } A more realistic example might ask whether to create a file or whether to overwrite it. This is accomplished by entering a second event-processing loop and waiting until the user answers the question; the answer is returned to the calling function. That function AskUser() looks something like this, where the Motif can be replaced with widget-set-specific code to create some sort of dialog-box displaying the question string and buttons for "OK", "Cancel" and "Help" or equivalents: int AskUser(w, string) Widget w; char *string; { int answer=RET_NONE; /* some not-used marker */ Widget dialog; /* could cache&carry, but ...*/ Arg args[3]; int n = 0; XtAppContext context; n=0; XtSetArg(args[n], XmNmessageString, XmStringCreateLtoR(string, XmSTRING_DEFAULT_CHARSET)); n++; XtSetArg(args[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreateQuestionDialog(XtParent(w), string, args, n); XtAddCallback(dialog, XmNokCallback, response, &answer); XtAddCallback(dialog, XmNcancelCallback, response, &answer); XtAddCallback(dialog, XmNhelpCallback, response, &answer); XtManageChild(dialog); context = XtWidgetToApplicationContext (w); while (answer == RET_NONE || XtAppPending(context)) { XtAppProcessEvent (context, XtIMAll); } XtDestroyWidget(dialog); /* blow away the dialog box and shell */ return answer; } The dialog supports three buttons, which are set to call the same function when tickled by the user. The variable answer is set when the user finally selects one of those choices: void response(w, client, call) Widget w; XtPointer client; XtPointer call; { int *answer = (int *) client; XmAnyCallbackStruct *reason = (XmAnyCallbackStruct *) call; switch (reason->reason) { case XmCR_OK: *answer = RET_YES; /* some #define value */ break; case XmCR_CANCEL: *answer = RET_NO; break; case XmCR_HELP: *answer = RET_HELP; break; default: return; } } and the code unwraps back to the point at which an answer was needed and continues from there. [Thanks to Dan Heller (argv@sun.com); further code is in Dan's R3/contrib WidgetWrap library. 2/91] ---------------------------------------------------------------------- Subject: 108) How do I fork without hanging my parent X program? An X-based application which spawns off other Unix processes which continue to run after it is closed typically does not vanish until all of its children are terminated; the children inherit from the parent the open X connection to the display. What you need to do is fork; then, immediately, in the child process, close (ConnectionNumber(XtDisplay(widget))); to close the file-descriptor in the display information. After this do your exec. You will then be able to exit the parent. [Thanks to Janet Anstett (anstettj@tramp.Colorado.EDU) and Gordon Freedman (gjf00@duts.ccc.amdahl.com) 2/91] ---------------------------------------------------------------------- Subject: 109) Why does XtAppAddInput not work as described? I am using XtAppAddInput to read from a file, but the function is called even when there isn't input pending. XtAppAddInput is actually working as it is supposed to. When used on files, it is called whenever the file is READY to be read, not when there is new data to be read. The file is almost always ready to be read, however, if only because you can spin back to the beginning and read data you've read before. The result is that your function will almost always be called every time around XtMainLoop(). There is a way to get the type of interaction you are expecting; add this line to the beginning of your function to test whether there is new data: if (ioctl(fd, FIONREAD, &n) == -1 || n == 0) return; But, because this is called frequently, your application is effectively in a busy-wait; you may be better off not using XtAppAddInput and instead setting a timer and in the timer procedure checking the file for input. [courtesy Dan Heller (argv@ora.com), 8/90; mouse@larry.mcrcim.mcgill.edu 5/91] ---------------------------------------------------------------------- Subject: 110) How do I simulate a button press/release event for a widget? You can do this using XSendEvent(); it's likely that you're not setting the window field in the event, which Xt needs in order to match to the widget which should receive the event. If you're sending events to your own application, then you can use XtDispatchEvent() instead. This is more efficient than XSendEvent() in that you avoid a round-trip to the server. [courtesy Mark A. Horstman (mh2620@sarek.sbc.com), 11/90] ---------------------------------------------------------------------- Subject: 111) Why doesn't anything appear when I run this simple program? > ... > the_window = XCreateSimpleWindow(the_display, > root_window,size_hints.x,size_hints.y, > size_hints.width,size_hints.height,BORDER_WIDTH, > BlackPixel(the_display,the_screen), > WhitePixel(the_display,the_screen)); > ... > XSelectInput(the_display,the_window,ExposureMask|ButtonPressMask| > ButtonReleaseMask); > XMapWindow(the_display,the_window); > ... > XDrawLine(the_display,the_window,the_GC,5,5,100,100); > ... You are right to map the window before drawing into it. However, the window is not ready to be drawn into until it actually appears on the screen -- until your application receives an Expose event. Drawing done before that will generally not appear. You'll see code like this in many programs; this code would appear after window was created and mapped: while (!done) { XNextEvent(the_display,&the_event); switch (the_event.type) { case Expose: /* On expose events, redraw */ XDrawLine(the_display,the_window,the_GC,5,5,100,100); break; ... } } Note that there is a second problem: some X servers don't set up the default graphics context to have reasonable foreground/background colors, and your program should not assume that the server does, so this program could previously include this code to prevent the case of having the foreground and background colors the same: ... the_GC_values.foreground=BlackPixel(the_display,the_screen); /* e.g. */ the_GC_values.background=WhitePixel(the_display,the_screen); /* e.g. */ the_GC = XCreateGC(the_display,the_window, GCForeground|GCBackground,&the_GC_values); ... Note: the code uses BlackPixel and WhitePixel to avoid assuming that 1 is black and 0 is white or vice-versa. The relationship between pixels 0 and 1 and the colors black and white is implementation-dependent. They may be reversed, or they may not even correspond to black and white at all. ---------------------------------------------------------------------- Subject: 112) What is the difference between a Screen and a screen? The 'Screen' is an Xlib structure which includes the information about one of the monitors or virtual monitors which a single X display supports. A server can support several independent screens. They are numbered unix:0.0, unix:0.1, unix:0.2, etc; the 'screen' or 'screen_number' is the second digit -- the 0, 1, 2 which can be thought of as an index into the array of available Screens on this particular Display connection. The macros which you can use to obtain information about the particular Screen on which your application is running typically have two forms -- one which takes a Screen and one with takes both the Display and the screen_number. In Xt-based programs, you typically use XtScreen(widget) to determine the Screen on which your application is running, if it uses a single screen. (Part of the confusion may arise from the fact that some of the macros which return characteristics of the Screen have "Display" in the names -- XDisplayWidth, XDisplayHeight, etc.) ---------------------------------------------------------------------- Subject: 114) How do I determine the name of an existing widget? I have a widget ID and need to know what the name of that widget is. R4 users are best off using the XtName() function, which will work on both widgets and non-widget objects. If you are still using R3, you can use this simple bit of code to do what you want. Note that it depends on the widget's internal data structures and is not portable to future versions of Xt, including R4. #include <X11/CoreP.h> String XtName (widget) Widget widget; /* will not work with non-widget objects */ { return widget->core.name; } [7/90] ---------------------------------------------------------------------- Subject: 115) What widget is appropriate to use as a drawing canvas? Some widget sets have a widget particularly for this purpose -- a WorkSpace or DrawingArea which doesn't display anything but lets your Xt application know when it has been re-exposed, resized, and when it has received user key and mouse input. The best thing to do for other widget sets -- including the Athena set -- is to create or obtain such a widget; this is preferable to drawing into a core widget and grabbing events with XtAddEventHandler(), which loses a number of benefits of Xt and encapsulation of the functionality . At least one version has been posted to comp.sources.x (name???). The publicly-available programs xball and xpic include other versions. And Chapter 7 of the Athena Widget manual includes a tutorial and source code to a simple Window widget which is suitable for use. ---------------------------------------------------------------------- Subject: 116) Why do I get a BadDrawable error drawing to XtWindow(widget)? I'm doing this in order to get a window into which I can do Xlib graphics within my Xt-based program: > canvas = XtCreateManagedWidget ( ...,widgetClass,...) /* drawing area */ > ... > window = XtWindow(canvas); /* get the window associated with the widget */ > ... > XDrawLine (...,window,...); /* produces error */ The window associated with the widget is created as a part of the realization of the widget. Using a window id of NULL ("no window") could create the error that you describe. It is necessary to call XtRealizeWidget() before attempting to use the window associated with a widget. Note that the window will be created after the XtRealizeWidget() call, but that the server may not have actually mapped it yet, so you should also wait for an Expose event on the window before drawing into it. ---------------------------------------------------------------------- Subject: 117) Can XGetWindowAttributes get a window's background pixel/pixmap? No. Once set, the background pixel or pixmap of a window cannot be re-read by clients. The reason for this is that a client can create a pixmap, set it to be the background pixmap of a window, and then free the pixmap. The window keeps this background, but the pixmap itself is destroyed. If you're sure a window has a background pixel (not a pixmap), you can use XClearArea() to clear a region to the background color and then use XGetImage() to read back that pixel. However, this action alters the contents of the window, and it suffers from race conditions with exposures. [courtesy Dave Lemke of NCD and Stuart Marks of Sun] Note that the same applies to the border pixel/pixmap. This is a (mis)feature of the protocol which allows the server is free to manipulate the pixel/pixmap however it wants. By not requiring the server to keep the original pixel or pixmap, some (potentially a lot of) space can be saved. [courtesy Jim Fulton, MIT X Consortium] ---------------------------------------------------------------------- Subject: 118) Why doesn't GXxor produce mathematically-correct color values? When using GXxor you may expect that drawing with a value of black on a background of black, for example, should produce white. However, the drawing operation does not work on RGB values but on colormap indices. The color that the resulting colormap index actually points to is undefined and visually random unless you have actually filled it in yourself. [On many X servers Black and White often 0/1 or 1/0; programs taking advantage of this mathematical coincidence will break.] If you want to be combining colors with GXxor, then you should be allocating a number of your own color cells and filling them with your chosen pre-computed values. If you want to use GXxor simply to switch between two colors, then you can take the shortcut of setting the background color in the GC to 0 and the foreground color to a value such that when it draws over red, say, the result is blue, and when it draws over blue the result is red. This foreground value is itself the XOR of the colormap indices of red and blue. [Thanks to Chris Flatters (cflatter@zia.aoc.nrao.EDU) and Ken Whaley (whaley@spectre.pa.dec.com), 2/91] ---------------------------------------------------------------------- Subject: 119) Why does the pixmap I copy to the screen show up as garbage? The initial contents of pixmaps are undefined. This means that most servers will allocate the memory and leave around whatever happens to be there -- which is usually garbage. You probably want to clear the pixmap first using XFillRectangle() with a function of GXcopy and a foreground pixel of whatever color you want as your background (or 0L if you are using the pixmap as a mask). [courtesy Dave Lemke of NCD and Stuart Marks of Sun] ---------------------------------------------------------------------- Subject: 120) How can my application iconify itself? The ICCCM provides a mechanism for this; your application sends a client message which includes a data value indicating that it wishes to be iconified. Here is a sample callback that will iconify the application shell, wait 3 seconds, and pop it back up. Note that ApplicationShellWidget below is global; it would make more sense in real use to walk up the tree via XtParent() to find the shell containing the active widget. void IconifyShell(w, d1, d2) Widget w; caddr_t d1, d2; { XClientMessageEvent event; Window win; Display *dpy; event.type = ClientMessage; event.send_event = True; dpy = event.display = XtDisplay(w); win = event.window = XtWindow(ApplicationShellWidget); event.message_type = XInternAtom(dpy, "WM_CHANGE_STATE", False); event.format = 32; event.data.l[0] = IconicState; XSendEvent(dpy, DefaultRootWindow(dpy), False, SubstructureRedirectMask | SubstructureNotifyMask, &event); XFlush(dpy); sleep(3); XMapWindow(dpy,win); } [courtesy David Brooks (dbrooks@osf.osf.org), 4/90] R4 users may find it easier to use this routine: /* * This function instructs the window manager to change this window from * NormalState to IconicState. */ Status XIconifyWindow (dpy, w, screen) Display *dpy; Window w; int screen; ---------------------------------------------------------------------- Subject: 121) How do I check whether a window ID is valid? My program has the ID of a window on a remote display. I want to check whether the window exists before doing anything with it. Because X is asynchronous, there isn't a guarantee that the window would still exist between the time that you got the ID and the time you sent an event to the window or otherwise manipulated it. What you should do is send the event without checking, but install an error handler to catch any BadWindow errors, which would indicate that the window no longer exists. This scheme will work except on the [rare] occasion that the original window has been destroyed and its ID reallocated to another window. [courtesy Ken Lee (klee@wsl.dec.com), 4/90] ---------------------------------------------------------------------- Subject: 122) Why can't my program work with tvtwm or swm? A number of applications, including xwd, xwininfo, and xsetroot, do not handle the virtual root window which tvtwm and swm use; they typically return the wrong child of root. A general solution is to add this code or to use it in your own application where you would normally use RootWindow(dpy,screen): /* Function Name: GetVRoot * Description: Gets the root window, even if it's a virtual root * Arguments: the display and the screen * Returns: the root window for the client */ #include <X11/Xatom.h> Window GetVRoot(dpy, scr) Display *dpy; int scr; { Window rootReturn, parentReturn, *children; unsigned int numChildren; Window root = RootWindow(dpy, scr); Atom __SWM_VROOT = None; int i; __SWM_VROOT = XInternAtom(dpy, "__SWM_VROOT", False); XQueryTree(dpy, root, &rootReturn, &parentReturn, &children, &numChildren); for (i = 0; i < numChildren; i++) { Atom actual_type; int actual_format; long nitems, bytesafter; Window *newRoot = NULL; if (XGetWindowProperty(dpy, children[i], __SWM_VROOT, 0, 1, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter, (unsigned char **) &newRoot) == Success && newRoot) { root = *newRoot; break; } } return root; } [courtesy David Elliott (dce@smsc.sony.com). Similar code is in ssetroot, a version of xsetroot distributed with tvtwm. 2/91] A header file by Andreas Stolcke of ICSI on export.lcs.mit.edu:contrib/vroot.h functions similarly by providing macros for RootWindow and DefaultRootWindow; code can include this header file first to run properly in the presence of a virtual desktop. ---------------------------------------------------------------------- Subject: 123) Can I have two applications draw to the same window? Yes. The X server, primarily, assigns IDs to windows and other resources, and any application that knows the ID can manipulate the resource. The problem you face is how to disseminate the window ID to multiple applications. A simple way to handle this (and which solves the problem of the applications' running on different machines) is in the first application to create a specially-named property on the root-window and put the window ID into it. The second application then retrieves the property, whose name it also knows, and then can draw whatever it wants into the window. [Note: this scheme works iff there is only one instance of the first application running, and the scheme is subject to the limitations mentioned in the Question about using window IDs on remote displays.] Note also that you will still need to coordinate any higher-level cooperation among your applications. Note also that two processes can share a window but should not try to use the same server connection. If one process is a child of the other, it should close down the connection to the server and open its own connection. [mostly courtesy Phil Karlton (karlton@wpd.sgi.com) 6/90] ---------------------------------------------------------------------- Subject: 124) How do I keep a window from being resized by the user? Resizing the window is done through the window manager; window managers can pay attention to the size hints your application places on the window, but there is no guarantee that the window manager will listen. You can try setting the minimum and maximum size hints to your target size and hope for the best. [1/91] ---------------------------------------------------------------------- Subject: 125) How do I render rotated text? Xlib intentionally does not provide such sophisticated graphics capabilities, leaving them up to server-extensions or clients-side graphics libraries. Your only choice, if you want to stay within the core X protocol, is to render the text into a pixmap, read it back via XGetImage(), rotate it "by hand" with whatever matrices you want, and put it back to the server via XPutImage(); more specifically: 1) create a bitmap B and write your text to it. 2) create an XYBitmap image I from B (via XGetImage). 3) create an XYBitmap Image I2 big enough to handle the transformation. 4) for each x,y in I2, I2(x,y) = I(a,b) where a = x * cos(theta) - y * sin(theta) b = x * sin(theta) + y * cos(theta) 5) render I2 Note that you should be careful how you implement this not to lose bits; an algorithm based on shear transformations may in fact be better. The high-level server-extensions and graphics packages available for X also permit rendering of rotated text: Display PostScript, PEX, PHIGS, and GKS, although most are not capable of arbitrary rotation and probably do not use the same fonts that would be found on a printer. In addition, if you have enough access to the server to install a font on it, you can create a font which consists of letters rotated at some predefined angle. Your application can then itself figure out placement of each glyph. [courtesy der Mouse (mouse@larry.mcrcim.mcgill.edu), Eric Taylor (etaylor@wilkins.bmc.tmc.edu), and Ken Lee (klee@wsl.dec.com), 11/90; Liam Quin (lee@sq.com), 12/90] InterViews (C++ UI toolkit, in the X contrib software) has support for rendering rotated fonts in X. It could be one source of example code. [Brian R. Smith (brsmith@cs.umn.edu), 3/91] ---------------------------------------------------------------------- Subject: 126) Why can't my program get a standard colormap? I have an image-processing program which uses XGetRGBColormap() to get the standard colormap, but it doesn't work. XGetRGBColormap() when used with the property XA_RGB_DEFAULT_MAP does not create a standard colormap -- it just returns one if one already exists. Use xstdcmap or do what it does in order to create the standard colormap first. [1/91; from der Mouse (mouse@larry.mcrcim.mcgill.edu)] ---------------------------------------------------------------------- Subject: 127) What is the X Registry? (How do I reserve names?) There are places in the X Toolkit, in applications, and in the X protocol that define and use string names. The context is such that conflicts are possible if different components use the same name for different things. The MIT X Consortium maintains a registry of names in these domains: orgainization names, selection names, selection targets, resource types, application classes, and class extension record types; and several others. The list as of 1/90 is in the directory mit/doc/Registry on the R4 tape. To register names (first come, first served) or to ask questions send to xregistry@expo.lcs.mit.edu; be sure to include a postal address for confirmation. [11/90; condensed from Asente/Swick Appendix H]