Volume Eight
X Window System
Admi n " s trator 's
Guide
for X11 Release 4 and Release 5
by Linda Mui and Eric Pearce
O'Reilly & Associates, Inc.
X Window System
Administrator's Guide
Books That Help Peo Get More Out of Computers
X Protocol Reference Manual, 516 pages
Describes the X Network Protocol which underlies all software for Version l l of the X Window System.
Xlib Programming Manual, 824 pages
Xlib Reference Manual, 1144 pages
Complete programming and reference guides to the X library (Xlib), the lowest level of programming
interface to X.
X Window System User's Guide
Orients the new user to window system concepts, provides detailed tutorials for many client programs, and
explains how to customize the X environment.
Standard Edition, 752 pages
Motif Edition, 734 pages
X Toolkit Intrinsics Programming Manual
Complete guide to programming with Xt Intrinsics, the library of C language routines that facilitate the design
of user interfaces, with reusable components called widgets.
Standard Edition, 624 pages
Motif Edition, 714 pages
X Toolkit Intrinsics Reference Manual, 918 pages
Complete programmer's reference for the X Toolkit.
Motif Programming Manual, 1042 pages
Complete guide to programming for the Motif graphical user interface.
gView Programming Manual, 798 pages
XView Reference Manual, 292 pages
Complete information on programming with XView, an easy-to-use toolkit that is widely available
The g Window System in a Nutshell, 3ao pages
A single-volume quick reference that is an indispensable companion to the series.
Contact us for a catalog of our books, for orders, or for more information.
O'Reilly & Associates, Inc.
103 Morris Street, Suite A, Sebastopol CA 95472
(800) 998-9938 US/Canada 707-829-0515 overseas/local 707-829-0104 Fax
Volume Eight
X Window System
Administrator's Guide
for X Version 11
By Linda Mui and Eric Pearce
O'Reilly & Associates, Inc.
Table of Contents
Page
Preface ................................................................................................................................... xix
How to Use this Book ................................................................................................................. xix
Assumptions ................................................................................................................................ xxi
Related Documents ..................................................................................................................... xxi
Font Conventions Used in This Book ...................................................................................... xxii
Request for Comments ............................................................................................................. xxiii
Bulk Sales Information ............................................................................................................ xxiii
Acknowledgments .................................................................................................................... xxiii
Chapter 1 An Introduction to X Administration ................................................. 3
1.1 The Design of X 11 .................................................................................................................. 3
1.1.1 Display Servers ................................................................................................................ 4
1.1.2 Clients and Resources ..................................................................................................... 6
1.1.3 Toolkits and GUIs ............................................................................................................ 7
1.2 X Administration ..................................................................................................................... 8
1.2.1 Installing X ....................................................................................................................... 8
1.2.2 Supporting Users ............................................................................................................. 9
1.2.3 Maintaining Software ...................................................................................................... 9
1.2.4 Maintaining Multiple Machines ................................................................................... 10
1.2.5 A "'Philosophy" of X Administration ........................................................................... 10
Chapter 2 The X User Environment ........................................................................ 13
2.1 The Configured X Session ................................................................................................... 13
2.1.1 The Twilight Zone ......................................................................................................... 16
2.2 Components of the X Environment ..................................................................................... 18
2.2.1 Window Managers ......................................................................................................... 18
2.2.2 Customizing Clients ...................................................................................................... 20
2.2.2.1 The -fn Command-line Option ................................................................................ 20
2.2.2.2 The -geometry Command-line Option .................................................................... 20
2.2.2.3 Specifying Colors ..................................................................................................... 23
2.2.2.4 Using Resources ....................................................................................................... 24
2.2.3 The Startup Script .......................................................................................................... 25
2.2.3.1 The Foreground Process ........................................................................................... 26
2.3 The Shell Environment ......................................................................................................... 27
2.3.1 Setting the DISPLAY Variable .................................................................................... 27
2.3.1.1 Complications with Display Names ........................................................................ 28
2.3.2 Redefining the Search Path ........................................................................................... 29
2.3.2.1 Setting the Search Path for OpenWindows Support .............................................. 30
2.3.2.2 Setting the Search Path for Mixed Environments .................................................. 30
2.3.3 xterm Issues .................................................................................................................... 31
2.3.3.1 xterm and Terminal Emulation ................................................................................ 31
2.3.3.2 The resize Client ....................................................................................................... 31
2.3.3.3 xterm and the Login Shell (C Shell) ....................................................................... 33
2.3.4 Starting Remote Clients ................................................................................................ 34
2.3.4.1 Starting a Remote Client with rsh ........................................................................... 35
2.4 Startup Methods .................................................................................................................... 37
2.4.1 xinit and startx ............................................................................................................... 38
2.4.2 Differences Between .xinitrc and .xsession ................................................................. 39
2.5 Related Documentation ........................................................................................................ 39
Chapter 3 The X Display Manager ........................................................................... 43
3.1 xdm Concepts ........................................................................................................................ 44
3.2 xdm Configuration Files ...................................................................................................... 46
3.3 xdm the Easy Way ................................................................................................................ 48
3.4 Troubleshooting xdm ............................................................................................................ 49
3.5 Customizing xdm .................................................................................................................. 51
3.5.1 The Master Configuration File (xdm-config) .............................................................. 51
3.5.2 Listing X Servers (the Xservers File) ........................................................................... 53
3.5.2.1 Xservers Syntax ........................................................................................................ 53
3.5.3 xdm Host Access Control: the Xaccess File (R5 Only) .............................................. 55
3.5.3.1 Direct and Broadcast Access ................................................................................... 56
3.5.3.2 Indirect Access and the Chooser ............................................................................. 57
3.5.3.3 Using Macros ............................................................................................................ 59
3.5.3.4 Advantages and Disadvantages of the Chooser ..................................................... 59
3.5.4 The Xresources File ....................................................................................................... 60
3.5.4.1 Configuring the Login Box ...................................................................................... 60
3.5.4.2 The xconsole Client .................................................................................................. 62
3.5.5 Starting Up Individual X Sessions (the Xsession File) ............................................... 63
3.5.5.1 No Home Directory? (R5) ....................................................................................... 64
3.5.6 Display Classes .............................................................................................................. 65
3.6 Testing Your xdm Setup ....................................................................................................... 66
3.6.1 Resetting the Keyboard ................................................................................................. 67
3.6.2 Restarting xdm Using xdm-pid (R4 and Later) ........................................................... 68
3.6.3 Rereading xdm Configuration Files (R3) .................................................................... 68
3.7 Permanent Installation of xdm ............................................................................................. 69
3.8 Related Documentation ........................................................................................................ 70
Chapter 4 Security ............................................................................................................ 73
4.1 Host-based Access Control .................................................................................................. 74
4.1.1 The/etc/Xn.hosts File ................................................................................................... 74
4.1.2 The xhost Client ............................................................................................................. 75
4.1.3 Problems with Host-based Access Control .................................................................. 76
4.2 Access Control with MIT-MAGIC-COOKIE-1 ...................................................................... 77
4.2.1 Using MIT-MAGIC-COOKIE-1 with xdm ...................................................................... 78
4.2.2 The xauth Program ........................................................................................................ 79
4.2.3 Using MIT-MAGIC-COOKIE-1 with xinit ..................................................................... 81
4.2.4 xauth vs. xhost ............................................................................................................... 82
4.3 The XDM-AUTHORIZATION-1 Mechanism (RS) ............................................................... 83
4.4 The SUN-DES-1 Mechanism (R5) ........................................................................................ 84
4.4.1 Public Key Encryption .................................................................................................. 85
4.4.2 Prerequisites for Using SUN-DES-1 .............................................................................. 86
4.4.3 Using SUN-DES-I with xdm .......................................................................................... 88
4.4.4 Using SUN-DES-1 with xinit ......................................................................................... 89
4.4.5 Adding Another User with SUN-DES-1 ........................................................................ 91
4.4.6 xterm and SUN-DES-1 .................................................................................................... 92
4.4.7 Troubleshooting SUN-DES-I ......................................................................................... 92
4.5 xterm and Secure Keyboard ................................................................................................. 93
4.6 Other Security Issues ............................................................................................................ 94
4.6.1 The Console xterm (R4 and Earlier) ............................................................................ 94
4.6.2 The Console and xdm (R5) ........................................................................................... 95
4.6.3 Hanging the Server Remotely (R3) .............................................................................. 96
4.6.4 Reading the Framebuffer (Sun Workstations) ............................................................. 96
4.6.5 Removing Files in/tmp ................................................................................................. 97
4.6.6 The Network Design ..................................................................................................... 97
4.7 Related Documentation ........................................................................................................ 98
Chapter 5 Font Management .................................................................................... 101
5.1 Fonts on the X Window System ........................................................................................ 101
5.1.1 xlsfonts ......................................................................................................................... 103
5.1.2 xfd ................................................................................................................................. 103
5.1.3 xfontsel ......................................................................................................................... 104
5.1.4 The Font Path ............................................................................................................... 105
5.1.5 The Font Directory File .............................................................................................. 106
5.1.6 The fonts.scale File (R5 only) .................................................................................... 107
5.1.7 Wildcards ..................................................................................................................... 108
5.1.8 Aliases .......................................................................................................................... 108
5.1.8.1 The FILE_NAMES_ALIAS Alias ............................................................................ 109
5.2 All About Fonts .................................................................................................................. 110
5.2.1 Bitmap Versus Outline Fonts ...................................................................................... 110
5.2.2 Font Formats ................................................................................................................ 111
5.2.3 Format Conversion Tools ............................................................................................ 112
5.3 Adding New Fonts .............................................................................................................. 114
5.3.1 Adding a Single Font .................................................................................................. 114
5.3.2 Adding Multiple Fonts ................................................................................................ 115
5.3.2.1 Multiple Font Example .......................................................................................... 116
5.3.3 Problems with Running Vendor-specific Clients ...................................................... 117
5.3.4 DECWindows Examples ............................................................................................. 118
5.3.4.1 Aliasing ................................................................................................................... 119
5.3.4.2 DECWindows Conversion ..................................................................................... 120
5.3.5 AIXWindows Example ............................................................................................... 121
5.3.6 OpenWindows Example ............................................................................................. 123
5.3.6.1 Aliasing ................................................................................................................... 124
5.3.6.2 OpenWindows Conversion .................................................................................... 125
5.3.6.3 Converting from X11/NeWS to PCF or SNF ....................................................... 125
5.3.6.4 More Conversions .................................................................................................. 126
5.4 Providing Fonts Over the Network ................................................................................... 127
5.5 The R5 Font Server ............................................................................................................ 127
5.5.1 The Configuration File ................................................................................................ 128
5.5.2 Installing the Font Server ............................................................................................ 130
5.5.2.1 Testing By Hand ..................................................................................................... 131
5.5.2.2 Changing BSD Boot Files ..................................................................................... 131
5.5.2.3 Changing System V Boot Files ............................................................................. 132
5.5.2.4 Changing AIX Boot Files ...................................................................................... 133
5.5.3 Font Server Name Syntax ........................................................................................... 133
5.5.4 Debugging the Font Server ......................................................................................... 134
5.5.5 Font Server Clients ...................................................................................................... 135
5.5.6 The Font Path and the Font Server ............................................................................. 136
5.5.7 Hostname Aliases ........................................................................................................ 138
5.5.8 A Font Server Example ............................................................................................... 138
5.6 Related Documentation ...................................................................................................... 140
Chapter 6 Color ............................................................................................................... 143
6.1 Color Specification in Release 4 and Earlier ................................................................... 144
6.1.1 RGB Color Names ....................................................................................................... 144
6.1.2 Numeric Color Values ................................................................................................. 145
6.1.3 Adding Your Own Color Names (RGB) .................................................................... 146
6.1.4 Fixing a Corrupted Color Database ........................................................................... 147
6.2 Color Specification in Release 5 (Xcms) ......................................................................... 147
6.2.1 Xcms Color Names ...................................................................................................... 148
6.2.2 Adding Your Own Color Names in Xcms ................................................................. 150
6.2.3 Xcms Database Example ............................................................................................ 151
6.2.4 Device Profiles ............................................................................................................ 152
6.3 Related Documentation ...................................................................................................... 153
Chapter 7 X Terminals ................................................................................................. 157
7.1 Buying an X Terminal: What's What ................................................................................ 157
7.1.1 Monitors ....................................................................................................................... 157
7.1.1.1 Screen Size .............................................................................................................. 158
7.1.1.2 Resolution ............................................................................................................... 158
7.1.1.3 Depth ....................................................................................................................... 159
7.1.1.4 Refresh Rate ........................................................................................................... 159
7.1.2 Keyboard and Mouse .................................................................................................. 159
7.1.3 X Server Software ....................................................................................................... 160
7.1.4 Special Features ........................................................................................................... 16 l
7.1.5 Memory Configuration ............................................................................................... 16 l
7.1.6 Network Interface ........................................................................................................ 162
7.2 X Terminal Setup ................................................................................................................ 163
7.3 Network Setup .................................................................................................................... 164
7.3.1 Getting the IP Address Using RARP ......................................................................... 165
7.3.2 Getting Information Using BOOTP ........................................................................... 165
7.3.3 Trivial File Transfer Protocol (TFTP) ........................................................................ 167
7.3.4 Setting Up the Network on the X Terminal ............................................................... 168
7.3.5 Debugging Hints .......................................................................................................... 168
7.3.5.1 Error Messages ....................................................................................................... 169
7.3.5.2 Updating the arp Table ........................................................................................... 169
7.3.5.3 Name Server Problems ........................................................................................... 169
7.4 Fonts on X Terminals ......................................................................................................... 170
7.4.1 Font Formats ................................................................................................................ 170
7.4.2 The Font Server (RS) ................................................................................................... 171
7.4.3 Choosing TFTP or NFS for Font Access ................................................................... 171
7.4.3.1 Reading Fonts Using TFTP ................................................................................... 171
7.4.3.2 Reading Fonts Using NFS ..................................................................................... 172
7.5 Configuring for the X Display Manager ........................................................................... 173
7.5.1 Configuring the X Terminal for xdm ......................................................................... 173
7.5.2 Configuring an R5 Host .............................................................................................. 174
7.5.3 Configuring an R4 Host .............................................................................................. 174
7.5.4 Configuring xdm Without XDMCP ........................................................................... 174
7.5.5 Setting Up Server Access Control .............................................................................. 175
7.6 Remote Configuration of X Terminals .............................................................................. 175
7.6.1 Remote Configuration on NCD Terminals ................................................................ 176
7.6.2 Remote Configuration on Visual Terminals .............................................................. 177
7.6.3 Remote Configuration on Tektronix Terminals ........................................................ 178
7.7 Reconfiguring the Host ...................................................................................................... 178
7.7.1 Increasing the Number of Processes .......................................................................... 178
7.7.2 Increasing the Number of Pseudo-ttys ....................................................................... 179
7.7.3 Increasing the Amount of Swap Space ...................................................................... 180
7.7.3.1 Swapping to a File .................................................................................................. 180
7.7.3.2 Swapping to a Disk ................................................................................................ 180
7.8 Related Documentation ...................................................................................................... 181
Chapter 8 Building the X Window System ......................................................... 185
8.1 Installation Issues ............................................................................................................... 185
8.1.1 Should You Use MIT Source? .................................................................................... 185
8.1.2 Types of Vendor-supplied X Distributions ................................................................ 186
8.1.2.1 X from Your OS Vendor ........................................................................................ 187
8.1.2.2 X from a Third Party .............................................................................................. 187
8.1.3 X Source Code from MIT ........................................................................................... 188
8.1.4 Complete or Client-only Distribution? ...................................................................... 189
8.1.5 Installing Multiple X Releases ................................................................................... 189
8.2 Source Preparation ............................................................................................................. 191
8.2.1 Do You Have Enough Disk Space? ............................................................................ 191
8.2.2 Is Your Platform Supported? ...................................................................................... 192
8.2.3 Applying OS Patches .................................................................................................. 194
8.2.4 Applying X Patches ..................................................................................................... 194
8.2.5 Creating a Link Tree (Optional) ................................................................................. 196
8.3 Simplest Case Build ........................................................................................................... 197
8.4 Host Problems ..................................................................................................................... 198
8.4.1 Disk Space ................................................................................................................... 198
8.4.1. l Changing the trap Directory Using TMPDIR (Ultrix and HP-UX) .................... 199
8.4.1.2 Changing the trap Directory Using -temp (SunOS) ............................................. 200
8.4.2 Shared Library Installation (SunOS) ......................................................................... 200
8.4.3 NFS Installation ........................................................................................................... 201
8.4.3.1 NFS Installation Without Root Access ................................................................. 201
8.4.3.2 Installation Over the Network (rdist) .................................................................... 203
8.4.4 Installing the termcap or terminfo Definition for xterm ........................................... 203
8.5 Simple Configuration ......................................................................................................... 204
8.5.1 Configuration Parameters ........................................................................................... 205
8.5.1.1 site.def ..................................................................................................................... 205
8.5.1.2 The ProjectRoot Flag ............................................................................................. 207
8.5.1.3 The Platform Configuration File (platform.cf) .................................................... 208
8.5.2 Configuration Example 1 ............................................................................................ 210
8.5.3 Configuration Example 2 ............................................................................................ 211
8.5.4 Configuration Example 3 ............................................................................................ 212
8.5.5 Configuration Example 4 ............................................................................................ 212
8.5.6 Configuration Example 5 ............................................................................................ 213
8.5.7 Other Build Flags ........................................................................................................ 213
8.5.7.1 xterm Build Flags ................................................................................................... 214
8.6 Building Programs After X Is Installed ............................................................................ 214
8.6.1 xmkmf .......................................................................................................................... 214
8.6.2 Include Files ................................................................................................................. 215
8.6.3 Libraries ....................................................................................................................... 216
8.7 More About imake .............................................................................................................. 216
8.7.1 The make Program ...................................................................................................... 216
8.7.2 The C Preprocessor ..................................................................................................... 217
8.7.3 Imake Syntax ............................................................................................................... 219
8.7.3.1 Comments in imake ................................................................................................ 219
8.7.3.2 Multi-line Macros (@@) ....................................................................................... 220
8.7.3.3 Concatenating Macros ........................................................................................... 221
8.7.3.4 Dealing with Tabs ................................................................................................... 222
8.7.4 imake Configuration Files .......................................................................................... 222
8.7.4.1 A Quick Tour of Files Used by imake .................................................................. 223
8.7.5 Using imake to Build X11 .......................................................................................... 224
8.8 Porting Hints ....................................................................................................................... 226
8.8.1 Undefined Symbols or Functions ............................................................................... 226
8.8.1.1 Missing Header Files ............................................................................................. 226
8.8.1.2 Missing Function Definitions ................................................................................ 226
8.8.2 Searching for Preprocessor Symbols ......................................................................... 228
8.9 Related Documentation ...................................................................................................... 230
Appendix A Useful Things to Know ....................................................................... 233
A.1 The comp.windows.x Newsgroup .................................................................................... 233
A.2 How to ftp a File ................................................................................................................ 234
A.2.1 Getting Files Using ftpmail ....................................................................................... 235
A.2.2 BITFTP ........................................................................................................................ 237
A.3 The xstuff Mail Archive Server ........................................................................................ 237
A.4 Unpacking Files ................................................................................................................. 238
A.5 Making a Filesystem Available via NFS ......................................................................... 239
A.6 How to Add a Host ............................................................................................................ 239
A.6.1 Adding a Host to/etc/hosts ........................................................................................ 239
A.6.2 Adding a Host Using NIS .......................................................................................... 240
A.6.3 Adding a Host Using DNS ......................................................................................... 240
A.7 Adding an Ethernt Address ............................................................................................. 242
A.8 Printing Documentation in the MIT X Distribution ........................................................ 242
A.9 Converting a Number Into Hexadecimal and Back ........................................................ 243
A. 10 Configuring a Sun as an X terminal ............................................................................... 243
A. 11 Using More than One Frame Buffer Under SunOS ...................................................... 244
Appendix B Compiling Public Domain Software ............................................ 247
B. 1 Finding the Sources ........................................................................................................... 247
B.I.1 Using an Archie Server .............................................................................................. 248
B.1.2 Get the FAQ ................................................................................................................ 250
B.1.3 The Usual Suspects ..................................................................................................... 250
B.2 An Example: xarchie ......................................................................................................... 251
B.2.1 Getting the xarchie Sources ....................................................................................... 251
B.2.2 Untarring the Sources ................................................................................................. 252
B.2.3 Editing the Imakefile .................................................................................................. 254
B.2.4 Compiling the Source ................................................................................................. 255
B.3 Using Patches ..................................................................................................................... 259
B.4 Another Example: xkeycaps ............................................................................................. 264
B.5 Related Documentation ..................................................................................................... 268
Appendix C X on Non-UNIX Platforms .............................................................. 271
C. 1 X on DOS-based PCs ......................................................................................................... 272
C. 1.1 Requirements for PC X Servers ................................................................................. 272
C. 1.2 Installing and Configuring PC X Servers ................................................................. 273
C. 1.3 Problems Particular to PC X Servers ........................................................................ 274
C.2 X on Macintosh Computers .............................................................................................. 275
C.2.1 Macintosh-based X Servers ....................................................................................... 275
C.2.2 MacTCP and the Communications Toolbox ............................................................. 276
C.3 X on NeXT Computers ...................................................................................................... 277
Appendix D Resources and Keysym Mappings ................................................ 281
D. 1 Using Resources ................................................................................................................ 281
D. 1.1 Resource Definition Syntax ....................................................................................... 281
D. 1.1.1 Loose and Tight Bindings ..................................................................................... 282
D. 1.1.2 The -name Command-line Option ....................................................................... 283
D. 1.1.3 xterm Versus XTerm .............................................................................................. 283
D. 1.2 Where Resources Are Defined .................................................................................. 285
D. 1.3 Advantages of xrdb .................................................................................................... 287
D. 1.4 Translation Tables ....................................................................................................... 288
D.2 Defining Keys and Button Presses With xmodmap ........................................................ 290
D.2.1 Using xev to Learn Keysym Mappings ..................................................................... 292
D.3 Related Documentation ..................................................................................................... 293
Appendix E The Components of X Products ..................................................... 297
E. 1 MIT X 11 Release 5 ............................................................................................................ 298
E.2 OSF/Motif ........................................................................................................................... 299
E.3 Sun OpenWindows ............................................................................................................. 300
E.4 DECWindows ..................................................................................................................... 301
E.5 AIXWindows ...................................................................................................................... 302
E.6 Silicon Graphics ................................................................................................................. 302
E.7 A Guide to X 11 Libraries .................................................................................................. 303
Appendix F Getting Xll .............................................................................................. 307
F.1 Where Can I Get XI IR5? .................................................................................................. 307
F.2 Where Can I Get Patches to XI IR5? ................................................................................ 311
F.3 Where Can I Get X11R4? .................................................................................................. 311
Appendix G Error Messages ...................................................................................... 315
G. 1 X Errors .............................................................................................................................. 315
G.2 UNIX Errors ....................................................................................................................... 318
G.3 Compilation Errors ............................................................................................................ 320
x///
Figures
Page
1-1 An X server with clients from multiple hosts ...................................................................... 5
2-1 A configured X session ....................................................................................................... 13
2-2 A root menu ......................................................................................................................... 14
2-3 An unconfigured X session ................................................................................................. 16
2-4 Starting a new client ........................................................................................................... 17
2-5 xclock window over xterm window ................................................................................... 17
2-6 Starting the window manager ............................................................................................. 19
2-7 xterm window with new font .............................................................................................. 21
2-8 A window with a specified geometry ................................................................................ 22
2-9 An xterm window in reverse video, decorated by twm .................................................... 23
2-10 vi using only part of a window ......................................................................................... 32
2-l 1 Logging in with xdm ......................................................................................................... 37
2-12 Starting the X server with xinit ........................................................................................ 38
3-1 xdm flow chart ..................................................................................................................... 44
3-2
3-3
3-4
3-5
3-6
3-7
3-8
3-9
4-1
4-2
4-3
4-4
5-1
5-2
5-3
5-4
5-5
5-6
5-7
5-8
6-1
6-2
6-3
8-1
8-2
8-3
8-4
B-I
B-2
D-I
Default xdm configuration files ......................................................................................... 46
xdm login box ...................................................................................................................... 48
Default xdm environment ................................................................................................... 49
XDMCP Direct, Indirect, and Broadcast queries ............................................................. 56
The chooser .......................................................................................................................... 58
An example chooser box .................................................................................................... 58
Chooser box with an R4 host .............................................................................................. 60
Adapted xlogin greeting ..................................................................................................... 62
Host-based access control ................................................................................................... 74
XDMCP and the access code ............................................................................................. 77
User-based access control ................................................................................................... 78
Propagating the magic cookie between two hosts ............................................................ 80
Components of a font name .............................................................................................. 102
xfd ....................................................................................................................................... 104
xfontsel ............................................................................................................................... 105
Font conversion utilities ................................................................................................... 113
dxcalendar with the wrong fonts ...................................................................................... 119
dxcalendar with aliases ..................................................................................................... 120
cm without aliases ............................................................................................................. 123
cm with aliases .................................................................................................................. 124
Red, green, and blue color guns ....................................................................................... 143
Xcms vs. RGB color specification ................................................................................... 149
xtici Edit menu .................................................................................................................. 150
oclock without the SHAPE extension ............................................................................. 190
oclock with the SHAPE extension ................................................................................... 190
Recursive make ................................................................................................................. 218
Files processed by imake .................................................................................................. 223
xarchie window ................................................................................................................ 258
xkeycaps window ............................................................................................................. 267
xcalc window .................................................................................................................... 289
xiv
Tables
Page
8-1 cpp Symbols ...................................................................................................................... 228
B-I Archie Servers as of January 3, 1992 .............................................................................. 248
E-1 X Distribution Directories ................................................................................................ 297
E-2 MIT X I I R5 Files .............................................................................................................. 298
E-3 Motif Files (Motif 1.1.x) .................................................................................................. 300
E-40penWindows Files (Sun4, SunOS 4.1.1) ...................................................................... 300
E-5 OPEN LOOK Files ........................................................................................................... 301
E-6 DECWindows Files (DecStation, Ultrix 4.7) ................................................................. 301
E-7 AIXWindows Files (RS/6000, AIX 3.2) ......................................................................... 302
E-8 Graphics X11 Files (Indigo, IRIX 4.0) ............................................................................ 302
1=-1 North America Anonymous tip ........................................................................................ 307
F-2 Europe/Middle East/Australia Anonymous tip .............................................................. 308
F-3 Japan Anonymous tip ....................................................................................................... 308
F-4 UUCP ................................................................................................................................. 309
F-5 Other File Transfer Methods ............................................................................................ 309
XV
Preface
This preface outlines who should be reading this book, and what readers
should expect from it.
In The Preface:
How to Use this Book ............................................................................ xix
Assumptions ......................................................................................... xxi
Related Documents ............................................................................... xxi
Font Conventions Used in This Book .................................................... xxii
Request for Comments ........................................................................ xxiii
Bulk Sales Information ......................................................................... xxiii
Acknowledgments ................................................................................ xxiii
Preface
UNIX machines can be difficult to maintain. Traditionally, UNIX administration has meant
juggling dozens of configuration files and supporting end users who may not understand how
the system actually works. Because it is infinitely flexible, UNIX can be a power-user's para-
dise and a beginner's nightmare, with the administrator sandwiched somewhere in between.
This book is designed to bridge that gap. It provides detailed information and procedures for
setting up a system that gives users access to the full power of X, without the headaches.
How to Use this Book
This book has been written to be useful to as many types of X Window System administrators
as possible. Some readers are full-time system administrators at large academic sites who are
well-versed in UNIX and X, but are always looking for new tips. Other readers are part-time
administrators at smaller sites who know a good amount about UNIX and X but are tired of
always having to reinvent the wheel. Still other readers are workstation owners who are
forced to do their own administration, interested only in getting their system running
smoothly.
Since this book is aimed at such a wide audience, not all readers will be interested in every
chapter. If we tell you about platforms you don't use, issues that aren't relevant to you, or
describe basic concepts with more detail than you need, we hope that you'll be patient and
just skim through to find what you need to know.
Chapter 1, An Introduction to X Administration, briefly introduces the design of X,
with emphasis on the administrative issues that arise out of that design.
Beginners to X and X administration should read this chapter.
Chapter 2,
Chapter 3,
Chapter 4,
The X User Environment, describes issues for configuring the X user envi-
ronment. Readers who need to set up new users should read this chapter.
This chapter is also a good place for readers who are new to X and need to
learn more about how it works from the user's point of view.
The X Display Manager, describes the X Display Manager (xdm) and how
to configure it. Readers who are interested in running xdm should read
this chapter.
Securi_', describes security issues for X. We recommend that managers of
all networked X environments study this chapter.
Preface xix
Chapter 5,
Chapter 6,
Chapter 7,
Chapter 8,
Appendix A,
Appendix B,
Appendix C,
Appendix D,
Appendix E,
Appendix F,
Appendix G,
Font Management, describes issues with using and adding fonts, both
under the standard methods and through the X ll Release 5 font server.
Readers who are interested in adding fonts to their system or using a
networked font server should read this chapter.
Color, describes how color works in X, and how to add new colors in both
the RGB and Xcms color databases. Readers who have color displays may
want to read this chapter to learn more about how color works and how it
can be manipulated.
X Terminals, describes the different types of X terminals, how to set up the
network for new X terminals, how to install fonts on the host, and how to
reconfigure the host machine to support more processes. If you use or
intend to use X terminals at your site, you should read this chapter.
Building the X Window System, describes the issues involved with building
X from source. Readers who must build X from source, or who are inter-
ested in understanding more about the basic structure of the X software
should read this chapter.
Useful Things to Know, documents various "miscellaneous" procedures
and odds-and-ends that many users will already be familiar with, but
which we want to include for the benefit of those users who are not. This
appendix shows how to 32p files, how to export NFS directories, how to
add a hostname to your name server, etc. Browse through this chapter at
least once to see if there's anything new in there; throughout the book, we
refer to sections of this chapter when applicable.
Compiling Public Domain Software, a tutorial, describes how to find and
compile public domain software. Readers who aren't familiar with this
process should read this appendix.
X Servers on Non-UNIX Platforms, briefly describes issues with using X1 1
servers on DOS-based PC and Apple Macintosh machines. Readers who
are interested in running X on these platforms should read this appendix.
Resources and Keysym Mappings, provides a more thorough description of
resources and keysym mappings. You can't work with X without needing
to understand these topics at least a little bit, so we include some back-
ground here. Some of this material duplicates what you'll find in Volume
Three, X Window System User's Guide, but we also give some useful tips
and advanced information for administrators. So even if you are familiar
with how to use resources, you may want to scan this appendix.
The Components of X Products, lists the directory structure of MIT X 1 1
and various vendors' implementations. Use this appendix as needed.
Getting XII, lists sites that have made the X1 1 source code available.
Reprinted from the comp.windows.x newsgroup Frequently Asked Ques-
tions list. Use this appendix if you need to obtain the X 1 1 source code.
Error Messages, lists some of the error messages users may encounter.
Refer to this appendix when troubleshooting.
xx The X Window System Administrator's Guide
Assumptions
To get the most out of this book, you should be familiar with UNIX and with general princi-
ples of system and network administration. If you have never administered a UNIX system or
a TCP/IP network, see the Nutshell Handbooks Essential System Administration by /Eleen
Frisch (O'Reilly & Associates, 1991) and TCP/IP Network Administration by Craig Hunt
(O'Reilly & Associates, 1992).
A firm understanding of X is helpful. If you have never used X, you should have a copy of
Volume Three, X Window System User's Guide, close at hand. However, we have included a
lot of background information on X for the benefit of readers who have not had a formal
introduction to X.
Readers are not expected to have any C programming experience, although UNIX shell pro-
gramming experience may come in handy for understanding some of the examples.
Readers are assumed to have the X manpages available, or to be able to obtain them easily.
(These pages are reprinted in the X Window System User's GuMe and are also available
online with many X distributions.) This book does not attempt to replace the X manpages
Related Documents
The following Nutshell Handbooks published by O'Reilly & Associates, Inc. may also be
helpful:
Managing Projects with make, by Andy Oram and Steve Talbott
Managing NFS and NIS, by Hal Stern
Practical UNIX Scurity, by Simson Garfinkel and Gene Spafford
System Petformance Tuning, by Mike Loukides
DNS and BIND, by Cricket Liu and Paul Albitz
The Whole lnternet User's Guide and Catalog, by Ed Krol
TCP/IP Network Administration, by Craig Hunt
Several other books and a journal on the X Window System are available from O'Reilly &
Associates, Inc.:
Volume
Volume
Volume
Volume
Volume
Volume
Volume
Volume
Zero -- X Protocol Reference Manual
One -- Xlib Programming Manual
Two -- Xlib Reference Manual
Three --X Window System User's Guide, Motif and Standard editions
Four --X Toolkit lntrinsics Programming Manual, Motif
and Standard editions
Five --X Toolkit lntrinsics Reference Manual
Six -- Motif Programming Manual
Seven --XView Programming Manual
Preface xx/
Request for Comments
To help us provide you with the best documentation possible, please write to tell us about any
flaws you find in this manual or how you think it could be improved.
Our U.S. mail address, e-mail address, and phone numbers are as follows:
O'Reilly & Associates, Inc.
103A Morris Street
Sebastopol, CA 95472
800-998-9938
international + 1 707-829-05 ! 5
fax + 1 707-829-0104
UUCP: uunet!ora.com! nuts lnternet: nuts@ora.com
Bulk Sales Information
For information on volume discounts for bulk purchase, call O'Reilly & Associates, Inc. at
800-998-9938, or send e-mail to linda@ora.com (uunet!ora.com!linda).
For companies requiring extensive customization of the book, source licensing terms are also
available.
Acknowledgments
Though it might seem a logical addition to our X Window System series, we didn't think up
this book on our own. It was a customer call that set the project in motion. Scott Hunter of
Oracle called up to ask if we had anything on X administration in the works. We said we
didn't, but that we thought it was a great idea. Scott and his co-worker Mike Riggs outlined
for us the kinds of problems they were facing that made such a book a necessity. We would
like to thank Scott and Mike for their initial efforts in conceiving the book, as well as Mary
Beth Hagan and Marilyn Grady, who did some of the initial research and writing before it fell
into our laps.
We would also like to thank the technical reviewers for the first edition of this book. They
were David Lewis: Jeffrey Vogel: Mike Braca of Visual Technology; Stephen Gildea of the
X Consortium: Liam Quin and lan Darwin of Softquad, Inc.; Doug Klein, Dave Lemke, and
the staff at Network Computing Devices; Dave Curry of Purdue University; Dinah McNutt of
Tivoli Systems; Miles O'Neal of Pencom; Jim Frost of CenterLine Software; Jon Werner of
International Business Machines; Spencer Murray of Silicon Graphics, Inc.: Joe llacqua:
Valerie Quercia, David Flanagan and Adrian Nye of O'Reilly & Associates; A1 Tabayoyan of
North Valley Research: and Upesh Patel of The Santa Cruz Operation.
Our thanks to each of these reviewers for taking the time to make this book useful and com-
plete. Additional thanks to David Tolman of Human Designed Systems and R. Lee Rainey of
Tektronix for supplying information on their company's X terminals, and to Garry Paxinos of
MetroLink, Inc. and Greg Mudge of PhoeniX Software Solutions for helping to clear up some
Preface xxiii
details about running X on PC hardware. Also, thanks to Dave Curry, Chris Calabrese of
AT&T Bell Labs, Joe llacqua, and David Lewis for supplying random number generation
methods for use with the discussion of MIT-MAGIC-COOKIE-I in Chapter 4. David Lewis
was also kind enough to allow us to reprint the material in Appendix F from the cornp.win-
dows.x Frequently Asked Questions list that he maintains.
Several vendors were kind enough to lend us software or hardware for testing purposes.
These were Silicon Graphics, Visual Technology, Human Designed Systems, Unipress Soft-
ware, White Pine Software, Network Computing Devices, Locus Computing Corporation,
Unipress Software, VisionWare Ltd., Quarterdeck Office Systems, FTP Software, Humming-
bird Communications Ltd., and Stamet Communications.
We would also like to thank those who worked on the production of the book. At O'Reilly &
Associates, we would like to thank Gigi Estabrook for her initial copy-edit, Chris Reilley for
the figures, Ellie Cutler for indexing, and Rosanne Wagger and Mike Sierra for production of
the final copy. We would also like to thank Lenny Muellner for tools support and for allow-
ing us to disrupt his life whenever we had the urge to make screendumps.
Finally, we would like to thank our editor, Tim O'Reilly, for his initial trust in us and for his
patience during the countless months it took us to put the book together.
Of course, we alone take responsibility for any errors or omissions that remain.
xxiv The X Window System Administrator's Guide
1
An Introduction to X Administration
This chapter provides an introduction to X and to X administration.
In This Chapter:
The Design of Xl 1 ................................................................................. 3
Display Servers ................................................................................. 4
Clients and Resources ....................................................................... 6
Toolkits and GUIs .............................................................................. 7
X Administration .................................................................................... 8
Installing X ......................................................................................... 8
Supporting Users ............................................................................... 9
Maintaining Software ......................................................................... 9
Maintaining Multiple Machines ......................................................... 10
A "Philosophy" of X Administration ................................................... 10
1
An Introduction to X Administration
Administrators make things work. On the surface, the X Window System is just one more
software package that the administrator needs to install, maintain and support for users. X
runs on any architecture, so there are fewer differences between systems than with most soft-
ware. What makes X different from other packages, however, is that it provides a great deal
of configurability. It's relatively easy to get X to run on your site with its default settings, but
it requires a bit more homework to take advantage of its flexibility and create a secure, cen-
trally-maintained environment for users. This book does the homework for you.
Administrators need to know how X works before they can figure out how to make it work
for them. This chapter provides an introduction both to X and to X administration.
1.1
The Design of Xll
The X Window System, called X or X 11 for short, is a network-based graphics window sys-
tem that was developed at the Massachusetts Institute of Technology. X is based on the cli-
entCerver model, in which the application program (the client) does not directly access the
display, but communicates with an intermediary display program (the server).
One important feature of the client/server model is that the client and server programs can
communicate over a network. They do not need to run on the same machine, or even in the
same building. This means that an X display is an ideal front end for a distributed computing
environment. A system administrator might open windows on each of a dozen machines she
is maintaining; a financial analyst at a Wall Street firm might have a spreadsheet in one win-
dow, Quotron data "off the wire" in another, and a custom mainframe-based analysis program
in another.
The client and server communicate using the X Protocol, which can run on top of UNIX
domain sockets, TCP/IP, or DECnet. Technically, the X Protocol is the true definition of X.
However, when we refer to X, we often mean not only the protocol but also the widely avail-
able implementation of clients, servers and libraries that use that protocol.
Since the client and server can run on different machines, the local display machine can get
away with running a server program and nothing else. X servers can run on single-tasking
DOS-based PCs, which connect across the network to multi-user systems capable of running
multiple graphical applications. More importantly, this feature has led to the development of
low-cost X terminals, designed specifically for running X servers. Using X terminals, a
An Introduction to X Administration 3
company can give multiple users the ability to run graphics-intensive programs, without hav-
ing to buy each user a machine powerful enough to execute the graphics programs them-
selves.
X has great commercial potential because X can be ported to any architecture, operating sys-
tem, or display type. Servers have been written for all sorts of architectures, under all sorts of
operating systems, for all types of displays. The only requirement is that there be a keyboard,
a graphic display, and an input pointer (such as a mouse). And because the server handles the
hardware and operating-system dependencies, client programs can be almost completely por-
table.
Currently, most client programs run on some flavor of the UNIX operating system, but they
have also long been available under many other operating systems (such as VMS), and recent
products now run X clients (as well as servers) on DOS and Macintosh machines. Further-
more, clients have been written to be heavily dependent on programming libraries. This
means that once the libraries are ported to another operating system, clients using those
libraries should be easily ported as well.
X was developed at the Massachusetts Institute of Technology and is maintained by a non-
profit consortium of vendors and universities. The source code to X 11 is free. As a result, X
has led to an explosion of free software not seen since the heyday of Berkeley UNIX develop-
ment.
The fact that X was developed by a consortium and had to meet the sometimes conflicting
needs of many different vendors, does, however, lead to a few complications. At times, it
seems that the developers have gone overboard to make X flexible, configurable and extens-
ible, so that it could be adapted to the needs of whatever platform and environment it is
ported to. However, in the end, it is hard to fault the bias towards flexibility. The almost uni-
versal adoption of X is a tribute to just how insightful those design decisions were.
One very concrete expression of X's political heritage is that X itself is a no-frills window
system. Rather than choose between competing graphical user interfaces (GUIs), the X
designers chose to articulate "mechanism not policy." That is, they provided base technology
for manipulating windows, but didn't insist on a particular "'look and feel." X keeps the GUI
distinctly separate from the window system itself. Several GUIs (notably those based on the
OSF/Motif and OPEN LOOK specifications) have already been built upon X11. What's more,
because X doesn't have a GUI to get in the way, it has been integrated with other window
systems such as Microsoft Windows and the Macintosh Finder. In such implementations, X
windows exist side-by-side with the native windows of that GUI.
1.1.1
Display Servers
Client-server terminology often seems "backwards" to people who are new to X. Since the X
display runs on a local machine on the user's desk, you might think that the X display should
run the X client program. People are used to thinking of servers as something they access
across the network (such as file or print server).
4 X Window System Administrator's Guide
On other window systems, you might be able to configure this information directly into the
application at installation time, since there's only one display that the program can access. X
clients, however, need to be able to run with all possible servers. The X server therefore
needs to mediate between clients and the specifics of the display.
For the output device--i.e., the monitor--the server not only needs to know how to draw to
the display as specified by the client, it also needs to be able to tell the client the screen
dimensions or whether color is supported. If a user has more than one monitor, each monitor
can be used as a separate screen of the display.
Input devices (the mouse and keyboard) can also differ. In order to insulate clients from
these differences, the server maintains a mapping between physical buttons and keys and cor-
responding logical identifiers. For example, the code generated by each key is assigned a
symbol, called a keysym. Clients refer only to keysyms, and the server performs the actual
translation between keysyms and the actual keycodes generated by a particular keyboard.
(For more information on keysyms, see Section D.2.)
1.1.2
Clients and Resources
Because X applications, or clients, can display on any X server on the network that allows
the connection, X applications must be configurable. However portable the X client-server
model makes an application, there are going to be dependencies and preferences that the user
needs to be able to express. A font that looks good on one display might be too small on
another; a key that is easily reached on one keyboard might be a stretch on another.
On another window system, such as that on a Macintosh or on a PC running DOS, all applica-
tion preferences can be set at the application level. This makes sense, because the Macintosh
OS and DOS are single-user operating systems with only one display to connect to. All pref-
erences might as well be stored in the same place.
By necessity, X needs to deal with application resources more robustly. X generally runs on
multi-user systems, so clients need to be configurable by each individual user. (Character-
based UNIX programs already do that using "dot" files in the user's home directory, such as
.exrc, .newsrc and .mailrc.) X clients can display on any server on the network, and each
server may require its own preferences; so X clients also need to be configured for each indi-
vidual server. And because binaries are often shared among several different hosts, each X
client executable might be run on any number of systems, so system-specific defaults are
needed.
X applications need to be configurable at each of these levels. X applications are configured
primarily via resources. Resources are variables that are used by X clients and that can be set
at the user level, system level, server level, and client level.
It is essential that a system administrator thoroughly understand the resource mechanism.
Resources are discussed in detail in Volume Three, X Window System User's Guide. In addi-
tion, Appendix D provides a summary of the most important points of syntax and usage.
6 X Window System Administrator's Guide
1.1.3 Toolkits and GUIs
X clients are built using a number of programming libraries that progressively insulate the
programmer from the details of the X protocol. The lowest layer is Xlib, which maps fairly
directly to the protocol, and requires the programmer to do a great deal of "handwork." Each
event generated by mouse movement, key presses, or graphics exposure must be handled
explicitly. Writing a graphical user interface with Xlib would be a bit like starting out with
logs when you want to build a house. For this reason, in most X clients, Xlib is used chiefly
for drawing, or in cases where the programmer needs more direct control of the dialog with
the server.
The X Toolkit Intrinsics (Xt) are built on top of Xlib. They simplify the job of building a
graphical user interface by creating support for objects called widgets. Widgets are proto-
types for common user interface elements such as scrollbars, menus, and so forth, plus other
objects that can be used to glue these elements together into a complete application window.
But Xt itself does not provide a GUI. This is the job of additional libraries that are layered on
top of Xt in turn. The three most common GUIs are provided by the Athena widgets and the
OSF/Motif and OPEN LOOK specifications. What's more, even a widget set provides only
part of the GUI's look and feel. The basic framework for moving, resizing, and managing
windows is handed over to a separate program called a window manager.
Athena is a bare-bones widget set originally developed by MIT as a "proof of concept" for
Xt. Athena is not terribly pretty, but is widespread because most of the original MIT client
programs were written with the Athena widgets. The corresponding window manager is
usually twin.
OSF/Motif is a GUI that was developed by the Open Software Foundation and is sold by var-
ious licensed resellers. (Motif source can be purchased directly from OSF.) OSF/Motif con-
sists of a set of Motif libraries and widgets, a style guide, several demo clients, and the Motif
window manager (mwm).
OPEN LOOK is a GUI specification with multiple implementations. The OLIT toolkit is an
Xt-based toolkit developed by AT&T. The XView toolkit was developed by Sun directly on
top of Xlib, with an API similar to its native SunView user interface, which predated X.
XView is available in the contrib/part of the MIT distribution. OpenWindows is a complete
windowing environment distributed by Sun Microsystems that is compatible with the OPEN
LOOK specification, and which includes a window manager client called olwm.
To further complicate the picture, clients can be written using one set of widgets, yet work
with the window manager of a competing GUI. This is most common with MIT clients writ-
ten with the Athena widgets, which are often used with mwm or olwm. Fortunately, there is a
set of conventions (called the Inter-Client Communication Conventions) that ensure inter-
operability of clients and window managers from different X-based GUIs.
An Introduction to X Administration 7
1.2 X Administration
One of the philosophies that X is built on is that it provides "mechanism, not policy." This is
good for developers, since it allows them to decide how X should be used. But until a single
standard emerges, it leaves users (and administrators) without much guidance. This book
hopes to come to the rescue.
One complication for users and administrators is that there are so many different flavors of X.
There's "standard" X--that is, the client, server and library distribution maintained by the X
Consortium at MIT. Then there are the various vendor-configured versions that are derived
from MIT X 11 but then configured for a vendor's operating system and proprietary "look and
feel." There's OpenWindows, which runs on Sun workstations. There's Open Desktop, which
runs on PCs running SCO UNIX. There's DECWindows, which runs on DEC workstations,
and AIXWindows, which runs on IBM workstations running AIX. And many more.
This means that X may not look the same on different platforms. A user who thinks he or she
has learned X may find that they're totally lost in a co-worker's environment across the hall-
way. Furthermore, an administrator might have several different platforms to maintain. This
book concentrates on "standard" X 11 as distributed by MIT, but also covers conflicts with
vendor distributions of X, as well as conflicts between different releases of X 11.
Another complication is that while the X Consortium provides only "mechanism" and relies
on vendors to decide how to use it, there are some gaps where no robust, universally-
accepted way of dealing with the mechanism has come to light. For example, resources have
the potential to be a very powerful tool, but are currently difficult to understand, manipulate,
and debug. You need to know what's "under the hood" before you can use resources prop-
erly.
This is one of the most difficult things about X administration: you may need to know an
awful lot about how things work before you can do what you really want. This book tries to
make it easier to configure X for your site by describing procedures step-by-step. At the
same time, we try to provide background information for readers who continue to have prob-
lems or are interested in knowing more.
The X sources provide ample documentation, but it's often difficult to weed through the doc-
umentation tree to find what you want to know. For example, to learn how to use security fea-
tures of X 11, you need to read the xauth, Xsecuri., xhost and xdm manpages before you can
begin to get an idea of how it works. This book attempts to group together everything you
need to know to get X working on your site.
1.2.1
Installing X
You can get X from your operating system vendor, or you can use the standard MIT X11.
Which you choose to do depends on what you plan to do with it.
If you plan to run specific clients, you may have no choice: a client might run only with a
vendor's distribution of X (such as OpenWindows), or it might run only with X11R5 (which
at this writing is unavailable from OS vendors).
8 X Window System Administrator's Guide
If technical support matters a lot to you, you might prefer to stick with your vendor's distri-
bution of XI 1. If having the "latest and greatest" is more important to you, you probably
want to build MIT X11 with all the latest patches.
If you plan to develop your own X applications, you may want several different X distribu-
tions installed, so you can test (or port) your applications on multiple platforms. In addition
to the X distribution itself, you will probably also need other toolkits installed, such as
OSF/Motif, OLIT or XView.
Chapter 8 describes how to build X 11 from source.
In addition to the X distribution of clients, libraries and a local server, administrators need to
provide X servers for users. X terminals are available from many different vendors. X servers
that run on top of PC and Macintosh environments are also available. Chapter 7 discusses
the issues of choosing and installing an X terminal, and Appendix C discusses X servers that
run on PCs, on Macintosh computers, and on NeXT computers.
1.2.2
Supporting Users
Your users might all be self-sufficient power users, or they might need their hands held with
every step. You probably have both types on your site, as well as every gradation in between.
You will need to set up default environments for the users on your site, and be prepared to
help them debug their environment when things go wrong. Remember that the more time you
spend on setting up templates for users, the faster users will be able to be productive, and the
less time you'll spend later on debugging their environments. Chapter 2 covers some of the
issues that you will need to address when setting up a user's environment.
If you have any X terminals at your site, you should run the X Display Manager (xdm) to pro-
vide an easy way for those users to log on and start their X sessions. You might also want to
set up xdm to control X servers running on workstations as well, since among other things,
rdm provides a way to configure user environments in a central place. Chapter 3 describes
how to set up xdm for your site.
Unless everyone at your site trusts everyone else, you should probably look into using secu-
rity for X servers on your site. If you are on the Internet, you should definitely use security. If
someone's determined to snoop on you, they can probably get through, but there are a few
things you can do to trip up the more casual attacker. Chapter 4 describes security issues for
XII.
1.2.3
Maintaining Software
After you have everything running smoothly on your site, you'll find that most of your time
as administrator will involve getting and installing new software, and upgrading existing
software. In addition to commercial software, sources to many X programs are available in
the public domain. Appendix B is a tutorial on how to find and build public domain software.
An Introduction to X Administration 9
New clients often call for new fonts. These fonts have to be made available to all servers that
might run the client. Chapter 5 describes how to install new fonts and how to convert fonts
from other formats.
1.2.4
Maintaining Multiple Machines
The whole idea of X is to have many machines networked together: PCs, workstations, X
terminals, minicomputers, supercomputers, you name it. This can become a lot of work for
administrators, since that means multiple machines to configure and maintain consistently.
One useful tool is to keep up-to-date documentation on how each machine is configured.
This is especially helpful on a large site, particularly on one with more than one administra-
tor.
But maintaining many different machines can be made much easier if you configure
machines centrally when you can. This book describes the various mechanisms X provides
for doing so. The X Display Manager can be used to maintain all X sessions centrally. Many
X terminals can be configured remotely from a host machine. The font server, new with
X I I RS, provides a way to supply fonts to multiple servers.
1.2.5
A "Philosophy" of X Administration
If we had to come up with a "philosophy" of X administration, it would be that X is made to
fit the needs of its users. As the administrator, you have the responsibility to determine your
users' needs and configure X accordingly.
X is installed in all sorts of environments, from universities with hundreds of student users, to
home offices with a single standalone machine. For that reason, almost everything in X is
configurable at multiple levels. Application resources can be set in several different places.
You can create new fonts and define new colors. The X Display Manager can be configured
to meet practically any need. Even the source code to X is available for programmers who
want to create their own workarounds if none already exist. The fundamental idea is that if
you don't like the way something works, change it.
From the onset, you'll see that this book is less about making X work than it is about getting
X to work for you.
10 X Window System Administrator's Guide
2
The X User Environment
Administrators need to configure X environments for their users. This chap-
ter describes the issues involved in making an X environment work properly.
In This Chapter:
The Configured X Session ................................................................... 13
The Twilight Zone ............................................................................ 16
Components of the X Environment ...................................................... 18
Window Managers ........................................................................... 18
Customizing Clients ......................................................................... 20
The -fn Command-line Option ........................................................ 20
The -geometry Command-line Option ............................................ 20
Specifying Colors ........................................................................... 23
Using Resources ........................................................................... 24
The Startup Script ............................................................................ 25
The Foreground Process ............................................................... 26
The Shell Environment ......................................................................... 27
Setting the DISPLAY Variable ........................................................... 27
Complications with Display Names ................................................ 28
Redefining the Search Path ............................................................. 29
Setting the Search Path for OpenWindows Support ....................... 30
Setting the Search Path for Mixed Environments ........................... 30
xterm Issues .................................................................................... 31
xterm and Terminal Emulation ........................................................ 31
The resize Client ............................................................................ 31
xterm and the Login Shell (C Shell) ................................................ 33
Starting Remote Clients ................................................................... 34
Starting a Remote Client with rsh ................................................... 35
Startup Methods .................................................................................. 37
xinit and startx ................................................................................. 38
Differences Between .xinitrc and .xsession ...................................... 39
Related Documentation ....................................................................... 39
xsetroot -bitmap /usr/include/Xll/bitmaps/dimplel
# Merge in user resources:
xrdb -merge $HOME/.Xresources
# Start some applications:
xterm -title Top -g 70x35+i+i &
xterm -title Bottom -g +i-0 &
xclock -g -0+0 &
xcalc -g -0+298 &
xpostit -sv -g ii0x50-0+200 &
# Start a window manager in the foreground:
twm
.Xresources
The .Xresources file contains resource definitions. These resources define Joan's client
preferences. Currently, Joan's resources are used to set some preferences for her aterm
terminal emulator windows. We set her up to use a font that we think she would prefer
over the default, we turned on a scroll bar, and we set the number of lines to be saved
for scrolling to be 200. The .Xresources file reads:
' Resource definition file.
,. XTerm definitions :
XTerm* font :-misc- fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1
XTerm* scrol iBar: true
XTerm*savedlines : 200
The .twmrc file is a configuration file for Joan's window manager, twin. A window
manager is a special client that controls how windows are moved and resized. In addi-
tion, the window manager defines the root menu shown in Figure 2-2. The .twmrc file
is long, but we can show you the part that defines the root menu:
menu "rootmenu"
{
"twm Root Menu" f.title
"Terminal" f.exec "xterm &"
"Clock" f.exec "xclock &"
"Calculator" f.exec "xcalc &"
"Dictionary" f.exec "xwebster &"
"Solitaire" f.exec "spider &"
" " f. hop
"Kill Window" f. destroy
"" f. nop
"Restart twm" f. restart
"Log Out" f.quit
}
Together, these files define Joan's X user environment. They are defined in addition to the
shell startup files that she needs to define her UNIX shell environment.
Now, imagine that you're Joan, new to both UNIX and X, and you're faced with these startup
files. Each file has its own peculiar syntax that she might be able to follow, but will probably
have trouble duplicating. Where did we get that arcane font name? Why do some of the com-
mands in .xsession end in ampersands (&) while others don't?
The X User Environment 15
2.1.1 The Twilight Zone
One day Joan logs in at a workstation. The X server isn't running on the workstation console,
so Joan tries to start her X session by typing X. What she gets is a blank screen with an "x"
representing her pointer. She is unable to start applications and after several minutes decides
to start over.
After rebooting the machine, Joan learns that she should use the xinit command, not X. When
she does this, she gets a single xterm terminal emulation window with a very small font, and
no window manager, as shown in Figure 2-3.
Figure 2-3. An unconfigured X session
(Unknown to Joan, this has happened because the .xsession file is the one primarily responsi-
ble for configuring Joan's user environment under xdm. Under xinit, she needs an .xinitrc file.
See Section 2.4 for more information on starting the X session using xinit.)
Joan tries to start a clock using the xclock command, shown in Figure 2-4.
16 The X Window System Administrator's Guide
ruby:joan 2B xclock &|
Figure 2-4. Starting a new client
What happens is that the clock appears on top of the xterm window, obscuring her prompt, as
shown in Figure 2-5.
Figure 2-5. xclock window over xterm window
Since there is no window manager running, Joan can't move the new xclock window from on
top of the xterm window. She needs to place her pointer on the xterm window and type
RETURN a few times before her prompt peeks out from underneath the clock window.
What Joan has stumbled onto is X in its unconfigured state.
Joan types "XYZZY". Nothing happens.
The X User Environment 17
2.2 Components of the X Environment
Joan's adventures are meant to show the world of difference between X in its raw state, and
X when it has been configured. You might think of it as the difference between an unfur-
nished apartment and a home.
Like someone's home, the X user environment is made up of many components. You can't
just bring in furniture and expect the house to look lived-in; similarly, you can't just start a
window manager and expect the X environment to be complete.
Some users would prefer to configure their own environments. Other users won't have the
slightest idea of where to begin. As an administrator, you have to decide whether you want
to set up an environment with reasonable defaults for new users, or whether you'd rather just
give users a bare-bones environment and let them figure it out on their own.
Our opinion is that it's always better to take the time to set up a decent environment for your
users. "Power" users can always rip apart what you set up and start again from scratch; but
users who are just interested in getting their jobs done will appreciate having something
workable to begin with.
One approach to creating a useful default environment is to alter the system-wide files. For
example, if a user has no .twmrc file, they will use the file/usr/lib/Xll/twm/system.twmrc. If a
user has no .xsession file, they will use commands specified in the/usr/lib/Xll/xdm/Xsession
file. As shipped in the MIT distribution, the defaults in these files are fairly basic. But you
can configure these defaults system-wide to better accommodate your users.
The preferable approach is the "template" approach, as we set up earlier for the user named
Joan. We gave Joan a set of configuration files that had been tried and tested and liked by
other users. The advantage to using templates is that when users are ready to edit their envi-
ronment, it's much easier if the configuration files are already set up locally.
Either way, the administrator needs to take a strong hand in setting up the user environment.
The administrator is all that stands between a user and the abyss of the default X environ-
ment.
There are an endless number of factors that can influence a user's X environment, but the
simplest user environment (like Joan's) consists of a window manager, a little client customi-
zation, and a startup script to bring it all together.
2.2.1
Window Managers
As we mentioned earlier, window managers are special clients that allow you to move, resize,
and iconify windows. The window manager provided in the X source distribution is twin, the
Tab Window Manager. Window managers are generally started in the user's startup script,
but like other clients, they can be started on the command line as well, as shown in the fol-
lowing figure.
18 The X Window System Administrator's Guide
rub:joan 2B twm &|
Figure 2-6. Starting the window manager
If a window manager were already running, the command would fail with a message resem-
bling:
twin: another window manager is already running on screen O?
twin: unable to find any ged screens
The window manager gives each window its own borders and titlebar. By pressing the
pointer on the titlebar (i.e., holding down the first mouse button while the pointer is on the
titlebar), you can move the window. By pressing the icon at the upper right corner of the
titlebar, you can resize the window. By pressing the icon at the upper left corner of the
titlebar, the window is iconified.
Once the window manager is started, you can use it to move windows on the screen. You can
also use it to start new applications on the root menu, as shown in Figure 2-2.
When a new window appears, twm allows you to place the window by displaying an outline
of the window with the upper left corner at your current pointer position. When you press the
first mouse button, the window will be placed at that position.
The behavior of twm can be configured by editing a file called .twmrc in your home directory.
Alternatively, the default behavior of twm on a system can be changed by editing the
system.twmrc file, usuall3) in the/usr/lib/Xll/twm directory. For information on how to con-
figure twm, see either the twm manual page or The X Window System User's Guide, Standard
Edition (O'Reilly & Associates, 1990).
twm is the only window manager supplied with the MIT X distribution, but there are many
other window managers distributed by vendors. One of the most popular window managers
is mwm, the Motif Window Manager. mwm is a window manager which implements the
OSF/Motif "look and feel." Another popular window manager is olwm, a window manager
for OPEN LOOK. Other window managers are swm (the Solbourne window manager, which
can simulate both olwm and mwm in separate "modes"); gwm (a public domain window man-
ager that uses LISP-like syntax in its configuration, and can simulate mwm); and ,'m and
olvwm, which are versions of twm and olwm (respectively) that support a "virtual" root win-
dow. A virtual root window is a root window that is larger than the portion visible on your
display. It can be scrolled around to move different sections into view. This simulates having
a much larger display and gives more room to display clients.
See The X Window System User's Guide, Motif Edition (O'Reilly & Associates, 1992) for
more information on mwm and Motif. For more information on olwm and OPEN LOOK, see
the upcoming X Window System User's Guide, OPEN LOOK Edition (O'Reilly & Associates,
1993).
The X User Environment 19
2.2.2 Customizing Clients
There are two ways to customize clients: with command-line options, and with resources.
The use of command-line options to modify the behavior of a program should be familiar to
any UNIX user, but even so, it's worth reviewing a few of the most commonly-used X
options--those for specifying fonts, window size and placement, and colors. This discussion
will also serve to introduce the treatment of resources, which provide a convenient way to set
"global" options.
2.2.2.1 The-fn Command-line Option
For specifying a font, the xterm client provides a -fn command line option. Font names in X
are a bit unwieldy, but you can use the xlsfonts command to get a list of fonts available for
your X server. For example:
% xlsfonts
-adobe-courier-bold-o-normal--lO-lO0-75-75-m-60-iso8859-1
-adobe-courier-bold-o-normal--i I- 80-i 00-i O0-m-60-iso8859-1
-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-I
...
-misc- fixed-bold-r-normal--15-140-75-75-c-90-iso8859-I
...
(You might also try the ffontsel client, which can be used to display fonts available to your
server.)
See Chapter 6 for a description of each of the fields in a font name. For now, let's use the
fixed font that we showed in the output of xlsfonts. Use the -fn option:
% xterm -fn -misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-i &
This command line gives you a window resembling that in Figure 2-7.
2.2.2.2 The -geometry Command-line Option
The -geometry or-g command-line option can be used to specify two things: where the client
window initially appears and what size it should initially be. To have an xterm window that's
92 characters across and 40 lines long (instead of the default 80x24), enter:
ruby:joan % xterm -geometry 92x40 &
To have an xterm window appear at position (324,190) on the screen, enter:
ruby:joan % xterm -geometry +324+190 &
You can combine the two requests into one argument:
ruby:joan % xterm -geometry 92x40+324+190 &
You see a window resembling that in Figure 2-8.
20 The X Window System Administrator's Guide
2.2.3 The Startup Script
The startup script is what brings a user's entire X environment together. If you use xdm to
start your X sessions, this script is called SHOME/.xsession. If you use xinit, the script is
called SHOME/.xinitrc.* We'll show the simple startup script that we used earlier:
# .'/bin/sh
# Add /usr/local/bin to the path for this script:
PATH=$PATH:/usr/local/bin
export PATH
# Set up a pattern for the root window:
xsetroot -bitmap /usr/include/Xll/bitmaps/dimplel
# Merge in user resources:
xrdb -merge $HOME/.Xresources
# Start some applications:
xterm -title Top -g 70x35+i+i &
xterm -title Bottom -g +i-0 &
xclock -g -0+0 &
xcalc -g -0+298 &
xpostit -sv -g ii0x50-0+200 &
# Start a window manager in the foreground:
twm
The first thing that this startup script does is set the path to be used for commands for that
script. By default, :/bin:/usr/bin:/usr/bin/Xll:/usr/ucb is used as the search path for the
startup shell. Since the xpostit command resides in/usr/local/bin, it needs to be called with
its full pathname, or/usr/local/bin needs to be appended to the search path. This path is then
exported, so that it will also be used by other clients such as twm.
The startup script uses xsetroot to give the user a nicer background than the default root win-
dow background.
Next, the startup script calls the xrdb client. It is this command that reads the resources
defined in the .Xresources file. The xrdb client loads resources directly into the X server.
There are alternate ways of reading resources (as described in Section D. 1.2), but if you load
the resources directly into the server, you guarantee that all clients displaying to that server
will be able to access them. xrdb should be run before any applications are run, since you
want to make sure that the resources are loaded before you start any applications that use
them; and it should be called in the foreground, to guarantee that the resources are fully
loaded before the script continues.
The applications are then started. We described how the -g options are being used in Section
2.2.2.2. Note that each of these command lines are placed in the background.
Finally, the twm window manager is started. When twm starts up, it is configured by the
.twmrc file.
* See Section 2.4 for more information on using xinit. See Chapter 3 for more information on using xdm.
The X User Environment 25
2.3.2.1 Setting the Search Path for OpenWindows Support
If you are running OpenWindows, you need to add the following directories to your search
path along with your vanilla X 11 binary directories:
set path = ($path /usr/openwin/{bin, demo} )
(In OpenWindows 3.0, the/bin/xview directory is now linked to bin.)
In addition, you need to set the shared library path to/usr/openwin/lib:
setenv LD_LIBRARY_PATH /usr/openwin/lib:/usr/lib
If the OpenWindows distribution is elsewhere on your system, you can set the
OPENWINHOME environment variable and use it in place of/usr/openwin. For example, if
the OpenWindows distribution is in/usr/local/openwin, C shell users can enter in their .cshrc
files:
setenv OPWINHOME /usr/local/openwin
set path = ($path $OPENWINHOME/{bin,demo} )
setenv LD_LIBRARY_PATH $OPENWINHOME/Iib:/usr/lib
In Bourne shell syntax, this might read:
OPENWINHOME=/usr/local/openwin
PATH= $PATH: $OPENWINHOME/bin: $OPENWINHOME/demo
LD_LIBRARY_PATH= $OPENWINHOME/lib:/usr/lib
export OPENWINHOME PATH LD_LIBRARY_PATH
2.3.2.2
Setting the Search Path for Mixed Environments
If you are running multiple releases of X 11 on your system, you need to set your search path
appropriately according to which executables you want to run. One situation in which you
might want to run multiple releases is if you are testing a new release of X 11 before setting it
loose on your users. For example, suppose that you have X11R4 installed and running in
/usr/lib/Xll and /usr/bin/Xll, and have just compiled and installed XI1R5 into
/usr/XllR5/lib and /usr/XllR5/bin. For testing your new environment, enter the
/usr/X11R5/bin directory into your command search path before/usr/bin/X11:
set path = ( /usr/XllR5/bin $path )
On SunOS, you also need to enter/usr/X11R5/lib into your LD_LIBRARY_PATH:
setenv LD_LIBRARY_PATH /usr/XllR5/lib
Another possibility is to set the LD_LIBRARY_PATH environment variable for each com-
mand:
% (setenv LD_LIBRARY_PATH /usr/XllR5/lib ; /usr/XllR5/bin/xterm)&
30 The X Window System Administrator's Guide
[] xterm
COMM SXConsortium: Imakefile,v 1.105 91/07/27 14:13:23 rws Exp $
#define IHaveSubdirs
#define PassCgebugFlags
ORLDOPTS = -k
CHECKFNSRC = $(UTILSRC)/checkfn
CHECKFN = $(CHECKFNSRC)/checkfn
#if BuiIdServer
SERVERDIRSTONAKE = server rgb
#endif
SUBDIRS = confi9 include lib extensions fonts $(SERVERDIRSTONAKE) \
clients demos util man
LNINSTALLDIRS = $(LIBSRC) $(EXTENSIONSRC)
NakeSubdirs($(SUBDIRS))
NakeLintSubdirs($(LNINSTALLDIRS),instaII.In,nstaIl.ln)
NakeLXntSubdirs($(LNINSTALLDIRS),externaI.In,Iintlib)
XCOMM
"Imakefi]e" [Red only] 107 lines, 2918 characters
Figure 2-10. vi using only part of a window
The resize client is typically used immediately after the dimensions of an xterm window are
changed. A peculiarity of the resize client is that it does not access the shell itself, but simply
returns the shell commands that would be needed; to have those commands read by the shell,
you have to either save its output in a file and source it in with the .... command (Bourne
shell) or source (C shell) commands, or call it using the shell command eval. For example,
after resizing a window you would type in that shell:
% eval "resize"
When you call the resize command under a termcap system, it produces the commands for
resetting the TERMCAP environment variable with the li# and co# capabilities reflecting the
current dimensions. When you call the resize command under a terminfo system, it produces
the commands for resetting the LINES and COLUMNS environment variables.
32 The X Window System Administrator's Guide
2.3.3.3
The resize command consults the value of your SHELL environment variable and generates
the commands for setting variables within that shell. If you are using a non-standard shell,
resize may still recognize your shell; as of R5, resize recognizes tcsh,jcsh, ksh, bash, and jsh.
But if resize does not recognize your shell, try using the -c or -u options to force resize to
use C Shell or Bourne Shell syntax (respectively), depending on which syntax is appropriate
for your shell.
xterm and the Login Shell (C Shell)
Most people who use the C shell know that the .cshrc file is read for every csh command run,
and the .login file is read only once, at the beginning of each "login shell." One thing that X
does is to effectively redefine the meaning of the "login shell."
Before X, you could assume that a user had a single interactive shell per login. Since the
.login file would therefore be read only once, at the beginning of the login session, you could
use it as a "batch" file to run some daily commands. For example, you might have it show the
"message of the day" and start mail for you first thing in the morning:
cat /etc/motd
mail
Since X gives you the ability to run multiple xterm windows, however, the usage of the .login
file becomes more confused. You probably don't want to read your mail and see the "mes-
sage of the day" every time you call up a new xterm window. It makes more sense for these
functions to be taken up by your X startup script, and to run X clients rather than text-based
applications. For example, if you log in via xdm, your .xsession might contain the lines:
# Show the message of the day:
xmessage -file /etc/motd &
# Start a mail application:
zmail -gui &
Here, we use the contrib client xmessage to show the message of the day, and we call up an
X-based commercial mail application, zmail.
What does that leave for terminal emulator windows like xterm? Well, by default, xterm
shells are not login shells--that is, xterm shells don't run .login, but just the shell startup file
.cshrc. You can call up a login shell xterm by starting xterm clients with the -Is option.
(Alternatively, you can set up all xterms to run login shells by setting the XTerm*login-
Shell resource to true.)
Whether you want to set up xterm as login shells depends on what you use .login for. How-
ever, you might want to start thinking of the .login file as the startup file for ASCII-based user
sessions only. Some of the functions of the .login script don't make sense for xterm shells
(such as setting the terminal type, which xterm is smart enough to do on its own). But those
functions are still useful for when you log in at an ASCII terminal, which you undoubtedly
still do on occasion (for example, when dialing in on a modem line).
The .cshrc file therefore takes on a lot more responsibility for your shell environment, since it
needs to make the xterm shell environment complete on its own. Since it's also used for C
The X User Environment 33
shell scripts, you can write it so it tests for a prompt and provides interactive-shell startup
commands for interactive shells only:
# Make default file mode -rw-rw-r--.
umask 002
set path= (/usr/local/bin /usr/ucb /usr/bin /usr/bin/Xll . )
# Fix "dirs" and "$cwd" not to be fooled by symbolic links:
set hardpaths
# ALIASES AND OTHER INTERACTIVE COMMANDS GO BEqWEEN HERE AND endif:
if ($?prompt) then
set history=50 savehist=25
set host=" hostname"
set mail=(300 /usr/spool/mail/$user)
set prompt=" ${host} : Suser \ ! % "
alias h history
alias is "is -F"
alias rm "rm -i"
stty erase '^h'
setenv PRINTER dodo_ps
endif
In this example, the part between "if ($?prompt) "" and "endif" are only executed for
the primary interactive shell.
Note that if you use xinit to start your X session, then your .login file is executed when you
first log in prior to starting the X server. If you use xdm to start your X session, the .login file
is never executed at all unless you run xterm with the -Is option.
2.3.4
Starting Remote Clients
One of the advantages of a window system like X is that you can run applications remotely
and view them on the local display. You can try this easily enough by just doing a rlogin to
the remote host, setting the DISPLAY environment variable, and starting up a client. In the
following example, we start up a new xterm client running on the host ruby:
sapphire:joan % rlogin ruby
Password:
Last login: Tue May 12 16:27:23 from sapphire.ora.com
SunOS Release 4.1.2 (RUBY+COALM+PPP) #i: Tue Mar 3 23:29:52 EST 1992
You have mail.
TERM = (vtl00) xterm
ruby:joan % setenv DISPLAY saDDhire:0
ruby:joan % xterm &
(You must, of course, have an account on the remote system.)
The first thing that might go wrong is that you may run into server access control If you see
the following error:
Xlib: connection to "sapphire:0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: sapphire:0
34 The X Window System Administrator's Guide
Or:
ruby: ruby: cannot open
where ruby is the name of the system that you wanted to run the remote shell on, the
problem is probably that are using the wrong rsh command. Use the which or whereis
command to track down which rsh you are using:
sapphire:joan % which rsh
/bin/rsh
sapphire:joan % echo $path
/bin /usr/bin /usr/bin/Xll /usr/bsd
On some System V-derived systems such as IRIX, the restricted shell rsh might live in
/bin, while the remote shell rsh (the one you want) resides in/usr/bsd. /bin often shows
up in search paths earlier than/usr/bsd, so on those systems you need to explicitly rede-
fine your path so that/usr/bsd is searched before/bin.
You may need to use the -n option to rsh to avoid a "Stopped" error message on some
machines.
You need to be sure that the directory containing X binaries is defined in your search path
in either .cshrc or .projile on the remote system.
If you are using host-based access control, you need to execute the xhost client to extend
access to the remote host before the rsh command is run. Otherwise, clients from the
remote host will not have permission to access your display. If you are using user-based
access control, you may need to run the xauth command to copy your access code to the
remote machine. See Chapter 4 for more information on server access control.
You have to use the -display option in calling a remote shell, or the "Can't Open
display" error will be returned. (Alternatively, you can have your DISPLAY environ-
ment variable hard-coded into your .cshrc or .profile on the remote machine, but this is a
Very Bad Idea.) See Section 2.3.1 for more information on setting your display.
Be careful not to use unix:0.0 or :0.0 as the display name! Otherwise, the client
will display the window on the local display of the remote host. If this succeeds, the user
on that display could either become very annoyed, or could take advantage of the sudden
access to your account to read personal files and send nasty mail to your boss. You would
have no warning; all you would know is that your window didn't appear. (See Section
2.3.1 for more information on the DISPLAY environment variable.)
A common situation is to start rsh commands as follows:
sapphire:joan % rsh ruby -n xterm -display SDISPLAY
This works great if your DISPLAY variable is set to something like sapphire : 0.0, but
if it's set to unix : 0.0 or : 0.0 (as is the default for X sessions begun on the console
display), then the wrong display name will be sent to the remote machine.
The X11R5 distribution contains a shell script called xrsh in the contrib/clients area. This
script sets the DISPLAY variable for the remote client and handles authentication according
to the value of an XRSH_AUTH_TYPE environment variable. See the manpage on xrsh for
more information.
36 The X Window System Administrator's Guide
2.4 Startup Methods
The X Display Manager, xdm, is the method of choice for starting your X session The main
reason for this is that xdm is the only elegant way of starting an X session on an X terminal or
other remote "'passive" X server. However, for local X servers, you can use the xinit or start.,:
command to start both the X server and your X session in a single step. If you are running a
vendor-configured version of X, there might also be another command for starting the X
server, such as openwin for Sun OpenWindows; see your vendor's documentation for details.
On an X server controlled by xdm, the X server is always running, and users start their indi-
vidual X sessions by logging in via a login box window.
r
Login: I
Password:
emerald
X
Figure 2-11. Logging in with xdm
When you log in, your window manager and other X clients are automatically started as
specified in your .xsession startup script. Chapter 3 discusses xdm in detail.
On a local console display server that does not already have the X server running (i.e., is not
controlled by xdm), you log in as usual on the console (using get') and type xinit to start
both the X server and the X clients specified in your .xinitrc script.
The X User Environment 37
Iogin: Imui
Password:
Last Iogin : Wed May 614:1:36 from ncdlO.ora.com
SunOS Release 4.1.2 (RUBY+COALM+PPP) #1: TUE EST 1992
Imui@rubble% xinit
2.4.1
Figure 2-12. Starting the X server with xinit
xinit and startx
The xinit program first starts up the X server for the local display. By default, it starts the X
server by running the program called/usr/bin/Xll/X. X is usually a link to another server
program, for example, Xsun on a Sun workstation.
You can override the server command by entering another command in a file called
$HOME/.xserverrc. For example, it could contain:
/usr/bin/Xll/XsunMono
You may want to set up a new command in $HOME/.xserverrc if you are testing a new server
for your display, or if you prefer to start up your server with particular command-line options.
If you want to test an option to the X server, follow the xinit command with two dash charac-
ters (- -) and it will pass any following command-line options onto the server. For example:
% xinit -- -dev /dev/cgthreeO
After starting the server, xinit looks for a shell script called $HOME/.xinitrc. As we saw in
Section 2.1. l, if SHOME/.xinitrc does not exist, a single xterrn window is sent to the local dis-
play to get you started.
The startx script is a front end to xinit provided in X 11 R4 and X 11R5. Like xinit, it looks for
an .xinitrc file in your home directory; however, if you don't have an .xinitrc, it then uses a
system-wide default file in/usr/lib/Xll/xinit called xinitrc. This file can also be used as a
template for .xinitrc files, startx also uses a file called xserverrc in the same directory for
users who don't have an .xserverrc file in their home directory.
38 The X Window System Administrator's Guide
2.4.2 Differences Between .xinitrc and .xsession
All of the rules about configuring .xinitrc files also apply to .xsession files. For that reason,
many users simply link their .xinitrc files to their .xsession files. However, there are three
points to consider:
1. The .xsession file is generally a shell script, but it can actually be any executable file,
such as a session manager or desktop manager..xinitrc must be a Bourne shell script.
2. The .xsession file must be an executable file. If you get bounced back to your xdm login
box, you might have to do the following:
% chmod +x .xsession
The .xinitrc file does not have to be executable.
3. The _tsession script does not inherit the user's login shell environment. The .xinitrc script
inherits the environment from the shell from which it was run.
2.5 Related Documentation
For more information, see the X Window System User's Guide, by Valerie Quercia and Tim
O'Reilly, published by O'Reilly & Associates, Inc.
The following X manual pages may be of interest: X, xrdb, xinit, xset, xterm, twm, mwm,
olwm, xlsfonts, showrgb, and resize.
The following UNIX mandal pages may be of interest: rsh, csh, and sh.
The X User Environment 39
3
The X Display Manager
The X Display Manager provides a way for users to log on and start initial cfi-
ents, regardless of which X server they use. This chapter shows how to get
xdm going and how to configure it to the needs of your site.
In This Chapter:
xdm Concepts ..................................................................................... 44
xdm Configuration Files ....................................................................... 46
xdm the Easy Way ............................................................................... 48
Troubleshooting xdm ............................................................................ 49
Customizing xdm ................................................................................. 51
The Master Configuration File (xdm-config) ...................................... 51
Listing X Servei's (the Xservers File) ................................................ 53
Xservers Syntax ............................................................................ 53
xdm Host Access Control: the Xaccess File (R5 Only) ..................... 55
Direct and Broadcast Access ......................................................... 56
Indirect Access and the Chooser ................................................... 57
Using Macros ................................................................................ 59
Advantages and Disadvantages of the Chooser ............................. 59
The Xresources File ......................................................................... 60
Configuring the Login Box .............................................................. 60
The xconsole Client ....................................................................... 62
Starting Up Individual X Sessions (the Xsession File) ...................... 63
No Home Directory? (R5) .............................................................. 64
Display Classes ............................................................................... 65
Testing Your xdm Setup ....................................................................... 66
Resetting the Keyboard ................................................................... 67
Restarting xdm Using xdm-pid (R4 and Later) .................................. 68
Rereading xdm Configuration Files (R3) ........................................... 68
Permanent Installation of xdm .............................................................. 69
Related Documentation ....................................................................... 70
3
The X Display Manager
The X Display Manager, xdm, runs as a daemon on a host machine. It provides a way for
users to log on and start initial clients, regardless of what X server they use.
Not all sites use xdm to control X sessions. Many workstation users still prefer to log on as
usual on the console and use the xinit program to start the X server and any preferred clients.
xinit, however, is considered obsolete by the X Consortium, with all new functionality being
built into xdm. And on a site that includes X terminals, xdm is an essential tool for providing
a standard way for users to log on across the network.
xdm also provides a way for administrators to configure environments system-wide. So if you
don't already use xdm to control X sessions for users on your site, we encourage you to give
it a try.
xdm and Vendor Environments
If you're running a vendor-distributed version of X that's greatly modified from the
MIT version, your mileage may vary with this chapter. For example, the OpenWindows
2.x server doesn't work very well with xdm at all. The OpenWindows 3.x distribution,
meanwhile, supplies its own version of xdm which is somewhat modified from the ver-
sion documented here.
SCO Open Desktop has its own version of xdm, called scologin, which must be used for
all logins, scologin is enhanced in that it has SCO's session manager scosession built-in
as the controlling process for the X session, and it checks for expired passwords, scolo-
gin also provides a front end (/etc/scologin) to facilitate some administrative responsi-
bilities.
In addition, many vendor-supplied X environments already have xdm pre-configured
when X is installed.
The X Display Manager 43
3.1 xdm Concepts
The xdm program is simply an X client that manages the first and last points of connection,
control, and coordination of the user session. If you need a conceptual feel for what the X
Display Manager is, think of xdm as working for network-connected X servers the way init,
getty, and login work for serial-connected ASCII terminals. This is only a loose comparison,
but it will serve our purposes in conveying the general function of xdm.
Like init, xdm keeps track of which X servers are available to be connected. When init has
determined that an ASCII terminal is available to be managed, it spawns the getty program,
which puts up a login prompt. Similarly, when xdm is given management of an X server, it
sends a login box to the server display.
When a user types a name and password on a serial ASCII terminal, that information is sent to
the login program, which authenticates the password and then starts up whatever program is
specified in the user's/etc/passwd, almost always an interactive shell. When the shell begins,
user-configurable batch files are executed, $HOME/.profile for the Boume/Kom shell or
$HOME/.cshrc and $HOME/.login for the C shell. The user is then deposited in the selected
shell environment, ready to run UNIX commands.
For a user who logs in with an xdm login box, the name and password are also authenticated,
using the same mechanism as the login program. However, this is where the functions of
login and xdm diverge. As shown in Figure 3-1, instead of running an interactive shell, xdm
runs a series of shell scripts. These scripts normally start all your desired X clients, including
xlogin box
emerald
Login: I
Password:
exec (Xrest script)
#Vbin/sh
#Load resources
xrdb -merge $HOME/.Xresources
#start window manager
twm&
#Initial xterm
xterm -name Iogin
exec $HOME/.xsession
Iogin authentic?
exec ( Xstartup script)
exec Xsession
Figure 3-1. xdm flow chart
44 The X Window System Administrator's Guide
one or more terminal emulators, each of which will contain an interactive shell. In the
default xdm configuration, Xsession is one of the shell scripts that are executed. Xsession then
calls another script called $HOME/.xsession (if it exists).
When a user logs out on a character-based terminal, control of the terminal returns to getty,
sending another login prompt to the terminal. Consistent with that model, when a user logs
out of an X session (i.e., when the "controlling" process of the X session has been ter-
minated), xdm closes all connections and resets the terminal to a "ready for log on" state, dis-
playing a new login box, ready for another user session.
As you can see, xdm is a very ambitious program. It can be configured to control logins on
multiple X servers connected to the same machine, creating customized sessions, and offer-
ing some basic network security features.
The conclusion is that xdm, when set up properly, enables users to walk up to a display and
log in by typing their usernames and passwords, the same as they would on an ASCII termi-
nal. xdm then runs their startup scripts automatically, setting up customized environments
and enabling users to begin productive work immediately. When users finish their X sessions,
xdm resets each display for the next user. With the X session startup process incorporated
into the login process, users need to know relatively little about X11 to start work-
ing--given, of course, that xdm and users' individual environments are configured appropri-
ately.
History of xdm and XDMCP
xdm was introduced with X1 IR3, to support the X terminals that were just coming to the
market. That first version of xdm had several problems, which were solved in X 11 R4 by
the introduction of the XDM Control Protocol (XDMCP).
The most urgent problem that XDMCP addressed was the problem of X terminals that are
turned off and on again. Prior to XDMCP, the only way xdm knew to control an X termi-
nal was to look for its entry in the Xservers file (see Section 3.5.2 for more information).
Since Xservers is consulted only when xdm is first started, this caused problems when X
terminals were turned off temporarily, or when new X terminals were attached. It meant
that every time a user turned an X terminal off and on, the system administrator needed
to send a SIGHUP to xdm. XDMCP provides a solution to this problem.
XDMCP, introduced in X11R4, is a protocol shared by the xdm client and X servers
throughout the network. Using XDMCP, the X server has the responsibility of actively
requesting an xdm connection from the host. If an X server uses XDMCP, therefore, it no
longer requires an entry in Xservers since the host no longer has the burden of initiating
the connection.
Almost all X terminals sold today are XDMCP-compatible. R4 and R5 servers running
on local console displays are also XDMCP-compatible, but XDMCP queries are not
enabled by default.
The X Display Manager 45
3.2 xdm Configuration Files
xdm is configured through a set of editable ASCII files for some of the mechanisms you would
expect--a list of servers to be explicitly controlled by xdm, resources to be used by xdm,
error messages, whether to use security, etc.--but it also provides ASCII files for setting up
an initial default session and setting resources to be loaded by the server itself. The files used
for xdm configuration in/usr/lib/Xll/xdm are listed here (and shown in Figure 3-2), to be dis-
cussed in detail later in the chapter:
xdm-config Resources specified for xdm. Note that the location of all other files listed below
can be redefined with resources specified in xdm-config. (The location of the
xdm-config file itself can be reassigned using the -config option to xdm when it is
started.)
Xservers A list of servers to be explicitly managed by xdm. The local display server
usually needs to be listed here.
Xsession The initial startup script used by each individual X session.
Xresources Resources to be loaded via xrdb by servers managed by xdm.
xdm-pid A file containing the process ID ofxdm. (This file is not designed to be edited by
administrators, but is for informational purposes only.) (X 11 R4 and later only.)
The error log file for xdm. (This file is not designed to be edited by administra-
tors, but is for informational purposes only.)
xdm-errors
$HOME/
.xsession
.Xresources
Figure 3-2. Default xdm configuration files
46 The X Window System Administrator's Guide
Xaccess A file for configuring access control for XDMCP, specifying different behavior
according to the sort of query used. This configuration file is new to X I I R5.
GiveConsole
A shell script that changes the ownership of the console to the user. This file is
new to X I I R5. See Section 4.6.2 for information on how the GiveConsole script
is used.
TakeConsole
A shell script that changes the ownership of the console back to root. This file is
new to X I I R5. See Section 4.6.2 for information on how the TakeConsole script
is used.
Xsetup_O A shell script used for display setup specific to the local console server. This file
is new to X1 I R5.
In users' home directories, the following files are used by xdm in its default configuration:
$HOMELxsession
User-specific startup script executed by the systemwide Xsession script.
$HOME/.Xresources
User-specific resources read by the systemwide Xsession script if $HOME/.xses-
sion does not exist. (If $HOME/.xsession does exist, then the .xsession script is
responsible for loading user-specific resources from .Xresources or any other
resource file.) See Appendix D for information on setting resources.
$HOME/.xsession-errors
Errors specific to a user's X session (R5 only). This file is not designed to be
edited.
$HOME/.Xauthority
Machine-readable authorization codes for the user's server. This file is not
designed to be edited by hand. See Chapter 4 for information on how the .Xau-
thority file is used.
Note that the user-configurable .xsession file is available only because it is exec'd by the
Xsession shell script. If you don't understand yet why this is important, consider that any
administrator can remove that functionality, or can add any other clients or resources to be
used by all X user sessions. So xdm configuration is unusual in that you can do just minimal
configuration (just set things up so it runs and then leave it alone) or you can go wild setting
up a global user environment.
We'll talk about all these files in detail later in the chapter. First, though, we'll give a quick
and dirty procedure to get a minimal setup running.
The X Display Manager 47
3.3 xdm the Easy Way
For those of you that are interested in just getting xdm working for the first time, you can fol-
low the steps below to set up xdm on a standalone workstation. These steps assume that you
are using the MIT-distributed version of xdm, and that the xdm configuration files have not
been changed from the defaults distributed by MIT.
1. Edit the Xservers file in/usr/lib/Xll/xdm as needed. If you want xdm to control the local
display server, the Xservers file should contain the line:
:0 local /usr/bin/Xll/X
If you don't want xdm to control the local display server, this line should be omitted. In
all likelihood, the default Xservers file will work just fine.
2. If you're currently running the X server on the local console display, you should exit it.
It's also a good idea to have an alternate way to log in to the workstation (such as a
remote login across the network, or an ASCII terminal connected to a serial port), since if
something goes wrong, your console may become unusable.
3. Start xdm as root:
# /usr/bin/Xll/xdm
The X server will take over your display and you should see a login box resembling that in
Figure 3-3.
login:
Password:
Figure 3-3. xdm Iogin box
48 The X Window System Administrator's Guide
Now log in. You should get an xterm window and a twm window manager, as shown in Fig-
ure 3-4.
Figure 3-4. Default xdm environment
You can configure this environment by creating a shell script in your home directory called
.xsession and making it executable. If written as a Bourne shell script, the rules for writing
the .xsession file are similar to those for the .xinitrc file used for xinit. Unlike .xinitrc, how-
ever, .xsession does not have to be a Bourne shell script, it can be any executable. For infor-
mation on configuring individual X sessions at the user level, see Chapter 2.
See Section 3.7 for information on how to install xdm to start at boot time.
3.4 Troubleshooting xdm
Problems with logging in via xdrn might be traced using xdrn error messages. Many errors are
placed in the file/usr/lib/X11/xdm/xdm-errors, but if you are using R5 xdm, the first place to
look is in the file $HOME/.xsession-errors. $HOME/.xsession-errors contains errors generated
only under your user account. In addition, some of the more common situations are listed
here:
If the server doesn't start or if you don't get the login box, there is probably something
wrong with your xdm configuration files. Kill xdm from the alternate login we recom-
mended in Step 2, and look in the file/usr/lib/X11/xdm/xdm-errors for hints. Good candi-
dates for mistakes of this magnitude are the Xservers, xdm-config, and Xaccess files. If
The X Display Manager 49
xdm proper. An example of a resource like this is DisplayManager. servers, for
specifying which file should be used for listing the X servers to be managed by xdm. You
can think of this sort of resource name as applying to xdm's behavior independent of its
connection to any particular X server: which servers to connect to, where to copy its pro-
cess ID, where to put error messages, etc.
The second form is used to specify a resource that should apply to a single display server
only. Here's where the tricky part to resource naming rules for xdm comes into play:
since the colon (:) has special meaning in resource specification syntax, the underscore
(_) is used where these would normally occur in a display name. For example, the display
name bigbird: 0 becomes bigbird_0 if it appears in a resource name. Without an
underscore to specify that a particular server is being referred to, the name is taken to rep-
resent a group of X servers, called a display class. See Section 3.5.6 for more information
on display classes.
The server for which you'd most want to define a specific resource is the local console
display ( : 0, specified as _0 in resource specifications). An example of one of these is
the DisplayManager ._0. authori ze resource--you usually want to enable access
control on the local server, but you may not want it enabled on X terminals if they don't
support that functionality.
The third form of an xdm resource specification is really just a generalization of the sec-
ond form. By putting an asterisk between the DisplayManager keyword and the vari-
able name, where a display name would normally be, you can define this value for all
servers not specifically defined otherwise. As a common example, you could use the fol-
lowing lines:
Di splayManager *authorize: false
DisplayManager ._0. authorize: true
and only the local display server will use access control.
In resource lingo, these are called "loose" and "tight" bindings. We discuss resource bindings
in detail in Appendix D.
See your xdm manpage for a description of other resources that can be specified in the xdm-
con.fig file.
For testing purposes, you can use the -con.fig option to xdm to test new configuration files. For
example, to start xdm with a customized configuration file, enter:
# /usr/bin/X11/xdm -config ./my.xdm-config
The DisplayManager.autoRescan resource controls whether xdm automatically
rereads the configuration files after they have been changed. If set to true (the default), xdm
will reread the xdm-cong file the next time a server connects to xdm. If set to false, then if
you edit the xdm-cong file while xdm is still running, you have to send xdm a SIGHUP sig-
nal before it will be reread. See Sections 3.6.2 and 3.6.3 for more information on sending a
SIGHUP to xdm.
52 The X Window System Administrator's Guide
3.5.2 Listing X Servers (the Xservers File)
3.5.2.1
The Xservers file was originally designed in X11R3 to list all X servers to be managed by
xdm. The XDM Control Protocol, introduced in R4, changes the function of the Xservers file
significantly.
Under X 11R3, all X servers managed by xdm required entries in Xservers. The only way xdm
would know to connect to a server is if it appeared in the Xservers file at startup. In that way,
Xservers acted somewhat like an inittab for xdm.
With X11R4 and XDMCP, the X terminal takes responsibility for querying the host for an
xdm connection. For that reason, any X terminal that supports XDMCP should have its entry
removed from Xservers on a host running X 1 I R4 or later.
The Xservers file is not yet obsolete, however. It is still used to start the X session on the
local console display, which does not normally use XDMCP queries. It is also used to tell rdm
how to start up the X server on the local machine.
Xservers Syntax
The syntax for each line in the Xservers file varies on whether it's for a server that runs on the
local machine, and whether a display class is specified in Xservers for that machine. The
only X servers that you need to enter into the Xservers file are those that do not use XDMCP
to request a connection. For the most part, the only X server that needs to be specified in
Xservers is the console display server. If your console display server is R4- or R5-compat-
ible, it probably supports XDMCP queries but does not have them enabled by default. So you
need to enter the local server into the Xservers file if you want it to be managed by xdm:
:0 local /usr/bifi/Xll/X
The console display name, :0, is followed by the word local to tell xdm that it's an X
server running on the local machine, and then by the command used to start the X server.
This command,/usr/bin/X11/X, is executed when xdm is started up. /usr/bin/X11/X is usually
a symbolic link to another server program.*
Since X terminals run their server on another machine, they have a slightly different syntax
in Xservers. You only need to enter X terminals in Xservers if they don't support XDMCP or if
you're running R3 xdrn on the host. The following are examples of Xservers entries for X ter-
minals:
ncdl: 0 foreign NCD xterminal
visuall : 0 VISUAL-XI9TURBO foreign Visual xterminal
bigbird: 0 XNCDI9r foreign Eileen' s xterminal
*An example of when this would be useful is for a '386 workstation, on which any number of third-party monitors
might be installed, requiring multiple servers to support them all. Among the steps required to install a new monitor
may be to link X to a different server program.
The X Display Manager 53
Managing Another Workstation's Display
It's common to use xdm on a given host to manage X terminals, but what if you want it
to manage the display server on another workstation? This can be done, it just needs a
little coordination between the two hosts. For example, if you want to set up a host rock
to manage the display of the workstation scribe, you have to do the following:
1. First of all, make sure xdm isn't being run on the workstation scribe, since you prob-
ably don't want it running. If for some bizarre reason you do want it running, make
sure that the local server isn't listed in the Xservers file on scribe--that is, if xdm is
running, make sure the following is commented out in Xservers:
#:0 local /usr/bin/Xll/X
2. You have to decide which end you want to start the xdm connection on.
a. If you want to start the connection on the server side, have the X server started
with an active XDMCP query.
% /usr/bin/X11/X -query rock.west, ora. com
If you want to set it up permanently, put this command in/etc/rc.local.
The -query option tells the X server to place a Direct XDMCP query to the speci-
fied host. Use the -indirect option in place of -query for an Indirect query to the
specified host--for example, to get a chooser box from R5 xdm (see Section
3.5.3.2 for more information on the chooser client). You can also use the
-broadcast option for a Broadcast query, in which case the first xdm host who
replies to the query gets control of the server. The -broadcast option is not fol-
lowed by a hostname.
b. If you want to start the connection on the host side, put in the Xservers file on the
host running xdm (rock in this example):
scribe: 0 foreign X server on workstation "scribe"
And have the X server on scribe started "passively", such as:
% /usr/bin/Xll/X
(Again, to set it up permanently, put this command in/etc/rc.local.)
As a policy, it's probably better to have the connection started via an XDMCP query
and avoid explicitly listing hosts in Xservers. A disadvantage to listing hosts in
Xservers is that you have to make sure that you don't end up having the same server
listed in two Xservers files on two different hosts. If you see the following error in
the/usr/lib/X11/xdm/xdm-errors file:
error (pid n) : WARNING: keyboard on display ... could not be secured
what might have happened is that another host has the server listed in its Xservers
file and is currently running xdm on the same X server.
54 The X Window System Administrator's Guide
*. ora. com
: harry, ora. com
In its MIT-distributed form, the Xaccess file is configured to allow Direct and Broadcast con-
nections from all X servers:
#any host can get a login window
3.5.3.2
Indirect Access and the Chooser
Until R5, the distinction between Direct and Indirect queries was poorly defined--there
didn't seem to be any difference between connecting via a Direct query or an Indirect query
to a particular host. The R5 Xaccess file changes that.
An Indirect query basically allows xdm on the host to determine what to do with the query. If
xdm encounters a Broadcast or Direct query, it either pops up a login box or it doesn't
(depending on whether the node is allowed access in the Xaccess file, as described above).
Responding to an Indirect query, however, the Xaccess file gives the administrator a chance
to configure whether to respond directly, whether to pass the query on to another host, or
whether to give the user a choice between multiple hosts.
For example, to configure xdm to transfer an Indirect query from any NCD X terminals
(named ncdl, ncd2, etc.) directly to the host ruby.ora.com, you might enter in Xaccess:
ned*. ora. com ruby. ora. com
Alternatively, you can set up xdm to respond to Indirect queries with a chooser box. This
gives the user the opportunity to choose between several hosts, as shown in Figure 3-6. The
chooser client, implemented via the CHOOSER keyword in the Xaccess file, is a big plus in R5.
To allow the NCD X-terminals to choose from harry.ora.com, ruby.ora.com, and
rock.west.ora.com, enter into gaccess:
ncd*.ora.com CHOOSER harry.ora.com ruby.ora.com rock.west.ora.com
The chooser box would resemble the box in Figure 3-7.
The chooser client itself resides in/usr/lib/Xll/xdm, with everything else. Note that unlike
the other files in that directory, it is not a readable ASCII file, but a compiled executable.
Yet another possibility might be to set up the chooser client so it just does a broadcast among
all hosts on the network and allows the user to choose among them. To do this, just use the
keyword BROADCAST following the CHOOSER keyword.
ncd*. ora. com CHOOSER BROADCAST
To customize the appearance of the chooser client, use the Xresources file. The default
Xresources file defines the following resources used by the chooser client:
Chooser*geometry:
Chooser *al lowShel iResize:
Chooser*viewport. forceBars :
Chooser*label. font:
Chooser*label. label :
Chooser*list. font:
Chooser*Conmand. font:
700x500+300+200
false
true
*-new century schoolbook-bold-i-norr0al-*-240-*
XZ/4CP Host Menu from CLINrfHOST
* * * * * * *
- - -medium-r-normal- - -230- - -c- -iso8859-i
*-new century schoolbook-bold-r-normal-*-180-*
The X Display Manager 57
3.5.3.3 Using Macros
The Xaccess file allows you to define macros to group together a set of hosts. A macro defini-
tion starts with a percent character (%), followed by the macro name, followed by a list of
hostnames (with a backslash at the end of the line signifying that the definition continues
onto the next line). The macro is then called later on, preceded by the %. An alternative way
of allowing X terminals to choose among harry, ruby and rock might be:
%NCDHOSTS harry, ora. ccn ruby. ora. ccn rock.west, ora. ccn
ncd*. ora. ccn CHOOSER %NCDHOSTS
3.5.3.4
Advantages and Disadvantages of the Chooser
The big advantage that the Xaccess file provides is that it can make it much easier to maintain
and control X terminals on a network. Without the chooser, the host to query is configured
directly on the setup menu of an X terminal using XDMCP. If you want to move the manage-
ment of some X terminals to another host, it may involve personally visiting each terminal
and editing their setup menus manually, step-by-step. However, using the Xaccess file, you
can simply set up a single host as the primary xdm server, designed to accept Indirect queries
and determine where they should be transferred. Using this scheme, switching xdm manage-
ment from one host to another is a matter of editing a single file.
In our bicoastal environment, we use the chooser to allow East Coast employees to access
their environments from the West Coast without having to do contortions: they simply choose
the East Coast xdm host and they are greeted by the same friendly login box they're used to
at home.
A problem with the chooser functionality is that due to a bug in R4 xdm, it can be used only
to transfer xdm control to another host running R5. For example, if you had in your Xaccess
file:
%R5HOSTS harry.ora.ccn ruby.ora.ccn rock.west.ora.ccn
%R4HOSTS opal. ora. ccn
* CHOOSER %R5HOSTS %R4HOSTS
with opal running R4 xdm, the chooser box would look like the one in Figure 3-8.
Note that only the R5 hosts (harry, ruby and rock) are reported as "Willing to manage." If
you select one of the R5 hosts you'll get the xlogin box as expected; but although the R4 host
is listed, if you select opal you'll be temporarily "'hung" and then you will be returned to the
chooser box without a chance to log on.
Note that like the xdm-conjhg file, the DisplayManager. autoRescan resource controls
whether xdm automatically rereads the Xaccess file if it has been changed, or requires a
SIGHUP signal before it rereads configuration files. By default, any configuration files that
have been changed are automatically reread when the next server connects to xdm. A mes-
sage appears in the xdm-errors file:
info (pid 1564): Rereading access file /usr/lib/Xll/xdm/Xaccess
See Sections 3.6.2 and 3.6.3 for more information on sending a SIGHUP to xdm.
The X Display Manager 59
XDMCP Host Menu from rock
hosL opal
Ui 11 ing Lo manage
Ui 11 ing Lo manage
Ui 11 ing to manage
3.5.4
Figure 3-8. Chooser box with an R4 host
The Xresources File
The Xresources file is loaded into each individual X server as it is connected to xdm. The
most important function of the Xresources file is to set resources for clients or widgets that
are run before the user actually logs in. In particular, the xlogin widget's resources need to be
loaded into the server by xdm itself, since it is (by necessity) run before the user logs in. In
RS, the chooser and xconsole clients may also be run before the user logs in, so those clients
need their resources specified in Xresources as well.
As each X server connects to xdm, the resources in the Xresources file are loaded by the
server via the xrdb client. See Section D. 1.3 for more information on xrdb.
3.5.4.1
Configuring the Login Box
The login box displayed on an X server controlled by xdm can be configured using the
Xresources file. In its default configuration, that file contains thefollowing lines:
xlogin*login.translations: #override\
Ctrl<Key>R: abort-display()\n\
<Key>Fl: set-session-argument(failsafe) finish-field()\n\
Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\
<Key>Return: set-session-argument() finish-field()
xlogin*borderWidth: 3
60 The X Window System Administrator's Guide
xlogin*greet ing: CLIENTHOST
xlogin*namePropt: login: \
xlogin*fail: Login incorrect
#ifdef COLOR
xlogin*greetColor: CadetBlue
xlogin* failColor: red
*Foreground: black
*Background: #fffff0
#else
xlogin*Foreground: black
xlogin*Background: white
#endif
The resources starting with the string xlogin are used by the xlogin widget, xlogin sends
the box to the display, prompting the user for a name and password. The xlogin box typically
resembles Figure 3-3.
Note that the first resource for xlogin is a translation table, used for defining how special
keystrokes might be used within the client. (See Section D. 1.4 for more information on
translation tables.) This translation table is particularly important. What it does is to allow
you to log in without running your .xsession file, by pressing F1 after your password instead
of RETURN.*
Instead of running your .xsession, pressing F1 tells xdm to run a "failsafe" X session, defined
as a single xterm window. (You can actually change this in the Xsession file. See Section
3.5.5 for more information on the Xsession file.) This is important, since otherwise you may
have no way of logging in if your .xsession is corrupted.
The other important translation listed here is that you can use CTRL-R to stop :drn from
managing your display entirely. This feature, new to RS, is useful for the local console dis-
play, where you might want to return to the console to start another windowing system or
load a different X server image. Note that this only works if the X server isn't initiating
XDMCP queries; otherwise, CTRL-R will abort the current xdrn connection, but a new one
will instantly replace it.
The remainder of the resources set for xlogin are fairly straightforward, used largely to spec-
ify the messages used for prompts and error messages. Note that since this resource file is
loaded into the server via xrdb, cpp pre-processor commands (particularly #ifdef, #else,
and #endif) can be used. In the R5 default shown above, the pre-processor commands are
used to specify how the xlogin box should appear, depending on whether the display has
color support. COLOR is one of the variables that are pre-defined in R5 xrdb; see Section
D. 1.3 for more information on xrdb pre-defined variables.
One resource you may want to change is the greeting in the xlogin box. In previous releases
of X11, this box said "Welcome to the X Window System" by default; in RS, it simply gives
the hostname, as shown in Figure 3-3. If you want to change this greeting, edit the resource
definition:
xlogin*greeting: CLIENTHOST
* Alternatively, in R5 you could also enter CFR-RETURN, for those users who don't have an F1 key.
The X Display Manager 61
3.5.5.1
We told you that this key translation set things up so if you typed FI or CTRL-RETURN
after your password instead of RETURN, you would avoid running your .xsession script
and would get a lone xterrn instead. Now you know how that gets implemented. Admin-
istrators can use this as a model to write translations that pass other arguments for Xses-
sion to interpret.
Next, the script looks for a script in the user's home directory called .xsession. If it exists,
it execs it.
If the .xsession script doesn't exist, the Xsession script creates a workable X session by
first looking for a resource file called .Xresources, and if that file exists, loading it with
xrdb; regardless, it then starts the twrn window manager and a single xterrn window.
This is actually a fairly simple script, when you consider that it controls every X server con-
necting to xdrn. It also gives the administrator an unusual amount of power over each X ses-
sion. At the most innocuous, an administrator could use the Xsession file to add some func-
tionality that all users may need--for example, to add a local font directory into font paths
using the xset client. At a slightly more intrusive level, the administrator could use it to set up
a message-of-the-day client for users to see when they first log in. But there are really no lim-
its-an administrator could set up a network so that users have no control at all over their
own X sessions (by removing the line that executes .xsession), and in fact don't have xterrn
windows to start new clients (presuming that all they'd want to do is run a mail client and a
word processor).
Note that the Xsession script is defined as a loose binding, DisplayManager*session.
You could therefore set up a separate X session file for particular X servers. For example, you
might want to set up an X session file called Xsession_O:
DisplayManager ._0. session: Xsession_0
The only difference in Xsession_O might be that the xterrn called in the failsafe situation
would be called with -C, so that console messages will be diverted to this xterrn window:
exec xterm -gecmetry 80x24+i0+i0 -is -C
(See Sections 4.6.1 and 4.6.2 for more information on the xterm console window.)
You can also use display classes to group several X terminals together. See Section 3.5.6 for
more information on display classes.
No Home Directory? (R5)
The redirection of error messages to $HOME/.xsession-errors is a nice addition to R5--it
means that if users are having problems, they don't need to weed through the systemwide
xdm-errors file, but can start looking for problems locally. This makes life easier for users
and administrators alike. However, it does present a problem if for some reason you don't
have a home directory on the host.
Since Xsession is executed as a Bourne shell script, the line:
exec > $HOME/.xsession-errors 2>&l
64 The X Window System Administrator's Guide
produces a fatal error if it cannot be completed. One reason that may happen is if you don't
have a home directory, either because it's a new machine or because there is a problem with
your NFS link. The shell tries to create a file in a directory that does not exist and when it
can't, the script aborts. The effect is that the user logs in and is immediately bumped out
with no sign of what happened except in xdm-errors:
error (pid 2547): can't lock authorization file /home/imui/.Xauthority or
backup /us r/i ib/Xl i/xdm/. Xautha02547
error (pid 2547): No home directory /home/imui for user imui, using /
/usr/lib/Xll/xdm/Xsession: /home/imui/.xsession-errors: No such file or
directory
error (pid 2549) : fatal IO error 32 (Broken pipe)
To remedy this situation, you might change the line in Xsession to read:
if [ -d $HOME -a -w $HOME ]
then
exec > $HOME/.xsession-errors 2>&l
fi
3.5.6
Display Classes
Display classes provide a way to group together several X servers connecting to the same
host. The display class is built into the X server, and is presented to xdm when the X server
connects via XDMCP. To find out the display class for a given X terminal, you can look it up
in the documentation or ask the manufacturer; or, if it won't disturb any users, kill xdm and
then restart it at a high "debug" level:
# /usr/lib/Xll/xdm -debug 9
Running xdm at this level of debugging is likely to give you far more information than you
really want. Among this stream of messages, however, is information about any X server that
connects to xdm, including its display class:
Starting display visual5, ora. com: 0,VISUAL-XI9TURBO
This tells us that the Visual X terminal we're experimenting with is in the display class
VISUAL-X19TURBO.*
Display classes come in useful in allowing you to fine-tune your xdm configuration differ-
ently according to the display type. Thus far, almost all our examples of display-specific
resources have been about the local display server, _0. However, because of hardware pecu-
larities, there are situations when you would want to set resources for individual X servers or
for a group of X servers.
For example, the Visual X19TURBO terminal has 2-bit gray scale support. This is nice,
except that it confuses FrameMaker into thinking it has color support. FrameMaker therefore
tries to show menus with its color defaults of black text on blue background; the X terminal
* In x I 1R3, XDMCP was not available, so the Xservers file was used to explicitly list the display class used by an X
server; see Section 3.5.2.1 for more information.
The X Display Manager 65
3.6.2 Restarting xdm Using xdm-pid (R4 and Later)
In R4 and R5, the xdm process ID is stored in whatever file is pointed to by the Display-
Manager .pidFile resource, xdm-pid in the default configuration. If you are running R4
or R5, you can use the xdrn-pid file to send a signal to xdrn. This file contains the process ID
of xdrn.
# cat /usr/lib/Xll/xdm/xdm-pid
28683
You can send xdm the SIGHUP signal by using the cat output directly:
# kill -HUP "cat /usr/lib/Xll/xdm/xdm-pid"
The xdm process should now reflect the current configuration files for any new sessions.
If xdrn becomes unusable and you are not able to fix it by editing the configuration files, you
can kill it for real. (You'll have to use a more severe signal (SIGTERM) to tell it you are seri-
ous.)
# kill -TERM "cat /usr/lib/Xll/xdm/xdm-pid"
Beware that all active sessions managed by xdrn will be killed if you use SIGTERM.
3.6.3
Rereading xdm Configuration Files (R3)
To force xdm to reread its configuration files on an R3 system, you need to find the process ID
ofxdm manually in order to kill it.
First find the process ID of the parent xdm process using the ps command. Then send the
SIGHUP signal to the process.
% ps agxlgrep xdm
2547 ? IW 0:30 -xterml:0 (xdm)
13511
13757
15199
19175
19466
28683
28685
28743
17796
? IW 0:56 -xterm2:0 (xdm)
? IW 0:58 -xterm4:0 (xdm)
? IW 1:08 -xterm5:0 (xdm)
? S 1:51 -xterm7:0 (xdm)
? IW 2:08 -xterm3:0 (xdm)
? IW 0:09 /usr/bin/Xll/xdm
? S 2:07 -xterm9:0 (xdm)
? IW 0:00 /bin/sh /usr/lib/Xll/xdm/Xsession
p0 S 0:00 grep xdm
The parent xdm stands out, since the xdm processes associated with a particular display
change their names to the name of the display. (The arguments to the ps command, as well as
its output, will vary according to the flavor of UNIX you are running.) If you send signals to
the wrong xdm process, only the display being controlled by that xdm process will be
affected.
68 The X Window System Administrator's Guide
Controlling scologin
scologin (the version of xdm on Open Desktop, which runs on SCO UNIX machines) has
its own ways of starting and restarting the display manager. The scologin daemon has a
front end,/etc/scologin, which takes the following options:
start Starts the scologin process; if scologin is already running, the start com-
mand will cause scologin to reread the configuration files Xconfig, Xservers
and Xresources.
reread If scologin is already running, the reread command will cause scologin to
reread the configuration files Xconfig, Xseta'ers and Xresources.
stop Stops scologin. All X sessions currently managed by scologin will be
halted.
query Returns the current status of scologin.
disable Stops scologin and disables it from restarting when the system reboots.
enable Starts scologin if not already running, and ensures that it will start automati-
cally at the next reboot.
init If scologin is enabled, the gett>, processes on terminals configured for scolo-
gin are disabled. This option should be run only by init at boot time.
For example, to have your configuration files reread, enter:
# /etc/scologin reread
3.7
Permanent Installation of xdm
When you are happy with your xdm setup, it is time to install it so it will start automatically
when the system boots. The way you do this is system dependent, but it is the same procedure
as adding any other kind of daemon. In a typical BSD system, you would modify the
/etc/rc.local script. Under System V, edit/etc/inittab. (Remember to keep backup copies of
any system files you modify!)
Here are a few examples of installing xdm on various platforms:
Installing xdm on SunOS 4.1.1
Add xdm to/etc/rc.local:
if [ -f /usr/bin/Xll/xdm ]; then
/usr/bin/Xll/xdm; echo -n "XDM"
fi
Then reboot the system.
The X Display Manager 69
Installing xdm on Uitrix 4.2
Add xdm to/etc/rc.local:
[ -f /usr/bin/Xll/xdm ] && {
/usr/bin/Xll/xdm & echo -n "xdm " > /dev/console
}
Then reboot the system.
Installing xdm on a System V Machine (IRIX 4.0)
(Your system may already be set up for running xdm as shipped. Check before contin-
uing.)
Add xdm to/etc/inittab:
xw: 2 3 : respawn:/usr/bin/Xll/xdm -nodaemon
Then reboot the system.
Installing xdm on AIX 3.1
Add xdm to/etc/rc.tcpip:
start /usr/bin/Xll/xdm "$src_running"
Then reboot the system.
3.8 Related Documentation
For more detailed information on xdm and its resources, see the xdm manual page.
For documentation on XDMCP, look in the X source distribution, in mit/hard-
copy/XDMCP/xdmcp.PS.Z.
"The X Administrator: Taming the X Display Manager," by Miles O'Neal, published in The
XResource, Issue 4, O'Reilly & Associates, Inc., Fall 1992.
70 The X Window System Administrator's Guide
4
Security
Because X runs in a networked environment, it's particularly important that
administrators be aware of its security lapses and how to reduce the risks of
running X. This chapter discusses security issues as they relate to X.
In This Chapter:
Host-based Access Control ................................................................. 74
The/etc/Xn.hosts File ...................................................................... 74
The xhost Client ............................................................................... 75
Problems with Host-based Access Control ....................................... 76
Access Control with MIT-MAGIC-COOKIE-1 ............................................ 77
Using MIT-MAGIC-COOKIE-1 with xdm ............................................... 78
The xauth Program .......................................................................... 79
Using MIT-MAGIC-COOKIE-1 with xinit ............................................... 81
xauth vs. xhost ................................................................................ 82
The XDM-AUTHORIZATION-1 Mechanism (R5) ...................................... 83
The SUN-DES-1 Mechanism (R5) ......................................................... 84
Public Key Encryption ...................................................................... 85
Prerequisites for Using SUN-DES-1 ................................................... 86
Using SUN-DES-1 with xdm .............................................................. 88
Using SUN-DES-1 with xinit ............................................................... 89
Adding Another User with SUN-DES-1 .............................................. 91
xterm and SUN-DES-1 ...................................................................... 92
Troubleshooting SUN-DES-1 ............................................................. 92
xterm and Secure Keyboard ................................................................ 93
Other Security Issues .......................................................................... 94
The Console xterm (R4 and Earlier) ................................................. 94
The Console and xdm (R5) .............................................................. 95
Hanging the Server Remotely (R3) .................................................. 96
Reading the Framebuffer (Sun Workstations) ................................... 96
Removing Files in/tmp .................................................................... 97
The Network Design ........................................................................ 97
Related Documentation ....................................................................... 98
4
Security
X runs in a networked environment. Because of X's design, your workstation is no longer
your private preserve but hypothetically can be accessed by any other host on the network. If
you are on the Internet, your display may be accessible world-wide. This is the true meaning
of the server concept: your display can serve clients on any system, and clients on your sys-
tem can display on any other screen.
The possibilities for abuse are considerable. When our office was introduced to X 11, one of
the first things we learned how to do was to play pranks on one another. Call it a "learning
experience"--we became familiar with X by sending prank clients to remote servers: xmelt
to make someone's screen melt away, xsetroot to put a giant bitmap picture of our boss on
someone else's root window, etc. When we got a hold of anything "neat" (e.g., kaleidoscope,
a GIF file of Bart Simpson, a bitmap of Bill the Cat), we fired it off to a friend's display to
amuse him, and then ran down to his office to see his reaction.
If this scares you, it should. Within our office, among our friends, we had no intention of
hurting anyone, and if anyone seemed busy or grouchy we left them alone. But if good inten-
tions were enough, none of us would have passwords for our accounts. Having unlimited
access to someone's display leaves a lot of potential for serious damage. Our pranks involved
clients that the user could see, be amused (or annoyed) by, and then promptly kill. However,
if you can run one client on a display then you can run any other client on that display.
The X Window System design allows any client that successfully connects to the X server to
exercise complete control over the display. This means that clients can take over the mouse
or the keyboard, send keystrokes to other applications, or even kill the windows associated
with other clients.
It is difficult to make X completely secure. However, there are four access control mecha-
nisms, one host-based and three user-based. The host-based scheme involve a system file
(/etc/Xn.hosts) and can be controlled using the xhost client. The user-based schemes involve
authorization capabilities provided by the xauth program and by the X Display Manager
Control Protocol (XDMCP). There is also a "secure keyboard" feature in the xterm terminal
emulator that can provide protection against some problems.
Security 73
4.1 Host-based Access Control
One way of protecting against unauthorized clients is to use host-based access control, shown
in Figure 4-1. The way this works for workstations is that, by default, the server running on
the local workstation only accepts clients that are running on that workstation. For example,
the local display sapphire : 0, which runs on the console of the host sapphire, would only
accept clients started on sapphire.
For the local display server of a workstation, the list of hosts that can send clients to display
on sapphire:O can be supplemented by adding a hostname to the/etc/Xn.hosts file (where n is
the number of the display), or by using the xhost client. Many X terminals also support host-
based access control (sometimes called "TCP/IP access control"), with the list of hosts speci-
fied on the setup menu or uploaded via remote configuration from the host.
Hosts
opal.ora.com
sapphire.ora.com
ccavax.camb.com
X server
sapphire:O
Network
OK .J Client Program o
.......... --. -- =--'r .... t Client Program
Denied
Figure 4-1. Host-based access control
4.1.1
The/etc/Xn.hosts File
The/etc/Xn.hosts file contains a list of systems that are allowed to access local server n. On
most workstations, only one server runs at a time, so/etc/XO.hosts is the only file you need to
be concerned with. This list of hosts is read by the server at startup time. The/etc/XO.hosts
file can be edited so that it contains the list of systems you want to allow access to your
server on a regular basis. For example, the file/etc/XO.hosts on the host sapphire might con-
tain the following:
opal. ora. ccn
sapphire, ore. cn
ccavax, camb. ccm
74 X Window System Administrator's Guide
Needless to say, we strongly discourage you from doing this.
You can use the xhost client to enable access from a specific host only long enough to start up
clients from that host, and then disable access immediately. For example, a script might do
something like this:
xhost +sapphire
rsh sapphire xterm -display reno: 0
sleep 15
xhost -sapphire
You can also use the remote host's IP address instead of the hostname.
% xhost +140.186.65.13
The IP address is useful when the remote hostname isn't known to the name server. (The
name server translates domain names into IP addresses.) Also, in the rare case when a host is
on two different networks and has two different IP addresses, xhost may get confused. You
might have to explicitly specify the IP address the host uses on the current network. (The
better solution is to fix the problem for good, by re-linking X with updated resolver libraries;
but in the interim, using the direct IP address may do the trick.)
If the above description left you in the dark--if you don't know name servers from X
servers, and IP addresses are greek to you--consult the Nutshell Handbook TCP/IP Network
Administration by Craig Hunt (O'Reilly & Associates, 1992).
4.1.3
Problems with Host-based Access Control
Host-based access control is better than nothing, but it has some basic conceptual problems
that make it insufficient for true security. One problem is that, while the primary reason for
denying a remote system access to your display is to prevent a person working on the remote
system from displaying on your server, this also prevents you from running clients from that
remote system on your display. So you have to deny yourself functionality in order to deny it
to others.
The main problem with host-based access control, however, is that it's easy to get around.
It's a great idea if workstations are really single-user machines, where only the person who
actually uses a given host has an account on it. But on today's UNIX networks, you are proba-
bly running yellow pages (NIS) to simplify account allocation and file permission issues. On
these networks, as long as a prankster has an account on one of the hosts you do allow access
from, xhost provides no protection. Any user with an account on your machine (or any other
host your server allows access to) can access your display.
On an X terminal, host-based access control makes even less sense. X terminals are depen-
dent on a host to run almost all of its clients. That host is often a compute server used to sup-
port several other X terminals as well. So X terminals that support host-based access control
generally need to list a host with many other users on it, meaning that all those users can
access each others' displays. This is still better than nothing, but definitely not secure.
If you're running Secure RPC, you can use the SUN-DES-1 method of security and use xhost
to give access to a particular user in a given domain, such as "xhost +dave@ora. com."
This is really the best way to control access to a server, since it is entirely user-based. Not all
76 X Window System Administrator's Guide
machines support Secure RPC, however. See Section 4.4 for more information on SUN-
DES- 1.
4.2 Access Control with MIT-MAGIC-COOKIE-1
With Release 4 of X11, a user-based access control mechanism can be used to supplement or
replace host-based access control. User-based access control is built into the XDM Control
Protocol (XDMCP), but it can be used independently of xdm. In Section 4.2.3, we show how
you can use it with xinit. In addition, it is automatically enabled when the openwin server is
started under OpenWindows.
The most common method of user-based access control (and the only one available under
R4) is a mechanism known as MIT-MAGIC-COOKIE-I. This scheme might be called permis-
sion-based rather than user-based, since it depends on UNIX file permission more than any-
thing.
If both the host and the X server are configured to use MIT-MAGIC-COOKIE-1, then when you
log in using xdm, a machine-readable code is put in a file called .Xauthorit" in your home
directory, belonging to you. This is shown in Figure 4-2. This code, called a magic cookie, is
also told to the server. The magic cookie code can be thought of as a password known only
to the server and to the user who logs in using xdm. Users don't have to actually type the
code at any point, they just need to be able to run the programs that manipulate it.
X server
Host
Figure 4-2. XDMCP and the access code
Once the code is established for that X session, a client must present the code before it is
allowed to connect to the server. The client gets the code by reading the .Xauthorit).' file in
the user's home directory. This file has the permissions "-rw ....... ", meaning that it can
be read and written only by the owner. The MIT-MAGIC-COOKIE-1 mechanism therefore
takes advantage of the fact that all processes started by a user inherit that user's permissions.
Figure 4-3 shows a user who does not have access to the code being rejected.
Secud 77
Access Code
#A#OMIT-MAGIC-COOKIE567..
Network
OK
#A/OMIT-MAG IC-COOKIE567..
i
|
!
!
X server - 1
!
Denied
Host
--J /home/fred/.Xauthority i
%,/h_0n]e/bo.b!iXautho rity i
Figure 4-3. User-based access control
Since this type of access control is based entirely on UNIX file permissions, it is only as
secure as the user's account--if you don't have a password, for example, it's totally useless
since anyone can log in as you and then do whatever they want to your server.
User-based access control is clearly more secure than host-based access control, but it
depends on the server being programmed to take advantage of it. Not all X terminals are cap-
able of using the magic cookie. Furthermore, magic cookie-type access control is tightly
bound to the operating system, which is not in the spirit of X.
4.2.1
Using MIT-MAGIC-COOKIE-1 with xdm
In Chapter 3, we discussed the resources for xdrn specified in the xdrn-con.fig file. In addition
to pointers to several special files, the xdrn-con.fig file contains these resource specifications:
DisplayManager ._0. authorize: true
DisplayManager *authorize: false
The first resource specification turns on authorization for the local display. The second one
turns the scheme off on all other displays. To turn authorization on for any other servers that
are connected to the host, change the second resource definition:
DisplayManager *authorize: true
xdrn is probably configured to reread the configuration file on its own (by setting the
DisplayManager.autoRescan resource, which is on by default), but if not, you can
send xdm a SIGHUP so it will reread its configuration file:
root# kill -HUP "cat lusrlliblXlllxdmlxdm-pid"
78 X Window System Administrator's Guide
In addition to this, some X terminals need to be explicitly configured to use MIT-MAGIC-
COOKIE-1. See your X terminal's documentation for more information.
4.2.2 The xauth Program
A problem with user-based access control is that it relies on all your clients having access to
the magic cookie. This is reasonable to expect if you run all your clients on the same host or
if your home directory is shared (for example, using NFS or AFS) across all the hosts you run
clients on. Since all the necessary information is in your $HOME/.Xauthority file, you can
access your server from all hosts with the same shared home directory. But what about the
situation when you want to run clients from a host that does not have a shared home
directory?
The solution is a program called xauth, used to propagate the magic cookie from one host to
another. The most common use for xauth is to extract a user's authorization information for
the current display, copy it to another machine, and merge it into the $HOME/.Xauthority file
on the remote machine, as shown in Figure 4-4. From a host where the user already has the
magic cookie listed, this can be accomplished with the following command line:
% xauth extract - $DISPLAY I rsh remotehost xauth merge -
For example, to share the authorization information for the reno : 0 display with your user
account on the host ruby, type:
% xauth extract - reno:O I rsh ruby xauth merge -
The extract function takes the magic cookie from the .Xauthority file in your home directory
on reno. Since you may be logged on at several different displays at once, you need to spec-
ify which display you want io extract the magic cookie for. In the example above, we want to
extract the magic cookie for the local display server, reno:0. By using a dash (-), the
magic cookie is written to standard output.
The xrsh Command
If you run remote clients using the xrsh shell script provided in the R5 contrib/cli-
entsLrrsh directory, xauth is automatically run to propagate the magic cookie code to the
remote machine before the remote client is started. For example:
% xrsh -auth xauth ruby xterm
starts up xterm on the host ruby after first using xauth to transfer the cookie.
If you use host-based access control, xrsh can also give the remote host access to the
server. This is the default behavior:
% xrsh -auth xhost ruby xterm
You can also set the XRSH_AUTH_TYPE environment variable to specify which type of
authorization you need enabled for the remote host. The default behavior is for ,:host
authorization.
Security 79
Access Code
#A#OMIT-MAGIC-COOKIE567..
X server
"reno:O"
Figure 4-4. Propagating the magic cookie between two hosts
The xauth merge function accepts magic cookie codes from the specified file--in this case,
from standard input. It then merges that information into the SHOME/.Xauthority file on that
system.
Since only you have access to the magic cookie for your server, only you can successfully
run xauth to send that code to another host.
Particularly picky readers might point out that technically, xauth is not a client program since
it never contacts the X server itself, but is simply used to manipulate the .Xauthority file.
Our examples so far have only shown how to use xauth to extract the magic cookie code from
a local machine and merge it into a remote one. But it's just as easy to do it the other way
around. In the following example, we rlogin to a machine called rock, try to run an xterrn
window, and when we are rejected we simply copy the magic cookie and try again. Note that
as far as the shell is concerned, reno is now the remote machine and rock is the local one, so
rsh needs to be called on the xauth extract command.
imui@reno 79% rlogin rock
Last icgin: Fri Sep 18 07:27:17 frcn ruby.ora.ccn
SunOS Release 4.1.2 (ROCK) #I: Fri Sep II 17:56:56 PDT 1992
imui@rock % xterm -display reno:0
Xlib: connection to "reno:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: reno:O
imui@rock % rsh reno xauth extract - reno:O xauth merge -
imui@rock % xterm -display reno: 0 &
(client runs successfully)
It's also possible to copy a code from one host to another from an uninvolved third host, but
it's hard to come up with a circumstance in which you'd need to do that.
80 X Window System Administrator's Guide
AUTHORIZATION-l, you need to build xdm with the implementation of DES in
mit/lib/Xdmcp/Wraphelp.c.* You should also make sure that the Ha.XdmAuth build flag is
set to YES. See Section A.2 for information on how toftp a file.
Once you are sure that xdm supports XDM-AUTHORIZATION-1, you can enable it on the local
display server by simply redefining the Di splayManager ._0. authName resource in the
xdm-config file. (By default, the MIT-MAGIC-COOKIE-1 mechanism is used.) The autho-
rize resource must also be turned on.
DisplayManager * authorize: true
DisplayManager ._0. authName: XEM-AUTHORIZATION- 1
Note that we only redefined the authName resource for the local display, : 0. At this writ-
ing, no X terminals support this mechanism/f The authName resource actually accepts a
list of authorization schemes which xdm will use in order, so you could also just set the fol-
lowing global resource:
DisplayManager* authName: XEM-AUTHORIZATION- 1 MIT-MAGIC-COOKIE- 1
After the xdm-config file is reread by xdm, xdm will use XDM-AUTHORIZATION-1 for the
local display server. As with MIT-MAGIC-COOKIE-1, the server is started with the -auth
option and the code is placed in the .Xauthority file. In this case, however, the code consists
of two parts, a 56-bit encryption key and 64 bits of random data.
Once you log in using xdm and XDM-AUTHORIZATION-1, check that you're using access
control properly with xauth list:
eap % xauth list
nugget.west.ora.cn:0 XEM-AUTHORIZATION-I bd4dc546c869a81fOO979e36956f6c95
nugget/unix: 0 XI4-AUTHORIZATION-I bd4dc546c869a81fOO979e36956f6c95
Note that XDM-AUTHORIZATION-1 is only available for X sessions that are managed by xdm.
4.4 The SUN-DES-1 Mechanism (R5)
The SUN-DES-1 server access control scheme uses the Data Encryption Standard (DES) for
encryption of authorization data. This scheme uses Sun's Secure RPC to pass authorization
data across the network, and it uses NIS to maintain a database across the network. DES
code has export restrictions, so it may not appear on systems outside of the U.S.
Since SUN-DES-1 uses Secure RPC, you need to have Secure RPC installed before you can
use it. Secure RPC, in turn, requires NIS (Network Information System).
*If this file does not appear in your distribution but you can legally use it, you can get it via ftp from ex-
port.lcs.rait.edu. The procedure is a little convoluted; see the file publR51xdra-authlREADME for information on how
to obtain and incorporate the DES code.
%If the X terminals initiate the connection using XDMCP, they will ignore the authNarao resource anyway. This re-
source is only used for X servers that are listed in the Xservers file. When the XDMCP connection is initiated from
the server side, xdra uses whatever authorization mechanism the server specifies at initiation.
84 X Window System Administrator's Guide
SUN-DES-I gives you true user-based access control. Unlike the magic cookie and XDM-
AUTHORIZATION schemes, the entire mechanism does not rely on the security of the
.Xauthority file. You have to explicitly use the xhost command to add specific users to the list
of users who can access your display. This gives you a degree of specificity that is unavail-
able under the other schemes.
4.4.1
Public Key Encryption
Before you can set yourself up to use SUN-DES-l, you need to understand a little about how
Secure RPC works.
Secure RPC is a system that uses both a public key and a private key. It uses a principal to
identify an instance of a user. The principal is composed of the word unix combined with a
user ID and the name of the current NIS domain:
unix. <uid>@<NIS domain>
If the NIS domain is omitted, the current domain is assumed. If you do not know your user
ID, use the ypmatch command:
% ypmatch eap passwd
eap: z7xoeuD8WpyOG: 243 : I00 : Eric Pearce:/hcme/eap:/bin/tcsh
The user ID is the third field of the passwd entry. In this example, our user ID is 243. If you
need to learn the NIS domain name, use the domainname command. Note that although the
NIS domain may be the same as the Internet domain, they are not related and do not neces-
sarily correspond.
% domainname
west
So in this example, the principal for user eap in the current domain would be:
unix. 243@west
Or, since the current domain is the default:
unix. 2430
A special case is the principal for root. The principal for root uses the hostname in place of
the user ID. For example, on the machine nugget, the principal for root is:
unix. nugget@west
The principal is stored with a public key in the public key database. The public key is truly
"public"---take a look at the file/etc/publickey, which is world-readable:
#
# Sun Public Key Database
#
# To add an entry to this file, an administrator should use the NIS conmm%d
# "newkey" on the Network Information Services master machine.
#
# Users can also insert their own entries into this file using the chkey
# conmm%d. Comaenting out the "nobody entry below disallows this feature,
# and chkey will only allow users to change their existing entry, not create
Security 85
Systems not running NIS will complain that ypbind isn't running:
% ypwhich
ypwhich: bigbird is not running ypbind
For information on NIS, see Managing NFS and NIS by Hal Stem (O'Reilly & Associ-
ates, 1991 ).
The private key server, keyserv, must be running. This is usually started at system startup
in/etc/rc or/etc/rc.local. Use the ps command to confirm that it is running:
% ps agx I grep keyserv I grep -v grep
74 ? I-W 0 : 01 keyserv
Each user of the Secure RPC system should have a unique public key entry. You can
have each user to do this on their own using chkey:
% chkey
Generating new key for unix.243@west.
Password:
Sending key change request to nugget...
Done.
or the system administrator can create public keys for users with the newkey command:
# newkey -u eap
Adding new key for unix.243@west.
New password:
Retype password:
Please wait for the database to get updated...
Your new key has been successfully stored away.
You can also create a new public key for root on a given host using newkey:
# newkey -h nugget
Adding new key for unix.nugget.west.ora.ccn@west.
New password:
Retype password:
Please wait for the database to get updated...
Your new key has been successfully stored away.
You must propagate the public key information from NIS clients to the NIS master when
you add or change a public key on the client. If you are running the rpc.ypupdated dae-
mon, this will be done automatically. To see if the daemon is running:
% ps agx I grep rpc.ypupdated I grep-v grep
70 ? IW 0 : 00 /usr/etc/rpc .ypupdated
If you do not run rpc.ypupdated, chkey and newkey will not automatically update the pub-
lic key map on the NIS master. If you have root permission on the NIS master machine,
you can push the NIS map for publickey.byname on the NIS master manually:
# cd /var/yp
# make
Security 87
It might be easier, however, to just enable rpc.ypupdated. You can make sure it will be
enabled at the next reboot by adding it to/etc/rc.local:
if [ -f /usr/etc/rpc.ypupdated -a -d /var/yp/$dname ] ; then
rpc.ypupdated; echo-n ' ypupdated'
fi
Or you can uncomment it from/etc/inetd.conf:
ypupdated/l stream rpc/tcp wait root /usr/etc/rpc.ypupdated rpc.ypupdated
and kill -HUP inetd so it will be enabled right away:
# ps agx I grep inetd I grep-v grep
197 ? IW 2:24 inetd
# kill -HUP 197
You can use the SUN-DES-1 scheme only after you have an entry for your principal in the
NIS master's public key map. This is also true for anybody else that wants to connect to
your X server.
4.4.3
Using SUN-DES-1 with xdm
Once you have confirmed that SUN-DES-1 works on your machine, you can set up xdm to use
it on the local console display server the same way you set up xdm to use XDM-AUTHORIZA-
TION-I as shown in Section 4.3.
Make sure that the authorize resource is turned on and then redefine the Display-
Manager._0. authName resource for the local display only:
DisplayManager *authorize: true
DisplayManager ._0. authName: SUN-DES- 1
When you next connect, xdm will set up the server for SUN-DES-1. After logging in, check
using xhost:
eap % xhost
access control enabled, only authorized clients can connect
eap@ (unix. 243@west)
unix. nugget @west
Note that not only are you listed under the xhost list, but so is the principal for root on nug-
get, unix. nugget@west. The first line indicates the user with user ID 243 can connect to
the server from any host within the NIS domain west. The second line indicates that root on
nugget can connect. Don't remove the root principal from the xhost listing, since you'll need
it if you want to run any setuid clients, such as xterm. See Section 4.4.6 for more information.
If you do an xauth list, you'll see this special root principal listed again:
eap % xauth list
nugget.west, ora. ccm: 0 SUN-DES-I unix.nugget@west
nugget/unix:0 SUN-DES-I unix.nugget@west
xdm is run as root, and xdm is responsible for starting the server. Since the server is started as
root, root is considered the "owner" of the server.
88 X Window System Administrator's Guide
4.4.4 Using SUN-DES-1 with xinit
As with MIT-MAGIC-COOKIE-1, you need to do a little of the dirty work yourself if you want
to use SUN-DES-I with xinit. First we'll show the procedure by hand, and then we'll show
how to automate it using .xinitrc. This example is on a machine with a local display named
nugget. User eap has a user ID of 243, and the NIS domain name is west.
1. Start with a clean .Xauthority file:
nugget% rm -f .Xauthority
2. Create an entry for each type of connection from your host to your server. Use xauth with
SUN-DES-l, with the syntax:
xauth add <display> SUN-DES-I unix.<uid>@<domain>
Give yourself permission to the machine using both its TCP/IP address and its IPC
address:
nugget% xauth add nugget : 0 SUN-DES-I unix. 243@west
xauth: creating new authority file /home/eap/.Xauthority
nugget% xauth add nugget/unix: 0 SUN-DES-I unix. 243@west
nugget% xauth list
nugget.west, ora. com: 0 SUN-DES-I unix. 243@west
nugget/unix:0 SUN-DES-I unix.243@west
3. Start the server with the .Xauthoritv file just created:
nugget% xinit -- -auth ~/.Xauthority
When the server is up and running, check who has access by using the xhost command:
nugget % xhost
access control enabled, only authorized clients can connect
nugget, west. ora. com
localhost
The hosts list has the local machine listed by default, both by its hostname and by localhost.
Using the xhost command, you need to give yourself permission to your server. If you want to
be able to run xterm clients (or any other setuid clients) from the local host, you also have to
give permission to root (see Section 4.4.6 for an explanation of why root needs to be on your
access control list). You then need to remove the other entries. The syntax for giving a user
permission is:
xhost + username@domain
The domain field can be left empty if it is the current NIS domain. Give both yourself and
root permission to access the server. Note that when giving permission to root, you have to
use the root principal for that machine (unix. hostname@domain), not root@.
nugget% x_host +eap@ +unix.nugget@west
eap@ (unix.243@west) being added to access control list
unix.nugget@west being added to access control list
Security 89
Then remove permission from the entire host:
nugget% xhost -nugget .west. ora. com -localhost
nugget.west.ora.ccm being removed frcm access control list
localhost being removed frcm access control list
This ensures that only user eap in the current NIS domain and root on the host named nugget
can connect to your server.
Note that since the .Xauthority file only contains information about the principal that started
the server, the SUN-DES-1 security method does not depend on the security of the .Xauthority
file. Unlike the MIT-MAGIC-COOKIE- 1 and XDM-AUTHORIZATION- 1 methods, if other users
gain read access to your .Xauthority file, they still can't access your server unless you expli-
citly grant them access with xhost.
To automate this process, you need to edit your .xinitrc script.
# !/bin/sh
# Get user ID:
uid='ypmatch ${USER} passwd.byname I awk -F: '{print $3}"
# Get hostname:
host=" hostname"
domain=" dcmainname"
# Get principal:
principal=unix. $ {uid} @$ {domain}
# Add entries to .Xauthority file:
xauth add ${host} :0 SUN-DES-I ${principal}
xauth add $ {host }/unix: 0 SUN-DES-I $ {principal }
# Add permission to self, remove permission frcm entire host:
xhost +$ {USER} @ +unix. $ {host } 05 { domain} - $ {host } -localhost
# Start some clients:
twm&
xterm &
When you start the server with xinit, this will set up your workstation display and prepare it
for SUN-DES-1 use.
Note that a private key is automatically generated only when you log in with your password.
If you log in without typing your password, you need to run the keylogin command to gener-
ate a new private key:
% keylogin
Password:
You might need to do this if you can remotely log into a machine because of entries in
$HOME/.rhosts or/etc/hosts.equiv.
90 X Window System Administrator's Guide
4.4.5 Adding Another User with SUN-DES-1
To allow another user to connect to your host using SUN-DES-1 security, you have to run
xhost to give the remote user access, and the remote user also has to run xauth to place an
entry for that server in their .Xauthorit3' file.
For this example, user cathyr on the host rock in the NIS domain west wants to connect to
the host nugget in the same NIS domain, where user eap is currently running a server.
I. User eap has to give cathyr permission to access the server using xhost:
nugget% xhost +cathyr@
cathyr@ (unix.206@west) being added to access control list
nugget% xhost
cathyr@ (unix.206@west)
eap@ (unix.243@west)
unix.nugget@west
2. User cathyr has to create an .Xauthority file entry with the server she wants to connect to
(nugget) and the principal of the user running the server:
rock% xauth add nugget : 0 SUN-DES-I unix. nugget@west
Note that this means that cathyr needs to know which user is running the server, and she
needs to know that user's principal. In this case, the server was started using xdm, so it
belongs to root. cathyr therefore needs to add root's principal, not eap's.
3. cathyr should now be able to connect to nugget's X server:
ruby% xroach -display nugget .west. ora. cm: 0 &
Something went wrong ff cathyr getsthefollowing error:
Xlib: connection to "nugget:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: nugget:0
You might want to run X clients from a host in another NIS domain. The first complication is
that if you're in another NIS domain, it's harder to find out what principal to use in the xauth
command line. If the server was started with xdm, then you can use root's principal; but if
the server was started with xinit then you have to do some research.
If cathyr is in the same NIS domain (as in the example above), she can figure out what prin-
cipal to use with only a little bit of detective work. She can just see who owns/dev/console,
and use ypmatch and domainname to figure out that user's principal. If cathyr were in a
remote domain, however, she would have to be able to run a remote shell to the local host to
get that information:
ruby% rsh nugget is -i /dev/console
crw--w--w- 1 eap 0, 0 Sep 3 15:56 /dev/console
ruby% rsh nugget ypmatch eap passwd
eap:XZTOEUdSwjYgo:243 : 100 :Eric Pearce:/hcme/eap:/bin/tcsh
ruby% rsh nugget domainname
west
or 3he would be dependent on eap to tell her that information.
Security 91
If NIS is not running on the host (in this case, the host is rock):
Sending key change request to rock...
chkey: unable to update NIS database (ii) : can't ccmnicate with ypserv
rock is down or not running rpc.ypupdated
If/usr/etc/keyserv is not running, you might get any of the following errors:
Sending key change request to rock...
chkey: unable to update NIS database(7) : local resource allocation failure
I couldn't generate a secure RPC authenticator to rock
The keyserver /usr/etc/keyserv must be running.
You may have to keylogin before doing a before doing a chkey.
If you do not have a key, you may need to get a system
administrator to create an initial key for you with newkey.
The system could be loaded, so you might try this again.
or"
auth_create: Bad file number
Error: Can't open display: nugget:0.0
Or:
Could not set unix.243@west's secret key
Maybe the keyserver is down?
If you are running a (pre-R5) version ofxauth that does not know about SUN-DES-l:
xauth: (argv) :i: key contains odd number of or non-hex characters
Ifyou are running a(pre-R5)version ofxhostthatdoes notknow aboutSUN-DES-I:
access control enabled (only the following hosts are alled)
<unknown address in family 254>
If you run a mixed environment with R4 programs as well as R5 programs, make sure you
have the R5 versions of xauth and xhost in your path before the R4 versions. This applies not
only to MIT X11R4 but also any commercial X distributions that are not yet updated to R5.
4.5 xterm and Secure Keyboard
The xterm client has a Secure Keyboard option that you can enable on the xterm Main
Menu. (You can access the Main Menu by holding down the CTRL key while pressing the
second mouse button.) This feature can be used to prevent others from reading what you
type in that window.
By enabling Secure Keyboard, xterm performs a GrabKeyboardO protocol request. Only
one client can grab the keyboard at a time, so the Secure Keyboard feature can be enabled
only temporarily; however, if you are typing a sensitive document or entering a password in
that xterm window, enabling Secure Keyboard ensures that only xterm is receiving input
directly from the keyboard. By using Secure Keyboard, you can be sure that no other client
can be snooping on what you type.
Securi 93
When you enable Secure Keyboard, the xterm window should reverse its colors. If the
colors do not reverse, then xterm was unable to grab the keyboard, and it is very possible
that your display is being snooped.
The Secure Keyboard feature provides some protection against a particular kind of snoop-
ing, but it has many drawbacks. One drawback, of course, is that it is available only using
xterm. Another is that it's a security feature that requires the user's intervention to be
enabled--like a seatbelt, it's only as effective as its users make it. Since it grabs the key-
board, it's annoying to use--you have to disable it every time you want to type in another
client window. And it doesn't protect against taking screendumps of a display, just against
people snooping on keyboard input itself. The big thing it buys you is protection on pass-
words, since passwords are not copied on the display. But the rest of your display is still up
for grabs.
4.6 Other Security Issues
Thus far we've only discussed security issues as far as server access control is concerned. X
has many more security issues, which we discuss briefly here.
4.6.1
The Console xterm (R4 and Earlier)
The -C option to xterm gives the user a console window for the host running the xterm client.
Prior to X 11R5, any user can run an xterm -C regardless of whether they are logged on to the
console.* Furthermore, multiple users can each run xterm -C, and the console messages will
simply display on whichever console window was opened last. This means that the person on
the console display won't receive console messages, and will have no indication that mes-
sages are not being shown.
On some systems, a console window which has been diverted to a foreign server may also
prevent new login sessions on the console display. When an X server started with xinit shuts
down on the console, the login prompt may be diverted to the console xterm window instead
of to the console itself.
There is also a possibility that if root is logged in on the console, users running xterm -C can
get root permission.
For all these reasons, many systems do not support the -C option to xterm. As an alternative,
some systems (such as SCO Open Desktop) have each error message appear in a separate
pop-up window on the console. For getting a diverted console window back, the following C
program may be of use:
/* This will redirect console input and
output back to /dev/console.
*/
#include <fcntl.h>
*For SunOS, you may wish to look at patch 100188-01 that addresses this issue.
94 X Window System Administrator's Guide
#include <sys/termios.h>
main()
{
int fd;
if ((fd = open("/dev/console", O_RDWR, 0)) >= 0)
ioctl (fd, TIOCCONS, 0);
close(fd);
If you suspect that the console has been redirected, try compiling this program and running it
as root.
% cc -o console console.c
% su
# ./console
4.6.2 The Console and xdm (R5)
With Release 5 of X11, many of the concerns about console ownership have been solved. In
R5, xterm has been adjusted to allow only the owner of/dev/console to start up a console
window. Other users are able to run the -C option without receiving an error message, but no
console messages will appear in their window. The R5 solution, however, requires a bit of
fiddling for workstations configured to use xdm on the console display.
When you start X using xinit, you have to first log into the console using get.' and Iogin, so
you necessarily own /dev/console. When you log in using xdm, however, you bypass the
get.'/login mechanisms, so you have to be given ownership of/dev/console explicitly. For
that purpose, the default xdm configuration is altered in R5 to define scripts that are run when
a user logs in on the console and when the user logs out again. The xdm-config file specifies:
Di splayManager. _0. s tartup: /us r / i ib/Xl i/xdm/GiveConsol e
DisplayManager ._0. reset: /usr/lib/Xll/xdm/TakeConsole
(The _0 means that this resource is used only for xdm sessions on the display named : 0, i.e.,
the console display. See Chapter 3 for more information on configuring xdm.)
Both the GiveConsole and TakeConsole scripts are specified as display-specific resources for
the local console display. The GiveConsole script is specified with the Display-
Manager._O. startup resource, which defines a program that is run when the user has
first logged in, but before any other clients are executed. The TakeConsole script is specified
with the DisplayManager._O. reset resource, defining a program run after the user
logs out but before a new connection is established. Both scripts are executed as root.
Although all three files are currently shell scripts, they can be any executable file. (Note that
since these scripts are run as root, you should be extremely careful should you choose to edit
them.)
The GiveConsole script in the R5 distribution does a simple chown to give the user owner-
ship of/dev/console so that the user might get console messages:
# .'/bin/sh
# Assign ownership of the console to the invoking user
#
# By convention, both xconsole and xterm -C check that the
Security 95
# console is owned by the invoking user and is readable before attaching
# the console output. This way a randcm user can invoke xterm -C without
# causing serious grief.
#
chown $USER /dev/console
Similarly, the TakeConsole script returns ownership of/dev/console to root:
# !/bin/sh
# Reassign ownership of the console to root, this should disallow
# assist of console output to any randcm users's xterm
#
chmd 622 /dev/console
chown root /dev/console
Together, GiveConsole and TakeConsole ensure that the user running xdm on the local
display server can receive console messages.
4.6.3
Hanging the Server Remotely (R3)
In X11 Release 3, there's a bug where the server looks for a small packet from the client
before it determines whether or not the client is in the xhost list. The server halts operation
until this packet is sent. You can find out if your X server has this problem by running:
% telnet localhost 6000
(6000 is the TCP/IP port used by server 0 on the local host.)
If your X server freezes, then your workstation has this problem. Some servers will time out
after 30 seconds, but others will remain blocked until the telnet connection is closed. Note
that since this freezes your server, it's better not to try this from a window on your local
display!
4.6.4
Reading the Framebuffer (Sun Workstations)
Sun workstations have a special device called a frarnebuffer, represented by the file/dev/fb.
The framebuffer contains the current image on the console. Sun workstations supply com-
mands, called screendurnp and screenload, for copying the framebuffer to a file and display-
ing that file, respectively. If someone can log onto your Sun workstation, they can usually
read your framebuffer regardless of any X security you have in place. To view the screen on
one Sun workstation from another, try:
% rsh host screendump I screenload
From any X server, you can use the public domain xloadimage client:
% rsh host screendump I xloadimage
To prevent this, you could try changing the permissions on the framebuffer (i.e., chmod
6 O0 /dev/fb), but this might break other programs and interfere with the functionality of
your workstation. Another possibility might be to make the framebuffer readable by only a
special group and have all commands that access it setgid to that group, similar to how per-
mission to/dev/kmem is restricted to the kmem group.
96 X Window System Administrator's Guide
The best solution is to use the file/etc/fbtab to control access to the frame buffer. Uncom-
ment the line that lists the frame buffer:
/dev/console 0600 /dev/fb:/dev/bwoneO:/dev/b,;twoO
and log out completely from the system and then log back in. The flame buffer device will
now be owned and only readable by you, preventing another user from reading it. As long
your account remains secure, your flame buffer should also. See the manual page forfbtab
for more information.
4.6.5
Removing Files in/tmp
Another trick for disrupting the server on a workstation is to remove the files in
/tmp/.Xl l-unix. This directory contains a UNIX socket file for each X server running on that
workstation.
% is -i /tmp/.Xll-unix
srwxrwxrwx 1 imui 0 Apr 27 09:46 X0
This file is the socket descriptor used by X to connect to local server : 0 via IPC. And by
default, everyone has write permission (and thus delete permission) to/tmp/.Xll-unix. So
another trick for perverse users is to delete the XO file on someone else's workstation
% rsh harry rm /tmp/.Xll-unix/XO
The workstation will subsequently be unable to use IPC to start local X clients anymore. That
is, clients will not be able to connect using the display name unix : 0.0 or : 0.0, but only
via TCP/IP or DECnet.
To protect against the XO file being deleted, turn on the sticky bit for the /tmp/,Xll-unix
directory on systems that support that functionality:
root# chmod 1777 /tmp/.Xll-unix
This will prevent users from deleting files that belong to other users in that directory.
While you're there, you might want to make sure the sticky bit is set for/tmp itself. But note
that setting the sticky bit for/tmp does not set it recursively--you need to explicitly set it for
/tmp/.Xl 1-unix as well.
On some versions of SunOS, cron automatically removes files in /tmp, including the
.XI 1-unixWsubdirectory. On those systems, change the cron job to exclude sockets by adding
": -type s" to the.find command line.
4.6.6 The Network Design
Despite all the work in keeping others from interfering with your server or snooping on your
work, the basic security problem is in the very design of X 11: if the client and server are run-
ning on different machines, then they necessarily communicate over the network. This
means that anyone who knows the X protocol and who knows how to snoop over TCP/IP can
follow everything you do over the network, and none of the security mechanisms described
Security 97
in this chapter can prevent them from doing that. The X protocol itself can be encrypted, but
not without a substantial loss in efficiency.
Since new clients are started all the time, the magic cookie code itself is being sent over the
network repeatedly--so even that can be captured, and the snoop will then have direct
access to your display. X11R5 makes DES (Data Encryption Standard) available with both
XDM-AUTHORITY-1 and SUN-DES-l, so that the magic cookie is encrypted across the net-
work; but commercial servers are slow to incorporate DES code, and there are export restric-
tions on DES that make it unavailable outside of the United States.
Several X vendors have implemented the U.S. Government specification on Compartmented
Mode Workstations (CMW), which allows the X workstation to run as a standalone trusted
system. On a CMW, for example, each window has its own security label. (See the Nutshell
Handbook Computer Security Basics by Deborah Russell (O'Reilly & Associates, 1991) for
more information on security labels and trusted systems.) As you would imagine, however,
all bets are off on a networked environment. There are trusted networking specifications
being worked on (such as MaxSix), but X still has a long way to go before it can be consid-
ered secure.
4.7 Related Documentation
"Issues in Building Trusted X Window Systems," by Jeremy Epstein and Jeffrey Picciotto,
published in The X Resource, Issue 0, O'Reilly & Associates, Inc., Fall 1991.
The Xsecurity, xauth, xhost, xterm,fbtab, and xdm manual pages.
"Framework Generic Requirements for X Window System Security, Issue 1," by Maria
Cangelosi and Charles Blauner, published by Bell Communications Research, Inc.
(Bellcore), document number FA-STS-001324, July 1992.
For more information on Secure RPC, see Managing NFS and NIS by Hal Stern (O'Reilly &
Associates, 1991).
98 X Window System Administrator's Guide
5
Font Management
The fonts used by an application need to be available to every server that
might display it. This chapter discusses the issues with using fonts, installing
new fonts, and converting fonts from other formats. It also discusses the
X l 1R5 font server.
In This Chapter:
Fonts on the X Window System ......................................................... 101
xlsfonts .......................................................................................... 103
xfd ................................................................................................. 103
xfontsel .......................................................................................... 104
The Font Path ................................................................................ 105
The Font Directoi File .................................................................. 106
The fonts.scale File (R5 only) ......................................................... 107
Wildcards ....................................................................................... 108
Aliases ........................................................................................... 108
The FILE_NAMES_ALIAS Alias ...................................................... 109
All About Fonts .................................................................................. 110
Bitmap Versus Outline Fonts .......................................................... 110
Font Formats ................................................................................. 111
Format Conversion Tools ............................................................... 112
Adding New Fonts ............................................................................. 114
Adding a Single Font ...................................................................... 114
Adding Multiple Fonts .................................................................... 115
Multiple Font Example ................................................................. 116
Problems with Running Vendor-specific Clients .............................. 117
DECWindows Examples ................................................................ 118
Aliasing ........................................................................................ 119
DECWindows Conversion ............................................................ 120
AIXWindows Example .................................................................... 121
OpenWindows Example ................................................................. 123
Aliasing ........................................................................................ 124
OpenWindows Conversion ........................................................... 125
Converting from Xl 1/NEWS to PCF or SNF ................................. 125
More Conversions ........................................................................ 126
Providing Fonts Over the Network ...................................................... 127
The R5 Font Server ........................................................................... 127
The Configuration File .................................................................... 128
Installing the Font Server ............................................................... 130
Testing By Hand .......................................................................... 131
Changing BSD Boot Files ............................................................ 131
Changing System V Boot Files ..................................................... 132
Changing AIX Boot Files .............................................................. 133
Font Server Name Syntax .............................................................. 133
Debugging the Font Server ............................................................ 134
Font Server Clients ........................................................................ 135
The Font Path and the Font Server ................................................ 136
Hostname Aliases .......................................................................... 138
A Font Server Example .................................................................. 138
Related Documentation ..................................................................... 140
5
Font Management
The number of fonts available under X11 is enormous, and there's no limit to adding more.
Each size and orientation is treated as a different font. Furthermore, fonts are stored in sev-
eral different formats, so the same font might be stored five different ways.
The administrator's role is to ensure that each server can access the fonts it needs for a given
application. In Release 3 and Release 4, fonts for servers needed to be available
locally--usually stored on a local disk drive or made to appear local via a NFS or AFS
filesystem. In Release 5, fonts can be obtained either locally or through a font server, which
allows access to fonts on more than one host on the network.
5.1
Fonts on the X Window System
In general, a client has default fonts chosen by the programmer, but administrators or users
may want to change them tO their own preference. The default fonts may be too small to read,
unavailable for a given server, or just plain ugly. For example, the default font for xterm is
usually the font fixed, a 13-pixel semi-condensed font that tends to be quite small on high-
resolution monitors.
Before we discuss the administrative issues of fonts, let's talk about how fonts are designated
on the X Window System. An example of a font name and its components is shown in Figure
5-1.
The field names have the following meanings:
Foundry
Family
Weight
Slant
This is a registered name for the font "foundry" (usually a company name)
that supplied the font to the X Consortium ("Adobe," "Bitstream," etc).
The "family" or typographic style of the font ("Courier," "Lucida," etc).
The typographic weight or "blackness" of the font ("medium," "bold," etc).
The "posture" of the typeface ("Roman" is upright, "Italic" is slanted, etc).
Font Management 101
-Adobe-Couri er-Bol d-R-Normal--i 4-140-75-75-H-90-I S08859-I
F6E ii.-7;;;.7i..;;;G,;i iii;;;)iTi;;
Select a character
range: OxO020 (0.32) thru OxOOFF (0.255)
upper left: OxO000 (0.0)
Figure 5-2. xfd
5.1.3 xfontsel
The xfontsel client (which was new in R4) allows browsing through all the available fonts
and seeing each one in tum. When you find a font that you are happy with, click on the
"select" button and the selection can be pasted into a file or command line without having to
type it by hand.
104 The X Window System Administrator's Guide
% xset -q
Font Path:
/usr/lib/Xll/fonts/local,/usr/lib/Xll/fonts/misc/,/usr/lib/Xll/fonts/75dpi/,
/usr/lib/Xll/fonts/lOOdpi/
The local directory is now searched before the regular directories. If you want to redefine one
of the default fonts, you can install a new one in the local directory and the server will access
the new one instead.
Rehashing the Font Path
Each time the font path is changed, the server reads the fonts.dir and fonts.alias files in
each directory listed in the new font path. The server then maintains a list of valid font
names in memory instead of searching for a font in the filesystem every time it is
requested. If a new font is added to one of the font directories and the fonts.dir or
fonts.alias files are changed, you need to update the list of fonts known to your server
with the command:
% xset fp rehash
The rehash command tells the server that something has changed and it should rebuild
this internal list.
The xset client controls many server features. See the manual page for xset for more infor-
mation.
The font path can also be specified when the server is first started. For example, on the com-
mand line:
% xinit -- -fp /usr/lib/Xll/fonts/local,/usr/lib/Xll/fonts/misc/,\
/usr/lib/Xll/fonts/75dpi/,/usr/lib/Xll/fonts/lOOdpi/
or in the Xservers file:
:0 local /usr/bin/Xll/X -fp /usr/lib/Xll/fonts/iocal,/usr/lib/Xll/fonts/misc/,\
/usr/lib/Xll/fonts/75dpi/,/usr/lib/Xll/fonts/lOOdpi/
5.1.5 The Font Directory File
When a client requests a specified font, the server searches in each of the directories in its
font path for a file called fonts.dir, as in/usr/lib/Xll/fonts/75dpi/fonts.dir. The fonts.dir file
maps the name of the requested font to the filename of the font as it is stored in the filesys-
tem. If there is no match, the client reverts to its own defaults (e.g., xterm reverts to "fixed").
The fonts.dir file is needed because some operating systems have restrictions on filenames.
For example, MS-DOS, VMS, and UNIX all have restrictions on filename length or on the char-
acters used within filenames. When installing a new font, you should choose a filename for
the new font that conforms to the semantics of your operating system. The fonts.dir file con-
tains the mapping of the font filename to the name of the font itself.
106 The X Window System Administrator's Guide
The fonts.dir file's presence is required for the server to access any fonts within a directory.
It is created by the mkfontdir command. You have to run mkfontdir every time you add or
delete a font from a directory to keep the fonts.dir file in sync with the actual contents of the
font area. (See Section 5.3.1 for an example of how to use mkfontdir.) Thefonts.dir file has a
simple format--the first several lines of a sample R4 file resemble the following:
200
courBOl 0. snf - adobe- couri er-bol d-o -norma i-- 10-100 - 75 - 75-m- 60- i so8859 - 1
courBOl2, snf -adobe-courier-bold-o-normal- - 12 - 120 -75-75-m-70- i so8859 - 1
courBOl4, snf -adobe- courier-bol d-o-norma i- - 14 - 140- 75 - 75 -m- 90- i so8859 - 1
courBOl8, snf -adobe-courier-bold-o-normal--18-180-75-75-m-l10-iso8859-1
courBO24, snf -adobe-courier-bold-o-normal--24-240-75-75-m-150-iso8859-1
The number at the top is the number of fonts in the directory. The remaining lines are pairs
of filenames and font names. The .snfextension to filenames in this example indicates the for-
mat that the font is stored in--in this case, the Server Natural Format. (See Section 5.2.2 for
more information on font formats.) The files may also have a .Z extension, if the server sup-
ports compressed fonts.
OpenWindows-specific Features
Sun's OpenWindows has a different system for fonts (scalable F3 format), but most of
the font administration utilities parallel the MIT ones in function. The OpenWindows
file Families.list is similar in function to the fonts.dir file. It is created by the bldfamily
command, which should be run any time the contents of the font directory are changed.
in the same manner as montdir.
5.1.6 The fonts.scale File (R5 only)
In R5, the outline or scalable fonts (as described in Section 5.2.1) introduce a problem with
creating thefonts.dir file. It is difficult for mkfontdir to determine the values in the font name
fields for a scalable font. If there are scalable fonts within a font directory, a fonts.scale file
should be created by hand. When mkfontdir is run, it will create entries in fonts.dir for each
bitmap font it finds and will then append the contents of the fonts.scale file.
The Speedo fonts distributed with R5 come with a fonts.scale file that is installed along with
the fonts in/usr/lib/X11/fonts/Speedo. It contains an entry for each scalable font:
8
font0648.spd -bitstream-charter-medium-r-normal--0-0-0-0-p-0-iso8859-1
font0649.spd -bitstream-charter-medium-i-normal--0-0-0-0-p-0-iso8859-1
font0709.spd -bitstream-charter-bold-r-normal--0-0-0-0-p-0-iso8859-1
font0710.spd -bitstream-charter-bold-i-normal--0-0-0-0-p-0-iso8859-1
font0419.spd -bitstream-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1
Font Management 10 7
fontO582.spd -bitstream-courier-medium-i-normal--O-O-O-O-m-O-iso8859-1
fontO583.spd -bitstream-courier-bold-r-normal--O-O-O-O-m-O-iso8859-1
fontO611.spd -bitstream-courier-bold-i-normal--O-O-O-O-m-O-iso8859-1
Asthere are no other fontsinthe Speedo directory, the connts ofthefon.scale file and the
resultingfon.dir file are identical.
5.1.7
Wildcards
As shown in our xlsfonts example earlier, users don't have to use the full names of a font
when specifying them. Wildcards can be used to limit the amount of typing required and pro-
vide flexibility.
Users can use asterisks ("*") in the font specification, such as:
% xterm -fn '-fixed-*-*-*-*--15-1O-*-*-*-*-*-*'
The asterisks will match any of the possible values for a given field in the font specification.
Notice that a font name using an asterisk as a wildcard needs to be single-quoted on the com-
mand line. This is to protect the asterisks from being interpreted by the shell.
The first font found in the font path that matches the pattern is the one that is used. If you
supply the pattern to xlsfonts, you can see which fonts in your font path match the pattern:
% xlsfonts -fn '-fixed-*-*-*-*--15-1O-*-*-*-*-*-*'
-misc- fixed-bold-r-normal--15-140-75-75-c- 90-iso8859-i
-misc- fixed-medium-r-normal-- 15-140-75-75-c-90-iso8859- i
Although xlsfonts may report more than one font name, only the first font listed will be used
by a client when supplied a font name using the same wildcards. If you run xfd with the same
font pattern, the name of the first matching font is displayed at the top of the window:
-misc- fixed-bold-r-normal-- 15-140-75-75-c-90-iso8859-i
Using wildcards could have a surprising effect, especially when a new font is installed: if an
administrator adds a new font that is similar in name to an already existing font, users may
end up matching the new one instead of the one they thought they were requesting. Other
surprises could occur when a new version of X11 is installed, as each release has had more
fonts than the previous release, leading to new matches to a wildcard.
Using wildcards can make an application more flexible, as it may still find a usable font if the
intended one is missing, whereas a complete font specification may cause a failure if not
matched exactly.
5.1.8
Aliases
A font subdirectory can contain a file called fonts.alias, which contains aliases for font
names. An example of an alias is the default fixed font, which is defined in fonts.alias in the
MIT distribution of X as:
fixed -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
108 The X Window System Administrator's Guide
.Z
Compressed file. This extension indicates that the compress program has
been run on the font file. This should reduce the size of the file on disk.
Some servers (such as those from MIT) can read compressed fonts directly,
but this is not true for all implementations.
5.2.3
Format Conversion Tools
There are several commands for converting from one format to another, as illustrated in Fig-
ure 5-4. The following are some common examples. See the manual pages for these com-
mands for more information.
bdftosnf Converts BDF to SNF. This command should come with any server that
uses SNF, such as the stock MIT server Releases 2 through 4. Example
usage:
# bdftosnf myfont.bdf > myfont, snf
bdftopcf
Converts BDF to PCF. This command should come with any server that
uses PCF, such as DECWindows and MIT Release 5. Example usage:
# bdftopcf -o myfont.pcf myfont.bdf
c
Converts BDF to PCF. This command is distributed with DECWindows.
Example usage:
# dxfc myfont.bdf > myfont.pcf
snftobdf
Converts SNF back to BDF. This program can be found on various anony-
mousftp sites and X source archives.* Example usage:
# snftobdf myfont, snf > myfont.bdf
conve.rtfont
fstobdf
Converts BDF to several Xll/NeWS formats and back. This command
comes with Sun OpenWindows. Example usage:
# convertfont -f 32 myfont.bdf
See Section 5.3.6.3 for an example using convertfont.
Dumps the BDF version of any font available to the font server. See Sec-
tion 5.5 for more information on the font server.
# fstobdf -s tcp/harry.ora.com:7000 -fn fixed > fixed.bdf
getbdf
Dumps the BDF version of any font available to the X server. See Section
5.3.4.2 and 5.3.5 for examples of using getbdf.
# getbdf -font 9x15 > 9xl5.bdf
* One ftp site is export.lcs.mit.edu in contrib/snftobdftar.Z.
112 The X Window System Administrator's Guide
5.3 Adding New Fonts
There are lots of reasons to expand the numbers of fonts available. Some applications, espe-
cially desktop publishing packages, provide new fonts as part of their installation. Clients
that support languages other than English are becoming commonplace and are widely avail-
able on the Internet--these clients require large numbers of new fonts to be added.
It is possible to access fonts in your home directory by adding paths to existing font paths
with the fp option to the xset command. This is useful for testing. It also means that you can
have users install the fonts they want in their own home directories if you don't think every-
one will want to use them.
5.3.1
Adding a Single Font
Let's step through the procedure for adding a new font in a stock MIT R3 or R4 environment.
(For an R5 environment running a font server, the font may already exist on another system
and you can just tell the font server where it is. See Section 5.5 for more information.)
You may come across an application that requires some non-standard fonts, say a Kanji. font
for the OSF/Motif demo program hellomotif.* This font is distributed in BDF format.
1. Convert it to SNF (or whatever is appropriate for your server) with the bdftosnf com-
mand:
# bdftosnf -t kl-l.bdf > kl-l.snf
# bdftosnf -t rkanal4.bdf > rkanal4.snf
The -t flag indicates that these fonts are going to be displayed on a "terminal" (such as
xterm) and each character should be same size.
2. Copy the SNF files into one of the font directories. For this example, the misc directory is
a good candidate:
# cp kl-l.snf /usr/lib/X11/fonts/misc
# cp rkanal4.snf /usr/lib/Xll/fonts/misc
3. Rebuild thefonts.dir file with the mkfontdir command:
# mkfontdir /usr/lib/X11/fonts/misc
This command will increment by 2 the number of fonts listed on the first line of the
fonts.dir file, and add two pairs of entries: the filename and the font name.
k14-1, snf -k14-screen-medium-r-normal--14-140-75-75-m-140-j isx0208.1983-1
rkanal4, snf -romankana14-screen-medium-r-normal--14-140-75-75-m-70-j isx0201
1976-0
The next step would be to add aliases to fonts.alias for convenience. In the hellomotif
case, the application requests the font by its full name, not by an alias--so unless you
intend to access the font from other applications, it probably isn't worth aliasing.
* OSF/Motif source can be purchased from the Open Software Foundation.
114 The X Window System Administrator's Guide
3. Verify yourcuentfont path using the xsetcommand:
% xset -q
Font Path:
/usr/lib/Xll/fonts/misc/,/usr/lib/Xll/fonts/75dpi/,
/usr/lib/Xll/fonts/lOOdpi/,/usr/lib/Xll/fonts/tex
Note that, in order to access the new fonts, users have to run the xsetfp+ command specified
above every time they start their server. Their .xsession or .xinitrc files would be an appropri-
ate place for the command. For sites that start their X sessions from xdm, you can add local
changes like this one to the xdm startup files. This will add the font path for all users who
start their X sessions using xdm.
Rather than creating multiple font directories to be added to the font path of each server, you
could just put all non-standard fonts into one directory, for example,/usr/lib/Xll/fonts/local.
Some vendor implementations (such as DECWindows) provide a "local" directory structure
just for this purpose. The path is already known to the server, so you can add fonts and they
will be available without further changes.
You could also define this path within the default search path when you build the X11 distri-
bution from source (using the DefaultFontPath build flag) or supply a font path when
starting the X server. See Section 8.5 for information on how to change your build flags when
building X11 from source. To supply a new font path when starting the X server, most
servers accept a -fp option on the command line.
5.3.3
Problems with Running Vendor-specific Clients
The fonts available to a server vary from one vendor to another. If a client requests a font
from the server and it is not recognized, this may render an application unusable or just make
it look strange.
Let's say you are on a Sun running an MIT Release 4 server and wish to run the DECWin-
dows desk calendar dacalendar off a remote Ultrix host. dacalendar looks for specific fonts
that are not available on the Sun, and the program will complain about the missing fonts:
scud% dxcalendar
X Toolkit Warning: Cannot convert string "-*-MIqU-MEDIUM-R-Normal
-*-120-*-*-P-*-IS08859-I" to type FontList, using fixed font
X Toolkit Warning: Cannot convert string "-*-Menu-Medium-R-Normal
-*-I00-*-*-P-*-ISO8859-I" to type FontList, using fixed font
X Toolkit Warning: Cannot convert string "-*-Menu-Medium-R-Normal
-*-120-*-*-P-*-IS08859-I" to type FontList, using fixed font
The application in this example will still run, but it doesn't look as good as it should.
The InfoExplorer utility in AIXWindows also has its own set of fonts. While InfoExplorer
will run without its fonts, you can improve its appearance on a non-AIXWindows server by
making these fonts available to it.
Font Management 117
The OpenWindows cm (calendar manager) is a highly desirable program, but it, like most
OpenWindows applications, will look terrible running under the MIT R4 server if you don't
make its special fonts available. It will also complain about missing fonts:
h-street% cm
XView warning: Cannot load font '-b&h-lucida-medium-r-normal-sans-*
-90-*-*-*-*-*-*' (Font package)
XView warning: Cannot load font '-b&h-lucida-bold-r-normal-sans*-9
0-*-*-*-*-*-*' (Font package)
For all these examples, the solution is to make the font available to the local server. (This
may cause some confusion for people new to X, as the fonts might appear to be available
along with the clients on a remote host.)
Sometimes the solution to supplying a missing font may be as simple as creating an alias to it
from an existing font. It is also possible to convert fonts required by a special client into a
format that is recognized by your server, but this may involve some work. The getbdf pro-
gram is one such font converter that may work.* getbdf can query the server for a font and
dump it out in the bdfform, which can then be converted into the local font format.
In most cases, you should do the conversion from bdf to your local format on the machine
where the fonts are going to reside. This should avoid any problems with byte order when the
conversion takes place.
The font server introduced in MIT R5 will probably eliminate these problems, but it will take
some time before the font server is available for all X servers. In the meantime, the tech-
niques introduced here should suffice.
These examples may not match the exact problem you are having. Think of them as "case
studies" that show problem solving techniques. The purpose of this section is to demonstrate
that it is possible for the administrator to compensate for differences between vendor imple-
mentations.
5.3.4
DECWindows Examples
The DECWindows software contains fonts in the directory/usr/lib/X11/fonts/decwin that do
not exist in the MIT X 11 R4 release. There are two ways to get around this problem: alias the
DECWindows fonts to existing MIT fonts, or you can convert the DECWindows PCF fonts
into SNF fonts that can be used by the MIT R4 server.
For an example problem, the dxcalendar program does not look quite right without the
DECWindows fonts.
* getbdfis available via anonymous lip to larry.mcrcim.mcgill.edu as X/getbdf.c.
118 The X Window System Administrator's Guide
File Edit. ew Customize Help
Figure 5-6. dxcalendar with aliases
5.3.4.2
DECWindows Conversion
Another option is to use a program that extracts fonts from the server and outputs them in
BDF format. You can then convert them into SNF or whatever your local server requires.
Once they are in your local format, you can add them to your font directory.
1. Compile the getbdfprogram on the Ultrix host:
% cc -o getbdf getbdf.c -IXll
2. On the Ultrix host, run the getbdf program to dump out the fonts into BDF format. Since
fonts.alias contains the keyword FILE_NAME_ALIASES, you know that the filename of
the font is also a valid name for the font. You can use this fact to automate the conversion
process. If you are using csh, the following commands will convert each font in the direc-
tory:
#
#
?
?
?
The
#
#
cd lusrlliblX11Ifontsldecwin/75dpi
foreach goo (*.pcf)
set foo='basename $goo .pcf"
getbdf $foo > $foo.bdf
end
shequivalent would be:
cd lusrlliblX1ilfontsldecwin/75dpi
for goo in *.pcf
do
foo='basename $goo .pcf"
getbdf $foo > $foo.bdf
done
120 The X Window System Administrator's Guide
3. Make a directory on the target machine for the new fonts:
# mkdir /usr/lib/Xll/fonts/decwin
4. Copy all the BDF files to the new directory on the target machine or access them via
NFS. On the target machine, convert the BDF fonts to local format (SNF in this example)
for your server. This example also uses csh:
# foreach goo (*.bdf)
? bdftosnf $goo > "basename $goo .bdf" .snf
? end
The sh equivalent would be:
# for goo in *.bdf
> do
> bdftosnf $goo > "basename $goo .bdf" .snf
> done
5. Create the fonts.alias file:
# echo FILE_NAMES_ALIASES > fonts.alias
6. Create thefonts.dir file:
# mkfontdir
7. Add the new directory to your font path:
% xset fp+ /usr/lib/Xll/fonts/decwin
8. Try out a program that needs DECWindows fonts:
% dxcalendar &
5.3.5
AIXWindows Example
The InfoExplorer utility on the IBM RS/6000 running AIX also has its own set of fonts. The
InfoExplorer fonts are in the directory/usr/lpp/info/Xllfonts. As in the Ultrix example, you
need to convert the fonts into BDF format and then into the native format of your server. You
can use the same font conversion trick here that we used in the DECWindows conversion. In
this example, the target server uses the SNF format.
1. Compile the getbdf program on the AIX host:
% cc -o getbdf getbdf.c -iXll
2. Use the getbdfprogram to dump the fonts into BDF format. Since the fonts.alias file con-
tains the keyword FILE_NAME_ALIASES, you know that the filename of the font is also a
valid name for the font. You can use this fact to automate the conversion process. This
example is using csh:
Font Management 121
5.3.60penWindows Example
The cm desktop calendar program in the Sun OpenWindows 2.0 distribution does not work
properly under MIT R4 without the fonts it needs. To demonstrate the problem, try running
the crn program without the aliases.
'[-] Untitled
Man Tue Wed Thu Fri Sat
Figure 5-7. cm without aliases
The dates on the calendar are missing, because the necessary fonts are missing.
Font Management 123
5.3.6.1 Aliasiflg
Most of these types of font problems can be handled by a few aliases. Aliases can be added to
an existing fonts.alias file, such as the one in/usr/lib/Xll/fonts/75dpi/. This example adds
the necessary fonts to the fonts.alias file so you can run cm under an MIT R4 server. Simply
append the following lines to the fonts.alias file:
-b&_h-lucida-ndium-r-normal-sans- 9-90-75-75-p- 58-iso8859-1 -b&_h-lucida-
ndium-r-normal-sans-I O- 100-75-75-p-58-iso8859-1
-b&_h-lucida-bold-r-normal-sans-9-90-75-75-p-58-iso8859-1 -b&_h-lucida-
bold-r-normal-sans- 12 -120-75-75-p-79-iso8859-1
Next, tell the server about them:
% xset fp rehash
Now, run cm again, this time with the aliases (see Figure 5-8.)
May 1992
Sun
Mon Tue Wed Thu i Sat
1 2
3 4 S 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Figure 5-8. cm with aliases
124 The X Window System Administrator's Guide
5.4 Providing Fonts Over the Network
Diskless workstations and X terminals present a new set of problems for font administration.
For an X server to display text on a diskless workstation or X terminal, it has to have access
to fonts on a remote host, since X terminals don't have any local permanent storage. X termi-
nals will typically come with a small set of fonts (usually fixed, at the minimum) that are
stored in ROM, but need to read additional fonts over the network to be useful.
TFTP access is often needed for X terminals to boot off the remote host. When an X terminal
is initially powered up or rebooted, it broadcasts a request for boot services over the network
and a designated host downloads a kernel or server to the X terminal. See Section 7.4 for
more information on fonts and X terminals.
Fonts can also be downloaded using the same mechanism after the X terminal is up and run-
ning, but a more flexible approach is to NFS-mount the fonts from a remote host. The server
can then add fonts "on-the-fly" after booting. Unfortunately, this also implies all the normal
administration problems associated with NFS, such as access control, network loading, and
server failures. When using NFS, X terminals become closer to the diskless workstations that
they were designed to replace, as they are subject to the same problems. See Section 7.4.3 for
more information.
5.5 The R5 Font Server
Previous to Release 5, fonts on the X Window System needed to be available on local disk or
provided over the network via TFTP or NFS. Starting with R5, fonts can be requested from a
font server.
The font server is a program that runs on a host somewhere on the network and provides fonts
to your X server. This makes font administration easier, as you can have several sources for a
given font, which makes font access more reliable and less dependent on a single host. It
also separates font problems from TFTP and NFS problems.
The font server can understand several different font formats. This means that all you have
to do to make a font available is to run the font server on the host where the font resides. You
no longer have to copy over the font and convert it to a format recognized by your local
server. This is great for multi-vendor environments where you have many different font for-
mats, as clients can run under any server and are still able to access special fonts they may
require.
There is a host-based security mechanism to limit font access to a group of hosts. This can be
used when making licensed fonts available with the font server. The number of simultaneous
connections to the font server can be controlled, preventing the font server host from being
overloaded. Font requests can also be passed onto other font servers if the current one
becomes overloaded.
The font server program supplied in MIT R5 is called fs and is usually installed as
/usr/bin/Xll/fs. The font server is described in the manual page fores. If you have access to
the MIT source code, the file mit/doc/fontserver/FSlib.doc describes the font server library
Font Management 127
functions and mit/doc/fontserver/design.ms provides a detailed description of the font server
design.
5.5.1
The Configuration File
The font server's operation is controlled by a configuration file, usually named
/usr/lib/X11/fs/config. If you are building R5 from the MIT source code and want to use the
font server, you may want to enable the Tnstal 1FSConfig flag in your config/site.def file.
Setting the flag to YES will copy a sample font server configuration file into
/usr/lib/Xll/fs/config when the make install is performed. See Section 8.5.1 for more infor-
mation on configuring X 11 at build time.
The syntax of the configuration file is pretty simple. The following is a sample file that con-
tains every option:
# font server configuration file (kitchen sink version)
#
cache-size = 2000000
#
alternate-servers = pepper, ora. com: 8000, bigbird, ora. com: 8001
#
catalogue = /usr/lib/Xll/fonts/misc/,/usr/lib/Xll/fonts/Speedo/,
/usr/lib/Xll/fonts/75dpi/,/usr/lib/Xll/fonts/lOOdpi/
#
client-limit = i0
#
clone-self = on
#
default-point-size = 120
#
default-resolutions = 75,75,100,100
#
error-file = /var/log/fs
#
port = 7000
#
trusted-clients = pepper,bigbird
#
use-syslog = off
#
Any line starting with a "#" is treated as a comment and ignored.
The following keywords are defined in the configuration file:
cache-size
This is the number of bytes of memory that the font server will allocate in its
font cache. The cache speeds up font access, as any recently requested font
should still be in the cache and immediately available (otherwise, it would have
to be read from a file on disk or scaled from an outline font). If the font server is
running on a host that has lots of memory, make the cache size larger. The cache
size is approximately 2 megabytes in this example.
128 The X Window System Administrator's Guide
alternate-servers
This is a list of alternate font servers for this font server. If the current font
server is unable to service the request, it supplies a list of alternate-
servers to the X server, permitting the X server to try again at one of the alter-
nate font servers. The name of an alternate server is a hostname and port number
pair separated by a colon. The alternate servers are referred to as delegates in
the MIT documentation. The primary server will supply a client with a list of
alternate servers that it knows about. This example has two alternate servers,
one on the host pepper and the other on bigbird.
catalogue
A list of font directories available from this server.* This example lists all the
standard MIT R5 font directories. These can be stored in any format recognized
by the font server. The font server currently understands the PCF, Speedo, SNF,
and BDF formats, described in Section 5.2.2. This keyword should not be con-
fused with the catalogue-list component of the font server name (see Section
5.5.6 for an explanation).
client-limit
The number of clients that the font server will allow before cloning itself or
rejecting the connection. If the clone-self flag is set to off and a client attempts a
connection, the font server will send back a reply listing other font servers that it
knows about. These are specified in the alternate-servers list.
clone-self
Whether the font server should attempt to clone itself or use delegates when it
reaches the client-limit. In this example, it is set to on and the font server would
spawn another copy of itself if it received more than l0 (the client-limit) connec-
tions.
default -point-size
The default point size (in tenths of a point) for font requests that don't specify
this value. These are called decipoints in the MIT documentation. The example
value of 120 indicates a 12 point size.
de f aul t - resolut ions
Default resolutions supported by the server. The numbers are pairs of horizontal
and vertical resolutions per inch. Resolutions of 75x75 and 100xl00 are speci-
fied in the example.
error-file
The filename of the error log file. You can use this if your system does not sup-
port the syslogO facility. This file would normally be the first place you would
look when debugging the font server configuration file. Leave out this keyword
if you have use-syslog enabled.
* You may notice that the syntax described here differs from the paper "Font Server Implementation Overview,"
(rnit/doc/fontserver/design.rns) where a prefix of the font format, such as pcfor Speedo, is used in front of the font di-
rectory list. This feature is not used in the MIT R5 font server.
Font Management 129
port The TCP port number on which the font server will listen for client connections.
Since the font server does not use a privileged port, a user can start up her own
font server at any time. As you can choose the port number yourself, you can test
the font server without disturbing other servers by selecting a unique port num-
ber. The MIT examples all use port 7000. This is a safe distance from port 6000,
which is what the X server uses.
use-syslog
Whether syslogO is to be used for error logging. If set to on, font server errors
will be sent to the LOG_LOCALO syslog facility. You will need to add a line to
your/etc/syslog.conf file to capture the error messages in a file. If you log other
messages to the directory/var/log, the following entry will add logging for the
font server:
local0, debug /var/log/fs
This will log errors to the file/var/log/fs. See the manual page on syslog.conf(5)
for more information on setting up syslog. If you want to use the error-file key-
word, set use-syslog to off.
trusted-clients
The names of hosts the font server will supply fonts to. This can be used to
restrict fonts to a certain group of hosts for licensing reasons. An empty list indi-
cates that any host can make a connection to the font server.
You probably won't need to specify most of these options for your site. The MIT-supplied
configuration file/usr/lib/Xll/fs/config should be good enough to start with:
# font server configuration file
# $XConsortium: config.cpp,v 1.7 91/08/22 11:39:59 rws Exp $
clone-self = on
use-syslog = off
catalogue =
/usr/lib/Xll/fonts/misc/,/usr/lib/Xll/fonts/Speedo/,/usr/lib/Xll/fonts/75
dpi/,/usr/lib/Xll/fonts/lOOdpi/
error-file = /usr/lib/Xll/fs/fs-errors
# in decipoints
default-point-size = 120
default-resolutions = 75,75, i00, i00
5.5.2
Installing the Font Server
If you wish to have the font server running all the time (as you probably do), you can add it to
a system start-up file, such as/etc/rc.local. However, you probably should not add it to any
system files until you are satisfied that it will work correctly. You can test it "by hand" by
starting it on the command line.
130 The X Window System Administrator's Guide
5.5.2.1 Testing By Hand
The -config flag can be used to test a configuration file that is not yet installed or when you
do not have write permission to/usr/lib/Xll/fs:
# fs -config ./test-config &
If the font server dies with the error:
Error: Binding TCP socket: Address already in use
Error: Fatal server error.'
Error: Cannot establish any listening sockets
there is probably another font server (or some other program) running with the same port
number. You can specify a number other than 7000 (the default) with the port keyword in the
configuration file or on the command line with the -port flag:
# fs -config ./test-config -port 7001 &
The SIGUSRI signal will cause the server to reread the configuration file. Use this if you have
edited the file and wish your changes to take effect without having to kill and restart the font
server.
The SIGUSR2 signal will cause the server to flush the font cache. This may be desirable if you
want the server to get a fresh copy of a font instead of using a cached version that may be
out-of-date.
The SIGHUP signal is used to reset the server, closing all active client connections and
rereading the configuration file.
You can kill the font server at any time by sending it the SIGTERM signal.
For example, under BSD UNIX:
# kill -TERM fs pid
Under System V:
# killall -TERM fs
When you are satisfied with the font server's configuration, it can then be added to the system
boot files, which will automatically start it upon the next reboot
5.5.2.2 Changing BSD Boot Files
In the BSD world, the/etc/rc.local file is the usual place to add new daemons. You will want
to locate the entry for the font server before any other X1 l-related daemons (such as xdm), if
they are going to need fonts from the font server.
For SunOS 4.x, an example/etc/rc.local entry would look like this:
#
# start up X font server
#
if [ -f /usr/bin/Xll/fs ]; then
/usr/bin/Xll/fs & echo -n ' fs'
fi
#
Font Management 131
2. Create symbolic links to/etc/init.d/fs from the/etc/rcO.d and/etc/rc2.d directories. The
format of the symbolic link name is either a "S" (for start) or a "K" (for kill), followed by
a sequence number that determines the order of the file execution, followed by the name
of the file in/etc/init.d. To determine the sequence number, you need to see what numbers
are already in use. Here is a listing from a sample IRIX 4.0 system:
% is /etc/rc2.d
S0 LMOUNISYS S30network S50mail S70uucp S88configmsg
S20sysetup S40nck S58RMTMPFILES S75cron S95autoconfig
S21perf S45netls S601p S78winattr S97cdromd
S22acct $48savecore S61bsdlpr S83audio S98xdm
The S98xdm entry is for the xdm daemon. Since xdm may require the font server to be
running before it starts, you should move it to the next highest number:
# mv S98xdm S99xdm
And then make a link to the file/etc/init.d/fs file:
# in -s /etc/init.d/fs S98fs
Repeat the process for the/etc/rcO.d entry:
#
Kl5cron K2 0mail K251p K30netls K40network K90sysetup
Kl8uucp K22acct K26bsdlpr K35nck K78winattr
In this case, there isn't a sequence number conflict with an existing script:
# in -s /etc/init.d/fs K98fs
3. The final step is to add an entry to the/etc/config directory to enable the script at boot
time:
# /etc/chkconfig -f fs on
5.5.2.4 Changing AIX Boot Files
AIX is a combination of System V and BSD. Starting the fontserverconsists ofadding aline
to/etrc.tcpip:
# Start font server
start /usr/bin/Xll/fs ""
#
5.5.3
Font Server Name Syntax
Any client wishing to use the font server must be supplied with the name of the host where
the font server is running and the port number that the font server is listening on. These two
components uniquely identify a particular instance of the font server:
transport/hos tname :port
Font Management 133
Under System V UNIX:
% ps-ef I grep fs I grep-v grep
root 169 1 0 Jan 2 ? 0:00 /usr/bin/Xll/fs
If the process doesn't show up, there probably is a serious error in the configuration file or
something else is wrong with your system.
If the font server has reached its client limit, a connection to it may fail with:
FSlib: connection to "rock:7000" refused by server
FSlib: name of server: rock:7000
fsinfo: unable to open server "rock:7000"
Turning on the clone-self keyword or raising the client-limit are possible solu-
tions.
If you have the error-file flag specified in the configuration file, all font server error
messages will appear in the /usr/lib/Xll/fs/fs-errors file (or the file specified with the
error-file parameter). If the use-syslog flag is enabled, the errors will be logged in
the file specified in/etc/syslog.conf for the LOG_LOCALO facility.
Any error message prefixed with CONFTG: has something to do with the configuration file. A
typical error might be:
Error: CONFIG: can't open configuration file "/usr/lib/Xll/fs/config"
/usr/lib/Xll/fs/conjg is the default location of the configuration file. Make sure that the file
exists and is readable. You can specify another location for the config file with the -con]ig
option tofs. (You might use this option if you are running your own private font server.)
If you get the following error:
Error: Can't open error file "/usr/lib/Xll/fs/fs-errors"
the font server probably does not have write permission to the error file. Any errors will be
sent to the controlling terminal or the console. You can specify a different file with the
error-file keyword in the font server configuration file.
5.5.5
Font Server Clients
Once you have verified the existence of the font server, try requesting a font from it. There
are several clients that have names that start with fs, indicating that they are for use with the
font server.
The fslsfonts client is analogous to xlsfonts in that it lists the names of all available fonts or
just those specified on the command line. It understands the same wildcard syntax you use
when specifying fonts elsewhere.
Try a font that you know should be available from the server:
harry% fslsfonts -server tcp/harry:7000 -fn "fixed"
fixed
Font Management 135
The following example has a font server running on the host harry.
First, check the current font path with xset:
% xset -q
Font Path:
/usr/lib/Xll/fonts/misc/,/usr/lib/Xll/fonts/75dpi/,/usr/lib/Xll/fonts/100dpi/
Add the font server entry:
% xset fp+ tcp/harry:7000
Check the new path:
% xset -q
Font Path:
/usr/lib/Xll/fonts/misc/,/usr/lib/Xll/fonts/75dpi/,/usr/lib/Xll/fonts/lOOdpi/,
tcp/harry: 7000
If you get the following error from xset:
X Error of failed request: BadValue (integer parameter out of range for
operation)
Major opcode of failed request: 51 (X_SetFontPath)
Value in failed request: 0x6
Serial number of failed request: 5
Current serial number in output stream: 8
either you made an error in the font server name, or the font server specified in the font path
is no longer running.
Here are some more examples of valid font path entries:
tcp/harry: 7000
tcp/aixfonts : 8000, tcp/decfonts : 7000
DECnet / SRVNOD: : FONT$DEFAULT
decnet/44.70: : font$special/symbols
Font path additions can specified anywhere you would normally put them. such as in a user's
.xsession or .xinitrc file:
.oo
xset m 2 2
xset b i0 I00 i0
xset fp+ tcp/decfonts.ora.com:7000
xrdb $HOME/.Xdefaults
xmodmap $HOME/. xmodmaprc
twm&
..o
This example assumes the font server will be running before the user's X session is started. If
it is not running, the xset command will fail with the BadVal ue error shown previously.
Font Management 137
5.6 Related Documentation
The font clients are described in the manpages for xfd, xlsfonts, and xfontsel.
The font server clients are described in the manpages forfsinfo,fslsfonts, andfstobdf.
The OpenWindows font programs are described in the manpages for convertfont, rnakeafb,
bldfarnily, and the OpenWindows documentation set.
A technical description of X fonts is in the file rnit/doc/XLFD/xlfd.tbl.ms (the PostScript ver-
sion is mit/hardcopy/XLFD/xlfd.PS.Z).
For more information on the font server, see the manpage forfs and the original design docu-
ment mit/doc/fontserver/design.rns. Beware of differences between this paper and the version
of the font server included in the R5 distribution.
The Font Server Protocol is described in the file rnit/doc/fontserver/FSlib.doc (PostScript ver-
sion is mitlhardcopylFSProtocollfsproto.PS.Z).
"The X Administrator: Font Formats and Utilities," by Dinah McNutt and Miles O'Neal,
published in The X Resource, Issue 2, O'Reilly and Associates, Inc., Spring 1992.
Section 5.5 of this chapter also appeared as an article entitled "The X Administrator: Manag-
ing Font Servers," by Eric Pearce, published in The X Resource, Issue 3, O'Reilly and Asso-
ciates, Inc., Summer 1992.
140 The X Window System Administrator's Guide
6
Color
This chapter describes the mechanisms used to make color available to X
servers that support color. It covers both the RGB and the Xcms methods of
color management.
In This Chapter:
Color Specification in Release 4 and Earlier ....................................... 144
RGB Color Names ......................................................................... 144
Numeric Color Values .................................................................... 145
Adding Your Own Color Names (RGB) ........................................... 146
Fixing a Corrupted Color Database ................................................ 147
Color Specification in Release 5 (Xcms) ............................................ 147
Xcms Color Narnes ........................................................................ 148
Adding Your Own Color Names in Xcms ........................................ 150
Xcms Database Example ............................................................... 151
Device Profiles ............................................................................... 152
Related Documentation ..................................................................... 153
6
Color
Color can make a world of difference for a user. Not all X users have servers that support
color, but those that do need to be able to assign colors to their applications easily. The X
Window System provides a way for colors to be addressed using both familiar names (such as
red, blue, yellow) and obscure names (such as papayawhip, pale goldenrod, and dodgerblue).
These names are then converted to a numeric representation that the server understands.
Most color monitors are equipped with red, green, and blue electron guns, called "color
guns," as shown in Figure 6-1. These color guns can be run at different intensities, producing
different colors on the display screen. For example, the color "'red" could be displayed by
turning the green and blue guns off entirely and turning the red gun on at full capacity. The
red, green, and blue gun intensity values are called an RGB triplet.
enlarged pixel
Figure 6-1. Red, green, and blue color guns
Prior to X11R5, there was no built-in mechanism to address the lack of color consistency
between displays. The mappings of RGB triplets to color names were hard-coded directly on
the host system, using the RGB System. This meant that when a user requested "turquoise"
on a particular system, he would get the same gun intensities regardless of which X server he
was actually using. Since not all monitors are created equal, "turquoise" might look slightly
different depending on which display it was being viewed on. R5 addresses this problem
Color 143
with a new device-independent system called the X Color Management System, or Xcms.
Xcms allows colors to be specified in internationally accepted standards that are in wide use
outside of the computer field.
This chapter discusses both the RGB and Xcms systems of color specification.
6.1
Color Specification in Release 4 and Earlier
In Release 4 and earlier, the X Window System uses the RGB system for defining and dis-
playing different colors. MIT X11R4 defines 738 color names by associating names with
RGB triplets.
The list of colors available on your system can be retrieved using the showrgb client, or by
examining the file rgb.txt, usually in the directory/usr/lib/Xll or/usr/lib/Xll/rgb. (The con-
tents of the rgb.txt file is identical to the output of the showrgb client.) If you run the
showrgb client, be sure to use a pager, as there are screenfuls of output:
% showrgb I more
255 239 213 papayawhip
240 255 255 azure
105 105 105 dimgray
176 196 222 lightsteelblue
127 255 212 aquamarine
0 250 154 mediumspringgreen
238 232 170 pale goldenrod
...
Each line contains 4 columns. The first column is the red value, the second column is the
green value, and the third column is the blue value. Each value is an integer from 0 and 255,
inclusive.
The fourth column is the name assigned on your host system to that particular combination of
RGB values.
The color "black" is defined with "0'" values for each color gun, and "white" is defined with
maximum values for each gun.
255 255 255 white
0 0 0 black
For a visual list of colors, try the contrib client xcolors. It will read the RGB database and
display all the colors it finds.
6.1.1
RGB Color Names
You can specify colors for clients by using the -fg and -bg options on the command line, or
by setting the foreground and background resources for the client. For an xterm win-
dow with an aquamarine background and blue text, for example, you could use the following
command line:
% xterm -bg aquamarine -fg blue
144 X Window System Administrator's Guide
Alternatively, you could define the following resources:
xterm*background: aquamarine
xterm*foreground: blue
To become familiar with specifying colors, try picking a few colors and pass them to a client
to see the effect. If you get an error such as:
Warning: Color name "barfgreen" is not defined in server database
you probably chose a non-existent color or spelled a color name incorrectly.
There are several "aliases" provided for a single color--for example, the color "dark slate
grey" appears in rgb.txt with four different ways to name it:
47 79 79 dark slate gray
47 79 79 DarkSlateGray
47 79 79 dark slate grey
47 79 79 DarkSlateGrey
All of these names produce the same color.
6.1.2
Numeric Color Values
Clearly, every RGB value cannot have a name associated with it, but you can also specify
colors by using the RGB values directly. Any color resource starting with the "#'" character
is expected to have a number following it. The numbers are expressed in hexadecimal, with
one, two, three, or four digits for each value:
#RGB
#RRGGBB
#RRRGGGBBB
#RRRRGGGGBBBB
where "R","G", and "B" represent red, green, and blue digits. For example, all of the follow-
ing color specifications represent the same value:
XTerm* foreground: #f00
XTerm* foreground: #ff0000
XTerm* foreground: #fff000000
XTerm* foreground: #ffff00000000
XTerm* foreground: red
You would usually produce colors with complex hex numbers only if you used a resoul ce
editor such as OSF/Motif's mre,* props in Sun OpenWindows or the contrib client
xcoloredit,% as color names are much easier for humans to deal with.
*If you buy OSF/Motif 1.x source code from OSF, the mre program is included as "demo" program. There is a
README file, but no manpage.
%xcoloredit is available via anonymous ftp from export.lcs.mit.edu as/contrib/xcoloredit.tar.Z.
Color 145
A complete description of the Xcms color model is beyond the scope of this book, which
covers only the aspects of Xcms that affect administrators.
6.2.1
Xcms Color Names
The Xcms color system uses a color database on the client side, whereas the RGB system
database is used by the server (see Figure 6-2). All color names are looked up in a Xcms cli-
ent database before being passed onto the server.
Xcms introduces several new ways to specify color and retains all of the old ones. Some
examples of colors used in resources are:
*Background: RGBi: i. 0 / 1.0 / 0.0
*Foreground: NavyBlue
*Text*Background: CIElab: 0.0/. 54/. 90
*Text*Foreground: White
*Text*border: #ff00fc
Under the Xcms system, a color specification is checked as follows:
1. If it begins with the character "#", the rest of the color specification is interpreted as a
hexadecimal RGB value:
#<red value><green value><blue value>
This syntax is still supported, but for only backwards compatibility. You are encouraged
to use the newer uniform methods of numeric color specification.
2. If it contains the character ":", the prefix is checked to see if it is a recognized color
space and if it is, the rest of the color is taken as a value in that color space:
<color s19ace>:<color s19ace s19ecific encoding>
The color spaces described here all use the "/" character to delimit the numeric values
as in:
<color s19ace>: <val ue>/<val ue>/<val ue>
but this method is specific to the particular encoding scheme used.
3. If it contains neither the ":" or "#" character, it is assumed to be a color name that would
appear either in the Xcms client database or the RGB server database.
The database is composed of pairs of color names and corresponding numeric color specifica-
tions. The prefix on the number indicates the type of color system that is represented by the
number. The following is a list of the current color spaces and their prefixes in the Xcms
database.
Name
Various CIE formats
Tektronix HVC
RGB
RGB intensity
Prefixes
CIEXYZ, CIEuvY, CIExyY, CIELab, CIELuv
TekHVC
RGB
RGBi
148 X Window System Administrator's Guide
Color Specification
Client Side Server Side
I RGB I
I RGB
! :
Figure 6-2. Xcms vs. RGB color specification
Xcms stores its color database in a file called Xcms.txt, usually in/usr/lib/Xl 1. You can also
create your own Xcms database and set the environment variable XCMSDB to it:
% setenv XCMSDB /home/eap/mydatabase
This will be used instead of the system database.
The database is similar to the rgb.txt file in that it maps a color name to a numeric color spec-
ification, but differs in that it recognizes all the new color specification formats (color
spaces) in addition to RGB. It also supports color name aliases, as new names for an existing
color can be defined here. The order of the columns is also reversed compared to the RGB
database.
Here is a portion of a sample Xcms.txt file (anything outside of the lines
XCMS_COLORDB_START and XCMS_COLORDB_END is ignored.):
XCMS_COLORDB_START 0. i
red CIEXYZ: 0.371298/0.201443/0. 059418
green CIEXYZ: 0.321204/0.660070/0.159833
blue CIEXYZ: 0.279962/0.160195/1.210705
aquamarine CIEXYZ: 0.34672401/0. 54832153/0
grayO TekHVC: 0.0/0.0/0.0
grayl0 TekHVC: 0.0/i0.0/0.0
gray20 TekHVC: 0.0/20.0/0.0
mygreen aquamarine
myblack black
XCMS_COLORDB_mD
Color 149
you use the TAB character between the color name and the beginning of the color specifi-
cation. For example, to define the same color we created earlier for the RGB database:
UglyGreen TekHVC: 88. 00004/72.66564/38.25869
5. Unlike the RGB system, you don't have to rebuild the Xcms database into a binary form
after you edit it.
6.2.3
Xcms Database Example
To illustrate the use of the client-side database, let's pretend you are a clothing designer for a
mail order catalog. The marketing people have suggested that you choose interesting names
for the colors of the garments. Let's also assume that you do not want to change any system
files, only ones in your home directory.
First, pick some nice colors using a color editor (such as xtici) and record the Xcms color
specification in a file (maybe called FallCatalog.txt). Pick catchy names for each color you
design and put them in the Xcms database format described earlier:
#
# Ocean's Start Fall Catalog Colors, attempt #i
#
XCMS_COLORDB_START 0.1
Berry CIEuvY: 0. 34568/0.45488/0.23013
Port CIEuvY: 0. 37875/0.45637/0. 05117
Straw CIEuvY: 0.19325/0. 53761/0. 85767
Paprika CIEuvY: 0. 39617/0. 51446/0.20947
GrapeFruit CIEuvY: 0.19261/0. 52793/0. 85069
Pool CIEuvY: 0.15229/0.48240/0. 60646
To test out this particular database by yourself, you have to tell Xcms where to look for it:
% setenv XCMSDB -/FallCatalog. txt
Let's say your clothing design program is called autoclad. You can use the color names listed
in the Xcms database as resource specifications:
Autoclad*outfitl.pants: Pool
Autoclad*out fit i. tie: GrapeFruit
Autoclad*outfitl. shirt: Berry
You can also specify them on the command line:
% autoclad -fg Port -bg Paprika
If you want to try another set of colors, you can easily create another database and redefine
the XCMSDB environment variable to tell Xcms where to look for the new database
Color 151
6.2.4 Device Profiles
An integral part of Xcms is Device Color Characterization (DCC), or a Device Profile. This
is data that tells Xcms how to modify colors to fit your particular display device so they will
look as they should. The data may be specific to the size, brand, model, and the type of screen
on which you are displaying the color.
The DCC data is stored in properties on the screen's root window. Some servers are able to
automatically load the properties with data appropriate to the attached display(s). For servers
that are built from MIT source, you will probably have to load the DCC data by hand. The
xcmsdb client that comes with the MIT source distribution will load the DCC data from a text
file you supply.
There are some sample DCC files in the directory mit/clients/xcrnsdb/datafiles. Examine the
top portion of the file for a description of the monitor. This is from the file Sparc1-19.dcc:
SCREENDATA_BEGIN 0.3
NAME Sun SPARCstation 1 19" color monitor
PART_JqUMBER 3
MODEL Hitachi HM-4119-S-AA-0, July 1989
SCREEN_CLASS VIDEO_RGB
REVISION 2.0
COLORIMETRIC_BEGIN
XYZtoRGB_MATRIX_BEGIN
2.898873264142915
-i. 137294035493891
0. 052401943410025
XYZtoRGB_MATRIX_END
RGBt oXYZ_MATRIX_BEGIN
0.473564943660944
0.257273262661955
0. 028079972620921
RGBtoXYZ_MATRIX_END
COLORIMETRIC_END
INTENSITY_PROFILE_BEGIN 0 3
INTENS ITY_TBL_BEGIN RED 256
0x0000 0.000000000000000000
0x0101 0. 000000000000000000
-1.405253453722755
2.090468612762945
-0.208571555336254
0.335917466635681
0.659599528857479
0.116792496677968
-0.401375502033969
0.027097795177010
1.027214718138772
0.176180053794631
0.083127208480565
0.981397341912346
0xfdfd 0.975557917109458050
0xfefe 0.980162947219270220
0xffff 1.000000000000000000
INTENSITY_TBL_END
INTENSITY_PROFILE_END
SCREENDATA_END
The file contains values that are loaded into the root window properties and then plugged into
Xcms functions, converting each device-independent color value into a device-specific value
and vice-versa. You can load a DCC file in the same manner as you would load a .Xdefaults
152 X Window System Administrator's Guide
7
X Terminals
X terminals allowyou to put X on everyone's desk at relatively little cost. This
chapter covers the issues with buying and configuring X terminals on your
site.
In This Chapter:
Buying an X Terminal: What's What ................................................... 157
Monitors ........................................................................................ 157
Screen Size ................................................................................. 158
Resolution ................................................................................... 158
Depth .......................................................................................... 159
Refresh Rate ............................................................................... 159
Keyboard and Mouse ..................................................................... 159
X Server Software ......................................................................... 160
Special Features ............................................................................ 161
Memory Configuration .................................................................... 161
Network Interface .......................................................................... 162
X Terminal Setup ............................................................................... 163
Network Setup ................................................................................... 164
Getting the IP Address Using RARP ............................................... 165
Getting Information Using BOOTP .................................................. 165
Trivial File Transfer Protocol (TFTP) ................................................ 167
Setting Up the Network on the X Terminal ...................................... 168
Debugging Hints ............................................................................ 168
Error Messages ........................................................................... 169
Updating the arp Table ................................................................. 169
Name Server Problems ................................................................ 169
Fonts on X Terminals ......................................................................... 170
Font Formats ................................................................................. 170
The Font Server (R5) ..................................................................... 171
Choosing TFTP or NFS for Font Access ......................................... 171
Reading Fonts Using TFTP ........................................................... 171
Reading Fonts Using NFS ........................................................... 172
Configuring for the X Display Manager ............................................... 173
Configuring the X Terminal for xdm ................................................ 173
Configuring an R5 Host .................................................................. 174
Configuring an R4 Host .................................................................. 174
Configuring xdm Without XDMCP ................................................... 174
Setting Up Server Access Control .................................................. 175
Remote Configuration of X Terminals ................................................. 175
Remote Configuration on NCD Terminals ....................................... 176
Remote Configuration on Visual Terminals ..................................... 177
Remote Configuration on Tektronix Terminals ................................ 178
Reconfiguring the Host ...................................................................... 178
Increasing the Number of Processes ............................................. 178
Increasing the Number of Pseudo-ttys ........................................... 179
Increasing the Amount of Swap Space .......................................... 180
Swapping to a File ....................................................................... 180
Swapping to a Disk ...................................................................... 180
Related Documentation ..................................................................... 181
7
X Terminals
Only a few years ago, the average UNIX site was equipped with a few expensive computers,
connected to ASCII terminals on every desk. The X terminal is a newcomer in the market of
UNIX hardware. Today, the rapidly-growing market of X terminals demonstrates how X 11
has changed the landscape of UNIX sites.
An X terminal is as "dumb'" as an ASCII terminal, in that without a host computer to connect
to, it's nothing but a blank screen with a setup menu. But when properly configured, the X
terminal gives the user all the functionality of a workstation without all of its cost and admin-
istrative worries.
7.1
Buying an X Terminal" What's What
Today, there are more than two dozen vendors of X terminals. X terminals are sold with a
variety of screen sizes, sc:een depth and resolution, memory configurations, and software. If
you are buying an X terminal, you'll probably want to examine recent trade magazines for
evaluations of current products. (The market changes so quickly that X terminals tested for
this book will undoubtedly be outdated by the time you read this.) But for background of
what you're getting into, this section describes some of the areas where X terminals differ
and how they should factor in your decision.*
7.1.1
Monitors
The monitor is arguably the single most important part of the X terminal. The size, resolu-
tion, and depth of the monitor have a bigger impact on the perceived quality of the terminal
than anything else. Accordingly, the type of monitor also has the biggest impact on the price
of the X terminal as well.
The short story is that, when choosing the monitor for an X terminal, you will end up weigh-
ing the user's needs against how much money you have to burn. A user who spends the day
in data-entry applications might be satisfied with a monochrome 15-inch monitor, but users
*The comp.window.x newsgroup has a quarterly posting on X terminal manufacturers, including pricing informa-
tion.
X Terminals 157
7.1.1.3 Depth
7.1.1.4
The depth of an X terminal is determined by the number of bits per pixel it supports for color
information. A monochrome (a.k.a. static gray) monitor has one bit per pixel: each pixel is
either black or white, with no shades of gray. Most grayscale and color monitors have 8 bits
per pixel, although some may have as few as 2 or 4, and others may have as many as 12 or 24.
A color monitor with 8 bits per pixel can support as many as 28 = 256 simultaneous colors;
likewise, a grayscale monitor with 8 bits per pixel can support 256 shades of gray.
If you choose to buy an X terminal with a depth of only 2 or 4 bits per pixel, beware that
some X clients are dumber than others. Some of the less robust applications assume that if
you have a depth greater than 1, then you must have 8 bits per pixel. (These clients can also
cause problems on displays with 12 or 24 bits per pixel.)
Another possible complication is that, if you buy a grayscale monitor, you may find that some
applications think you have color. For example, on a 2-bit grayscale display, FrameMaker
will try to display windows using its color default of a blue background. The best way to
deal with this complication is to set up your application resources to use only black and
white; see Section 3.5.6 for an example of using xdm and display classes to set up different
defaults according to the display type.
Although you might be concerned that an X terminal with 8 bits per pixel may produce 8
times as much traffic as one with a monochrome display, this is seldom an issue in practice.
Most clients address only 1 bit per pixel, regardless of the depth of the display.
Refresh Rate
The refi'esh rate of a monitor is the frequency that the screen is redrawn. If the screen is
refreshed too slowly, it may be noticeable to users and quickly cause eye-strain. In general, a
refresh rate of less than 70 Hz is considered to be too slow for daily use.
7.1.2
Keyboard and Mouse
There are several different types of keyboards available for X terminals. Since there are few
things more frustrating to users than having to use a keyboard they are unaccustomed to,
choose the keyboard carefully. DEC users are used to different key configurations than both
Sun users and PC users. Users have different ideas of what a "UNIX" keyboard is--some
users think it's a Sun3 keyboard, others think it's a Sun4 keyboard, and some think it's a
DEC keyboard. (What NCD calls a UNIX keyboard is actually a DEC keyboard.)
Keyboards differ in things like the position of the tilde and escape keys, the position of the
Alt key(s), and the positions of the CTRL and CAPS LOCK keys (which are sometimes
reversed, to the great frustration of the user). Most X terminal manufacturers also have inter-
national keyboards available.
Almost all X terminals come with a 3-button mouse. The only deviations between the mouse
distributed with X terminals is whether it's a mechanical mouse or an optical mouse. Optical
X Terminals 159
7.1.4 Special Features
As the X terminal market has grown, X terminal capabilities have expanded as well.
Local Clients
Some X terminals can run X clients locally. Window managers are the most
popular clients to run locally, and can make quite an impact on perfor-
mance. Note, however, that the more you want your X terminal to do, the
more memory you'll need. And remember that the whole idea of X and the
X terminal in particular is to have cheap desktop access to remote comput-
ing-so don't go wild on local clients unless you have real reasons for
keeping network traffic at a minimum. For example, if you're running the
X terminal over serial lines, you may want to have a local window manager.
In any event, the local window manager will be more responsive, but you
have to live with the X terminal vendor's choice of a window manager.
Backing Store
Almost all X terminals are capable of backing store. Backing store allows
an X server to keep an image of obscured windows in memory so they can
be redrawn quickly and without network overhead when exposed. To use
this feature, however, terminals need to have some extra memory installed,
or they may produce an error message (or crash). Some terminals give the
option of using backing store only when there is enough memory available;
enable this option if it is provided with your terminal, since it might help
performance. Beware, however, that when the X terminal later needs more
memory, it may not consider the memory set aside for backing store to be
fair game.
Remote Configuration
All X terminals can be configured using a local setup menu. Some X termi-
nals, however, also provide the ability to read their configuration parame-
ters from a file on a remote host at boot time. This becomes a great advan-
tage when you have many X terminals to maintain--it's always easier to
edit files on-line than to visit every office on your site after hours. See Sec-
tion 7.6 for more information on remote configuration.
Peripheral Support
Many X terminals allow you to hang printers off their serial port. In addi-
tion, some X terminals made by IBM have a port for connecting a hard
drive directly to the X terminal. The hard drive is used for "'swapping" large
images, reducing memory requirements.
7.1.5
Memory Configuration
X terminals range from 512K of memory to 72MB. As usual, what you should get depends on
what you plan to use it for. If you plan to run graphics-intensive applications, you'll want
more memory for a reasonable display. Remember that the more pixels on the screen and the
greater the depth of your terminal, the more memory you'll need.
X Terminals 161
In addition, many of the fancier features available for X terminals can be memory-intensive.
X terminals that can run clients locally will need more memory to support them. If you want
your X terminals to do backing store, that will also require more memory.
Although many X terminals are smart enough to cut down on backing store when memory
gets low, beware that some X terminals might crash if they run out of memory. If this hap-
pens, it's a good idea to disable backing store completely, if you can.
Some X terminal manufacturers use their own proprietary memory. If you think this may
turn into an issue when it becomes time to upgrade the memory, you might prefer to stick to a
manufacturer that uses industry-standard SIMMs.
7.1.6
Network Interface
Most X terminals come with built-in Ethernet and TCP/IP support, and most also provide a
serial interface. Some X terminals support the IBM Token Ring beneath TCP/IP. DECnet is
supported by some X terminals as well.
Most X terminals support SLIP for running X over a modem line. X terminals supporting PPP
for modem lines are just now coming to the market. In addition, some X terminal manufac-
turers have their own serial line protocols that are more efficient than SLIP, such as NCD's
Xremote and Serial Xpress by Tektronix.
X Terminal Alternatives
There are a few alternatives to buying X terminals. If you already have PCs available,
there are many X servers that run on PCs. Although PC X servers are slower than X ter-
minals and have inferior resolution, they are often sufficient for "occasional" X users,
and can be much cheaper (depending on how "souped-up" your PC is already). See
Appendix C for more information on PC X servers.
Another alternative is to use diskless workstations instead of X terminals. New diskless
workstations are significantly more expensive than X terminals, and create more admin-
istrative overhead. But if they have enough RAM, diskless workstations are generally
faster and reduce both network traffic and the load on the central host, since all (or
most) X clients can run locally.
You can also turn an older workstation into an X terminal by installing a stripped-down
kernel running only the X server. See Section A. 10 for more information on how this is
done.
162 X Window System Administrator's Guide
7.2 X Terminal Setup
Assuming you now have an X terminal, you probably want to make sure it works before you
do any serious configuration. For an X terminal running over TCP/IP, this means you have to
perform the following steps. These steps are described in more detail later in this chapter.
Please note that X terminals may have different procedures where noted.
1. Configure the local name server to include a new IP address for the new machine. If you
aren't already familiar with this procedure, see Section A.6 for more information.
2. Install the fonts on the host machine.
The X terminal should have arrived with a font tape. Unless both the X terminal and the
host support the R5 font server (and to this date, no X terminals do), you need to install
the fonts as documented by the X terminal vendor.
Where you install your fonts depends on how you intend for them to be read. Some X ter-
minals can read fonts via NFS; all X terminals can read fonts via TPTP. Although it may
be preferable to read fonts via NFS, it's a bit harder to set up. For easy setup, therefore,
install the fonts in/pboot/usr/lib/Xll/vendorConts. (You can move the fonts elsewhere
if and when you switch to NFS.) See Section 7.4 for more information on font manage-
ment for X terminals. See Section 7.3.3 for more information on TPTP.
If the X terminal has support for the R5 font server, and you have an R5 machine running
the font server, you don't need to install new fonts. You can just set up the X terminal to
use the font server, specifying the name of the font server (consisting of transport, host,
and port number). Note that some X terminals may use the term "font server" differ-
ently--i.e., as the host that the X terminal reads its fonts from, but without actually using
the R5 font service protocol.
3. Install the X server.
If the X server is built into ROM, you can skip this step. Otherwise, the X server software
was probably sent on a tape, to be copied onto the host and read by the X terminal at
startup via TFTP. Copy the X server program to the proper directory on the host machine
(probably /pboot) and make sure that the TPTP daemon is running on the host. (See
Section 7.3.3 for more information on TFTP.)
Next, tell the X terminal where to download the server from. At this point, you need to
consult your documentation; however, for an example, our NCD X terminals use a com-
mand line similar to the following on their boot monitors:
> bt Xncdl6 140.186.65.137 140.186.65.25
The X terminal will boot using the file /(-tpboot/Xncdl6 on the host with IP address
:1.40. :1.86.65.25. The X terminal will use IP address :1.40. :1.86.65. :1.37.
After the X terminal is initially booted, you can configure its setup menu so that it can
automatically boot at power up. Alternatively, if the X terminal uses BOOTP, then you
can enter this information into/etc/bootptab; see Section 7.3.2 for more information.
X Terminals 163
4. Now it's time to connect to a host. If you don't have R4 or R5 xdm already running on a
host machine, see Section 3.3 for information on how to start it up.*
Once you have xdm running on a host machine, some X terminals arrive pre-configured to
do a Broadcast query. Those terminals should receive the login box immediately once the
X terminal has been supplied a broadcast address. If there's some complication, you can
configure the X terminal to query the host running xdm directly. See your vendor's docu-
mentation to learn how to configure the terminal to use XDMCP.
Connecting with Telnet
If you have trouble connecting using xdm, test the connection using telnet. Most X ter-
minals are supplied with a telnet window for starting an initial client. The telnet window
may be part of the setup menu, or it may be a local X client. See your vendor's docu-
mentation to learn how to access the telnet window.
Once you have a telnet window, try to connect to a host using its IP address. If you can't
connect, there's either a cabling problem or there's something wrong with the network
configuration of the X terminal. If you can connect, log in and type "who am i'" to
confirm that you're resolving to the correct hostname. Then set the DISPLAY environ-
ment variable to the hostname, and start an initial xterm.
imui@ruby 26% who am i
ruby:imui ttyp6Aug 20 18:18 (ncd9.ora.com)
imui@ruby 27% setenv DISPLAY ncd9 .ora.com: 0
imui@ruby 28% xterm &
If the telnet session ran as a local client, the new xterm should pop up immediately. If it
ran as a subsession of the setup menu, you have to suspend the setup menu to access the
xterm window.
If an X client can connect to your X terminal this way, then there must be something
wrong with your xdm configuration. See Chapter 3 for more information.
7.3 Network Setup
Now for the details. To configure the X terminal for the network, you first need to set up the
hosts database. If you aren't already familiar with how to do this on your site, see Section A.6
for more information.
The hosts database maps hostnames to IP addresses. The next issue is how the X terminal
knows its IP address. Some X terminals can save their IP address in NVRAM (Non-Volatile
RAM). Other X terminals, however, have no way of storing their IP addresses. Instead, they
have to depend on the host to tell them their IP address at boot time, using RARP (Reverse
Address Resolution Protocol) or BOOTP (Bootstrap Protocol).
* If you have configured the Xaccess file to restrict xdm access to specified hosts, you may have to add the X terminal
to the list; see Section 7.5.2 for more information.
164 X Window System Administrator's Guide
Another issue, for X terminals that boot over the network, is how the terminal accesses its
server binary. The server image for these X terminals resides on a host somewhere on the net-
work, and the X terminal needs to be able to read their boot image using some protocol, gen-
erally TFTP (Trivial File Transfer Protocol).
7.3.1
Getting the IP Address Using RARP
The way RARP works is that the host machine keeps a table of Ethernet addresses and the
corresponding IP addresses. This table is kept either in/etc/ethers or in the ethers database if
the host uses NIS. The rarpd daemon waits for broadcast requests from X terminals and other
diskless machines. In its broadcast, the X terminal supplies its Ethernet hardware address
(which is built into their Ethernet interface). The rarpd daemon on the host responds with its
IP address on that network.
If you don't run NIS, adding a new RARP entry is just a matter of editing /etc/ethers.
/etc/ethers has a simple syntax similar to /etc/hosts. You can get the Ethernet hardware
address of the new X terminal from the monitor at boot time. NCD X terminals, for example,
print a message similar to the following:
Boot Prom V2.1.0
Testing available memory 3.0 Mbytes
Network controller passed 00:00:A7:I0:II:BF
Keyboard controller V2.00
To add this terminal as ncd4. add the following line to/etc/ethers (convert the letters in the
hex number to lowercase):
00:00:a7:10:ll:bf ncd4
The RARP daemon uses the ethers database along with the hosts database to determine the X
terminal's IP address. Note that for RARP to work. you must have an entry for the new X ter-
minal in the hosts database.
If you run NIS. see Section A.7 for information on how to add an entry to the ethers database.
7.3.2
Getting Information Using BOOTP
BOOTP is similar to RARP, but it gives a bit more information. RARP will tell the X terminal
only its IP address. BOOTP can be set up to tell the X terminal its subnet mask, name server
host, and what machine and pathname to download the X server from.
The BOOTP daemon bootpd uses a file called /etc/bootptab. The BOOTP protocol has
changed over the years, as has the syntax for bootptab. Standard BOOTP (RFC951) uses a
single-line entry per hardware address, to supply the IP address and the name of the boot file
The first two uncommented lines contain, respectively, the directory in which the boot files
reside, and the default boot file. For example:
#
# default boot directory
#
X Terminals 165
/t ftpboot : /
# default bootfile
Xncdl9
# bootp clients --
# host htype haddr iaddr bootfile
ncd4 1 00:00:A7:I0:II:BF 140.186.65.13 Xncdl 6
The first field is the hostname of the BOOTP client (in this example, ncd4). The second field
is the hardware type, with l=Ethernet. The third and fourth fields represent the hardware and
Internet addresses. The fifth field is the name of the boot file to use in the specified directory.
(The ":/" following the default boot directory/pboot is needed for systems that run TFTP
in restricted mode.)
"Extended" BOOTP (RFCI048 with CMU extensions) has syntax similar to that of
/etc/termcap and /etc/printcap. A single BOOTP definition is in two parts, a "global" part
used for all machines and a part that is particular to the new machine. The "global" part must
appear first, and might resemble the following:
global : \
: sm=255.255.255.0 : \
:ht=ethernet : \
: ds=140.186.65.25 : \
:ns=140.186.65.25 : \
: to=18000 : \
:hn:\
:vm=rfc1048:
The client-specific part might then resemble:
ncd4 : \
: hd=/t ftpboot : \
:bf=Xncdl6 : \
: tc=global : \
:ha=0000A71011BF: \
: ip=140.186.65.13 :
The two-character capabilities have the following meanings:
bf Boot file for client machine
ds IP address of Internet domain name server host
ha Hardware (Ethernet) address
hd Home directory for boot files
hn Host name
ht Hardware type
-ip Internet address
ns IP address of UDP name server host
sra Subnet mask
tc Append specified entry
to Time out, in milliseconds
vra Version number of BOOTP protocol on the host
The hn entry should be set to the hostname of the terminal. For the g'loba] entry, hn
should be left blank (as shown above).
166 X Window System Administrator's Guide
7.3.3 Trivial File Transfer Protocol (TFTP)
An X terminal needs to use some simple transfer protocol to download its server software.
Most X terminals use TFTP as their transfer protocol of choice. Since TFTP does not require a
user name or password in order to allow a connection, we strongly recommend running tftpd
in "restricted" or "secure" mode. Using restricted TFTP, the server code must be copied to
the TFTP home directory--usually/tftpboot--and the X terminal needs to be told which host
to boot from. When the X terminal connects to the host via restricted TFFP, the host's TFTP
server does a chroot to/tftpboot and reads files relative to the new root.
The TFFP server is usually run from inetd, which is started at boot time from /etc/rc or
rc.local, inetd manages several daemons listed in/etc/inetd.conf; requests for those services
are routed through inetd, which then starts up the appropriate daemon.
TFFP is often disabled from inetd.conf because it is considered a potential security hole. If
you're not sure if TFTP is active, first make sure that inetd is running, and if it is, then look in
the configuration file for inetd (either/etc/inetd.conf or/etc/servers) to make sure TFTP is
called. In/etc/inetd.conf, the line starting TFTP should look something like the following:
tftp dgram udp wait root /usr/etc/in.tftpd in.tftpd -s /tftpboot
In/etc/servers, it should look like:
tftp udp /usr/etc/in.tftpd -s /tftpboot
(The -s option says to run TFTP in "secure" mode, so that machines connecting via TFTP can
read files only in/rftpboot. On some systems this option appears as -r, for "'restricted" mode.
Since TFTP is such a security hazard, we do not recommend using it except in restricted
mode; otherwise, anyone on the network can get any file on your host!)
.
You can also test if TFTP is running by trying it manually:
imui@reno % tftp ruby
tftp> status
Connected to ruby.ora, com.
Mode: netascii Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get Xncdl6
Received 846244 bytes in 8.4 seconds
tftp>
(After quitting TFTP and confirming that the file was properly retrieved, you probably want to
remove it from the directory it was copied to.)
Test if TFTP is running in restricted mode by requesting a file that isn't in/tftpboot:
tftp> get /etc/motd
Error code i: File not found
tftp>
Another possible error message on some systems is:
tftp> get /etc/motd
Transfer timed out.
tftp>
X Terminals 167
If this command is successful but "hostname : 0" was not, then the problem could be with the
name server configuration, with the NIS configuration, or with the resolver configuration file
( /etc/resolv.conf).
7.4 Fonts on X Terminals
Many X terminals have some fonts built into the server, but you usually need to read fonts
from the host machine as well. Most X terminal manufacturers supply a "font tape" with
their product, with fonts that need to be read on your host system. At minimum, the font tape
that comes with the X terminal contains vendor-specific .snfor .pcfversions of the BDF fonts
supplied by the MIT source distribution of XI 1. Many vendors also supply some additional
fonts.
We said earlier that for easy set up, just put the fonts in/(f-tpboot. But for real setup, you prob-
ably want to think a little harder about where to put the fonts and how they should be read.
7.4.1
Font Formats
Every X server vendor supplies its own font tree for that server. Each font tree takes approxi-
mately three to four megabytes of disk space. If you have X terminals manufactured by three
different vendors, therefore, you're using up 9 to 12 megabytes just to hold their fonts--not
to mention the fonts for running X on the local display of the host machine.
Luckily, you can often get away without keeping multiple fonts on line. For .snffonts, there
are four ways that fonts for different servers might deviate: the byte order, the bit order, the
scanline unit padding, and the glyph padding. In most cases, the scanline and glyph padding
for a server is 1 (the default), so you seldom have to consider those variables for incompati-
bilities (although if you find that your characters are drawing over one another, you're proba-
bly using fonts compiled with a different padding). The byte order and bit order generally go
hand-in-hand. So for most cases, you really need to keep at most only two sets of .snffonts
on line: one for X terminals that number bytes starting at the high end (big endian), and one
for X terminals that number bytes starting at the low end (little endian).
PCF fonts don't have byte-order incompatibilities, so if all your X terminals support PCF
fonts, you might be able to get away with a single set of fonts.
For example, NCD X terminals are big endian, so if they are reading fonts from a Sun works-
tation (a big endian machine), chances are that they can read and display the .snffonts com-
piled for the local server without a hitch. The bdftosnffont compiler defaults to the byte order
on the host machine, so there should be no problem in font compatibility between Sun and
NCD X servers. In this situation, you would not have to keep the NCD fonts on line, but
could have the X terminals read the Sun-compiled .snffonts. The easiest way to do this is by
linking the standard X11 font directory to the server-specific font directory. For example:
# mkdir lusrlliblX11Incd
# in-s /usr/lib/Xll/fonts /usr/lib/Xll/ncd/fonts
170 X Window System Administrator's Guide
(You may still want to use the fonts supplied with the X terminal, since they may be more
sophisticated than those on the core MIT distribution, but that's up to you.)
HDS X terminals are little endian. This means that the fonts on a Sun are not compatible with
those supplied by HDS (although fonts on a VAX are).
There is another hitch. Although each of the factors for font compatibility can be overridden
on the bdftosnf command line, the options for a different bit or byte order will apply only to
the glyph section of the font--the header section will still be in the bit and byte order of the
host. So HDS supplies its own font compiler, bdftohds, since they cannot rely on the fonts
compiled by bdftosnf on a big endian machine. Many X terminal manufacturers supply their
own compiler to convert .bdffonts to their own format.
Some X terminals (e.g., those made by Visual) can read fonts in either byte order. Further-
more, X terminals are beginning to support the .pcf font format, which does not have byte-
order incompatibilities. Tektronix is one vendor that currently sells X terminals supporting
both .pcf and .snf formats.
7.4.2 The Font Server (R5)
With Release 5 of X 11, a lot of the font confusion is cleared up with the font server. R5-com-
patible X terminals (of which there are currently none) supply a field in the setup menu for
the address of the font server. If your X terminal provides this functionality, and you have an
R5 host available to run a font server, run (do not walk) to Section 5.5 to learn how to enable
the font server on the host. You have been spared a giant headache.
Some X terminal vendors, such as Visual Technology, have their own proprietary font server
mechanism. Although they are unlikely to be compatible with the R5 font server, these pro-
prietary font servers are worth looking into if running the R5 font server is not an option.
7.4.3
7.4.3.1
Choosing TFTP or NFS for Font Access
Assuming that your X terminal does not support the font server introduced with X11R5, you
are stuck with either TFTP or NFS. (Some X terminals also support using FTP, but you're
probably better off not opening that can of worms.)
Reading Fonts Using TFTP
It's easy to install fonts to be transferred with TFTP. But since TFTP doesn't provide any user
authentication, you need to decide whether you want to run it in restricted mode or not, and
either option has its downside.
If you run TFTP in restricted mode, you have to put the font files in the TFTP home directory
tree (usually /tftpboot). When the X terminal connects to the host using TFTP, it will do a
chroot to/tftpboot and then look for the fonts relative to that directory--so, for example, an
NCD X terminal will effectively look for its fonts in/tftpboot/usr/lib/Xll/ncd/fonts.
X Terminals 171
7.5 Configuring for the X Display Manager
If you're using X terminals, you probably want to control them using the X Display Manager
(xdm). There are other ways of starting sessions, such as logging on via telnet and starting cli-
ents manually, or using the rexec (remote execution) capabilities supported by some X termi-
nals. But if both the host system and the X server support the XDM Control Protocol (R4 or
later), then you should definitely use xdm.
If you aren't running xdm at all, read Section 3.3 for more information to get it started. See
Section 3.1 for some background information on XDMCP.
7.5.1
Configuring the X Terminal for xdm
X terminals
Direct
Indirect
Broadcast
generally supply three different ways of running XDMCP:
Calling XDMCP "directly" requires that the name or IP address of the host run-
ning xdm be supplied. The X terminal will request an xdm login box from that
host and from that host only.
Calling XDMCP "indirectly" requires that the name or IP address of the host be
supplied. The host is then expected to pass the XDMCP request to another host or
group of hosts. For a host running vanilla X11R4, an "'Indirect" query is treated
the same as a "Direct" one. For a host running X I 1R5, it can be configured to
respond to an "Indirect" query by forwarding the request to another host or by
offering a list of hosts for the user to choose from. See Section 3.5.3 for infor-
mation on how to configure how "Indirect" queries are treated on an R5 host.
Calling XDMCP in "broadcast" mode does not require a hostname or address, but
means that the X terminal sends out a general request for an xdm login box
across the subnet. For most X terminals, the first host that responds is the one
that is used. For some smarter X terminals, the X server gathers responses from
all hosts on the local network and allows the user to choose one to start up on.
If an X terminal doesn't connect to any host running xdm under a Broadcast
query, but can connect to hosts via a Direct or Indirect query, then there is proba-
bly something wrong with the Broadcast address that you have configured the X
terminal to use. See your vendor's documentation for information on how to set
the Broadcast address.
Note that Broadcast queries are restricted to the local network or subnet. Unlike
Direct and Indirect queries, you cannot use a Broadcast query to access a host
through a gateway.
X Terminals 173
7.5.2 Configuring an R5 Host
If the host is using Xl 1RS, then you need to make sure that the new X terminal is given per-
mission to connect to xdm on the host. The/usr/lib/Xll/xdm/Xaccess file controls which X
servers can connect to the host. The Xaccess file also controls how Indirect queries are dealt
with on that host.
For example, to add ncd4 to the list of X servers that can connect to the host, you can simply
add the line:
ncd4. ora. cc[n
Note that the Xaccess file accepts wildcards. So ncd4 would already have permission to con-
nect to the host if there were a line such as:
*. ora. cc[n
See Section 3.5.3 for more information on how to configure the Xaccess file.
7.5.3
Configuring an R4 Host
If the host is using X11R4, you don't need to make any changes on the host for a XDMCP-
compatible X server to use xdm--you just need to configure the X terminal to use XDMCP.
7.5.4
Configuring xdm Without XDMCP
If either the X server or the host is not XDMCP-compatible (R3 or earlier), then you need to
make an entry in the/usr/lib/Xll/xdm/Xservers file in order to manage the X terminal using
xdm. For example, you can add the line:
ned4. ora. cc: 0 foreign xxx
(The "xxx" is required because although R3 xdm ignores the third field in a foreign entry, the
field cannot be left empty.)
See Section 3.5.2 for more information on how to configure the Xservers file.
The problem with using pre-XDMCP xdm is that, should the X terminal be turned off for any
reason, xdm needs to be restarted before it will know to reconnect to the terminal. If you have
no choice but to use an R3 host system, you might be interested in X terminals that offer their
own proprietary protocol for controlling xdm. X terminals made by Visual, for example, pro-
vide XDSXDM for controlling Release 3 xdm for their XDS terminals.
174 X Window System Administrator's Guide
7.5.5 Setting Up Server Access Control
As described in Chapter 4, there are two current mechanisms for restricting clients from
accessing a particular server: host-based access control and user-based access control.
Host-based access control is controlled entirely by the server. Some X terminals allow you to
keep a list of hosts that you want to allow access from, using the setup menu on the X termi-
nal. However, it's better to use user-based access control if you can.
User-based access control is controlled both by the server and by the X Display Manager.
Check your X terminal documentation to see if user-based access control is supported. If it is,
then check if xdm is set up to use user-based access control on X terminals. You can deter-
mine this by examining the configuration file for xdm, usually/usr/lib/Xll/xdm/xdm-config.
The following line:
Di splayManager * authorize: true
specifies that authorization is being used for all X servers managed by xdm on that host.
Host-based access control overrides user-based access control. This can cause complications
when your X terminal supports both types of server access control. Contrary to what your
instincts might be, to enable user-based access control you should make sure that host-based
access control is also enabled--disabling host-based access control may effectively result in
all hosts having access to the server, regardless of any user-based access control in effect. If
you want to use user-based access control exclusively, you should make sure host-based
access control is enabled but the list of hosts that are allowed access is empty. See Section
4.2.4 for more information.
See Chapter 4 for more information on security issues and Xl I.
7.6 Remote Configuration of X Terminals
Many X terminals provide a facility called remote configuration. Our experience with
remote configuration has been very positive, so we recommend that if you have more than
one of a single type of terminal, you should consider using remote configuration.
With remote configuration, the parameters in the setup menu can be defined in a file to be
downloaded by the X terminal when it boots. What this does for the administrator is that it
makes it easy to change a given field--the administrator no longer needs to visit each X ter-
minal on the site after hours and change their setup menus manually, but can simply edit the
remote configuration files for each terminal. The next time the terminal is booted, the new
values will be read.
Another advantage of remote configuration is ease in troubleshooting. The danger of user-
accessible setup menus is that a user might unknowingly change something that disables their
terminal. Many terminal manufacturers provide a mechanism for "locking" the current setup
menu settings with a password--so that only administrators with the password will be able to
make further changes to the X terminal configuration. Using remote configuration, however,
X Terminals 175
the X terminal is configured at boot time from a file residing on a host. If a terminal's set up
is corrupted, therefore, the user can restore its settings just by rebooting the X terminal.
Another advantage of using remote configuration is that it can help you get out of a jam if for
some reason your current configuration is so corrupted that you cannot even access the setup
menu. If you are using remote configuration, you can just edit the file and then reboot the ter-
minal.
Each X terminal vendor has its own syntax for remote configuration. To give you an idea of
what they do, here's a description of how remote configuration is handled by various X ter-
minal vendors.
7.6.1
Remote Configuration on NCD Terminals
On NCD X terminals with remote configuration turned on, each X terminal at boot time looks
for a configuration file whose name is derived from its IP address, in hexadecimal. For
example, an NCD X terminal with IP address :1.40. :1.86.65. :1.3 would look for a configura-
tion file called 8CBA410D in the directory /usr/lib/Xll/ncd/conJigs. (See Section A.9 for
information on how to get the hexadecimal equivalent of an IP address.)
If the configuration file for its specific IP address doesn't exist, the X terminal then looks for
a configuration file called ncd_std in the same directory.
If you are using NFS to read the remote configuration file, the X terminal needs to have read
access for the/usr/lib/X11/ncd/conJigs directory on the host. If you are using restricted TFTP
to read the remote configuration file, the configuration files need to be installed in the
/tftpboot/usr/lib/Xl l /ncd/configs directory.
The following is a portion of the remote configuration file used by our NCD X terminals:
background = white
backing-store = by-request
baud-I = 9600
boot-at-reset = yes
boot-server = 140.186.65.25
broadcast-address = 140.186. O. 0
data-bits-i = 8
default-cterm-host = O. 0
default-domain = ora. cc
...
virtual-terminal-at-reset = xdm
xdm-access = direct
...
xdm-server = 140.186.65.25
Now for the good news: NCD doesn't require you to write it all in by hand. Instead, you can
set up a single terminal, make sure it works to your liking, and then download its parameters
to a file using the Utilities menu.
The next problem is how to tell the terminal to read the remote configuration file the first
time. There's a logistical problem involved: NCD X terminals support NFS only if they're
using remote configuration, so if you want to read the actual configuration file over NFS, you
176 X Window System Administrator's Guide
7.6.3 Remote Configuration on Tektronix Terminals
For Tektronix X terminals, the syntax for remote configuration files consists of commands
followed directly by parameters. Lines starting with "#" are taken as comments. The remote
configuration file is read using the same file access method that is used for downloading the
server image (i.e., TFTP), so remote configuration is not available for terminals that boot from
ROM.
Tektronix remote configuration files need to be thought of somewhat differently, since the
terminal executes each line as a command and doesn't just store it as a variable definition.
This means that you have to be careful about the sequence of commands. For example, you
need to declare a host's address using the ip_host_table command before you can use its
hostname for thefile_host_name_l command.
The sample is a portion from a configuration file for Tektronix X terminals:
ip_host_table 140.186.65.25 ruby
ip_host_table 140.186.65.35 opal
fi le_host_name_l ruby
file_access_l TFTP
7.7 Reconfiguring the Host
When you replace an ASCII terminal with an X terminal, you're giving a user a whole new
world of functionality. You are also allowing that user to use five to ten times the resources
he or she used previously. Whereas a user on an ASCII terminal might run maybe one or two
processes in the background (which usually exit on their own), a user on an X terminal can
go hog wild, running an xclock, xbiff, multiple xterms, a mail reader, a news reader, etc.--all
this before starting actual "work." In addition, xdm forks a copy of itself for every display it
manages.
In this section, we include an example of how to configure a SunOS system to support more
users, processes, pseudo-ttys, and swap space. Refer to your vendor's manual for information
on how to reconfigure the kernel on your system.
7.7.1
Increasing the Number of Processes
When you set up a site for running multiple X terminals, you probably want to increase the
number of processes that the host can handle at once. If the system runs out of processes, it
may give an error:
% is
No more processes
%
or commands may fail silently.
178 X Window System Administrator's Guide
To increase the number of processes on SunOS 4.x, edit the kernel configuration file. The
name of this file follows the form /sys/arch/conf/kernel_name. For our Sun4, this file is
/sys/sun4m/conf/RUBY. Edit the rnaxusers line as appropriate. For example, change:
maxusers 8
to:
maxusers 48
Then rebuild the kernel and reboot:
# /etc/config RUBY
# cd ../RUBY
# make
# cp /vmunix /ovmunix
# cp vmunix /
# sync; reboot
Be careful to follow the guidelines in vendor US manuals in increasing maxusers. If you
increase it beyond the specified upper limit, you run the risk of wasting resources.
7.7.2 Increasing the Number of Pseudo-ttys
Another consideration is the number of pseudo-ttys, or pt)'s, a host can handle. A typical
symptom of running out of ptys is an immediate logout when trying to open a new connec-
tion:
% rlogin rock
Pas sword:
SunOS Release 4.1.2 (ORAWEST) #3: Wed Jul 29 12:50:14 PDT 1992
TERM= (xterm)
Connection closed.
On SunOS, edit the same kernel config file/svs/arch/conf/kernel_natne. Find the line for
devices.
pseudo-device pty # pseudo-tty' s, also needed for SunView
The default entry is for 48 ptys. Appending a number suffix changes it accordingly:
pseudo-device pty128 # pseudo-tty's, also needed for SunView
We have now set up the system to support 128 pt3's. (See your documentation to learn what
the maximum number ofptys on your system is. SunOS 4.1.2 can handle up to 256 pO's.)
Next, make more ptys in/dev for each bank of 16 prvs. Since we have expanded to 128 pt3"s,
this would be 128 + 16 = 8 banks of p.tys in total. The p,ty banks are numbered from 0, so
you'd remake banks 0 through 7:
# cd /dev
# MAKEDEV pty0 ptyl pty2 pty3 pty4 pty5 pty6 pty7
# is pty?? I wc -i
128
Then rebuild the kernel and reboot as shown above.
# /etc/config kernel name
X Terminals 179
Finally, run swapon and then check the size ofthe swap space again:
# swapon -a
Adding /dev/sd2b as swap device
# /etc/pstat -T
163/2758 files
829/1223 inodes
74/778 processes
14488/127944 swap
The swap space has doubled to approximately 128MB.
7.8 Related Documentation
Articles on X terminals appear frequently in periodicals serving the X and UNIX community.
Advertisements (in periodicals that accept them) are also very helpful for keeping track of
the latest and greatest X terminal technology.
In addition, a list of X terminal manufacturers is posted quarterly to the comp.windows.x
newsgroup.
The following Nutshell Handbooks might come in handy: Managing NFS and NIS by Hal
Stem; Essential System Administration by AEleen Frisch; TCP/IP Network Administration by
Craig Hunt; and DNS and BIND by Cricket Liu and Paul Albitz.
X Terminals 181
8
Building the X Window System
By necessity, you can't do anything with X until it is installed on your system.
This chapter tells you how to build and install X.
In This Chapter:
Installation Issues .............................................................................. 185
Should You Use MIT Source? ........................................................ 185
Types of Vendor-supplied X Distributions ....................................... 186
X from Your OS Vendor ............................................................... 187
X from a Third Party .................................................................... 187
X Source Code from MIT ............................................................... 188
Complete or Client-only Distribution? ............................................. 189
Installing Multiple X Releases ........................................................ 189
Source Preparation ............................................................................ 191
Do You Have Enough Disk Space? ................................................ 191
Is Your Platform Supported? .......................................................... 192
Applying OS Patches ..................................................................... 194
Applying X Patches ........................................................................ 194
Creating a Link Tree (Optional) ...................................................... 196
Simplest Case Build ........................................................................... 197
Host Problems ................................................................................... 198
Disk Space .................................................................................... 198
Changing the tmp Directory Using TMPDIR (Ultrix and HP-UX) ..... 199
Changing the tmp Directory Using -temp (SunOS) ....................... 200
Shared Library Installation (SunOS) ............................................... 200
NFS Installation ............................................................................. 201
NFS Installation Without Root Access .......................................... 201
Installation Over the Network (rdist) ............................................. 203
Installing the termcap or terminfo Definition for xterm ..................... 203
Simple Configuration .......................................................................... 204
Configuration Parameters .............................................................. 205
site.def ........................................................................................ 205
The ProjectRoot Flag ................................................................... 207
The Platform Configuration File (platform.cf) ................................ 208
Configuration Example 1 ................................................................ 210
Configuration Example 2 ................................................................ 211
Configuration Example 3 ................................................................ 212
Configuration Example 4 ................................................................ 212
Configuration Example 5 ................................................................ 213
Other Build Flags ........................................................................... 213
xterm Build Flags ......................................................................... 214
Building Programs After X Is Installed ................................................ 214
xmkmf ........................................................................................... 214
Include Files .................................................................................. 215
Libraries ........................................................................................ 216
More About imake ............................................................................. 216
The make Program ........................................................................ 216
The C Preprocessor ....................................................................... 217
Imake Syntax ................................................................................. 219
Comments in imake ..................................................................... 219
Multi-line Macros (@@) ............................................................... 220
Concatenating Macros ................................................................. 221
Dealing with Tabs ........................................................................ 222
imake Configuration Files ............................................................... 222
A Quick Tour of Files Used by imake ............................................ 223
Using imake to Build X11 ............................................................... 224
Porting Hints ...................................................................................... 226
Undefined Symbols or Functions .................................................... 226
Missing Header Files ................................................................... 226
Missing Function Definitions ......................................................... 226
Searching for Preprocessor Symbols ............................................. 228
Related Documentation ..................................................................... 230
8.1.2.1 X from Your OS Vendor
8.1.2.2
Some examples of vendor-supplied X11 are OpenWindows from Sun, DECWindows from
DEC, and AIXWindows from IBM. X from your OS vendor is probably the easiest to install.
In fact, you may not have to install it at all--more and more UNIX platforms are being
shipped with the OS and software packages (such as X) already installed, so you might luck
out and have everything in place when your system is delivered. You should be able to tell if
X11 is pre-installed by looking in the directory/usr/bin/Xll or the directory that your vendor
uses (typically /usr/openwin for OpenWindows,/usr/lpp/Xl I for AIXWindows, etc). If the
directory is not empty, you probably have at least some portion of the software already in-
stalled. Some systems have tools to tell you what software is installed. For example, setld -i
on Ultrix and versions on IRIX. You could also try starting the window system with xinit (or
openwin) to see what happens.
If you need to install an X distribution provided by your OS vendor, the installation proce-
dure for the X package should be similar to that of any other package that is bundled with the
operating system. The X package installation should require whatever tool is normally used
for installing software on that platform, i.e., setld for Ultrix, inst for IRIX, cdm or extract un-
--
bundled for SunOS, etc.
The vendor may break the X11 package into separate components: an "execution-only"
package that allows you to run X servers and clients, and a "development" environment for
compiling new X applications. The development environment includes the X libraries,
header files and imake configuration files. (See Appendix E for more information on the com-
ponents of the standard X distribution.) If you intend to write your own X programs or com-
pile any of the public domain X applications available on the Internet, you should install a
full development environment. See Appendix B for information on installing public domain
software.
Be aware that some vendors charge extra for the X 11 distribution, and others include it in the
cost of the operating system. You should ask the salesperson about this before you order your
software configuration.
X from a Third Party
There are several third-party vendors who provide pre-compiled X 11 distributions for some
of the more popular platforms. Some vendors are listed in Appendix F and in the comp.win-
dows.x Frequently Asked Questions list.
Third-party X distributions are usually derived from recent MIT releases without adding
much functionality. If you are up to the task of building X from the MIT source, you can
probably duplicate a third-party distribution for your platform and save some money. How-
ever, it may be easier to purchase a third-party X installation than try to figure out what
patches, bug fixes, and work-arounds are necessary to build it on your platform. You might
also be able to get invaluable technical support from a third-party vendor.
Furthermore, building the MIT distribution is resource-intensive, consuming large amounts
of disk space and CPU time. If these resources are in short supply, this may be reason enough
to buy a pre-built X distribution.
Building the X Window System 187
AT&T Unix System V Release 4 V2, on AT&T WGS6386
A/UX 2.0.1
HP-UX 7.0, on HP9000/s300
IRIX 4.0
Mach 2.5 Version 1.13, on OMRC Luna 88k
NEWS-OS 3.3, on Sony NWS-1850
NEWS-OS 5.0U, on Sony NWS-37 I0
SunOS 4.1.i, on Sun 3, Sparc I, and Sparc 2
Ultrix-32 4.2, VAX and RISC
UNICOS 5.1
UTek 4.0
VAX 4.3bsd (with unknown local changes)
..o
If your platform is listed in the release notes, then you're probably in good shape. If not, you
may still be in good shape: the X distribution is frequently ported to new platforms, with the
binary distribution made publicly available. The best way to track the progress of the X dis-
tribution on your platform is to watch the appropriate Usenet newsgroup, or post a query to
either that newsgroup or to comp.windows.x.*
Some examples of useful "ports" that appear outside of the official MIT distribution are the
XNeXT distribution for NeXT workstations, the X386 server binary for 386-based UNIX
machines, and patches for Sun Solaris 2.0.
8.1.4
Complete or Client-only Distribution?
Before buying an X distribution or investing any time in building one from source, you still
have a few more decisions to make.
First, you need to decide whether you want a complete distribution or a client-only distribu-
tion. A complete distribution includes a server, clients, libraries, header files, fonts and confi-
guration files. A client-only distribution could include only the clients and, if necessary,
shared libraries for dynamically linked executables. If you wanted to compile X programs,
you would also need libraries and header files.
Client-only installations make sense for hosts that don't have a bitmapped console display,
such as a fileserver, compute server, or NFS server. The X clients are expected to display on
remote X servers (for example, X terminals) across a network. Complete distributions make
sense for workstations and for development environments.
8.1.5
Installing Multiple X Releases
Next, you should consider whether you want more than one release of the MIT X 11 installed
at one time. This would come in useful if you intend to test an X application under more than
one X release.
* comp.windows_x also has an e-mail address for those who cannot get news, xpert@expo.lcs.mit.edu.
Building the X Window System 189
For example, you might want to have Sun OpenWindows, MIT R4, and MIT R5 distributions
residing on your platform at the same time: you could do this so you can test clients under
each environment. Each distribution can have its own directory hierarchy.
As a example of this, OpenWindows could be installed under/usr/openwin, MIT X1 I R4
under/usr/X1 IR4, and MIT X 11 R5 under/usr/X11R5:
Contents OpenWindows XllR4 XllR5
Binaries /usr/openwin/bin /usr/X11R4/bin
Libraries /usr/openwin/lib /usr/X11R4/lib
Headers /usr/openwin/include /usr/X1 lR4/include/Xl 1
/usr/X11R5/bin
/usr/X11R5/lib
/usr/X 11R5/include/X11
Another possibility is that you can run a server from one MIT release with the client distribu-
tion from another. You might do this if you are installing a new version of X that doesn't sup-
ply a server for your workstation console: you can continue to use the vendor supplied server
with updated clients until an updated server is available for your display hardware.
Mixing clients with a server from a different release may have unexpected results. For ex-
ample, newer X servers have the SHAPE extension, which allows windows to be shapes other
than rectangular. If you run the oclock client under a server without this extension, it would
appear as a square instead of a circle, as shown in Figure 8-I.
Figure 8-1. oclock without the SHAPE extension
With the SHAPE extension, oclock appears as it should, as shown in Figure 8-2.
Figure 8-2. oclock with the SHAPE extension
190 X Window System Administrator's Guide
mi t l server l ddx/ cfb /REAEME
mit Iserverlddx/x3861README
mit Iserverlddx/x3 861c fb. bankedlREADME
The cgthree is mentioned in mitlserverlddxlsunlREADME:
Sunl2 cg21315
Sun/3 bw2 cg2/3/4/5
SPARCstation cg3/6
o..
From this information, you can determine that the Sun server supports the cgthree frame buf-
fer that you have installed on your system.
If your platform is supported and a server exists for your display hardware, then you're home
free.
8.2.3
Applying OS Patches
You should make sure your OS has the latest patches, as the MIT X distribution may rely on a
patch being in place in order for it to work properly. This is especially true for security and
compiler patches, as X relies on setuid programs and also tends to expose weaknesses in
compilers during the build process.
The mechanism for obtaining OS patches varies depending on the vendor, but it usually in-
volves a support contract or calling for technical support. Some vendors make their OS
patches available on the lnternet or from mail servers.
8.2.4
Applying X Patches
Before continuing with the build, you should verify that you're using the latest version of the
MIT source and have all official MIT "fixes," or patches, applied. Some patches may affect
installation or close security holes, so it's always a good idea to install the latest patch.
If you obtained the sources from a reputable location and they appear to be unmodified, try
looking at the file mit/bug-report. There should be a line resembling:
R5, patch-level-0
"patch-level-0" indicates that no official patches have yet been applied. The patch-level num-
ber is incremented as each patch (or "fix") is applied.
You should go back to wherever you obtained the MIT source for the available patches. If
you got the source from export.lcs.mit.edu, the patches are in the/pub/R5/fixes directory. The
contents of this directory are:
fix-01 fix-05 fix-09 fix-13 sunGX.uu
fix-02 fix-06 fix-10 fix-14
fix-03 fix-07 fix-ll fix-15
fix-04 fix-08 fix-12 fix-16
194 X Window System Administrator's Guide
There are 16 patches available for R5 at the time of this writing.*
The fixes are small enough to be sent through mail and are available through a mail archive
server. See Section A.3 for information on getting a patch through the mail.
Patches are applied using the patch program. If patch isn't already installed on your system,
the source for this program is available in the mit/util/patch directory.
The top of each patch file describes how to use the patch program to install the patch, for ex-
ample:
Release 5 Public Patch #i
MIT X Consortium
This patch comes in two parts: this file, and the file "sunGX.uu'.
(If you obtained this patch via the xstuff mail daemon, and you
do not have "sunGX.uu', get it with the request "send fixes
sunGX. //". )
To apply this patch:
cd to the top of the source tree (to the directory containing the
"mit" and "contrib" subdirectories) and do:
patch -p -s < ThisFile
Patch will work silently unless an error occurs. You will likely
get two warning messages, which can be ignored:
mkdir: mit : File exists
mkdir: mit/hardcopy: File exists
If you want to watch patch do its thing, leave out the
argument to patch.
Next, from the same top-level directory do:
uudecode sunGX, uu
rm - f mit/server/ddx/sun/sunGX, o. dist
uncompress mit/server/ddx/sun/sunGX, o. dist
...
This example assumes you created a directory for patches called fixes in the mit/directory.
Apply the first patch (fix-O1) simply by following directions:
% is mit/fixes
fix-01 fix-05 fix-09 fix-13 sunGX, uu
fix-02 fix-06 fix-10 fix-14
fix-03 fix-07 fix-ll fix-15
fix-04 fix- 08 fix- 12 fix- 16
% patch -p -s < mit/fixes/fix-01
mkdir: mit: File exists
mkdir: mit/hardcopy: File exists
% uudecode mit/fixes/sunGX.uu
% rm -f mit/server/ddx/sun/sunGX.o.dist
% uncompress mit/server/ddx/sun/sunGX, o. dist
(As mentioned in the instructions, the mkdir errors can be ignored.)
*The sunGX.uu file is a replacement object file for the Sun GX graphics accelerator. The .uu extension indicates that
it is a binary file that has been converted to ASCII text by the uuencode program. This makes it possible to send a bi-
nary file through the mail. When the sunGX.uu file has been copied to your system, run the uudecode program on it
to recreate the binary file.
Building the X Window System 195
Make sure you follow the directions and pay careful attention to the ordering of the patches.
When you have exhausted all the available patches, the "patch-level" number will be incre-
mented to the number of the last patch.
If you get an error message such as:
reversed (or previously applied) patch detected! Assume -R? [y]
then abort the patch program, as it is likely that you are applying the patches in the wrong or-
der or are applying the same patch twice.
Patches to contrib software are applied in a fashion similar to the core patches, but they are
organized by specific packages. If you obtain them from the host export.lcs.mit.edu, they are
in the directory/pub/R5/contrib-fires.
8.2.5
Creating a Link Tree (Optional)
One method of managing the X source distribution is to create a "link tree" of the MIT
source code. The directory structure is the same as the original MIT distribution, but the files
in the directories are symbolic links back to the original files. If the X distribution is built
within the link tree, the object files and libraries will reside in the copy, not in the original.
Using link trees makes it possible to build any number of different sets of binaries from one
set of source code files. This makes it very easy to maintain a group of binaries for different
platforms. It also conserves disk space, as the symbolic links will take up less space than a
copy of the source files. If you are going to build the distribution only once, however, you
may not want to use a link tree, since it complicates the directory structure and uses up disk
space when creating links.
Link trees may be the only way to effectively use read-only copies of the X source, such as
those mounted from a CD/ROM.
For example, the source area could look like:
% is -F
mit/ rs_aix31/ sun3_411/
pmax_ul 42 / sgi _40 / sun4_411 /
The rs_aix31, sun3_411, pmax_u142, sgi_40, and sun4_411 directories* are link trees that are
linked back to the mit directory. MIT supplies a shell script called lndir that creates the tree
for you. You can find lndir in the source distribution as mit/util/scripts/lndir.sh.
*The example directory names are borrowed from AFS. They are intended to describe a platform and the version of
the operating system. For example, sun4_4 ! 1 indicates a Sun4 running S unOS 4.1.1.
196 X Window System Administrator's Guide
To build a link tree:
1. Install the lndir program:
# cp mit/util/scripts/lndir.sh /usr/local/bin/lndir
# rehash
2. Create a directory for the tree to reside in:
# mkdir sun4_411
3. cd into the new directory:
# cd sun4_ll
4. Run the lndir program, supplying the relative path of the original source tree:
# lndir ../mit
config:
extensions:
include:
PEX:
lib:
xinput:
o..
When Indir finishes, you will be left with a usable copy of the X source tree.
8.3 Simplest Case Build
If you have confirmed that you have adequate disk space, have applied all the available
patches, and are working on a supported platform, then you may be able to install the X core
software quickly and painlessly.
This example uses the Sun4 running SunOS 4.1. l, as it is one of the most trouble-free builds.
If you want to build X using all default settings, change directories to the top of the distribu-
tion (usually mit/) and type:
% make World >& world, log
If you would like to monitor the progress of the build, use the tail program on the log file:
% tail -f world.log
The build will probably take several hours on even the fastest machines.
When the make is complete, check for errors; any build problems should be reported in the
file worM.log.* Examine the file for the messages "not made because of" or "Error." You can
the grep program to search for the ":", as it is commonly present in error messages:
% grep ":" world.log
Sun Jun 7 23:12:09 PUP 1992
* Be careful to search the entire file for errors, as it may still have the message "Full build of Release 5 of the X Win-
dow System complete." at the end even if there were problems with the build. This is because the make World target
invokes make with the -k option, telling it to ignore non-fatal errors.
Building the X Window System 197
make: Fatal error: Ccranand failed for target "subdirMakefiles'
make: Fatal error: Ccranand failed for target "Makefiles'
make: Fatal error: Cortland failed for target "World'
make: Fatal error: Cortland failed for target "World'
If there are no errors, the next step is to install the distribution. In this example, we use the
default installation pathnames--see Section 8.5.1.2 for information on how to change the de-
fault pathnames.
If you want to install X as an unprivileged user, you will need write permission to/usdlib,
/usdbin,/usdinclude,/usdman/man3, and/usdman/mann. It is probably easier to install X
as root instead of touching up permissions after the installation is completed. (The permis-
sions for the installed files are very important to the security of the X distribution.)
Become the superuser:
% flu
Password:
Install the distribution:*
# make install >& install.log
Install the manual pages (if desired):
# make install.man >& man.log
If there are no errors at this point, X should be installed and usable. Any remaining adminis-
tration work would involve customizing the installed files for your site. For example, you
may want to configure the X Display Manager. If so, see Chapter 3 for more information.
8.4 Host Problems
There are some problems that can disturb even the default X build. These problems have
more to do with the host configuration than with the X installation itself; that is, problems
with disk space, shared libraries, or NFS.
8.4.1
Disk Space
There are several stages in the build process that can consume large amounts of disk space.
Optimization options
The -O flag to the C compiler turns on optimization and can generate very large
temporary files. These files are usually written to/tmp.
* Note that the install process will write to the source area in some cases. One example of this occurs when installing
the xterm binary for the Sun platform, as the binary is re-linked to overcome a security problem with Sun shared li-
braries.
198 X Window System Administrator's Guide
8.4.3 NFS Installation
You may choose to install X on a filesystem that is NFS-mounted from another host. You'll
have problems installing X if the NFS-mounted filesystem does not allow root access over
the NFS link. For security reasons, it's a bad idea to allow remote root users to write to your
filesystem, but you can add root access temporarily to allow you to build X.
For root to be able to write to an NFS-mounted partition, you need an entry for the local sys-
tem in the/etc/exports file on the remote system.* For example, to give temporary root per-
mission for the/usr directory to the host named rock, you could change the following line in
/etc/exports :
/usr -access=rock
to:
/usr -root=rock, access=rock
On systems with the newer version of NFS, run the exportfs command to make this take ef-
fect:
rubble# exportfs -v /usr
re-exported /usr
Back on the local host, the installation can proceed from this point as if it was taking place on
a local filesystem. Build X on rock:
% make world >& world.log
When the installation is complete, the entry in/etc/exports should be changed back to what it
was and then re-exported With the exportfs command:
rubble# exI)ortfs -v /usr
re-exported /usr
8.4.3.1
NFS Installation Without Root Access
An alternative to giving temporary NFS root access to the remote directory is to install the
distribution as an unprivileged user and change the ownership of the files later. The problem
with this approach is that it opens the system to attack during the installation, so it should be
avoided if possible.
For this example, the ownership of the target directories is changed just long enough for the
installation to take place. The permissions are then touched up as root. As in the previous
example, the host that has the compiled X source on it is named rock and the host that NFS-
mounts the rock partition is named rubble.
* If you have an older version of NFS, the/etc/exports entries are simply the filesystem names followed by the hosts
which have access. Changes to the file will have an immediate effect. This is in contrast to the current system, which
uses the exporfs command to notify the system of changes in the/etc/exports file and supplies different levels of per-
missions.
Building the X Window System 201
Pas sword:
TERM= (xterm)
TERM= (unknown)
You might also get error messages when you try using your favorite editor:
% vi foo
xterm: Unknown terminal type
I don't know what kind of terminal you are on - all I have is 'xterm'.
[Using open mode]
"foo" [Read only] 3564 lines, 133099 characters
:q.,
% emacs foo
emacs: Terminal type xterm is not defined.
You could use vtl02 as a temporary value until you are able to install the xterm entry.
% setenv TERM vtl02
The terminal definition for systems using termcap can be installed simply by inserting the
contents of the file called mit/clients/xterm/termcap into the/etc/termcap file on your system.
It's a good idea to insert the termcap definition before any other definitions, since xterm is
likely to be used frequently.
The terminfo definition can be installed by using the terminfo compiler, tic. For example:
# tic mit/clients/xterm/terminfo
(Note that you must be root for this to succeed.)
The terminfo definition is placed in/usr/lib/terminfo/x/xterm.
See the Nutshell Handbook termcap and terminfo (O'Reilly & Associates, 1991) for more in-
formation on the termcap and terminfo terminal databases.
8.5 Simple Configuration
If you are not satisfied with the default configuration, you can change some simple configura-
tion parameters, as described in this section. These parameters need to be configured before
the build is begun.
The files used to configure the X compilation and installation reside in the directory mit/con-
fig. The syntax within these files should look familiar if you have used the C preprocessor
(cpp) before. If you are not familiar with C preprocessor syntax, you should still be able to do
the right thing by looking at other examples within the configuration files. Section 8.7 gives
some more background on imake syntax; for most configurations, you can probably figure it
out on your own.
You need to modify two files that will affect the build process: site.def, which defines param-
eters for your particular site, and a platform-specific file (e.g., sun.cf) which defines parame-
ters for your particular platform.
204 X Window System Administrator's Guide
InstallFSConfig
The font server configuration files are not installed unless this flag is set to YES.
St ripInstal i edPrograms
Setting this flag to YES will strip binaries as they are installed. The usual reason
for doing this is to save disk space: removing the symbol table from the binary
will reduce its size. It will be difficult to debug any run-time problem if the pro-
grams are stripped, but this is not a concern to most X users.
HasXdmAuth
This flag indicates that the XDMCP library should include DES code. DES, or
Data Encryption Standard, is an encryption scheme used in the authorization
process. There are restrictions on exporting DES outside the United States. This
flag must be on if you want to use the XDM-AUTHORIZATION-1 method of
server access control. See Section 4.3 for more information.
ExpandManNames
Some operating systems have restrictions on filename length. To deal with this
problem, the manual pages for X library functions have their names shortened to
14 characters. If your operating system does not have this problem, the manual
page filename can be expanded to its full name (for example, XTranWCo.3 is ex-
panded to XTranslateCoordinates.3).
HasLargeTmp
This flag indicates that you have enough disk space in Crap for the ar command
to create its temporary file. Setting this parameter to NO instructs ar to use the
current directory.
Instal ILibManPages -
There are two sections of manpages: client manpages and library function man-
pages. If this flag is set to NO, it prevents the library manual pages from being
installed with the make install.man command. This flag is set to YES by default.
You might set it to NO if no one at your site intends to program in X and if disk
space is low. (The library manpages consume approximately 2 megabytes of disk
space.)
8.5.1.2 The ProjectRoot Flag
The Proj ectRoot flag defines the "root" directory for the build. It is not used in the ex-
ample site.def file, but can be easily enabled by removing the C comments surrounding this
section:
#ifdef Proj ectRoot
#undef Proj ectRoot
#endif
#define ProjectRoot /usr/XllR5
If Proj ectRoot is already defined, it is first undefined. (The reason for this test is that
some of the platform.cf files define Proj ectRoot by default. The C preprocessor will
complain if a flag is defined twice.)
Building the X Window System 207
OSTeenyVersion
A more precise version number for patch releases of the OS
BuildServer
This flag controls whether the server should be built along with the rest of the X
distribution. It is set to YES if the server exists; if a server doesn't exist for your
platform, it is set to NO. You can also set it to NO if you don't want to build a
server for some reason--for example, for the IBM RS/6000, the MIT server runs
only on the SLsway display adaptor. If you do not have this particular board, you
should set the BuildServer flag to NO.
Server Options
Look for any server specific options. This could include monochrome and color
versions, as in:
#define XmfblmnaxServer NO
#define XcfblmnaxServer YES
8.5.2
Configuration Example 1
For this example, a Sun with limited available space in Crap is being used. The -temp= flag is
needed to specify an alternate directory for the temporary files from the compiler. See Sec-
tion 8.4.1.2 for more information on the -temp= flag.
The -temp= flag needs to be supplied on every cc command line used in the X build. This
means that it needs to make it into every Makefile used in the X distribution. You can accom-
plish this by editing the DefaultCCOptions parameter in the sun.cf file. (Being a very
system-specific flag, this parameter is specified in the platform.cffile, not in the site.deffile.)
The README file in the rnit/config/directory describes all of the configuration parameters,
including De faul tCCOpt ions:
DefaultCCOptions default special C compiler options
In sun.el, De faul tCCOpt ions is currently specified with the following lines:
#ifdef mc68000
#define DefaultCCOptions -f68881 -pipe
#else
#define DefaultCCOptions -pipe
#endif
(The test for mc68000 is to add the flag for the mc68881 floating-point chip, available only
on the sun3 platform.)
If you enough space in the area where you are building X, set the -ternp= flag to the current
directory ("."). The C compiler will then use whatever directory it is invoked in for tempo-
rary files:
#ifdef mc68000
#define DefaultCCOptions -f68881 -pipe -temp=.
#else
#define DefaultCCOptions -pipe -temp=.
#endif
210 X Window System Administrator's Guide
8.5.7.1 xterm Build Flags
mit/clients/xterm/lmakefile contains the following comment:
/*
* add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
* handle overlapping copies before using it.
*/
You may want to enable these flags if you want users who log into the system using xterm to
be recorded in the wtmp file. They will then appear when the last command is used. Change
the following line in mit/clients/xterm/lmakefile from:
MISC__DEFINES = /* -DALLOWLOGFILEEXEC * /
to:
MISC__DEFINES = /* -DALLOWLOGFILEEXEC */ -DWTMP -DLASTI/3G
8.6 Building Programs After X Is Installed
If you have people at your site who are going to be programming with X, you should supply
them with the proper tools to do this. This usually means installing the libraries, header files,
and configuration files in a public area in the same manner as other programming environ-
ments. Even if you choose non-standard locations for the X distribution, the imake program
provides tools programmers can use without worrying about the location of the installed soft-
ware.
Appendix B shows how to compile an X program after X is already installed.
8.6.1
xmkmf
The xmkmfprogram is a shell script front end to the imake program, supplied in X11R4 and
X1 IR5. (See Section 8.7 for more information on imake itself.) It can be run in any directory
than contains an Imakefile. This could be within a subdirectory of the X distribution source
code or a program outside of it:
% xmkmf
mv Makefile Makefile.bak
imake -DUseInstalled - I/usr/lib/Xll/config
It first makes a backup copy of any existing Makefile, as it will create a new one with the
same name. It then invokes imake with the Usernstal 1 ed flag, which tells imake that the
X distribution is installed and that it should use the header files and libraries on the system
instead of expecting ones to be present in the X source tree. For example, in config/Proj-
ect.tmph
#ifdef UseInstalled
#define PhigsInclude -I$(INCDIR)
#else
214 X Window System Administrator's Guide
#define PhigsInclude -IS (BUILDCDIR)
#endif
This sequence means "use the system include file area if UseInstalled is defined, other-
wise use the include files in the source code for PHIGS."
If you set Proj ectRoot before the build, xmkmf will use the new root directory. For ex-
ample, if you set Proj ectRoot in site.de/before installation:
#ifdef Proj ectRoot
#unde f Proj ectRoot
#endif
#define ProjectRoot /usr/XllR5
Running xmkmf would produce:
mv Makefile Makefile.bak
imake -DUseInstal led - I/usr/Xl IR5 / lib/Xl i/config
xmkmf uses the -/flag to tell cpp where to look for include files. The include files in this case
are the imake configuration files. The default location for installing these files is
/usr/lib/X11/config. If you have your own private set of configuration files, you can invoke
imake with a different include directory:
% imake -DUseInstalled -I/home/eap/myconfig
In R5, xmkmf also takes an -a flag, which executes the normal make targets automatically:
% xmkmf -a
mv Makefile Makefile.bak
imake -DUseInstal led - I/usr/lib/Xl I/config
make Makefiles
make includes
make depend
The Make f i l es target will recursively build any Makefiles that may be present in subdirec-
tories. The includes and depend targets are used to build a list of dependencies that are ap-
pended to the Makefile. These will force recompilation of the target if something related to
the program changes elsewhere.
8.6.2
Include Files
Include or "header" files should be found automatically by the preprocessor, as they are
stored in standard system directories, such as/usr/include. Note that MIT supplied header
files will have the Xll directory already prepended to the name of the include file:
#include <Xll/Shell.h>
oo.
or even a subdirectory within X11:
#include <Xll/Xaw/Box.h>
...
Building the X Window System 215
cpp will interpret the complete path, for example, as /usr/include/X11/Xaw/Box.h. If you
wish to bury the include files in another subdirectory, you will still need to have the last di-
rectory named Xll, as in /usr/XllR5/include/Xll. cpp would then be invoked with
-I/usr/X11R5/include. You could also cheat and create a symbolic link from Xll to the in-
clude file directory:
# in -s Xll .
This would keep cpp happy when it looks for the files. It is often desirable to keep the MIT
headers separate from the system headers, as this will keep them from being damaged during
OS upgrades.
8.6.3
Libraries
The X libraries will usually be installed in/usr/lib, but there are several reasons to install
them in an alternate location. In any case, the Makefiles generated by imake should do the
right thing if you configured the X distribution this way. Alternate library locations can be
specified with the -L option. If you have Proj ect:loot: set to/usr/XllR5, the X libraries
will be in/usr/X11R5/lib.
8.7 More About imake
This section describes the configuration process in more detail and may help if you encoun-
tered a problem with your X build.
imake is a project management tool that is used for building the X Window System from
source code. This section describes imake in the context of building X 1 1, but imake can be
used for any large project that is going to be compiled on more than one type of platform. In
particular, it is the tool of choice for public domain X programs that are distributed in source
form. See Appendix B for more information on compiling public domain software.
imake uses a combination of make and the C preprocessor (cpp). A basic understanding of
each is required to intelligently configure the X build process.
8.7.1
The make Program
The make program is the default UNIX tool for maintaining source code. It uses a configura-
tion file called Makefile to describe each component of the source distribution, how each
should be compiled, and how individual files relate to one another. It saves time and effort by
automating common programming tasks. For example, if a header file has been modified, any
program that uses it is recompiled, ensuring that everything is up to date.*
* See the Nutshell Handbook Managing Projects with make (O'Reilly & Associates, 1991) for more information on
the make program.
216 X Window System Administrator's Guide
8.7.3.3 Concatenating Macros
A common trick is to use the null comments "/**/" to concatenate macros or strings within
cpp. For example, if you had a file called testfile containing the following:
#define MYTOPDIR /usr/
#define XLIBDIR lib/Xll/
#define FONTDIR fonts/
You may want to concatenate these strings into one. If you try concatenating them directly,
such as:
MYTOPDIRXLIBDIRFONTDIR
cpp will respond by trying to expand the entire string. Since the string is not defined, it will
return the string itself, which is hardly what you want.
% cpp testfile
# 1 "testfile"
MYTOPDIRXLIBDIRFONTDIR
You can get around this with some versions of cpp by separating each component with null
comments. The comments prevent the components from being interpreted as a single string.
For example:
MYTOPDIR/**/XLIBDIR/**/FONTDIR
With the comments inserted, passing testfile through some versions of cpp yields:
% cpp testfile
# 1 "testfile"
/usr/lib/Xl i / fonts /
This works great. But the problem with this trick is that ANSI C preprocessors have a differ-
ent and incompatible syntax for concatenation. Under an ANSI C preprocessor, the preceding
example fails to concatenate. The null comments are expanded into white space, which is di-
sastrous in this example:
% acpp testfile
# 1 "testfile"
/usr/ lib/Xll/ fonts/
ANSI C uses the "##" sequence for concatenation. For example:
MYTOPDIR# #XLIBDIR# #FONTDIR
Running this through an ANSI C preprocessor yields the correct value:
% acpp testfile
# 1 "testfile"
/usr/lib/Xll/fonts/
Building the X Window System 221
To concatenate macros within imake, imake provides the Concat and Concat3 macros which
do the right thing depending on what type of preprocessor you use. In this case, since we
have 3 arguments, we use Concat3:
Concat3 (MYTOPDIR, XLIBDIR, FONTDIR)
8.7.3.4
Dealing with Tabs
In some versions of cpp, tabs are converted to space characters. The make program, mean-
while, requires tab characters to precede the commands in a make rule. So if a version of cpp
that converts tabs to spaces is used on a Makefile, make will bomb out with an error such as:
% make
make: Fatal error in reader: Makefile, line nn: Unexpected end of line seen
The imake program therefore tries to intelligently place the tab characters back in the
Makefile after being processed by cpp. If the version of cpp that comes with your system is
unsuitable for building the X distribution, the contrib area provides a replacement in con-
trib/util/cpp.
8.7.4 imake Configuration Files
imake uses a series of configuration files when creating Makefiles for a particular package.
First, it uses a series of system-wide imake configuration files, found in the directory
/usr/lib/Xll/config. In addition, imake looks for a file named lmakefile in the directory it is
being invoked in, which defines parameters specific to that particular package.
This discussion will be much easier to follow if you have these files online and available to
browse through while reading. If you have the X distribution source code available, look in
the directory mit/config. If the distribution is already installed, look in the directory
/usr/ lib/X l l / config .
This looks very complex--it is. However, you should be relieved to know that any changes
you make are confined to one file (unless you need to do something more complex, such as
add support for a new platform).
The filenames indicate the function of the file in a general manner. Files ending in .tmpl are
template files. They are like templates in that they provide a structure that is "generic" and
later customized to a specific result. Files ending in .cfare configuration files, used to config-
ure imake for a specific platform. Files ending in .rules contain make rules that describe how
make should build programs and what files depend on the others.
One convention to keep in mind while browsing the files is that cpp macros are mixed-case
(for example, InstallAppDefaults), and make flags are uppercase (for example,
INSTKMEMFLAGS).
222 X Window System Administrator's Guide
8.7.5 Using imake to Build Xll
You rarely ever need to run the imake program directly. It is usually run by the Makefile at
the top level of the X 11 source tree when the make command is used.
The usual thing to do when building X is to type:
% make World
If this fails with an error message such as:
ooo
*** Error code 1
make: Fatal error: C(mmand failed for target "subdirMakefiles'
CALrrent working directory /eap/XllR5/src/sun4_412
*** Error code 1
make: Fatal error: Conmnd failed for target "Makefiles"
CALrrent working directory /eap/XllR5/src/sun4_412
*** Error code 1
make: Fatal error: Co.and failed for target "World'
CALrrent working directory /eap/XllR5/src/sun4_412
*** Error code 1
make: Fatal error: Conmnd failed for target "World'
You will have to figure out what went wrong and correct it. After you have done this, you
may be able to save some time by using a target other than WorM. A target is a specific task
within a Makefile. The top-level Makefile has several targets:
Makefiles
clean
includes
depend
This target creates a Makefile in any subdirectory that contains an
Imakefile. You should run this anytime you change a configuration option.
This target "cleans" or removes all the object files and libraries from the
source tree. You should use this if you fail miserably and want to start over
again.
This target creates symbolic links from the current directory to where the
include files are stored in the source tree. It should be used before the
depend target.
This target generates dependency information for make. A program called
makedepend is invoked, which searches all the source files for #include
statements and builds a list that is appended to the Makefile. For example:
World
..o
Tekproc. o: /usr/include/fcntl .h /usr/include/sys/fcntlccm.h
Tekproc. o: /usr/include/sys/stat.h /usr/include/unistd.h
Tekproc. o: /usr/include/sys/time.h /usr/include/sys/time.h
Tekproc. o: ../.././Xll/Xatcn.h ../.././Xll/cursorfont .h
Tekproc. o: ../.././Xll/StringDefs .h ../.././Xll/Shell .h
Tekproc. o: ../.././Xll/Xmu/CharSet .h /usr/include/stdio.h
This should be run every time a Makefile is rebuilt.
This is the primary target for building the distribution. It runs make with
the following targets: Makefiles, clean, include, depend and then with just
with the -k option. (Keep in mind that -k tells make to keep running even
224 X Window System Administrator's Guide
8.8.2 Searching for Preprocessor Symbols
An important feature of cpp is that it can tell other programs what type of platform it is being
executed on. cpp provides pre-defined symbols indicating the platform, operating system,
byte order, processor type, and type of C compiler. Some of these symbols are shown in the
following table.
Table 8-1. cpp Symbols
Symbol Type
Architecture
OS
Byte Order
Type
Compiler
Examples
mc68k, i386, i8086, iAPX286, sparc
unix, DGUX, M_XENIX, UTS, ultrix, venix, xenix
MIPSEB, MIPSEL
sun3, sun4, sun386, nsl6000, ns32000, mips
_POSIX_SOURCE, ANSI, __STDC .... ANSI C SOURCE, _NO_PROTO
imake uses these symbols to automatically determine what type of platform it is being run
on.* So one of the first tasks of porting X to a new platform is to find a unique preprocessor
symbol so that imake can determine the type of platform. On some systems the
BOOTSTRAPCFLAGS flag will have to be used for this function, but it's worth checking first.
The following are hints about where to check:
The manual pages for the preprocessor and the compiler are the first places you should
check. Beware that the names of the compiler programs vary. For example, the C com-
piler on the IBM RS/6000 is called xlc. There may be several different versions of the
compiler available, each with its own behavior. It is not unusual to have an ANSI C and
"K&R" C compiler on the same system. There may be more than one version of cpp as
well--for example, IRIX has both cpp and acpp. Not surprisingly, some vendors do not
list all the predefined flags and you will have to hunt for them.
2. See if the compiler or preprocessor has a "verbose" flag, usually -v or -verbose. This flag
shows which flags are being passed to the preprocessor (where they are interpreted):
% cc -v -E foo.c > /dev/null
/lib/cpp -undef -Dunix -Dsun -Dsparc foo. c
From this, you can determine that the flags unix, sun, and sparc are defined by the
preprocessor. The -E flag means "run the preprocessor only," and the output of the
preprocessor is discarded into/dev/null.
* Some systems have no unique preprocessor symbols, requiring you to tell imake the type of platform when it is first
invoked.
228 X Window System Administrator's Guide
3. If the previous methods fail, it may require a low-tech approach. In most cases, this
means the strings program. The strings program reports all printable strings in a binary
file:
% strings /lib/cpp
oo .
too many -I options, ignoring %s
cpp internal bug alert, readinit(argv0), argv0=NULL
%s. init
unix
m68k
_SYSV_SOURCE
_BSD_SOURCE
_AUX_SOURCE
/usr/include
/usr/include
%s : %s
...
Experience would tell you that the strings clustered around unix are likely suspects for
preprocessor symbols. You can test them by running them through the preprocessor and
checking to see if they are defined. First, enter into a file the symbols you wish to test:
% cat > foo.c
unix
m68k
_SYSV_SOURCE
_BSD_SOURCE
_AUX_SOURCE
/usr/include
Then run the preprocessor on them:
% cc -E foo.c
# 1 "foo.c"
1
1
1
1
1
/usr/include
Any symbol that evaluated to "1" is being defined by the preprocessor. The "/usr/in-
clude'" is unchanged, showing that it does not mean anything special to the compiler.
(The line starting with the "#" character is a line number inserted by the preprocessor
showing its position in the C source file.)
Beware that symbols may not be unique to a platform and BOOTSTRAPCFLAGS may have to
be specified after all. For example, both Sequent and Encore define ns32000 on their
machines. You would have to specify a unique symbol on the command line for the initial
make:
% make World BOOTSTRAPCFLAGS=" -Dumax"
Building the X Window System 229
A
Useful Things to Know
This appendix covers "miscellaneous" topics that either didn't fit cleanly into
any other chapter, or fit into so many that we found ourselves repeating our-
selves all the time.
In This Appendix"
The comp.windows.x Newsgroup ....................................................... 233
How to ftp a File .................................................................................. 234
Getting Files Using ftpmail ............................................................. 235
BITFTP ........................................................................................... 237
The xstuff Mail Archive Server ........................................................... 237
Unpacking Files ................................................................................. 238
Making a Filesystern Available via NFS .............................................. 239
How to Add a Host ............................................................................. 239
Adding a Host to/etc/hosts ............................................................ 239
Adding a Host Using NIS ............................................................... 240
Adding a Host Using DNS .............................................................. 240
Adding an Ethernet Address .............................................................. 242
Printing Documentation in the MIT X Distribution ............................... 242
Converting a Number Into Hexadecimal and Back ............................. 243
Configuring a Sun as an X terminal .................................................... 243
Using More than One Frame Buffer Under SunOS ............................. 244
A
Useful Things to Know
As we wrote this book. we found that there were a lot of odds-and-ends that didn't fit into
any chapters but were too important to leave out. This appendix was devised as a "catch-all"
for miscellaneous information.
A.1
The comp.windows.x Newsgroup
comp.windows.x is a Usenet newsgroup dedicated to the X Window System. You can use it
reach thousands of X programmers and users. You would normally use a newsreader such as
rn, vn, xrn, or readnews to read the group. If you do not have Usenet access at your site, you
can still reach the newsgroup through e-mail. To request that you be added to the list. send a
polite message to .qert-requestexpo.lcs.mit.edu. To send mail to the entire list. use
xpert expo. lcs.mit, edu.
In addition to com/.wi/ttows.A-, there are also newsgroups for comp.windows...motif,
comp.windows.x.intrinsics, comp.windows.x.apps, and comp.windows.openlook. Each of
these newsgroups maintains a Frequently Asked Questions list. or FAQ, which contain a
wealth of intbrmation on X. comp.windows.x.announce is a newsgroup dedicated to
announcements about X, for example, announcements of new patches being released.
For more information on Usenet, see Managing UUCP and Usenet by Tim O'Reilly and
Grace Todino (O'Reilly & Associates, Inc., 1992), Using UUCP and Usenet by Grace Todino
and Dale Dougherty (O'Reilly & Associates, Inc., 1991), and The Whole lnternet User's
Guide & Catalog by Ed Krol (O'Reilly & Associates, Inc., 1992).
Useful Thngs to Know 233
ftp> binary
200 Type set to I.
ftp> get FAQ.Z
200 PORT cd successful.
150 Opening BINARY mode data connection for FAQ.Z (84245 bytes).
226 Transfer complete.
local : FAQ. Z remote: FAQ. Z
84730 bytes received in 16.87 seconds (4.91 Kbytes/s)
ftp>
The file should now be in whatever directory you ran ftp from. Note that if you had another
file in this director), called FAQ.Z, it would be overwritten even if you had the csh noclobber
variable set.
For getting multiple files, use the mget command. (Use the prompt command first to toggle
being asked to confirm each file transfer.)
If you are done with yourftp session, use the quit command to exitftp.
ftp> quit
221 Goodbye.
imui@opal%
A.2.1
Getting Files Using ftpmail
ftpmail is a mail server available to anyone who can send and receive electronic mail to and
from Internet sites. This includes most workstations that have an e-mail connection to the
outside world, and CompuServe users. You do not need to be directly on the Internet to use
ftpmail.
Send mail to the ftpmail server, ftpmail@decwrl.dec.com. There are a set of commands that
the server understands; to get a complete help file, send a message with no subject and the
single word "hel p" in the body.
The following is an example mail session that will get you the comp.windows.x FAQ.
imuiOruby 145% mail ftpmail@decwrl.dec.com
Subj ect :
reply imui@ora.com
connect export.lcs.mit.edu
chdir /contrib
binary
uuencode
get FAQ.Z
quit
imui@ruby 146%
The reply line is specified to ensure that the correct return address is used. Without this line,
ftpmail will mail the file to whatever return address is in your mail header, which may be
wrong.
The connect line is required to tell ftpmail what host to connect to. In this case, we set it to
export.lcs.mit.edu. By default, ftpmail logs in as anonymous; you could actually supply a
user name and password here if you had an account on the machine in question.
Useful Things to Know 235
As an example, if you sent mail with the subject line "send fixes 1", it will respond with
"fix-l":
From: Xstuff service <xstuff@expo. ics .mit. edu>
Subject: fixes/l
In-Reply-To: Request from eap@ora.com (eric pearce) dated Tue Aug 25
13 : 00: 01 EDT 1992
To: eap@ora.com (eric pearce)
Release 5 Public Patch #i
MIT X Consortium
This patch comes in two parts: this file, and the file "sunGX.uu".
..o
The mail message can then be applied to the patch program to patch the X11 source distribu-
tion. See Section 8.2.4 for a description of applying X11 patches.
Try using the subject "index" to get a listing of available files.
A.4 Unpacking Files
The extension on the end of the file usually indicates what programs should be used for
unpacking a file.
For .Z files:
% uncompress filename. Z
For .tar.Z files:
% zcat filename.tar. Z I tar xpvf -
For files that look like this (might have .uu extension):
begin 444 mit/server/ddx/sun/sunGX.o.dist. Z
M'YV0 085. 0!5T!0F@*@@ 0D$#8!@RI( H(85.XWX!PW<"%!5X!D! J, 0
...
Run uudecode:
% uudecode filename
This will create the file mit/server/ddx/sun/sunOX.o.dist.Z.
238 X Window System Administrator's Guide
A.5 Making a Filesystem Available via NFS
For a host to be able to mount a remote filesystem, it will have to have an entry in the
/etc/exports file on the remote system. The format of this file has changed as NFS has gained
new functionality. The "old" style of entry in/etc/eaports is simply the name of the filesys-
tern and list of hosts that can mount it:
/usr/lib/Xll/fonts ncdl ncd2 ncd3 ncd4
The file is consulted every time a request is made to mount a filesystem.
The "new" style of entry has a different syntax with many more options. For example, the
above example would be written as:
/usr/lib/Xll/fonts -access=ncdl :ncd2 :ncd3 :ncd4
Under "newer" NFS, you have to execute the exportfs command after the/etc/exports file is
edited in order for the changes to take effect:
% exportfs -v /usr/lib/Xll/fonts
exported /usr/lib/Xll/fonts
To remove access to a filesystem, edit the file and run the exportfs command with the -u
option:
% exportfs -v -u /usr/lib/Xll/fonts
unexported /usr/lib/Xll/fonts
For more information, see Managing NFS and NIS by Hal Stern (O'Reilly & Associates,
1991).
A.6 How to Add a Host
A common administration task is to add a new host name to the/etc/hosts file, the Network
Information Service (NIS), or the Domain Name Service (DNS). The procedure for each of
these is described here, but they will not be adequate for more complicated configurations.
NIS is described in detail in Managing NIS and NFS by Hal Stern (O'Reilly & Associates,
1991). DNS is described in DNS and BIND by Paul Albitz and Cricket Liu (O'Reilly &
Associates, 1992). All these examples assume a pre-existing, working configuration.
A.6.1
Adding a Host to/etc/hosts
If you are not using NIS or DNS, the new host can be added directly to the file/etc/hosts,
with the IP address followed by the hostname and any aliases that the host is going to be
known by:
140.186.65.13 ncd4.ora.comncd4
Useful Things to Know 239
A.6.2
Adding a Host Using NIS
If you are using NIS (previously known as Yellow Pages), you first have to determine which
host is the NIS master. This is usually the hostname retumed by the ypwhich command:
% ypwhich
(This not always the case, as NIS slave servers will also respond.)
Once you have located the master, add the new host entry to its /etc/hosts file as shown
above, and remake the NIS map:
# vi /etc/hosts
add hostname
# cd /var/yp
# make
updated hosts
pushed hosts
You should test the map to make sure it has the new entry (in some cases, it may take a while
to propagate the new map to all hosts within an NIS domain):
% ypmatch ruby hosts
140.186.65.13 ncd4. ora. ccm ncd4
If there is a problem, you will get the error:
Can't match key ncd4 in map hosts.byrkan. Reason: no such key in map.
A.6.3
Adding a Host Using DNS
For networks using DNS, you need to edit the configuration files for the name daemon
named, named looks at a boot file at startup, usually/etc/named.boot. On our name server,
this file contains the lines:
directory /vat/named
; type domain source host/file backup file
primary ora. corn . ora. zone
primary 65.186.140. in-addr, arpa ora. revzone
The/var/named directory is where the configuration files live. The file/var/named/ora.zone
is the primary configuration file for the ora.com domain--this is the file that tells named how
to convert hostnames to the proper IP address. The file/var/named/ora.revzone contains the
reverse entries--i.e., it tells named how to convert IP addresses to the proper hostnames
within ora.com. Note that your site will undoubtedly use different pathnames.
To add ncd4 as address 140. 186.65.13, we enter into/var/named/ora.zone:
ncd4 IN A 140.186.65.13
IN HINFO NCD-16 2.2.0
(The HINFO line contains host information--in this case, the version of the X server.)
240 X Window System Administrator's Guide
A.7 Adding an Ethernet Address
When you want to boot an X terminal or diskless workstation off a server machine, you will
usually have to add its Ethernet address to the ethers database. Add the entry to the
/etc/ethers file:
00 : 00 :a7 : i0 : ii :bf ncd4
The letters within the hex number should be in lowercase.
If you run NIS, you will also have to remake the ethers map on the NIS master:
# cd /var/yp
# make
updated ethers
pushed hosts
A.8
Printing Documentation in the MIT X Distribution
If you have a PostScript printer, you can print out the MIT documentation in mit/hardcopy/.
Any file with the .PS extension should print on BSD-based UNIX machines with:
% ipr filename.PS
or (on System-V based machines):
$ip filename.PS
Any filename with a .Z extension is compressed. You should uncompress it before trying to
print it:
% uncompress filename. PS. Z
% ipr filename.PS
or"
% zcat filename.PS.Z ipr
If you do not have PostScript or if you just want to look at the document on your screen, you
should use the files in the mit/doc/directory.
If the file has .ms extension, this indicates that it uses the ms macro package for nroff and
troff:
% nroff -ms mit/doc/Xmu/Xmu.ms I more
If the file has a .man extension, it is meant to be installed so it can be used with the man com-
mand, but you can view it independently with:
% nroff -man mit/clients/xterm/xterm.man I more
If the file has a .tbl extension, run it through the tbl preprocessor and then through col after
passing it through nroff:
% tbl mit/doc/Server/gdz.tbl.ms I nroff-ms I col I more
242 X Window System Administrator's Guide
There is no reason why you could not do this with other hardware. The 3/50 is singled out
only because it is considered to be underpowered by today's standards.
A.11
Using More than One Frame Buffer Under SunOS
The MIT X server for the Sun platform can support more than one frame buffer at a time. It is
possible to have two separate monitors on the same host or to use separate frame buffers
within the same monitor. The cgfour frame buffer has an 8 bit color device and 1 bit mono-
chrome device. The Xsun X server will not use both unless you modify the default worksta-
tion configuration.
1. Become root and change directories to/dev:
% au
# cd /dev
2. Remove the default monochrome device:
# rm /dev/bwtwoO
3. Create the new monochrome device:
# MAKEDEV bwtwol
4. Make sure the kernel contains the bwtwol device and it is not commented-out. For
example, on a Sun 3/60 with a kernel named "HARRY":
# grep bwtwol /usr/sys/sun3/conf/HARRY
device xtl at ohem 7 csr Oxff300000 priority 4# 3/60
device htwol at ohtnea 7 csr Oxff400000# 3/60
If the device is missing, add it to the kernel config file and build a new kernel.
If this procedure works, you should be able to toggle back and forth between the frame buf-
fers just by moving the mouse pointer to the edge of the display.
Some systems can support more than one physical monitor. The Sun color IPC comes with a
monochrome frame buffer built onto the CPU board and a cgthree card in one of the Sbus
slots. If you connect a monochrome monitor to a CPU and a color monitor to the cgthree
device, you can run the X server on both. Moving the mouse pointer to edge of the screen
will move it onto the adjacent monitor.
244 X Window System Administrator's Guide
B
Compiling Public Domain Software
Public domain software for X is available all over the Internet, but you may
not think you have the right programming skills, or no one ever explicitly told
you what to do. This appendix is a tutorial on how to find and compile public
domain software.
In This Appendix:
Finding the Sources ........................................................................... 247
Using an Archie Server .................................................................. 248
Get the FAQ .................................................................................. 250
The Usual Suspects ....................................................................... 250
An Example: xarchie .......................................................................... 251
Getting the xarchie Sources ........................................................... 251
Untarring the Sources .................................................................... 252
Editing the Imakefile ...................................................................... 254
Compiling the Source ..................................................................... 255
Using Patches ................................................................................... 259
Another Example: xkeycaps ............................................................... 264
Related Documentation ..................................................................... 268
B
Compiling Public Domain Software
You've probably seen this sort of talk over the newsgroups: "Does anyone know where I can
get xtetris? .... Is there an ftp site for xpostit?" You know that one of the best things about X is
that there's all this great public domain software available, but you're not sure how to go
about getting it. Either you don't know how toftp the sources, or you don't know how to use
imake or make, or you aren't much of a C programmer so the whole idea of dealing with the
source just scares you.
Well, the good news is that for most source distributions, you don't need to know very much
about make or imake, and you don't really need to know much about programming in
C--mostly all you need to know is how to follow directions. This appendix gives you some
idea of how to compile sources without knowing a lot about what you're doing. If you've
been installing X from source or if you're a competent (and confident) C programmer in your
own right, then you already know all the material in this appendix and it isn't for you. But if
you're one of these people who's Scared of the Source, then this appendix may help.
Don't expect to learn much about make or imake in this appendix, just enough to get through
some of the simpler builds. If you're interested only in how to compile the X ll sources
themselves, see Chapter 8. But if you already have X 11 installed and you just want to install
new software, read on.
B.1
Finding the Sources
There are a lot of ways to find out about a program. You might see a reference to it on a
newsgroup, or you might see it running on someone else's machine, or you might have read
about it in this book. Let's suppose you saw a posting on the net about the xrolodex client:
From: hrp@world, std.com
Newsgroups: ccp. windows .x. apps
Subj ect : xrolodex
Hey,
Has anyone seen the new xrolodex app? How is it related to
xrolo?
-Ross
Compiling Public Domain Software 24 7
When you read this message, you are intrigued by the possibilities of a rolodex program, and
you wonder whether it's available at no cost.
B.1.1
Using an Archie Server
The first thing to try is to use an Archie server. Archie is a robust database of anonymousftp
sites and their contents. If you have Internet access, the most direct way to gain access to
archie is to telnet directly to one of the Archie servers. Current Archie servers are listed in
Table B- I.
Table B-1. Archie Servers as of January 3, 1992
Site
archie.mcgill.ca
archie.sura.net
archie.ans.net
archie.unl.edu
archie.rutgers.edu
archie funet.fi
archie.au
archie.doc.ic.ac.uk
cs.huji.ac.il
IP Address
132.206.2.3
128.167.254.179
147.225.1.2
129.93.1.14
128.6.18.15
128.214.6.100
139.130.4.6
146.169.11.3
132.65.6.5
Location
McGill University, Montreal, Canada
SURAnet, College Park, Maryland, USA
ANS, New York, USA
Lincoln, Nebraska, USA
Piscataway, New Jersey, USA
FUnet, Helsinki, Finland
Deakin University, Geelong, Australia
Imperial College, London, UK
Hebrew University, Jerusalem, Israel
In our case, since Archie was written by the Archive Group at McGill University, it seemed
fitting to use the one at McGill. In reality, you should use the server closest to you, since the
McGill machine is generally overloaded with requests.
You should generally use a front-end Archie client program to access an Archie server, such
as archie or xarchie (we show how to build xarchie later in this chapter, in Section B.2). But
you can also connect to Archie directly using telnet.
imuiOopal% telnet archie.mcgill, ca
Trying 132.206.2.3 ...
Connected to quiche, cs .McGill. CA.
Escape character is '^]'
SunOS UNIX (quiche.CS.McGill.CA)
login:
Log on as archie. (There is no password.)
login: archie
ARCHIE: The McGill School of Computer Science Archive Server [2 Apr 1992]
.o.
Use the 'servers' conmand to list all archie servers.
A limit of i0 concurrent telnet sessions has been put on archie.mcgill.ca.
248 The X Window System Administrator's Guide
Alternative access through the standalone clients available via
anonymous ftp to this machine. See REAEb file in -archie/clients.
** 'help' for help
** corrections/additions to archie-admin@archie.mcgill.ca
** bug reports, comments etc. to archie-l@archie.mcgill.ca
archie>
For a full listing of commands, type help.
As an example of how to use archie to find a program called xrolodex, type:
archie> prog xrolodex
The first thing Archie does is find how many matches to xrolodex there are in the database. It
keeps you updated on how many matches it's found so far, and how far it's gotten in its
search.
# matches / % database searched: 1 / 78%
When it is 100% through the database, the list of sites that have xrolodex will stream to your
terminal. For the purposes of this example, we have deliberately chosen a recently-
announced program that has not made it to many sites yet (at least, not at the time of this
example). If we had searched for something like xpostit, many screenfuls of output would
have been reported.
archie> prog xrolodex
# matches / % database searched: 4 / 100%
Host think, corn (131.239.2.1)
Last updated 05:54 25 Feb 1992
Location: /think
FILE rw-rw-r-- 53208 Dec 4 1990 xrolodex.shar.Z
Host citi .umich. edu (141.211.128.16)
Last updated 16:05 9 Apr 1992
Locat ion: /afs/alw. nih. gov/dcrt/brunetti/Oldfiles
DIRECTORY rwxrwxrwx 2048 Apr 1 i0 : 16 xrolodex
Location: /afs/alw. nih. gov/dcrt/brunetti
DIRECTORY rwx_rwxrwx 2048 Apr 1 10:16 xrolodex
Host plaza, aarnet, edu. au (139.130.4.6)
Last updated 05:54 27 Apr 1992
Location: /Xll/contrib
FILE r--r--r-- 103267 Apr 24 02:28 xrolodex.tar.Z
archie>
In this example, the pattern used for the prog command is assumed to be an exact match to
the name of the program we want. You can specify different ways of searching using the set
search command. For example:
archie> set search sub
archie> prog rolo
will force a search of all items in the database with "rolo" as a substring.
Compiling Public Domain Software 249
Rather than using telnet to directly contact an Archie server, there are programs available to
automate the search. See Section B.2 for information on obtaining and compiling xarchie,
which provides an X I 1 interface to accessing an Archie server.
If you don't have Internet access at all, you can use the e-mail interface by sending mail to
archie@host, where host is one of the machines listed in Table B- I. See The Whole lnternet
User's Guide & Catalog by Ed Krol (O'Reilly & Associates, 1992) for more information.
B.1.2
Get the FAQ
Archie is a great way to find sources. However, if you have access to the comp.widows.x
FAQ (Frequently Asked Questions) list, looking through the FAQ might actually be easier.
The FAQ is a great wealth of information that is posted at the beginning of each month to the
newsgroup comp.windows.x. It is updated frequently, so if you have absolutely any question
about X, the first place you should look is in the FAQ.
As far as sources are concerned, some public domain sources are placed on several anony-
mous ftp sites, but not all are updated when new versions or bug fixes are announced. If the
comp.windows.x FAQ list tells you where to get sources, it's likely to tell you the most reli-
able site.
If you don't have a FAQ handy, either post to one of the comp.windows.x newsgroups for
someone to send it to you, orfip it yourself as described in Section A.2. You can also get it
from mail-server@pit-manager.mit.edu. Or if you can wait a little, look for it on comp.win-
dows.x--the FAQ is promptly re-posted at the beginning of every month, as are the FAQs for
comp.windows.x.motif and comp.windows.openlook.
(If you don't have access to Usenet, you can get on a mailing list called xpert. To get on that
mailing list, send mail to xpert-request@expo.lcs.mit.edu.)
At this writing, there are 145 questions answered in the FAQ, definitely worth the bandwidth
to get it. If you find it useful, also look for the FAQs for OSF/Motif and for OPEN LOOK.
B.1.3
The Usual Suspects
You can find a description of other ways to find sources on the machine rOCrn.mit.edu, in the
directory/puh/usenet/news.answers. A list offtp sites can be found in the ftp-list directory,
and the file finding-sources gives some more information on how to find what you want.
If neither the FAQ nor Archie mentions what you want, and you have Internet access, try a
few of the usual suspects--such as export.lcs.mit.edu (where you'd also find the X l I sources
themselves) in the/contrib directory, orftp.uu.net in the/comp.windows.x directory.
(While you're at export or uunet, you might want to browse around a bit. There's a lot of
good stuff available, you just need to know about it.)
If all else fails, try sending a polite post to comp.windows.x asking if this program is public
domain and, if so, would anyone be kind enough to help you get it.
250 The X Window System Administrator's Guide
act ions. c get_vdir, c udp. c
act ions. h patchl evel. h vl_ccp, c
alert, c pauthent, h vlalloc, c
alert .h pccpat .h xarchie- 1.3. tar. Z
appres, h perrmesg, c xarchie, c
aquery, c perrno, h xarchie, h
archie, h pfs. h xarchie, man
atal 1 oc. c Inachine. h
imui@opal%
Now we've come to the First Cardinal Rule of compiling sources: when there's a README,
read it.
imui@opal% more README
for Xarchie - Xll browser interface to Archie
George Ferguson, ferguson@cs, rochester, edu
Last Change: 12 Nov 1991
DISCLAIMER:
This is release 1.3 of xarch/e -- an X browser interface to
the Archie Internet information system.
This software is provided as is with no warranty expressed or
implied. I hope you find it useful, but I n't be held responsible
for any damage that may occur frcm reading, ccpiling, installing,
using, or even thinking about it.
..o
Further down in the README are the instructions on how to actually install the program.
INSTALLATION:
i. Edit the Imakefile to reflect any changes for your site. These
include setting BINDIR, LIBDIR, and MANDIR if needed, and
checking CDEBUGFLAGS if debugging or optimization is desired.
If your system doesn't have re_ccp() and re_exec(), then you
need to unccment the appropriate section in the Imakefile to
include those routines.
Ccpiling this program requires the "ad2c" program. You should
have received a copy of ad2c with this distribution, in the
subdirectory "Ad2c'. You should set the AD2C variable as
r_quired. Actually, ad2c is only required if you change Xarchie.ad
and want the new defaults ccpiled in as fallback resources. If
you don't have ad2c, you probably want to remove the line that
adds Xarchie.ad.h to the "clean" target.
You may want to change defaults in Xarchie.ad; consult the manpage
for details, and see above about ad2c.
This brings us to Cardinal Rule Number 2: follow directions.
Compiling Public Domain Software 253
B.2.3 Editing the Imakefile
You may not feel up to editing an Imakefile, but we recommend that you give it a try regard-
less. The xarchie lmake3le is somewhat non-standard, but it is straightforward and well-doc-
umented, so it's a good place to start becoming familiar with imake. We'll build a more stan-
dard program, xkeycaps, later in this appendix.
If you don't know what imake is, it's basically a utility to create Makefiles based on system
dependencies. It actually makes a lot of sense--if you're building a lot of applications for a
lot of different machines, you end up editing your Make3le a lot according to each different
machine, and then you have to edit the Make3le of the next application according to the same
dependencies, and it seems as if you keep duplicating your edits, imake lets you set up sys-
tem dependencies in an independent place, in a file called lmake.tmpl, usually kept in
/usr/lib/X11/con3g. For more information on imake syntax, see Section 8.7.
If you just read the lmake3le carefully, you'll get the idea of the sorts of things you might
change.
#
# Imakefile for xarchie : Xll Browser interface to Archie
#
# George Ferguson, ferguson@cs.rochester.edu, 12 Sep 1991.
#
# Where do you want this stuff? Unconent and adjust these to change the
# destinations of "make install" and "make install.man" if the defaults
# are not satisfactory.
#BINDIR = bin
#LIBDIR = lib
#MANDIR = man/manl
##undef ManSuf fix
##define ManSuffix 1
BINDIR is the target directory where the xarchie program will eventually be installed. If you
prefer that xarchie be installed in/usr/local/bin, this is where you'd specify it. Otherwise,
the program will be installed in whatever directory imake has been configured for on your
system. On our system, the default is/usr/bin/X11.
LIBDIR is your X library directory. On our system, the default is/usr/lib/Xll. MANDIR is
where the manual pages go. On our system, the default is/usr/man.
In all three cases, we are satisfied with the default values and leave them unchanged. Con-
tinue with the lmakefile:
# Where is the app-defaults to C converter?
# Only needed if you change the app-defaults file Xarchie.ad and want the
# changes compiled into the program. If you don't have ad2c you should
# remove the extra clean target for Xarchie.ad.h below. If you lose
# Xarchie.ad.h and can't remake it, create it to be an empty file. Of course
# then you'll have to use the resource file at run time.
# If your ad2c came from this xarchie distribution, then use the following
# target, otherwise change it to reflect where you put ad2c.
AD2C = Ad2c/ad2c. script
# Where is the EzMenu widget package?
# You should have received a copy of the EzMenu package with this
254 The X Window System Administrator's Guide
# xarchie distribution.
EZMENUDIR = EzMenu
EZMENULIB = ezMenu$ (TARGET_MACH)
Since both the ad2c and EzMenu packages were included in the tar file, we don't have to do
anything here.
# How excited are you about debugging? This can be -g, -O, or nothing.
CDEBUGFLAGS = -g
# To enable Prospero tracing (controlled by the -debug option), unccnent
# this
#PDEBUG = -DDEBUG
# Does your system have re_comp ( ) and re_exec ( ), or regcmp ( ) and regex ( )
# [in the case of A/UX] ? If not, unccnent the following definitions.
#REGEXC = regex.c
#REGEXO = regex, o
###########################################################################
# Nothing to change below here...
We don't care about debugging, we don't know what Prospero tracing is, and we've deter-
mined that we have the re_compO and re_execO functions by using the man command on
them.
We thus declare ourselves to have finished editing the lmakefile.
As for editing the application defaults: the file Xarchie.ad is the systemwide resource file for
the xarchie application. It's worth it to take a minute to make sure it's set up the way you
want it.
,
! Xarchie.ad : Appli.cation defaults for the Xll browser interface to Archie
! George Ferguson, ferguson@cs.rochester.edu, 12 Nov 1991.
! Non-widget resources
Xarchie. archieHost: archie, sura. net
! Possible values are: exact, substr, subcase, or regexp
Xarchie. searchType: exact
This is when you'd change the name of the archie host to the one closest to you. For example,
you might change it to the one at Rutgers:
Xarchie. archieHost: archie, rutgers, edu
B.2.4
Compiling the Source
Once the lmakefile is set up, compiling is usually a matter of just executing a few commands
and hoping it works. From the README:
2. Execute
% xmkmf
to create the Makefile.
Compiling Public Domain Software 255
If you're running Xl IR4 or later, your X distribution comes with a command called xmkmf,
which stands for "'X Make Makefile." xmkmf is a shell script (usually kept in/usr/bin/Xll)
that is designed to run imake to create Makefiles for third-party X 11 software distributions.
See Section 8.6.1 for more information on xmkmf.
If a software distribution comes with a proper Imakefile, if your X distribution is set up prop-
erly, and if you're generally a lucky person, you can simply run xmkmf and your Makefile(s)
are all set.
imui@opal% xmkmf
mvMakefileMakefile.bak
imake -DUseInstalled -I/usr/lib/Xll/config
imui@opal%
You now have a new Makefile. (Although a Makefile was supplied with the distribution for
sites that may not have imake, it's always better to use one generated by imake.)
3. Execute
% make Makefiles
to run xmkmf in the Ad2c and EzMenu subdirectories. Alternately,
run it (or imake) in each subdirectory by hand.
4. Execute
% make depend
to add the dependencies to the Makefile. This is necessary to
ensure that Xarchie.ad.h is created when needed.
IMPORTANT: Ignore the error message frcn makedepend if Xarchie.ad.h
is not found; it will be created autcatically.
Once again, follow directions.
imui@opal% make Makefiles
making Makefiles in ./Ad2c...
rm -f Ad2c/Makefile.bak
+ mv Ad2c/Makefile Ad2c/Makefile.bak
cd Ad2c; imake -DUseInstalled -I/usr/lib/Xll/config -DTOPDIR=../.
IR=./Ad2c; \
make Makefiles
making Makefiles in ./EzMenu...
rm -f EzMenu/Makefile.bak
+ mv EzMenu/Makefile EzMenu/Makefile.bak
cd EzMenu; imake -DUseInstalled -I/usr/lib/Xll/config -DTOPDIR=../.
RDIR=./EzMenu; \
make Makefiles
imui@opal% make depend
makedepend -s "# DO NOT DELETE ...... I. -IEzMenu -DARCHIE
-DXARCHIE -- aquery, c atalloc, c dirsend, c get_pauth, c get_vdir, c
perrmesg, c ptalloc, c stcopy, c support, c vl_comp, c vlalloc, c xarchie, c
db.c actions.c types.c classnames.c procquery.c settings.c ftp.c
alert, c confirm, c dialog, c
(In R5, xmkmf-a will take combine steps 2-4 of this example.)
Now you're ready for the moment of truth:
5. Make the package using
% make
or install it directly with
% make install install.man
256 The X Window System Administrator's Guide
cc -o xarchie aquery.o atalloc.o dirsend.o get_pauth.o get_vdir.o
perrmesg, o ptalloc, o stcopy, o support, o vl_ccp, o vlalloc, o xarchie, o
db.o actions.o types.o classnames.o procquery.o settings.o ftp.o
alert.o confirm.o dialog.o -g -pipe -LEzMenu -lezMenu-sparc -iXaw
-]/mu -iXt -iXext -IX11
install -c -s xarchie /usr/bin/Xll
install -c -m 0444 Xarchie.ad /usr/lib/Xll/app-defaults/Xarchie
install -c -m 0444 xarchie.man /usr/man/mann/xarchie.l
If you're satisfied with these locations, run the installation for real. (You may have to become
root now.)
imuiSopal% su
Password:
opal# make install
making all in ./EzMenu...
rm -f xarchie
cc -o xarchie aquery.o atalloc.o dirsend.o get_pauth.o get_vdir.o
perrmesg, o ptalloc, o stcopy, o support, o vl_ccp, o vlalloc, o xarchie, o
db.o actions.o types.o classnames.o procquery.o settings.o ftp.o
alert.o confirm.o dialog.o -g -pipe -LEzMenu -lezMenu-sparc -iXaw
-iXmu -iXt -iXext -IXll
install -c -s xarchie /usr/bin/Xll
install -c -m 0444 Xarchie.ad /usr/lib/Xll/app-defaults/Xarchie
install -c -m 0444 xarchie.man /usr/man/mann/xarchie.l
And now it's just a matter of running rehash and starting the xarchie application.
imui@opal% rehash
imui@opal% xarchie &
Note that, for this example, you didn't need to know any C programming, you just needed to
use some basic common sense. Not all compilations work this easily, but many do.
B.3 Using Patches
A patch to a program is exactly what it sounds like: a fix to build on the current sources. As
an example, in the following example we have the xwebster sources from export.lcs.rnit.edu,
which we will unpack and untar.
imui@opal% zcat xwebster.tar.Z I tar xfp -
imui@opal% cd xwebster
imui@opal% is -F
Imakefile controlpanel, c user_prefs.h xwebster, c xwebster.xhm
Make file display_def, c wordlist, c xwebster, h
Xwebster. ad patches/ xwebster. xwebster, man
(The xwebster program is a client program depending on access to a licensed Webster server.
Unless you have access to such a server, you will not be able to use this program. It also
requires a compiled Xw library, which many vendors don't include--you'll have to build it
yourself.)
Compiling Public Domain Software 259
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
Hunk
done
#2 succeeded at 32.
#3 succeeded at 57.
#4 succeeded at 71.
#5 succeeded at 105.
#6 succeeded at 116.
#7 succeeded at 131.
#8 succeeded at 166.
#9 succeeded at 173.
#i0 succeeded at 199.
#ii succeeded at 259.
#12 succeeded at 271.
#13 succeeded at 287.
#14 succeeded at 319.
#15 succeeded at 332.
#16 succeeded at 342.
#17 succeeded at 372.
#18 succeeded at 386.
#19 succeeded at 411.
(The message staing with "Hmm . . . " is the patch program's polite way of telling you
what it thinks it's doing.)
The second patch (patches/patch-Ol) resembles the first in form:
Return-Path: root@gauss.llnl.gov
...
Received: from localhost.ARPAby gauss.llnl.gov (4.0/1.15)
idAA00823; Tue, 3 Apr 90 13:11:46 PDT
Message-Id: <9004032011.AA00823@gauss.llnl.gov>
From: casey@gauss.llnl.gov (Casey Leedom)
To: mayer@hplms2.hpl.hp.com (Niels P. Mayer)
Subject: Small fixes.to X.VllR4/contrib/clients/xwebster/Imakefile
Date: Tue, 03 Apr 90 13:11:45 -0700
Sender: root@gauss.llnl.gov
*** Imakefile-dist Mon Mar 6 03:41:36 1989
Imakefile Wed Mar 28 11:00:54 1990
*** 1,37 ****
#
# This assumes that the HP Xwidget sources patched for r3 have been placed
! # in $(TOP)/lib/Xw.
#
! XWLIB = $(TOP)/lib/Xw/libXw.a
Apply this patch in a similar fashion:
imui@opal% patch < patches/patch-01
Hn... Ixoks like a new-style context diff to me...
The text leading up to this was:
]*** Imakefile-dist Mon Mar 6 03:41:36 1989
]--- Imakefile Wed Mar 28 11:00:54 1990
Patching file Imakefile using Plan A...
Hunk #i succeeded at i.
done
Compiling Public Domain Software 261
Hunk #I succeeded at 50.
Hnn... The next patch looks like a new-style context diff to me...
The text leading up to this was:
I*** /tmp/,RCStlall804 Wed Jun 28 14:29:00 1989
I--- Xwebster.ad Wed Jun 28 14:22:26 1989
Patching file Xwebster.adusing Plan A...
Hunk #I succeeded at 48 (offset 2 lines).
Hunk #2 succeeded at 307 with fuzz 1 (offset 28 lines).
Hunk #3 succeeded at 297 (offset 4 lines).
Hunk #4 failed at 368.
Hunk #5 succeeded at 454 (offset 49 lines).
1 out of 5 hunks failed--saving rejects to Xwebster.ad.rej
Hnn... The next patch looks like a new-style context diff tome...
The text leading up to this was:
I*** /tp/,RCStlall812 Wed Jun 28 14:30:18 1989
I--- controlpanel.c Wed Jun 28 14:22:27 1989
Patching file controlpanel.c using Plan A...
Hunk #I succeeded at 40.
Hunk #2 succeeded at 47.
Hunk #3 succeeded at 209.
Hunk #4 succeeded at 270.
Hunk #5 succeeded at 330.
Hunk #6 succeeded at 374.
Hunk #7 succeeded at 402.
Hunk #8 succeeded at 426.
Hunk #9 succeeded at 483.
Hunk #i0 succeeded at 502.
Hunk #II succeeded at 520.
Hnn... The next patbh looks like a new-style context diff tome...
The text leading up to this was:
I*** /tp/,RCStlal1826 Wed Jun 28 14:32:56 1989
I--- xwebster.c Wed Jun 28 14:22:31 1989
Patching file xwebster.c using Plan A...
Hunk #I succeeded at 266.
Hunk #2 succeeded at 275.
done
The error you may want to pay attention to is the one that failed, at line 368 in the Xweb-
ster.ad file. The patch program is nice enough to tell you what failed and to save the rejected
patch in a file called Xwebster.ad.rej. (You can use the -s option to patch to suppress com-
ments and report failures only.) You can examine that file and see if you can reconstruct
what it intends to do, but that's beyond the scope of this exercise.
When you are satisfied that all patches are applied, you can complete the build:
imui@opal % xmkmf
mv Makefile Makefile.bak
imake -DUseInstalled -I/usr/lib/Xll/config
imui@opal% make depend
makedepend -s "# DO NOT DELETE .... I/work/imui/src/Xw
-DAPPDEFAULTSDIR=
display_def.c wordlist.c xwebster.c
Compiling Public Domain Software 263
imui@opal % make
cc -O -pipe - I/work/imui/src/Xw -DAPPDEFAULTSDIR=
-target sun4 -c controlpanel.c
cc -0 -pipe - I/work/imui/src/Xw -DAPPDEFAULTSDIR=
-target sun4 -c display_def.c
cc -0 -pipe -I/work/imui/src/Xw -DAPPDEFAULTSDIR=
-target sun4 -c xwebster, c
rm -f xwebster
cc -o xwebster controlpanel.o display_def.o wordlist.o xwebster.o -O
-pipe /work/imui/src/Xw/Xw/libXw.a -iXt -iXext -IXll
imui@opal%
Once the you have edited the application defaults to reflect the location of the Webster
server, you can install the xebster program system-wide by executing make install and
(optionally) make install.man as root. Then read the manual page to learn how to run the pro-
gram and enjoy.
B.4 Another Example-xkeycaps
Before we end this appendix, let's show a more "standard" compilation. For this we choose
xkeycaps, a public domain program that's useful as a front end for the xrnodrnap program.
xkeycaps can be taken from export.lcs.mit.edu:
imui@ruby 35% ftp export.lcs.mit.edu
Connected to export.lcs.mit.edu.
220 export.lcs.mit.edu FTP server (NEWS-OS Release 4.1C) ready.
Name (export.lcs.mit.edu:imui): anonymous
331 Guest login ok, send ident as password.
Password:
230 Guest login ok, access restrictions apply.
ftp> cd contrib
250 CWD conmand successful.
ftp> is *keycaps*
200 PORT conm%nd successful.
150 Opening data connection for /bin/is (ascii mode) (0 bytes).
xkeycaps, tar. Z
226 Transfer complete.
remote: *keycaps*
16 bytes received in 0.014 seconds (1.2 Kbytes/s)
ftp> bin
200 Type set to I.
ftp> get xkeycaps, tar. Z
200 PORT conm%nd successful.
150 Opening data connection for xkeycaps.tar.Z (binary mode) (121687 bytes).
226 Transfer complete.
local : xkeycaps, tar. Z remote: xkeycaps, tar. Z
121687 bytes received in 31 seconds (3.9 Kbytes/s)
ftp> quit
221 Goodbye.
imui@ruby 36%
Now that we have it, unpack the compressed tar file, take a look at the resulting directory
contents. Once again, since there's a README, read it.
264 The X Window System Administrator's Guide
Sun2
Sun3
Sun4
Sun4ow
N97
NI01
NI02
NI02SF
NI02N
NI02F
NI08
NCD220
LK201
LK401
RS6k
SCOII0
HP700X
HP720
NWS
DELL
SGI
Explorer
- Sun type2 (MIT layout)
- Sun type3 (MIT layout)
- Sun type4 (MIT layout)
- Sun type4 (OpenWindows layout)
- Network Ccputing Devices N97
- Network Ccputing Devices NI01
- Network Ccputing Devices NI02
- Network Ccputing Devices NI02 (Swedish/Finnish layout)
- Network Ccputing Devices NI02 (Norwegian layout)
- Network Ccputing Devices NI02 (French layout)
- Network Ccputing Devices NI08
- Network Ccputing Devices vt220
- Digital Equilmnent Corporation LK201
- Digital Equilmnent Corporation LK401
- Inferior But Marketable RS/6000
- Santa Cruz Operation II0
- Hewlett Packard 700X
- Hewlett-Packard 720
- Hewlett-Packard PC
- Atari T?
- Sony NWS 1250
- DELL PC
- Silicon Graphics
- Texas Instruments Explorer
As the default, we get the N101 keyboard:
[ XKeyCaps; Network Computing
Oult KeyCode"
Select Keyboard) KeySym:
-, ASCII"
Figure B-2. xkeycaps window
When you decide to install xkeycaps, run both make install and make install.man as root. As
before, it's a good idea to check what's going to be installed before you actually do it, using
the -n option to make:
imui@ruby 82% make -n install install.man
if [ -d /usr/bin/X11 ] ; then set +x; \
else (set-x; /bin/sh /usr/bin/Xll/mkdirhier /usr/bin/Xll); fi
Compiling Public Domain Software 267
install -c -s xkeycaps /usr/bin/Xll
echo "install in . done"
if [ -d /usr/man/mann ]; then set +x; \
else (set-x; /bin/sh /usr/bin/Xll/mkdirhier /usr/man/mann); fi
install -c -m 0444 xkeycaps.man /usr/man/mann/xkeycaps.n
echo "install.man in . done"
If this is fine with you, go ahead and install the program:
imui@ruby 83% su
Password:
# make install install.man
install -c -s xkeycaps /usr/bin/Xll
install in . done
install -c -m 0444 xkeycaps.man /usr/man/mann/xkeycaps.n
install.man in . done
#
B.5 Related Documentation
imake is discussed in more detail in Section 8.7.
For more information on xmkmf, see its manual page and Section 8.6.1 of this book.
The Whole Internet User's Guide & Catalog by Ed Krol (O'Reilly & Associates, 1992).
Managing Projects with make, by Andy Oram and Steve Talbott (O'Reilly and Associates,
1991).
268 The X Window System Administrator's Guide
C
X on Non-UNIX Platforms
X runs on all types of hardware, on all sorts of operating systems. Both cli-
ents and servers run on IBM-compatible PCs running DOS, as well as Macin-
tosh computers. Full X distributions are available for NeXT machhTes, but
the servers have to negotiate with the NeXTstep interface. This chapter
briefly describes the X products available on those platforms.
In This Appendix:
X on DOS-based PCs ........................................................................ 272
Requirements for PC X Servers ..................................................... 272
Installing and Configuring PC X Servers ........................................ 273
Problems Particular to PC X Servers ............................................. 274
X on Macintosh Computers ................................................................ 275
Macintosh-based X Servers ........................................................... 275
MacTCP and the Communications Toolbox .................................... 276
X on NeXT Computers ....................................................................... 277
Since there are so many products out there, this appendix only covers generalities about X
running on other platforms. For more information, look for the monthly posting on comp.win-
dows.x on X servers for PCs, Macs and Amigas. This document is also kept on
export.lcs.mit.edu in the file/contrib/XServers-Non UNIX.txt.Z.
C.1 X on DOS-based PCs
Most X software available on PCs running DOS is server software. There are two types of
PC X servers on the market: those that run on top of DOS directly, and those that run on top
of Microsoft Windows.
The X servers that run on top of DOS replace the entire desktop, and returning to DOS
usually requires exiting (or suspending) X. The X servers that run on top of Windows, on the
other hand, provide an integrated environment with access to both X and Microsoft Windows
applications simultaneously. Some Windows-based X servers also let you cut-and-paste
between the X environment and the Windows environment.
If the PC will be used primarily for running X--that is, as an economical X terminal--then
the DOS-based X servers are probably sufficient for your needs. If the PC will frequently be
used to run Windows applications as well, however, Windows-based X servers give you the
best of both worlds.
Desqview/X by Quarterdeck Office Systems provides the first distribution of both X clients
and servers for PCs running MS/DOS. Desqview/X runs on top of Quarterdeck's Desqview
multi-tasking GUI, integrating DOS applications, MS-Windows applications, and X applica-
tions. You can use Desqview/X to remotely execute PC applications as X clients and display
them on any connected X server.
C.1.1
Requirements for PC X Servers
We mentioned that PCs have to meet serveral requirements before they can run X servers. In
general, before you can run a PC X server, you have to meet the following requirements:
Processor The PC should have a 80386 or '486 CPU processor. (Some vendors also support
'286 machines, but no one recommends it.)
Monitor The PC needs an enhanced video display. Most vendors require either a VGA or
Super VGA display. Some vendors also support EGA and 8514 graphics. Note
that what the PC world calls a "high resolution" monitor still has lower resolu-
tion than a low-resolution X terminal.
Mouse The PC must have a two-button or three-button mouse.
Memory The PC must have 640K bytes of base memory, plus either 1.4 megabytes of
usable extended memory for DOS-based X servers, or 2 megabytes of memory
for Windows-based X servers.
272 The X Window System Administrator's Guide
C.2 X on Macintosh Computers
Full X distributions are available on Macintosh computers that run UNIX as well as the Mac-
intosh OS. Two UNIX products for the Macintosh are System-V based A/UX by Apple Com-
puter, and BSD-based MachTen from Tenon Intersystems.
If you don't have a full UNIX distribution, you can still run an X server, or set up the Macin-
tosh to run an X client. There are currently two X server products for the Macintosh: MacX
and eXodus. MacX is a Macintosh X server that is available from Apple Computer (it is also
bundled with their System V-based UNIX operating system, A/UX, as of version 2.0. l). eXo-
dus is a Macintosh X server distributed by White Pine Software.
There are also currently two X client products for the Macintosh: Planet X and Xgator.
Planet X is distributed by InterCon Systems and Xgator is distributed by Cayman Systems.
The advantage of a Macintosh X client is that you can run Macintosh programs on your X
terminal. Unfortunately, only one user can access the same Macintosh at a time, so the Mac-
intosh becomes disabled while the X client is running, and no other X users can start up the
client software while someone else is using it.
Macintosh-based X servers and clients alike require either a direct Ethernet connection or a
LocalTalk connection to a LocalTalk/IP gateway such as Cayman's GatorBox. The Commu-
nications Toolbox must also be installed (standard with System 7), with the MacTCP tool
installed and configured properly.* (eXodus works with DECnet as well as TCP/IP.)
C.2.1
Macintosh-based X Servers
Both X servers for the Macintosh, MacX and eXodus, can run either "rootless" or "rooted."
By "rootless," we mean that X clients open directly on the Macintosh desktop, intermixed
with other Macintosh windows. The Macintosh OS acts as a window manager for both X and
Macintosh windows. By "rooted", we mean that a typical X root window is active, either
enclosed entirely within a Macintosh window, or available through a pull-down menu. An X
window manager can be used in a rooted window (such as twrn, rnwrn or olwm).
Some X programs may have problems with a rootless environment; to run those programs,
use rooted screens only. MacX defines 4 screens: screen 0 is rootless monochrome, screen l
is rooted monochrome, screen 2 is rootless color, and screen 3 is rooted color, eXodus allows
you to define up to 6 screens as either rooted or rootless.
One of the most obvious problems with using a Macintosh as an X server is that the Macin-
tosh mouse only has one button. MacX uses the left-arrow and right-arrow keys to act as the
second and third mouse button (respectively). eXodus provides a little more flexibility for
configuring mouse behavior. In addition, there are third-party mice for Macintosh computers
that have two or three buttons.
* SLIP has also recently become available for the Macintosh.
X on Non-UNIX Platforms 275
(Users of OPEN LOOK programs can use the props utility to change the behavior of the
SELECT mouse button so that it brings up menus instead of selecting the default item when
pressed on a menu button. This is a good tip for all 1- and 2- button mouse users. Mac users
who also run olwm might also want to use props to turn off "pointer jumping," by which
olwm and olvwm move the mouse pointer automatically to follow scrollbars and pop-up
notices.)
You can get upgrades to MacX from aux.support.apple.com, in the /aux.patches/sup-
ported/MacX directory. You are encouraged to retrieve the MacX upgrades only if you
already have a legal license for MacX. (Only the server is redistributed on the ftp site, which
is useless without the fonts or a font conversion utility anyway.)
If you use either MacroMaker or QuickKeys on your Mac, it is strongly recommended that
you disable it. MacroMaker and QuickKeys translate keystrokes, conflicting with the X
server.
C.2.2
MacTCP and the Communications Toolbox
To run Macintosh X products, you generally need to have MacTCP running. MacTCP was
developed by Apple, and is distributed by several third-party vendors. It is also bundled with
MacX.
MacTCP runs under the Communications Toolbox. The following tips are important to note
when installing MacTCP:
1. You must install the Communications Toolbox correctly. Under System 7, the Commu-
nications Toolbox is already installed as part of the base OS distribution. If you need to
install the Communications Toolbox for a Macintosh that is not running System 7, how-
ever, you can't simply create a Communications folder under your System folder and
copy the MacTCP tool in there. You must run the installation utility that is bundled with
the Communications Toolbox.
If you don't install the Communications Toolbox correctly, you'll never get a message
that tells you it's improperly installed. Instead, you'll get an error message such as "No
Communications Tools Installed," which misleadingly implies t_hat the Toolbox is
installed correctly but MacTCP isn't.
2. You need to copy the MacTCP tool to the new Communications folder within the system
folder, and copy the MacTCP and AdminTCP files to the System folder (under System 7,
these files reside in the Control Panels folder). We strongly recommend that you do not
copy these files from another Macintosh, but take them directly from the distribution flop-
pies. If you do copy them from another Mac, make sure not to take the MacTCP Prefer-
ences file.
3. Configure MacTCP using the AdminTCP control panel document. (AdminTCP is identi-
cal to MacTCP, except that you can use AdminTCP to lock the configuration after it is
properly configured.) Here is where you specify things like your IP address, subnet mask,
name server, etc.
4. Reboot and try running a MacTCP program.
276 The X Window System Administrator's Guide
5. Once you have confirmed that MacTCP is properly configured, put a lock on it and throw
the AdminTCP file in the trash.
A possible conflict with MacTCP is that if you are also running NCSA Telnet, you need to be
sure that you are running the version that is MacTCP-compatible. That means that you need
to install the version of NCSA Telnet entitled something like Telnet 2.4 - MacTCP. If you
don't do this, then after running an application that uses MacTCP, you won't be able to run
NCSA Telnet again until you reboot.
Notes on configuring MacTCP are available on sumex-aim.stanford.edu in the file /info-
mac/report/mac-tcp-info.txt .
C.3 X on NeXT Computers
The NeXT machine does not technically belong in a chapter about non-UNIX machines, since
it is based on UNIX. The NeXT machine also has built-in Ethernet and TCP/IP, so a lot of the
issues for running X on PCs and Macs don't apply to the NEXT. However, we discuss them
here because NeXT X distributions are a different breed from other UNIX distributions, since
they have to deal with the NeXTstep interface.
A public domain R4 X distribution for the NeXT called XNeXT is available through anony-
mous ftp from cunixf.cc.columbia.edu. (Although an R5 server is currently available for the
NeXTstation Turbo, it is not yet available for other NeXT machines.)
There are also three commercial products for the NEXT. These are co-Xist by Pencom Soft-
ware, Cub'X by Cub'X Systemes (distributed in the U.S. by Interactive Technology), and
eXodus from White Pine Software. Cub'X and co-Xist are full X distributions including
servers, clients, and libraries, with OSF/Motif clients and libraries also available, eXodus is
just a server with a select group of clients.
All three commercial implementations meld X with the NeXTstep interface much in the way
Macintosh and Windows-based X servers do, in a "rootless" mode. XNeXT, on the other
hand, supplants the NeXTstep interface and requires you to "hot-key" to switch between the
two modes.
Regardless of what X server you choose to run on the NEXT, you should make sure that the
second mouse button is enabled in NeXTstep (through the Preferences application), or it
won't be available to the X server.
X on Non-UNIX Platforms 277
D
Resources and Keysym Mappings
Resources and keysym mappings are topics that the administrator needs to
be familiar with in order to configure applications and set up user environ-
ments. This appendix gives some background material on both of those top-
ics.
In This Appendix:
Using Resources
Resource Definition Syntax ....................................................
Loose and Tight Bindings .....................................................
The -name Command-line Option ........................................
xterm Versus XT.erm ............................................................
Where Resources Are Defined ...............................................
Advantages of xrdb ................................................................
Translation Tables ..................................................................
Defining Keys and Button Presses With xmodmap .....................
Using xev to Learn Keysym Mappings ........................................... 292
Related Documentation ..................................................................... 293
....... 281
....... 282
....... 283
....... 283
....... 285
....... 287
....... 288
....... 290
D
Resources and Keysym Mappings
Two important pieces to the X puzzle are resources and keysym mappings. Although these
two issues are unrelated, they both come into play when administrators have to debug user
environments or configure applications system-wide. This appendix gives some background
material on both of those topics.
Resources are covered in detail in Volume Three, X Window System User's Guide, by Valerie
Quercia and Tim O'Reilly (O'Reilly & Associates, 1990). Some of the material in this chap-
ter repeats what you'll find there, but we also give some useful tips and advanced informa-
tion for administrators. Even if you are familiar with how to use resources, you may want to
scan this appendix.
D.1
Using Resources
Resources are tricky to deai with, but understanding how they work is extremely important
for X administration. They are used for configuring not only everyday clients like xterm and
xclock, but also special clients such as window managers and the X Display Manager (xdm).
Resource syntax is used even by some X terminal vendors for configuring the X server
remotely. For these reasons, we think it's worth it to cover resource definition in depth.
D.1.1
Resource Definition Syntax
The syntax for defining resources can be quite complex, requiring some familiarity with
widget hierarchies. For our purposes, however, it will suffice to know that the syntax for a
simple resource follows the form:
name*variable: value
For e xample:
xt erm*background: cadetblue
xterm* foreground: deeppink
specifies that the client named xterm should use a background color of cadet blue and a fore-
ground color of deep pink. Similarly, you can specify a specific font with:
xterm* font: -schumacher-clean-bold-r-normal--16-160-75-75-c-80-iso8859-1
Resources and Keysym Mappings 281
D.1.1.2
D.1.1.3
the xcal calendar program, for example, to affect the behavior of the xcalc calculator pro-
gram as well.
A resource can be overridden by a more specific resource--for example, if you set the fol-
lowing resources:
xterm*background: blue
xterm.VTl O0. background: red
and then open a standard xterm window with the VTIO0 widget, the second declaration is
more specific than the first and the window background will appear in red. However, note
that any other xterm widgets, such as mainMenu, will appear with a blue background.
In R5, the question mark (.9) character is introduced in resource names. A question mark in a
resource name represents exactly one field in a loose binding. Loose bindings using question
marks are considered to be more specific than bindings using only asterisks. Bindings with
question marks will therefore take precedence over other loose bindings.
The-name Command-line Option
An X toolkit option that has an important effect on which resources a client uses is the -name
option, which effectively changes the name of the client. By changing the name of the client,
it changes the name of the resources it accepts as well.
The possibilities available with the -name option are best illustrated by example. A user
might want to have xterm windows from a host called sapphire with a blue border, but win-
dows from host ruby with a red border. There are multiple ways of doing this, but one way
might be to define the following resources to be accessed by all xterm clients:
xt erm- sapphire *BorderColor: blue
xterm- ruby*BorderColor: red
and then start up the windows with -name options, to give the window from machine rub)'
the name xterm-ruby and the window from the machine sapphire the name xterm-sapphire.
% xterm -name xterm-ruby &
% xterm -name xterm-sapphire &
Although the -name option for the xterm client changes the string in the titlebar as well, it
should not be confused with the -title option, which changes the string in the titlebar but does
not change the name of the client itself.
xterm Versus XTerm
Although we'd like to avoid all the complexities of how resources are named, there is one
detail that we can't escape. Sometimes the name xterm is used in resource names, and
sometimes XTerm is used. Although this usage seems arbitrary, it isn't at all, and the two
terms should not be confused.
The name of your window is usually the name of the client; that is, if you just run xterm, the
window that comes up will have the name xterm. As described above, however, you can use
the -name toolkit option to change the name of the window. For example, if you are running
a console window (started with the -C option to xterm), you might want to name that window
Resources and Keysym Mappings 283
shared among multiple hosts. In general, the preferred way of specifying a reasonable
number of resources for a user is to use xrdb.
The xrdb client is typically run in the user's startup script, e.g., .xsession or .xinitrc, to
load a resource file (any filename can be used, but common names are .Xresources and
.Xdefaults). An administrator can also set up a default resource file for all users, to be
read by xrdb in the systemwide startup script (for sessions started with xdm, this would be
/usr/lib/Xll/xdm/Xsession). Note that resources loaded into the resource database are
still read only at client startup: a change will affect only subsequent clients, not clients
already running.
5. If no resources are loaded directly into the server (i.e., if xrdb has not been run), defaults
are read from a file called .Xdefaults, usually in the user's home directory. Note that this
means that clients run from different hosts may use different resources if your home
directory is not shared among machines.
6. Resources loaded directly on the command line, using the -xrm option.
In the list above, we say that some default files are "usually" read from a user's home direc-
tory. The directory in which you keep your application defaults is assumed to be your home
directory. The XAPPLRESDIR environment variable comes into play here--if you set XAP-
PLRESDIR to $HOME/Xstuff, the resource manager will look under that directory for client-
specific resource files (such as XTerm). Other environment variables that affect where
resources are read from are XFILESEARCHPATH and XUSERFILESEARCHPATH.
Seeing Where Resources are Read (SunOS, Solaris, SVR4)
To see what resource files are read on client startup, try using the trace command on a
SunOS machine, or the truss command on a Solaris 2.0 or SVR4 machine. For example:
imui@ruby% trace xterm >& /tm/xterm. trace
Then examine the resulting file:
gethostname (" ", 1002) = 0
open ("/hcme/imui/.Xdefaults-ruby", 0, 017777777) =-i ENOENT (No such
file or directory)
access ("/hcme/imui/XTerm", 04) = -1 ENOENT (No such file or directory)
access ("/usr/lib/X11/app-defaults/XTerm", 04) = 0
stat ("/usr/lib/X11/app-defaults/XTerm", 0xf7ffed90) = 0
open ("/usr/lib/X11/app-defaults/XTerm", 0, 036734323664) = 4
stat ("/usr/lib/Xll/app-defaults/XTerm", 0xf7fff200) = 0
read (4, "*SimpleMenu*BackingStore: NotUse".., 2800) = 2800
close (4) = 0
In the example, note that the user had resources loaded into the server, so $HOME/.Xde-
faults was not opened. The only resource file in its path that it found and opened was the
system-wide app-defaults/XTerm file.
286 The X Window System Administrator's Guide
Calculator
Figure D-1. xcalc window
Each button is given its label (e.g., PI for the first button), followed by the event translation
when it is pressed. In the case of the 16th button, the internal function piO is called, presum-
ably returning the value of n. (Since the foreground and background colors are reversed on
the button when it is initially pressed, the Athena Command widget action unsetO is then
called, returning the button colors to the default.) For the 20th button, "/" is the label, and
pressing it calls the divide() function. Clearly a user could easily redefine the behavior of
each button on the xcalc keypad by switching the translations in their own resource files. (Be
sure to switch the labels too, though!)
Also in the XCalc application defaults file is a full translation table for interpreting keys-
trokes within the xcalc window:
XCalc. ti. bevel, screen. LCD. Translations: #replace\n\
Ctrl<Key>c :quit ( ) \n\
Ctrl<Key>h: clear ( ) \n\
None<Key>0: digit (0) \n\
None<Key>l :digit (i) \n\
<Key>_'0: digit (0) \n\
<Key>KP_I : digit (i) \n\
<Key>3 :digit (9) \n\
ooo
<Key>KP_Divide: divide ( ) \n\
<Key>: [iecimal ()\n\
<Key>+: add ( ) \n\
<Key>-: subtract ( ) \n\
<Key>* :multiply ( ) \n\
<Key>/:divide() \n\
<Key> ( : leftParen ( ) \n\
<Key>) : rightParen ( ) \n\
<Key> ! : factorial ( ) \n\
Resources and Keysym Mappings 289
D.2.1 Using xev to Learn Keysym Mappings
The xev client is essential for debugging keysym mappings. When you start up xev, a small
"event window" appears. All events that take place within that window are shown on stan-
dard output. This means screenfuls of output, but it also means that when you type a key, you
can immediately trace the resulting event. For example, if you need to know what keysym is
sent when you type the Delete key on the keyboard, just run xev and type the Delete key in
the event window. Typical output might be:
KeyPress event, serial 13, synthetic NO, window 0x800001,
root 0x8006d, sub 0x800002, time 1762968270, (50,36),
root: (190,176), state 0x0, keycode 27 (keysym 0xffff, Delete),
same_screen YES,
XLookupString gives 1 characters:
KeyRelease event, serial 15, synthetic NO, window 0x800001,
root 0x8006d, sub 0x800002, time 1762968336, (50,36),
root: (190,176),
state 0x0, keycode 27 (keysym 0xffff, Delete), same_screen YES,
XLookupString gives 1 characters:
This tells you that the Delete key (keycode 27), interpreted as keysym Oxffff, which is
Delete and character ^ ?. If you do an xrnodmap -pk, you should see a line resembling:
27 0xffff (Delete)
If you redefine the Delete key as the Backspace key and do the same exercise (run xev and
press the Delete key), you should see something like:
% xmodmap -e "keysym Delete = BackSpace"
% xev
oo,
KeyPress event, serial 13, synthetic NO, window 0x800001,
root 0x8006d, sub 0x800002, time 1763440073, (44,39),
root: (240,235),
state 0x0, keycode 27 (keysym 0xff08, BackSpace), same_screen
YES,
XLookupString gives 1 characters: "^H"
KeyRelease event, serial 15, synthetic NO, window 0x800001,
root 0x8006d, sub 0x800002, time 1763440139, (44,39),
root: (240,235),
state 0x0, keycode 27 (keysym 0xff08, BackSpace), same_screen
YES,
XLookupString gives 1 characters: "^H"
This tells you that now the Delete key (still keycode 27) is being interpreted as hexadecimal
0xff08, keysym BackSpace, and generates character "^H." xmodmap -pk should show
you:
27 0xff08 (BackSpace)
292 The X Window System Administrator's Guide
D.3 Related Documentation
The following X manual pages may be of interest: xrdb, xmodmap, xcalc, xcalc, xprop, xev,
and tWmo
For more information, see X Window System User's Guide, by Valerie Quercia and Tim
O'Reilly (O'Reilly & Associates, 1990).
"Making Better Use of Resources," by Paul Davey, published in The X Resource, Issue 3,
O'Reilly & Associates, Inc., Summer 1992.
Resources and Keysym Mapptngs 293
E
The Components of X Products
This appendix lists the contents of various X distributions.
In This Appendix:
MIT Xl 1 Release 5 ............................................................................ 298
OSF/Motif .......................................................................................... 299
Sun OpenWindows ............................................................................ 300
DECWindows .................................................................................... 301
AIXWindows ...................................................................................... 302
Silicon Graphics ................................................................................. 302
A Guide to Xl 1 Libraries .................................................................... 303
Keep in mind that your pathnames may differ, but the directories bin, lib, and include should
exist in some form.
The names of libraries vary depending on the system--SunOS shared libraries have a
.so.version or .sa.version extension, while Silicon Graphics shared libraries have a _s exten-
sion. A _p extension usually means that the library has been "profiled" for performance anal-
ysis. An extension such as _GO indicates it was built with a specific compiler option.
The following information should help you determine what type of installation you currently
have and what you would like to install.
E.1 MIT Xll Release 5
To the user, Release 5 looks very similar to Release 4. Most of the new features (such as the
font server, PEX, and the Xcms color system) are more visible to the X programmer and to
the administrator than they are to the user. As in R4, the include files for toolkits and related
files are grouped into subdirectories. (In previous MIT releases and some vendor implemen-
tations, the include files were in one directory.)
Table E-2. MIT X l 1R5 Files
File
/usr/bin/X11/X
/usr/bin/X11/twm
/usr/bin/X11/fs
/usr/lib/X11/PEX/
/usr/ lib/X11/XKeysymD B
/usr/lib/X11/XErrorDB
/usr/ lib/X11/app-defaults/
/usr/lib/X11/config/
/usr/lib/X11/fon ts/
/usr/lib/X11/fs/
Description
A link to a server executable. The server name usually starts
with a capital X. For example, Xsun, Xcfbprnax, and Xsgi are
the names for X servers. The X server will be present in com-
plete installations.
Tab window manager. This is the default window manager in
MIT R4 and R5.
The font server program.
A directory of files used by PEX, the 3-D extension to X11.
This directory is new to R5.
A list of keysyms. This should be installed on any system
using OSF/Motif clients and MIT R5 (A different version of
this will file comes with MIT R5). Most Motif clients will fail
to work properly without this file.
A mapping of X error codes to error messages.
A directory of system-wide default resources for clients.
A directory of configuration files copied from the source build
area. These configuration files are used by imake when build-
ing X programs after the X distribution is installed.
A directory of fonts for the X server. If a local X server is not
present (i.e., if it is a client-only installation), this directory
may be unnecessary. The font server could also read fonts
from this directory over the network for a remote server.
A directory of font server configuration files.
298 X Window System Administrator's Guide
Motif programs include the header files with the Motif subdirectory prepended:
#include <Xm/Xm. h>
The complete pathname of this file becomes/usr/include/Xll/Xm/Xm.h.
Table E-3. Motif Files (Motif 1.1.x)
File
/usr/bin/X11/mwm
/usr/bin/X11/uil
/usr/bin/X11/mre
/ usr/ lib/ fibMrm.a
/usr/ lib/ fibXm.a
/usr/ lib/ libUil.a
/usr/lib/X 11/XKeysymDB
/ usr/ lib/X11/app-defaults/Mwm
/usr/lib/X11/system.mwmrc
/usr/lib/X11/uid/
/usr/include/Xm/
/usr/include/Mrm/
/ usr/ include/ ui l/
$HOME/.mwmrc
Description
The Motif Window Manager.
The UIL (User Interface Language) compiler.
The Motif Resource Editor (this is officially a "demo,"
but it is potentially quite useful--only present in version
1.x).
The Motif resource manager library.
The Motif toolkit library.
The Motif UIL library.
A database of special OSF keysyms for Motif applica-
tions.
System-wide default resources for mwm.
The default startup file for mwm.
A directory of compiled UIL files for clients.
A directory of Motif toolkit include files.
A directory of Motif resource manager include files.
A directory of Motif UIL include files.
The user-specific startup file for mwm.
E.3 Sun OpenWindows
The OPEN LOOK GUI is currently packaged as part of the OpenWindows environment on
Sun systems. OpenWindows is laid out differently from the MIT X installation: all software
is installed under/usr/openwin, as listed in Table E-4.
Table E-4. OpenWindows Files (Sun4, SunOS 4.1.1)
File
bin/openwin
bin/
demo/
etc/
include/
Description
The server start-up script.
A combination of X, OpenWindows, and NeWS clients.
A combination of X, OpenWindows, and NeWS demo programs (including
a demo xterm).
Configuration information for NEWS.
Header files for X and OpenWindows.
300 X Window System Administrator's Guide
E.5 AlXWindows
AIXWindows is quite different than the MIT distribution and it may take some work to get it
to look like the MIT environment. The names and options of standard clients have been
changed from what you are used to, and the layout of the software is quite different than
other vendors' implementations. The current version of AIX, 3.2, is also missing some cli-
ents you would expect when using an MIT distribution. The layout of libraries and include
files is relatively standard.
Table E-7. AIXWindows Files (RS/6000, AIX 3.2)
Files
/usr/bin/Xl l/X
/usr/bin/X11/mwm
/usr/bin/X1 l/xdt
/usr/bin/X11/aixterm
/usr/bin/info
/usr/include/Xl l /*.h
/usr/ include/Xm/*.h
/usr/include/Mrm/*.h
/usr/include/uil/*.h
/usr/lib/lib*.a
/usr/lib/X11 /
/usr/lpp/info/X1 l fonts
Description
The AIXWindows server.
The Motif window manager.
The AIXWindows desktop.
The AIXWindows version of xterm.
The lnfoExplorer hypertext X documentation browser.
AIXWindows header files.
Motif 1.x header files.
Standard X 11 R4 and Motif 1 .x libraries.
Standard X11 R4 lib files.
A directory of fonts for the InfoExplorer utility.
E.6 Silicon Graphics
SGI has had a decent NeWS implementation for several years, working together with the SGI
Graphics Library system (GL). X functionality was added over time in a piecemeal fashion.
With the release of IRIX 4.0, X 11 is an integral part of the server, and works well along with
GL and NEWS. The clients are based on OSF/Motif, which comes with the OS.
Table E-8. Graphics X11 Files (Indigo, IRIX 4.0)
Files
/usr/bin/X11/Xsgi
/usr/bin/X11/4Dwm
/usr/bin/X11/toolchest
/usr/lib/X11/
Description
A combined X11/GL/NeWS server.
A mwm-like window manager.
A "desktop" manager client.
A directory of X 11 R4 "lib" files.
302 X Window System Administrator's Guide
Table E-8. Graphics Xl I Files (Indigo, IRIX 4.0) (continued)
Files Description
/usr/include/Xll/ A directory of both X11 R4 and Motif 1.1 header files.
/usr/lib/lib* X 11 R4 and Motif 1.1 libraries.
E.7
A Guide to Xll Libraries
When compiling software, you may suddenly discover that it requires a library you've never
heard of. In your X 11 adventures, you may see references to the following libraries.
Library
libX 11 .a
libXaw.a
libXext.a
libXt.a
libXau.a
libXdmcp.a
libXinput.a
libXmu.a
liboldX.a
libphigs.a
libXm.a
libUil.a
libMrm.a
libXtm.a libMXt.a
libMu.a
libXw.a
Description
Xlib
Athena widget set
Extensions to Xlib
Toolkit
Authorization
XDMCP
Input methods
Misc Utilities
Backwards compatibility library for X 10
R5 phigs
Motif widgets
Motif user interface language
Motif resource manager
Names for libXt when Motif (1.0.A) required its own version
MIT Motif utilities library (sometimes found in software from MIT
Athena project)
HP Widgets in R3 and R4 contrib
The Components of X Products 303
F
Getting Xll
This appendix lists where you can get the sources and patches to both
Release 4 and Release 5 of X l 1.
In This Appendix:
Where Can I Get Xl 1R5? .................................................................. 307
Where Can I Get Patches to Xl 1R5? ................................................. 311
Where Can I Get Xl 1R4? .................................................................. 311
F
Getting X11
The information in this chapter is taken from the comp.windows.x Frequently Asked Ques-
tions List. We provide it here for your convenience, but we encourage you to get the latest
version of the FAQ (as described in Section A.2) for more updated information.
F.1 Where Can I Get X11 R5?
Information about MIT's distribution of the sources on 6250bpi and QIC-24 tape and its dis-
tribution of hardcopy of the documents is available from Software Center, Technology
Licensing Office, Massachusetts Institute of Technology, 28 Carleton Street, Room E32-300,
Cambridge MA 02142-1324, phone: 617-258-8330.
You will need about 100Mb of disk space to hold all of Core and 140MB to hold the Contrib
software donated by individuals and companies.
PLEASE use a site that is close to you in the network.
Note that the RELEASE notes are generally available separately in the same directory; the
notes list changes from previous versions of X and offer a guide to the distribution.
Table F-1. North America Anonymous ftp
State
California
California
Indiana
Maryland
Massachusetts
Massachusetts
Michigan
Missouri
Montana
New Mexico
New York
Name
gatekeeper.dec.com
soda.berkeley.edu
mordred.cs.purdue.edu
ftp.brl.mil
(good for MILNET sites)
crl.dec.com
export.lcs.rnit.edu
(crl.dec.com is better)
merit.edu
wuarchive, wustl.edu
ftp.cs.montana.edu
pprg.eece.unm.edu
azure.acsu.buffalo.edu
Directory
pub/Xl l/R5
pub/Xl l R5
pub/Xl l /R5
pubC11R5
pub/X11/R5
pubC5
pub/X11R5
packages/X11R5
pub/X. Vl l R5
pub/dist/X11R5
pub/Xl l R5
Address
16.1.0.2
128.32.131.179
128.10.2.2
128.63.16.158
192.58.206.2
18.24.0.12
35.1.1.42
128.252.135.4
192.31.215.202
129.24.24.10
128.205.7.6
Getting Xl I 307
Table F-1. North America Anonymous ftp (continued)
State
North Carolina
Ohio
Ontario
Washington DC
Washington DC
Name
cs.duke.edu
ftp.cis.ohio-state.edu
ftp.cs.utoronto.ca
xl lr5-a.uu.net
xl lr5-b.uu.net
Directory
dist/sources/X11R5
pub/X. V11R5
pubC11R5
X/R5
X/R5
Address
128.109.140.1
128.146.8.52
128.100.1.105
192.48.96.12
137.39.1.12
Table F-2. EuropeCiddle EastCustralia Anonymous ftp
Country
Australia
Denmark
United Kingdom
Finland
France
Germany
Israel
Italy
Netherlands
Norway
Norway
Switzerland
Name
munnari.oz.au
freja.diku.dk
src.doc.ic.ac.uk
hpb.mcc.ac.uk
nic funet.fi
nuri.inriafr
ftp.germany.eu.net
cs.huji.ac.il
ghost.sm.dsi.unimi.it
archive.eu.net
ugle.unit.no
nac.no
nic.switch.ch
Directory
X.Vl l/R5
pubC11R5
graphics/X. V11R5
pubC11 r5
pubC11/R5
X/X11R5
pubC11/X11R5
pubC11R5
pubC11R5
windows/X/R5
pubC11R5
pubC11R5
softwareC11R5
IP Address
128.250.1.21
129.142.96.1
146.169.3.7
130.88.200.7
128.214.6.100
128.93.1.26
192.76.144.129
132.65.6.5
149.132.2.1
192.16.202.1
129.241.1.97
129.240.2.40
130.59.1.40
Table F-3. Japan Anonymous ftp
Region
Kanagawa
Kwansai
Kyushu
TISN
Tokyo
Tokyo
Name
sh.wide.ad.jp
ftp.ics.osaka-u.ac.jp
wnoc-fuk.wide.ad.jp
utsun.s.u-tokyo.ac.jp
kerr.iwanami.co.jp
scslwide.sony.co.jp
Directory
X11R5
X11R5
X11R5
X11R5
X11R5
pub/X11R5
IP Address
133.4.11.11
133.1.12.30
133.4.14.3
133.11.11.11
133.235.128.1
133.138.199.1
308 X Window System Administrator's Guide
Table F-4. UUCP
Name
uunet
decwrl
osu-cis
WJanon
utai
hp4nl
Comment
for UUNET customers
existing neighbors only
(not online until early September)
(host: watjo.swp.wj.com)
Modem: Telebit TB2500 (PEP, V.32, etc)
Systems or L.sys suggested/approximate
entry:
WJanon Any ACU 19200
1-408-435-0240 .... \ login: WJanon
existing neighbors only
Netherlands only
Directory
-/X/R5
-/pub/X l l /R5
-/X. V11 R5
-/X/X11R5/
-/ftp/pub/X11R5
-uucp/pub/windows/X/R5
Table F-5. Other File Transfer Methods
Method
NFS
AFS
NIFFP
(hhcp, cpf, fcp .... )
anon k-TAM
ACSNet
Region
Missouri
Pennsylvania
United Kingdom
United Kingdom
Australia
Comments
wuarchive, wustl.edu
CrchiveCackagesC11R5
128.252.135.4
mount point:/archive
/afs/ grand.c entral.org/pub/X11R5
uk.ac.ic.doc.src
<X.V1 IR5>
00000510200001
user "guest"
000005102000 (Janet)
X.V11R5
146.169.3.7 (Intemet)
204334504108 (IXI)
munnari.oz (fetchfile)
X.V1 l/R5
Please fetch only one file at a time, after check-
ing that a copy is not available at a closer site.
[9/2/91; updated for contrib 10/91 ]
Anyone in Europe can get a copy of the MIT X.V11R5 distribution, including the core and
contributed software and all official patches, free of charge. The only requirement is to agree
to return the tapes, or equivalent new tapes. Only QIC and TK format cartridges can be pro-
vided. Contact: Jamie Watson, Adasoft AG, Nesslerenweg 104, 3084 Wabem, Switzerland.
Tel: +41 31 961.35.70 or +41 62 61.41.21; Fax: +41 62 61.41.30; jw@adasoft.ch.
Getting X l I 309
UK sites can obtain X 11 through the UKUUG Software Distribution Service, from the Depart-
ment of Computing, Imperial College, London, in several tape formats. You may also obtain
the source via Janet (and therefore PSS) using Niftp (Host: uk.ac.ic.doc.src Name: guest
Password: your_email_address). Queries should be directed to Lee McLoughlin,
071-589-5111#5037, or to info-server@doc.ic.ac.uk or ukuug-soft@uk.ac.ic.doc (send a Sub-
ject line of "wanted". Also offered are copies of comp.sources.x, the export.lcs.mit.edu con-
trib and doc areas and most other announced freely distributable packages.
X 11 R5 and X 11 R4 source along with X 11 R5 contrib code, prebuilt X binaries for major plat-
forms, and source code examples from O'Reilly's books is available on an ISO-9660-format
CD-ROM from O'Reilly & Associates. [as of 3/92].
X l 1R5 source is available on ISO-9660-format CD-ROM for members of the Japan Unix
Society from Hiroaki Obata, obata@jrd.dec.com.
X 11R5 source along with GNU source, the comp.sources.x archives, and SPARC binaries is
available on an ISO-9660-format CD-ROM from PDQ Software, 510-947-5996 (or Robert A.
B ruce, rab@ sprite. Berkeley.EDU).
X l 1 R5 source is available from Automata Design Associates, + 1 215-646-4894.
Various users' groups (e.g., SUG) offer X sources cheaply, typically on CD-ROM.
Source for the Andrew User Interface System 5.1 and binaries for common systems are avail-
able on CD-ROM. Information: info-andrew-requests@andrew.cmu.edu, 412-268-6710, fax
412-621-8081.
Binaries for X11RS, with shared libX11 and libXmu, for A/UX 2.0.1 are now available from
wuarchive.wustl.edu:/archive/systems/aux/XllRS. Patches for XIIR5 compiled with gcc
(but not shared libraries) are also available. [John L. Coolidge (coolidge@cs.uiuc.edu,
10/91)]
Binaries by Rich Kaul (kaul@ee.eng.ohio-state.edu) for the Sun386i running SunOS 4.0.2
are available on dsinc.dsi.com (please only after-hours USA EST).
Binaries for the Sun386i are available from compaq.com (131.168.249.254) in
pub/sun-386i/sources and from vernam.cs.uwm.edu (129.89.9.117).
A binary tree for the Next by Douglas Scott (doug@foxtrot.ccmrc.ucsb.edu) is on fox-
trot.ccmrc.ucsb.edu; it is missing the server, though.
Binaries for the Sun386i are in vernam.cs.uwm.edu:/sun386i.
Binaries for the HP-PA are on hpcvaaz.cv.hp.com (15.255.72.15).
Also, Binaries are available from Unipalm (+44 954 211797, xtech@unipalm.co.uk), proba-
bly for the Sun platforms.
310 X Window System Administrator's Guide
F.2 Where Can I Get Patches to X11R5?
The release of new public patches by the MIT X Consortium is announced in the comp.win-
dows.x.announce newsgroup.
Patches themselves are available via ftp from export and from other sites from which X 11 is
available. They are now also distributed through the newsgroup comp.sources.x. Some source
re-sellers may be including patches in their source distributions of X11.
People without ftp access can use the xstuff mail server. It now has 17 patches for XI 1R5
[8/92]. Send to xstuff@expo.lcs.mit.edu the Subject line:
send fixes #
where # is the name of the patch and is usually just the number of the patch.
Here are a few complications:
1. Fix 5 is in four parts; you need to request "5a", "5b", "5c" and "5d" separately
2. The file sunGX.uu, which was part of an earlier patch, was re-released with patch 7
3. Fix 8 is in two parts: "8a" and "8b"
4. Fix 13 is in three parts: "13a", "13b", and "13c"
5. Fix 16 is in two parts: "16a" and "16b"
F.3 Where Can I Get X11 R4?
Integrated Computer Solutions, Inc., ships X11R4 on half-inch, quarter-inch, and TK50 for-
mats. Call 617-621-0060 for ordering information.
The Free Software Foundation (617-876-3296) sells XllR4 on half-inch tapes and on
QIC-24 cartridges.
Yaser Doleh (doleh@math-cs.kent.EDU; P.O. Box 1301, Kent, OH 44240) is making X 11 R4
available on HP format tapes, 16 track, and Sun cartridges. [2/90]
European sites can obtain a free X11R4 distribution from Jamie Watson, who may be reached
at chx400!pan!jw or jw@pan.uu.ch. [ 10/90]
Non Standard Logics (+33 (1) 43 36 77 50; requests@nsl.fr) makes source available.
IXI Limited (+44 223 462 131) is selling X11 R4 source on quarter-inch cartridge formats and
on 5.25" and 3.5" floppy, with other formats available on request. [IXI, 2/90]
Virtual Technologies (703-430-9247) provides the entire X11R4 compressed source release
on a single QIC-24 quarter-inch cartridge and also on 1.2 meg or 1.44 meg floppies upon
request. [Conor Cahill (cpcahil@virtech.uu.net) 2/90]
Young Minds (714-335-1350) makes the R4 and GNU distributions available on a full-text-
indexed CD-ROM.
Getting X l I 311
[Note that some distributions are media-only and do not include docs.]
X 11 R4 is ftp-able from export.lcs.mit.edu; these sites are preferable, and
Location
(1) West USA
Central USA
(2) Central USA
Southeast USA
(3) Northeast USA
(4) UK Janet
UK niftp
(5) Australia
Name
gatekeeper.dec.corn
mordred.cs.purdue.edu
giza.cis.ohio-state.edu
uunet.uu.net
crl.dec.com
src.doc.ic.ac.uk
uk.ac.ic.doc.src
munnari.oz.au
Address
16.1.0.2
128.10.2.2
128.146.8.61
192.48.96.2
192.58.206.2
129.31.81.36
<XV 11R4>
128.250.1.21
are more direct:
Directory
pubC11/R4
pubC11/R4
pub/X. V11R4
X/R4
pubC11/R4
X.VllR4
X.Vll/R4
The giza.cis.ohio-state.edu site, in particular, is known to have much of the contrib stuff that
can be found on export.
The release is available to DEC Easynet sites as CRL::"/pub/X1 l/R4".
Sites in Australia may contact this address: ftp.Adelaide.EDU.AU [129.127.40.3] and check
the directory pub/X/R4. The machine shadows export and archives comp.sources.x. (Mark
Prior, mrp@ucs.adelaide.edu.au, 5/90)
Note: a much more complete list is distributed regularly by Dan Heller (argv@sun.com) as
part of the introductory postings to comp.sources.x.
A set of XIlR4 binaries built by Tom Roell (roell@informatik.tu-muenchen.de) for the
386/ix will available from export.lcs.mit.edu in /contrib and in /pub/i386/XllR4 from
131.159.8.35 in Europe. Stephen Hite (shite@sinkhole.unf.edu) can also distribute to folks
without ftp facilities via disks sent SASE; contact him for USmail and shipping details.
[12/90] In addition, the binaries are available via uucp from szebra [1-408-739-1520, TB+
(PEP); ogin:nuucp sword:nuucp] in/usr2/xbbs/bbs/x. In addition, the source is on zok in/usr-
X/i386.R4server/. [2/91] In addition, if you are in the U.S., the latest SVR4 binary (April 15),
patches, and fonts are available on piggy.ucsb.edu (128.111.72.50) in the directory
/pub/X386, same filenames as above. (Please use after 6pm Pacific, as these are large files.)
[5/91]
A set of HP 9000/800 binaries is available on hpcvaaz.cv.hp.com (15.255.72.15) as
-ftp/pub/MitX 11R4/libs.xS00.Z. [2/91 ]
A set of XllR4 binaries for the NeXT 2.x have been made available by Howie Kaye on
cunixf.cc.columbia.edu
A set of binaries by John Coolidge (coolidge@cs.uiuc.edu) for the Mac running A/UX 2.0 is
available from wuarchive.wustl.edu in the file (/archive/systems/aux/X11R4/Xupdate2.tar .Z).
Also in X11R4/diffs is a set of patches for making X11R4 with shared libraries with mkshlib.
A complete distribution of SCO X11R4 binaries by Baruch Cochavy (blue@techunix.techn-
ion.ac.il) can be found on uunet. The server is Roell's X386 1. lb, compiled for ET4000 based
SVGA boards.
312 X Window System Administrator's Guide
G
Error Messages
This appendix lists error messages that you might get when running X cli-
ents. We not only list errors from X programs but also UNIX errors that you
often encounter when running or compiling X programs.
In This Appendix"
X Errors ............................................................................................. 315
UNIX Errors ........................................................................................ 318
Compilation Errors ............................................................................. 320
G
Error Messages
This appendix lists error messages that you might get when running X clients. This appendix
is broken up into the following categories:
X Errors Errors that you may get from X clients.
UNIX Errors Errors that you may get when running X clients, but which reflect
problems more closely associated with UNIX.
Compilation Errors Errors that you may get when compiling programs under UNIX.
G.1 X Errors
Can't Open display
or
Unable to open display
There is a problem with the DISPLAY variable or with the display specified using the -dis-
play option. The DISPLAY variable may not be set properly, or the specified host may be
unknown. The host may also not have access to the specified display. Correct the setting of
the DISPLAY variable, or extend server access as appropriate using either xhost or xauth. See
Section 2.3.1 for more information on setting the DISPLAY variable, or Chapter 4 for infor-
mation on server access control.
(This particular error is actually generated by the application, so it may not be worded
exactly like this. "Can't open display" is the wording generated by Xtobased applications.)
Unknown preprocessor directive
or
n: undefined control
You might get this error from xrdb if you used the "#" character to comment out a line in a
resource file. For a resource file, replace the "#" with a "!", or use a dummy resource entry.
See Section D. 1.3 for more information.
Error Messages 315
Xlib: connection to "hostname:O.O" refused by server
Xlib: Client is not authorized to connect to server
Error: Can't Open display
The client does not have permission to connect to the specified server. Either host-based or
user-based access control is in effect. You need to add the host to the xhost list for that
server, or you need to copy the code to your .Xauthority file on this host using xauth, or (if
you are using SUN-DES-1 security) you need to be added to the xhost list on the server. See
Chapter 4 for more information.
Warning: Widget class nnn version mismatch (recompilation needed):
widget 11004 vs. intrinsics 11003.
You are probably mixing MIT clients with Sun OpenWindows libraries or vice versa. You
should specify the right libraries for the client:
% (setenv LD_LIBRARY_PATH /usr/openwin/lib; ON-client)
% (setenv LD_LIBRARY_PATH /usr/lib; MIT-c1ient)
Fatal server bug! no screens found.
You might get this error when starting a Sun X server, where you can use the -dev option to
specify a different device (such as -dev/dev/cgfourO -dev/dev/bwtwol). A device listed
with the -dev option is incorrect, or the device may be missing from/dev.
mwm: Invalid accelerator specification on line n of specification string
mwm: Invalid accelerator specification on line m of configuration file
The Motif Window Manager rnwrn uses function keys which your server does not have
defined. You should define the function key using xmodmap, or alter your .mwmrc to use a
different key.
unknown keysym osfDown ...
Motif-based applications (such as mwm) require the proper installation of the file
/usr/lib/Xll/XKeysymDB. This file comes with most Motif distributions and is also present in
X11RS.
Error Binding TCP socket
You may get this error when starting the X server on a workstation display. The server will
try to create the socket in/tmp/,Y11-unixC If the/tmp directory is not writable, the X server
will fail.
Error Messages 317
There are stopped jobs
You are trying to exit a shell without properly exiting or killing all jobs started in that shell.
You should properly quit the jobs before exiting the shell--use the jobs command for a list
of your stopped jobs.
command: Command not found.
You may get this error if the requested command isn't in your search path, or if it doesn't
exist. Make sure the command is installed and make sure its path is in your search path.
command:Permission denied.
You may get this error if the command is in your search path but you don't have execute per-
mission for it.
Host is unreachable
no network route is known to that host
You may get this error when there is a routing problem--the gateway is probably down or
misconfigured.
Connection timed out
You tried to connect to a host that is currently down or otherwise unreachable.
Id.so: libX11 .so.4: not found
You might get this message if you are running SunOS. Either the shared library cache is out
of date, the shared library is missing, or the shared library is not in your LD_LIBRARY_PATH.
You should either set the LD_LIBRARY_PATtt environment variable to the appropriate value,
run ldconJig to update the library cache, or install the missing library. See Section 8.4.2 for
more information.
No more processes
Your host has reached its process limit. You should increase the number of processes that the
host can handle at once; see Section 7.7.1 for more information.
Sorry, pid ... was killed due to lack of swap space
Your host has run out of swap space. You should increase the amount swap space on your
host; see Section 7.7.3 for more information.
Error Messages 319
::(double colon), in Makefiles,
225
: (colon), in resource definitions,
281
! (exclamation point), in resource
definitions, 282
in resource files, 287
in Xaccess file, 56
# (hash sign), 219
in resource def'mitions, 287
in RGB specification, 145
used to comment out lines, 315
% (percent sign), in Xaccess file,
59
* (asterisk), and specifying fonts,
108
in resource definitions, 281-283
in Xaccess file, 56-57
/**/(null comment), 219
? (question mark), in resource
definitions, 283
@@ (imake syntax), 220
\ (backslash), in resource defini-
tions, 282
A
access control
server, 73-93;
host-based (see host-based
access control), ;
reasons for, 73;
user-based (see user-based
access control), ;
X terminals, 83, 175;
xauth vs. xhost, 82-83
xdm, 47
.ad files, (see application defaults)
additional style, font name field,
102
Index
Adobe fonts, 101
converting to F3, 113
converting to X11/NeWS for-
mat, 126
AIX, 188
chown command, 211
installing font server on, 133
installing xdm on, 70
AIXWindows, 8, 187
components of, 302
fonts; example, 121-122
InfoExplorer client, 117
aliases
for fonts, 108-109, 114;
DECWindows, 119;
OpenWindows, 124
for hostnames, 138
for RGB color, 145
for Xcms color, 149
alternate-servers (font server),
129, 134
anonymous ftp, (see ftp com-
mand)
AnswerBook, 186
app-defaults directory, (see
application defaults)
Apple Macintosh computers,
Communications Toolbox,
275-277
MacTCP, 275-277
UNIX and, 275
X clients and, 271,275
X servers and, 271,275
application defaults, 258,285
ar command, 199, 207
arch command, 192
Archie, 248-250
help command, 249
mail server, 250
prog command, 249
servers, 248
Index 321
C
C compiler, (see cc)
C preprocessor, (see cpp)
.cal00 files, ! 53
cache-size (font server), 128
CAPS LOCK key, 159
disabling, 290
switching with Control, 291
cat, Bill, 73
catalogue (font server), 129, 136
catalogue-list (font server), 129,
136
cc, debugging, 199
-E flag, 228
-g flag, 199
-O flag, 198
optimization, 198
-temp= flag, 200
-v flag, 228
.cf files, 222
character cell fonts, 102-103
character set, font name field, 102
chkconfig command, 133
chkey command. 86-87
error messages, 93
chmod command, 97
chooser client, 53, 55, 57-59
indirect queries and, 57
resources, 57, 60
uses for, 59
chown command, 96
AIX, 211
-R flag, 202
recursive, 202
chroot command, 167, 171
CIE, 147
class names, 283-284
clean, make target, 224
client-limit (font server), 129, 135
client-only distribution, 189
clients, 3, 13
application defaults, 285
chooser, 55, 57-59
cm, 118;
font problems, 123-125
command-line options, 20-23;
-bg, 23;
-display, 27-29, 36;
-fg, 23;
-fn, 20, 103;
-geometry, 20-22;
-iconic, 26;
-name, 283-284;
-rv, 23;
-server (for font server cli-
ents), 134;
-xrm, 286
crtca, 153
customizing, 20
DOS-based, 272
dxcalendar, 117
fsinfo, 134
fslsfonts, 135
getbdf, 112
InfoExplorer, 117, 12 l
Macintosh computers and, 271,
275
rare, 145-146
props, 145-146
public domain, 247-268;
compiling, 255-268;
patching, 259-264
remote; setting DISPLAY for,
36;
starting, 34-36
resize, 31-33
resources, 6
running locally on X terminals,
161
xarchie, 248, 251-259
xcalc, 14
xclock, 14, 16
xcmsdb, 152-153
xcoloredit, 145-146
xcolors, 144
xconsole, 26, 62
xdpyinfo, 158
xdvi, 115
xev, 291-293
xfd, 103, 108, 115
xfontsel, 20, 104
xhost, 28, 35-36, 74-77, 93;
SUN-DES-I and, 85, 88-90
xinit, 81-82
xkeycaps, 264-268, 291
xloadimage, 96
xlsfonts, 20, 103, 108
xmessage, 33
xmodmap, 264, 290-293
xpostit, 14, 249
xrdb, 24-25, 60-61,64, 285,
287-288
xrolodex, 247
xrsh, 79
xsccd, 153
dex 323
clients (cont'd)
xset, 105-106, 114-116, 124,
137
xsetroot, 25
xterm, 14, 16, 93-94, 106, 144
xtex, 115-117
xtici, 150-151
xtrek, 138
xwebster, 259-264
(see also commercial clients.)
clone-self (font server), 129, 135
cm client, 118
font problems, 123-125
CMW (Compartmented Mode
Workstations), 98
col command, 242
color, 143-153
aliases, 145
defining resources for, 145
defining; RGB system,
146-147;
Xcms, 150-151
device-independent; (see Xcms)
editors, 145-146
getting list of, 23
hexadecimal color values, 145;
converting to decimal, 146
listing, 144
monitors, 158
RGB system, 143-147;
color names, 144-145;
defining colors, 146-147;
fixing corrupted database,
147;
hexadecimal color values,
148
specifying, 23
Xcms, 144, 147-153;
client database, 148;
color names, 148-151;
color spaces, 147-148, 150;
database example, 151;
DCC, 152-153;
def'ming colors, 150-151;
device profiles, 152-153;
measuring colors, 153;
specifying colors, 148;
XCMSDB, 149;
Xcms.txt file, 148-150
color clients, mre, 145
props, 145
xcoloredit, 145
xcolors, 144
xtici, 150
color database, alternates, 147
example, 151
fixing, 147
RGB, 146
Xcms, 148-150
XCMSDB, 149
color editors, 150-151
color guns, 143
color monitors, 143
color spaces, 147-148, 150
listing of, 148
colorimeters, 153
commands, ar, 199
arch, 192
archie, 248
arp, 169
bc, 81, 146, 243
bdftohds, 171
bdftopcf, 112
bdftosnf, 112, 114, 125, 170
bldfamily, 107, 126
chkconfig, 133
chkey, 86-87, 93
chmod, 97
chown, 96
chroot, 167, 171
col, 242
compress, 112
convertfont, 112, 125-126
cpp, 216-218
crypt, 86
date, 81
dmesg, 193
domainname, 85
dxfc, 112
exportfs, 172, 201,239
fstobdf, 112, 136
ftp, 234-235, 251
imake, 214
jobs, 319
keylogin, 90
ksh, 81
last, 214
ldconfig, 200
ldf, 111
lndir, 197
lpr, 242
mach, 192
make, 197
makeafb, 113, 126
man, 213,242
mkfile, 180
324 X Window System Administrator's Guide
commands (cont'd)
mkfontdir, 107, 114, 116, 139;
fonts.scale, 107
newkey, 86-87
nm, 226
nroff, 242
nslookup, 241
openwin, 37
patch, 195,238
perl, 81
pstat, 180
ranlib, 199
rexec, 173
rgb, 146
dogin, 34
rsh, 35-36, 79, 81
screendump, 96
screenload, 96
setenv, 27-28, 30, 134, 149,
151,164, 199,204,211,213,
317
showrgb, 23, 144
snftobdf, 112
startx, 37-38
strings, 192, 229
swapon, 180-181
tail, 197
tar, 238,252
tbl, 242
telnet, 164, 248
trace, 286
truss, 286
tset, 31
uname, 192
uncompress, 238,242
unshar, 262
uudecode, 195,236, 238
uuencode, 195,238
wait, 26
X, 16, 38, 53
xauth, 36, 79-83, 93;
SUN-DES-1 and, 89;
using with xinit, 81-82
xinit, 16, 25, 37-38
xmkmf, 214-215,256, 266
xrsh, 36, 79
ypbind, 87
ypmatch, 85-86, 240
ypwhich, 86, 240
zcat, 238,242, 252
comments, ! (exclamation point),
282
# (hash sign), 128,219
/**/(null comment), 219
in font server configuration file,
128
in imake files, 219
in resource definitions, 282, 287
in Xservers file, 55
XCOMM, 220
commercial clients, FrameMaker,
65, 159
zmail, 33
Communications Toolbox (Mac-
intosh computers), 276-277
Compat.list file, 109, 126
compiling sources, 255-268
porting hints, 226-230
compress command, I 12
compressed files, 236, 238,242
fonts and, 107, 112-I 13
CompuServe, 235
comp.windows.x, 157, 187, 189,
233,250
FAQ, 234-237, 250
eonfig file (font server), 128-130,
139
configuration files, app-defaults
files, 258
.cshrc, 29-30, 33-34, 36
/etc/hosts.equiv, 81;
Secure RPC and, 86, 90
/etc/syslog.conf, 169
/etc/Xn.hosts, 74-75, 82
for font server, 128-131
imake, 222
.login, 33-34
on remote system, 35-36
.profile, 29-30, 36
.rhosts, 35, 81;
Secure RPC and, 86, 90
shell environment, 27-36
startup script, 25-26
syslog, 169
system.twmrc, 18
twm, 15, 18-19
.twmrc, 15, 19
user environment, 14
X session, 14
X terminals, 161,175-178
.Xdefaults, 286-287
.Xdefaults-hostname, 285
xdm, 46-66;
installing, 206;
rereading, 52, 55, 59, 67-68;
Xaccess, 55-59, 164, 174;
Index 325
configuration files, xdm (cont'd)
xdm-config, 51-52, 78, 84,
95;
Xresources, 60-62;
Xservers, 48, 53-55, 65, 174;
Xsession, 63-65
xinit; installing, 206
.xinitrc, 25-26, 37-38, 90
.xinitrc vs..xsession, 39
.Xmodmap, 291
.Xresources, 15, 24-25,286
.xserverrc, 38, 82
.xsession, 14, 25-26, 37
console, security, 94-96
console windows, 94-96
xdm and, 95-96
contrib/, 191
controlling process, 26
conversion
fonts, 112-113;
OpenWindows, 125-126
convertfont command, 112, 125
-b flag, 126
-d flag, 125
-s flag, 125
-x flag, 125
core, 191
Courier, 101
Clap, 216-218
comments in, 219, 315
#define command, 218
errors, 315
#ifdef command, 218
#ifndef command, 218
macro concatenation and, 221
resource files and, 287
standalone execution, 228
symbols; searching for, 228
-v flag, 228
cron daemon, 97
crtca client, 153
crylat command, 86
.cshrc file, 29, 33-34, 36
CTRL key, 159
D
daemons, bootpd, 165
bootp; errors, 169
cron, 97
fs; (see font server)
ftpd, 234
inetd, 88, 167-168;
errors, 169
keyserv, 93
named, 241
rarpd, 165
rpc.ypupdated, 87
syslog, 129-130, 169
fftpd, 167;
errors, 169
xdm; (see xdm)
Data Encryption Standard, SUN-
DES- 1, 84
XDM-AUTHORIZATION- 1, 83
support for, 86
database, (see color database)
date command, 81
dbm format, 146
DCC, 152-153
.dcc files, 153
Dead Meat, 138
decipoints, 129
DECnet, 162
connecting via, 28
font server and, 136
DECWindows, 8, 187
components of, 301-302
dxcalendar client, 117
fonts, 111-112, 117-121
DefaultCCOptions build flag,
210-211
DefaultFontPath build flag, 117,
212
default-point-size (font server),
129
default-resolution (font server),
129
#define command (cpp), 218
delegates, 129
depend, make target, 215,224
depth, 159, 161
DES, 98, 207
(see Data Encryption Standard)
Desqview/X, 271-272
/dev/console, 95
/dev/fb, 96-97
Device Color Characterization,
(see DCC)
device profiles, Xcms, 152-153
device-independent color, (see
Xcms)
direct queries, 55-57
326 X Window System Administrator's Guide
X terminals and, 173
direct queries (cont'd)
disk space, X installation and,
191,198-200
X terminals and, 170-171
diskless workstations, 162
fonts for, 127
display, problems with, 315, 317
display classes, 52, 55, 65-66
example, 65-66
finding, 65
DISPLAY environment variable,
164
name server problems, 28
problems with, 28-29, 315
setting, 27-29;
remote clients, 34, 36
using IP address, 28
-display option, 36
problems with, 315
distfile, (see rdist program)
dmesg command, 193
DNS, adding a hostname, 240-241
and nslookup, 241
testing, 241
documentation, printing, 242-243
Domain Name Service, (see DNS)
domainname command, 85
DOS, X clients and, 271
X servers and, 271-275; "
advantages and disadvan-
tages, 271;
requirements, 272
dot pitch, 158
dxcalendar client, 117
dxfc command, 112
E
editing colors, 145-146
encoding, font name field, 102
encryption codes, server access
control and, 83-84
environment variables, 29
DISPLAY, 27-29, 164
FONTSERVER, 134
LD_LIBRARY_PATH, 30
MANPATH, 213
OPENWINHOME, 30
PATH, 25, 29
SHELL, 33
showing, 27
TERM, 31
TERMCAP, 32
TMPDIR, 199
XAPPLRESDIR, 258,286
XCMSDB, 149, 151
XENVIRONMENT, 258, 285
XFILESEARCHPATH, 286
XRSH_AUTH_TYPE, 79
XUSERFILESEARCHPATH, 286
error messages, 315-320
auth_create: Bad file number,
93
Binding TCP socket: Address
already in use, 131
Cannot establish any listening
sockets, 131
cannot open, 35
can't communicate with ypserv
93
Can't find include file, 320
Can't lock authorization file, 64
Can't Open display, 36, 315,
317
Can't open error file
/usr/lib/X 11/fs/fs-errors, 135
cat: ./Compat.list: No such file
or directory, 126
Client is not authorized to con-
nect to Server, 34, 75
Color name ... is not defined
in server database, 145
Command not found, 29, 319
CONFIG: can't open configura-
tion file .... 135
connection refused by server,
34
Connection timed out, 319
Could not set principal's secret
key, 93
Current serial number in output
stream, 316
Duplicate font names .... 116
(Encoding: unknown), 126
Fatal server bug! no screens
found, 317
Fatal server error!, 131
Host is unreachable, 319
key contains odd number of or
non-hex characters, 93
ld.so: libX11 .so.4: not found,
319
Index 327
error messages (cont'd)
local resource allocation failure,
93
machine is down or not running
rpc.ypupdated, 93
Major opcode of failed request,
316
make: Fatal error in reader: ...
Unexpected end of line seen,
320
Maybe the keyserver is down?,
93
Minor opcode of failed request,
316
mkfontdir; failed to create
directory in, 116
must be on local machine to add
or remove hosts, 75
mwm; Invalid accelerator spec-
ification on line n of specifi-
cation string, 317
No home directory, 64
No more processes, 319
No such file or directory, 35
Not Iogin shell, 318
pattern ... unmatched, 136
Permission denied, 35, 318
Resource id in failed request,
316
reversed (or previously applied)
patch detected!, 320
Serial number of failed request,
316
Sorry, pid ... was killed due to
lack of swap space, 319
Stopped, 36
Terminal type xterm unknown,
318
There are stopped jobs, 319
unable to open server, 134-135
unable to update NIS database,
93
undefined control, 288,320
Undefined symbol, 320
<unknown address in family
254>, 93
unknown keysym osfDown,
317
Unknown preprocessor direc-
tive, 288,315,320
Warning: Cannot convert string
to type FontStruct, 115, 316
warning: table of contents for
archive is out of date, rerun
ranlib(1), 320
widget 11004 vs. intrinsics
11003, 317
X Error of failed request: Bad-
Value, 116, 137, 172, 316
X Toolkit Warning: Cannot
allocate colormap entry, 147
X Toolkit Warning: Cannot con-
vert string ... to type
FontList, using fixed font,
117
Xlib: Client is not authorized to
connect to Server, 317
Xlib: connection refused by
server, 317
XView warning: Cannot load
font .... 118
error-file (font server), 129-130,
135
errors, 169
compiling, 226
generated by font server,
129-130, 135
generated by xdm, 46-47,
49-51, 53, 63-64
generated by .xsession files, 39,
47
linking, 226
undefined functions, 226
undefined symbols, 226
(see also error messages.)
/etc/bootptab, 163, 165
/etc/ethers, 165, 169, 242
/etc/exports, 172, 201,239
/etc/fbtab, 97
/etc/fstab, 172, 180
/etc/hosts, 239-240
/etc/hosts.equiv, 35, 81
Secure RPC and, 86, 90
/etc/inetd.conf, 167, 88
rereading, 168
/etc/inittab, 69-70
/etc/motd, 33, 168, 192
/etc/named.boot, 241
/etc/named.pid, 241
/etc/passwd, 168
/etc/publickey, 85
/etc/rc.local, 69-70, 88, 131
/etc/rc.local file, 53
/etc/rc.tcpip, 70, 133
/etc/resolv.conf, 170
328 X Window System Administrator's Guide
fslsfonts, 135
fstobdf, 112, 136
font tape, 170
fonts, 101-140
adding, 114-126;
multiple directories, 115
AIXWindows, 121
aliases, 108-109, 114;
DECWindows, 119;
OpenWindows, 124
average width, 102
BDF format, 111
bitmap, 110
breaking into subdirectories,
115
browsing through, 104
byte order, 111,170-171
caching, 115, 128
character set, 102
CharCell, 102-103
components of font name, 102
converting between formats,
112-113, 118
converting from DECWindows,
118-121
DECWindows, 111
disk space, 113, 170-171
diskless workstations, 127
displaying characteristics of,
103
downloading; using NFS, 172;
using TFTP, 171-172
encoding, 102
F3, 111,125
families, 101
filename length restrictions, 107
font conventions, xx
font path, 105-106;
default, 212
font server, 127-139;
alternate-servers, 129, 134;
cache size, 128;
caching, 128;
catalogue, 129, 136;
catalogue-list, 129, 136;
client-limit, 129, 135;
clone-self, 129, 135;
default-point-size, 129;
default-resolution, 129;
error-file, 129-130, 135;
example use, 138-139;
font path, 136-137;
hostname aliases, 138;
installing, 130-133;
name syntax, 133-134;
port, 130;
starting, 131, 139;
testing, 131;
trusted-clients, 130, 136;
use-syslog, 129-130
fonts.dir file, 106-107, 109,
116;
creating, 107, 114, 139
fonts.scale file, 107-108
formats, 111-112;
converting between,
112-113;
font server and, 127
foundry, 101
horizontal resolution, 102;
font server and, 129
inability to access, 316
legalities, 113, 136
linking, 170
listing, 20
mono-spaced, 103
obtaining list of, 103
OpenWindows, 107;
Compat.list file, 126;
converting, 125-126;
example, 123;
rebuilding Families.list file,
126;
Synonyms.list file, 126
outline, 110
over the network, 127
PCF format, 111,170
pixel size, 102
point size, 102, 129
PostScript, 111
pre-scaled NEWS, 125
proportional, 102
scalable, 110
selecting with xfontsel, 104
set width, 102
slant, 101
SNF format, 111,170
spacing, 102
specifying, 20, 103
Speedo, 105, 110-111;
fonts.scale and, 107
style, 102
using in xterm windows, 103
vertical resolution, 102;
font server and, 129
weight, 101
330 X Window System Administrator's Guide
fonts (cont'd)
wildcards, 103, 108
X terminals, 127, 170-172;
installing, 163
X11/NeWS, 111,125
fonts.alias file, 108-109, 114
adding to, 124
fonts.dir file, 106-107, 109, 116
creating, 114, 139
errors, 316
FONTSERVER environment vari-
able, 134
fonts.scale file, 107-108
foreground color, 281
specifying, 23, 144
foreground processes, 26
foundry, font name field, 101
framebuffers, 96-97
FrameMaker, 65, 159
Frequently Asked Questions
List, (see FAQ)
fs daemon, (see font server)
fsinfo client, 134
-server option, 134
fslsfonts client, 135
fstobdfcommand, 112, 136
FTP, (see ftp command)
ftp command, 234-235, 251
ftpd daemon, 234
ftpmail, 235-236
functions, undefined, 226
G
gateway, problems with, 319
generic.cf, 208
-geometry option, 20-22
getbdf client, 112, 118
getty program, 37, 44
GiveConsole, 47, 95
GrabKeyboard protocol request,
93
graphics hardware, finding list of
supported, 193
grayscale, 65, 158
GUIs, 4
and X, 4
Athena widgets, 7
OPEN LOOK, 7
OSF/Motif, 7
gwm window manager, 19
H
hardware addresses, 165,242
HasLargeTmp build flag, 199,
207
HasSecureRPC build flag, 86
HasXdmAuth build flag, 84, 207
HDS X terminals, 171
header files, 215
missing, 226
hexadecimal color values, 145
converting to decimal, 146
new format, 148
old format, 145
Xcms and, 148
hexadecimal conversions. 243
horizontal resolution, font name
field, 102
host-based access control, 74-77
/etc/Xn.hosts, 74-75
overriding user-based access
control, 82-83, 175
PC X servers and. 83
problems with, 76-77
X terminals and, 74-76, 79, 83,
175
xhost client, 75-77
hostname, finding with nslookup,
241
hosts, access to font server. 130,
136
adding to hosts database,
239-241
aliasing, 138
alternate font servers, 129, 134
denying access to; (see host-
based access control)
in arp table, 169
increasing number of ptys, 179
increasing number of users. 179
increasing processes, 178
increasing swap space, 180-181
rebuilding kemel, 179
reconfiguring for X terminals,
178-181
remote; accessing fonts on, 127
Human Designed Systems, (see
HDS X terminals)
dex 331
J
jobs command, 319
kbd_mode command, 67
key symbols, (see keysyms)
keyboards, 159-160
CAPS LOCK key, 159
CTRL key, 159
resetting, 67
securing, 93
keylogin command, 90
keymap tables, 290
keys, Backspace, 290
CAPS LOCK, 290-291
Control, 291
Delete, 290
mapping, 290-293
translation tables and, 288-290
keyserv daemon, 93
keysyms, 6, 290-293
adding/removing, 291
checking with xev, 292
disabling CAPS LOCK, 290
mapping, 290
mapping Backspace to Delete,
290
switching Control and CAPS
LOCK, 291
ksh command, 81
last command, 214
Idconfig command, 200
Idf command, 111
LD LIBRARY PATH environ-
_ --
ment variable, 30, 317
MIT X and, 317
OpenWindows and, 317
libraries, 4, 200, 216
building with ar, 199
errors, 320
for X, 303
(see also shared libraries.)
link trees, 196-197
little endian, 111, 170
lndir command, 196-197
local clients,. X terminals and, 161
log files, font server errors,
129-130, 135
xdm errors, 49-51
Iogin, problems logging in with
xdm, 49-51
remote, 34-36
login box, configuring, 60-62
Iogin program, 44
Iogin shell, 33-34
xterm and, 33
.Iogin file, 33-34
loose bindings, 52, 282
lpr command, 242
Lucida, 101
M
mach command, 192
Macintosh computers, Commu-
nications Toolbox, 275-277
MacTCP, 275-277
UNIX and, 275
X clients and, 271,275
X servers and, 271,275
macros, Xaccess file and, 59
MacTCP, 276-277
magic cookie, 77-83, 98
copying to a remote machine,
79
generating manually, 81-82
using with xdm, 78-79
using with xinit, 81-82
mail servers, archie, 250
bifftp, 237
ftpmail, 235-236
xstuff, 237-238
mailing lists, xpert, 233,250
make program, 216-217, 256-258
double colon syntax, 225
-k flag, 225
-n flag, 225
tabs and, 222
targets; clean, 224;
depend, 224;
Everything, 225;
includes, 224;
install, 198,225;
install.man, 198,225;
Makefiles, 224;
Wodd, 197, 224
Index 333
O
olvwm window manager, 19
olwm window manager, 7, 19
Open Desktop, 8, 185
scologin, 68
xdm, 43
OPEN LOOK GUI. 7
OPEN LOOK window manager,
(see olwm window manager)
openwin command, 37
server access control and, 77
OpenWindows, 8, 37, 185-187
cm client, 118
components of, 300-301
fonts, 107;
aliases, 109;
Compat.list file, 126;
converting, 125-126;
example, 123-126;
Families.list file, 126;
Synonyms.list file, 126
installing, 190
props client, 145-146
setting search path for, 30
xdm, 43
OPENWINHOME environment
variable, 30
optimizing, 200
OSF/Motif, 7
components of, 299-300
(see also Motif.)
OSMajorVersion build flag, 209
OSMinorVersion build flag, 209
OSName build flag, 209
OSTeenyVersion build flag, 210
outline fonts, 110
P
patch command, 195,238,
260-263
errors, 196
source code for, 195
patch level, 194, 196
patches, 186, 259-264
applying, 194-196
getting with xstuff, 237
PATH environment variable, 25,
29
PC X servers, 162, 271-275
advantages and disadvantages,
271
requirements, 272
restricted number of TCP/IP
connections, 29
server access control and, 83
X terminals and, 162
X386 (for UNIX derivatives),
189
PCF format, 111, i29, 170
converting BDF to, 112, 138
X terminals and, 171
.pcf files, 111, 170
X terminals and, 171
perl command, 81
PEX, building, 199, 213
PHIGS, building, 199, 213
pixel size, font name field, 102
pixels, 158, 161
bits per, 159
platform, determining type, 192
platform.cf, 204-206, 208-210,
210, 223
point size, and font server, 129
font name field, 102
pointer keyword. 291
Point-to-Point Protocol, (see
PPP)
port (font server), 130
Portable Compiled Font format,
(see PCF format)
porting programs, 226-230
ports, used by font server,
130-131,133, 136
used by X server, 96, 130
PostScript, color, 147
Display, 186
documentation, 242
fonts, 111
printing, 242
release notes, 188
Type 3, 111
PPP, 162
preprocessor symbols, searching
for, 228
previewer, 115
principals, 85
for root, 85, 88-89;
xterm client and, 92
printing documentation, 242-243
private keys, 86
generating, 90
Index 335
process ID, of xdm, 46
processes, increasing number of,
178-179
.profile file, 29, 36
ProjectRoot build flag, 207-208
Project.tmpl, 223
proportional fonts, 102
props resource editor, 145-146
.ps files, 242
.ps fonts, 111
pseudo-ttys, increasing number of,
179
pstat command, 180
ptys, increasing number of, 179
public domain software, 247-268
compiling, 255-268
finding sources, 247-250
patching, 259-264
untarring, 252
public keys, 85-86
generating, 87;
for root, 87
propagating to NIS master, 87
Q
Quarterdeck Office Systems,
271-272
queries, XDMCP, 55-59, 164, 173
R
random numbers, 81
ranlib command, 199
RARP, 165
X terminals and, 164
rarpd daemon, 165
rdist program, 200, 203
example distfile, 203
example usage, 203
shared libraries, 203
special command, 203
release notes, 188-189, 192-193,
205
RELNOTES.TXT, 188-189,
192-193, 205
remote clients, setting DISPLAY
for, 36
starting, 34-36
remote configuration, 175-178
advantages of, 175
for NCD X terminals, 176-177
for Tektronix X terminals, 178
for Visual X terminals, 177
of X terminals, 161
remote execution, 173
remote hosts, accessing fonts on,
127
remote Iogins, 34-36
resize client, 31-33
-c flag, 33
SHELL environment variable, 33
-u flag, 33
resizing windows, 19, 31-33
resolution, 158
resolver, 170
resource editors, 145
resources, 6, 8, 24, 281-290
and client -name option,
283-284
and client -xrm option, 286
app-defaults files, 258
application defaults, 103,285
background, 144
chooser, 57, 60
class names, 283-285;
learning, 284
color and, 145
configuration files; .Xdefaults,
286-287;
.Xdefaults-hostname, 285;
.Xresources, 15, 24-25,286
defining, 281-286
font specification, 103
foreground, 144-145
instance names, 283-284;
learning, 284
loading into servers, 24-25,
287-288
loose bindings, 52, 282
overriding, 283
read globally with xdm, 286
sample, 15
server-specific, 66
syntax, 281-284
tight bindings, 52, 282
tracing, 286
translation tables, 288-290
using font aliases in, 109
XAPPLRESDIR environment
variable, 258
xconsole, 60, 62
xdm, 46, 51, 51-60;
336 X Window System Administrator's Guide
resources, xdm (cont'd)
DisplayManager*authName,
84, 88;
DisplayManager*authorize,
78, 84, 88;
DisplayManager*reset, 95;
DisplayManager*startup, 95
XENVIRONMENT environment
variable, 258
xlogin, 60-62
xrdb, 24
Reverse Address Resolution Pro-
tocol, (see RARP)
reverse video, 23
rexec command, 173
rgb command, 146
RGB system, 143
aliases, 145
altemate databases, 147
color names, 144-145
defining colors, 146-147
fixing corrupted database, 147
hexadecimal color values, 145;
converting to decimal, 146;
Xcms and, 148
triplets, 143
Xcms and, 147
rgb.dir file, 146
rgb.pag file, 146
rgb.txt file, 1 44-146
.rhosts file, 35, 81
Secure RPC and, 86, 90
rlogin command. 34
root menu, 14-15, 19, 26
root window, 14
rooted and rootless X servers,
275
rpc.ypupdated daemon, 87
rsh command, 35-36, 79, 81
xrsh command and, 79
.rules files, 222
-rv option, 23
S
scalable fonts, 105, 110-111
SCO UNIX, increasing number of
processes, 179
increasing number of ptys, 180
scologin, 43, 68
screen dumps, 96
screen resolution, 158
screen size, 158
screendump command, 96
screenload command, 96
screens, 6, 27
search path, setting, 29-30;
in startup script, 25;
mixed environments, 30;
OpenWindows, 30
secure keyboard option, xterm,
93
Secure RPC, 76, 85-86
chkey command, 86
generating public key, 87;
for root, 87
newkey command, 86
obtaining, 86
overview, 85-86
principals, 85;
for root, 85
propagating public key, 87
SUN-DES-1 and, 84-93
security, 73-98
console windows, 94-96
/dev/kmem, 202
/etc/fbtab, 97
framebuffer, 97
host-based access control,
74-77;
/etc/Xn.hosts, 74-75;
PC X servers and, 83;
problems with, 76-77;
X terminals and, 75-76, 79,
83;
xhost client, 75-77
kmem group, 202
server access control, 73-93;
X terminals, 175
TFTP, 167-168
user-based access control,
77-93;
MIT-MAGIC-COOKIE- 1,
77-83;
SUN-DES-l, 84-93;
XDM-AUTHORIZATION- 1,
83-84, 207
xload permissions, 202
xterm permissions, 202
(see also access control.)
Serial Line Internet Protocol,
(see SLIP)
serial X sessions, 160, 162
Index 337
Serial Xpress, 162
Server Natural Format, (see SNF
format)
servers, 157
for Archie, 248
(see also font server; mail
servers; X servers.)
setenv command, CHOWNPROG
and, 211
DISPLAY and, 27-28, 164
FONTSERVER and, 134
LD_LIBRARY_PATH and, 30,
317
MANPATH and, 213
TERM and, 204
TMPDIR and, 199
XCMSDB and, 149, 151
XENVIRONMENT and, 258
setup menu, X terminals, 164
SGI, 132-133, 185
sgi.cf, 208
SHAPE extension, 190
shar files, 262
shared libraries, 319
building, 223
installing, 200, 203;
with rdist, 203
ldconfig command, 200
LD_LIBRARY_PATH and, 30
shell environment, 27-36
defining search path, 29-30
SHELL environment variable, 33
showrgb command, 23, 144
SIGHUP signal, inetd, 88, 168
named, 241
resetting font servers, 131
Xaccess file, 59
xdm, 45, 52, 55, 59, 67-68, 78
Xservers file, 55
SIGTERM signal, xdm, 68
signals
SIGHUP;
font server, 131;
inetd, 168;
named, 241;
xdm, 45, 52, 78
SIGTERM; font server, 131;
xdm, 68
SIGUSR1; font server, 131
SIGUSR2; font server, 131
SIGTERM signal, killing font
servers, 131
SIGUSRI signal, rereading confi-
guration file, 131
SIGUSR2 signal, flushing font
cache, 131
Silicon Graphics, (see SGI)
Silicon Graphics components,
302-303
site.def, 204-205,223
slant, font name field, 101
SLIP, 162
SNF format, 107, 11 l, 125, 129
converting BDF to, 112, 114
converting to BDF, 112
differences, 170
.snf files, 107, I l 1, 170
differences, 170
snftobdf command, I 12
software, public domain, 247-268;
compiling, 255-268:
finding sources, 247-250;
patching, 259-264;
untarring, 252
Solaris, 189
Solbourne window manager, (see
swm window manager)
source code, patch command, 195
servers, 193
XI 1,185-186, 188-189;
disk space for, 191;
link trees, 196
sources, 247-268
compiling, 255-268
finding, 247-250
patching, 259-264
spacing, font name field, 102
.spd files, 111
Speedo fonts, 105, 110-111,129
fonts.scale and, 107
startup script, 25-26
controlling process, 26
foreground process, 26
setting search path, 25
.xinitrc, 25-26, 38-39
.xinitrc vs..xsession, 39
.xsession, 14, 18, 25-26, 29, 33,
37, 39
startx command, 37-38
static gray, 159
sticky bit, 97
strings command, 192, 229
StripInstalledPrograms build
flag, 207
338 X Window System Administrator's Guide
window managers (cont'd)
as local clients on X terminals,
161
gwm, 19
mwm, 19
olvwm, 19
olwm, 19
swm, 19
tvtwm, 19
twm, 18-19
uwm, 191
windows, iconifying, 19
moving, 19
resizing, 19, 31-33
specifying location of, 20-22
specifying size of, 20-22
titlebar, 19
workstations
diskless, 162;
fonts for, 127
World, make target, 197,224
wtmp file, 214
X
X, AIXWindows components, 302
building; (see building X)
client-only distribution, 189
configuring, 204-214
DECWindows components,
301-302
design, 3-7
development distribution, 187
distribution directories, 297
execution-only distribution, 187
graphics files, 302-303
installing; (see installing X)
libraries, 303
multiple distributions, 189
on multiple machines, 10
OSF/Motif components,
299-300
portability of, 4
running multiple releases of, 30
source code, 185-186, 188-189
Sun OpenWindows compo-
nents, 300-301
user environment, 9, 13-39
vendor-supplied distributions,
186-187
X 11 R5 components, 298-299
X administration, color, 143-153
font administration, 101 - 140
introduction to, 8-10
multiple machines, 10
philosophy of, 10
security, 73-98
user environment, 18
X terminals, 157-181
X clients, (see clients)
X Color Management System,
(see Xcms)
X command, 16, 38, 53
-auth option, 81-82
-fp option, 117
setting default font path, 106
X Consortium, 4, 8
X Display Manager, (see xdm)
X Protocol, 3, 98
X resources, (see resources)
X servers, 3-6, 167
access control, 73-93;
host-based (see host-based
access control);
reasons for, 73;
user-based (see user-based
access control);
X terminals, 175
adding fonts, 114-126
backing store, 161
color support, 143-153,
158-159
controlled by xdm, 53-55
depth, 159
dimensions, 158
display classes, 65-66
DOS-based, 272-275;
requirements, 272
dot pitch, 158
font path, 105-106;
default, 106, 212
fonts, 101-140;
byte order, 170-171;
caching, 115;
linking, 170
grayscale support, 158-159
hanging remotely, 96
in xdm resource names, 52
installing for X terminals, 163
keyboards, 159-160
Macintosh computers and, 271,
275
Microsoft Windows and, 271
Index 341
X servers (cont'd)
monitors, 157-159
mouse, 159-160
MS-Windows-based, 272-275;
requirements, 272
NeXT computers and, 271,277
refresh rate, 159
rooted and rootless, 275
screen resolution, 158
screen size, 158
screens, 6, 27
server-specific resources, 66
SHAPE extension, 190
starting, 38
starting with user-based access
control, 81-82
supported by MIT, 193
using from different releases,
190
virtual screens, 158
X command, 53
X terminals, 157-181
X386, 189
XDMCP queries, 45, 53, 55-59
XNeXT, 189
.xserverrc and, 38
Xsun, 244
(see also X terminals.)
X session, configuration files, 14
configuring, 13-39
defining search path, 29-30
login shell and, 33-34
sample, 13-15
shell environment, 27-36
starting with xdm, 63-65
startup methods, 37-39
startup script, 25-26;
controlling process, 26;
foreground process, 26;
setting search path, 25
unconfigured, 16-17
xinit vs. xdm, 37-38
X terminals, 3, 9, 157-181
backing store, 161-162
booting, 167-168
color support, 158-159
configuring for xdm, 173-175
configuring for XDMCP,
173-175
depth, 159, 161
display classes and, 55
dot pitch, 158
font server support, 160, 163,
171
fonts, 127, 170-172;
byte order, 170-171;
disk space and, 170-171;
downloading, 163, 171-172;
font tape, 170;
installing, 163;
linking, 170
grayscale support, 158-159
hardware addresses, 165, 169
in Xservers file, 53
installing the server, 163
IP addresses, 164;
getting with BOOTP,
165-166;
getting with RARP, 165;
name server and, 169
keyboards, 159-160
local clients, 161
memory, 158, 161
monitors, 157-159
mouse, 159-160
network interface, 162
network setup, 164-170
network traffic, 158
NVRAM, 164, 168
peripheral support, 161
refresh rate, 159
remote configuration, 161,
175-178;
advantages of, 175;
for NCD X terminals,
176-177;
for Tektronix X terminals,
178;
for Visual X terminals, 177
screen resolution, 158
screen size, 158
serial connections, 160-162
server access control, 74-76, 79,
83, 175;
host-based, 175;
user-based, 175
server software, 160;
FLASH ROM, 160;
ROM, 160;
running on host, 160
setting up, 163-164;
steps for, 163
setup menu, 164
telnet window, 164
virtual screens, 158
342 X Window System Administrator's Guide
X terminals (cont'd)
xdm and, 53
XDMCP support, 53, 160
xmodmap and, 291
X Toolkit Intrinsics (Xt), 7
X Window System, (see X)
XlI, (see X)
XII/NeWS, 110
fonts, 111,125;
converting to BDF, 125;
converting to SNF, 125
XlIR3, xdm, 45, 65
Xservers file, 53, 55
XlIRS, components of, 298-299
X386, 189
Xaccess file, 47, 55-59, 164, 174
* (asterisk), 56-57
! (exclamation point), 56
% (percent sign), 59
BROADCAST keyword, 57
chooser client and, 57-59
CHOOSER keyword, 57
defining macros, 59
excluding, 56
including, 56
rereading, 59
SIGHUP signal, 59
syntax, 56-59
XAPPLRESDIR environment
variable, 258, 286
xarchie client, 248, 251-259
xauth command, 36, 79-83, 93
adding a code, 81
commands; add, 81;
extract, 79;
list, 84, 88;
merge, 79
copying magic cookie to remote
machine, 79
overridden by xhost client,
82-83
SUN-DES-1 and, 89
using with xinit, 81-82
xrsh command and, 79
.Xauthority file, 77-83
adding a code, 81
extracting code from, 79
merging new entry, 79
SUN-DES-1 and, 85, 89-90
using with xinit, 81-82
47
xcalc client, 14
translation tables and, 288-290
xclock client, 14, 16
Xcms, 144, 147-153
aliases, 149
CIE, 147
client database, 148
color database; example, 151
color names, 148-151
color spaces, 147-148, 150;
listing of, 148
defining colors, 150-151
device profiles, 152-153
RGB system and, 147
specifying colors, 148
XCMSDB environment variable,
149
Xcms.txt file, 148-150;
example, 149
xcmsdb client, 152-153
.xinitrc example, 153
XCMSDB environment variable,
149, 151
Xcms.txt file, 148-150
example, 149
xcoloredit client, 145-146
xcolors client, 144
XCOMM (imake comment), 220
xconsole client, 26
resources, 60, 62
xdm and, 62
.Xdefaults file, 286-287
.Xdefaults-hostname file, 285
xdm, 9, 25, 37, 43-70
aborting, 61
changing greeting, 61
chooser and, 53, 57-59
command-line options;
-config, 46, 52, 67;
--debug, 65
concepts, 44-45
configuration files, 46-66;
installing, 206;
overriding, 67;
rereading, 52, 55, 59, 67-68;
Xaccess, 55-59, 164, 174;
xdm-config, 51-52, 78, 84,
95;
Xresources, 60-62;
Xservers, 53-55, 65, 174;
Xsession, 63-65,286
configuring, 51-66
configuring login box, 60-62
dex 343
xdm (cont'd)
configuring X terminals for,
173-175
customizing, 51-66
default environment, 49
display classes, 52, 55, 65-66
easy setup, 48-49
error messages, 46, 63
FI and, 61, 63
failsafe session, 50, 61,63
font server and, 131, 133
history, 45
host access control, 47, 55-59
installing, 69-70
installing DES code, 207
installing; on AIX, 70;
on IRIX, 70;
on SunOS, 69;
on Ultrix, 70
managing another workstation,
53
Open Desktop, 43
OpenWindows, 43
problems logging in, 49-51
process ID, 46
rereading configuration files,
52, 55, 59, 67-68
resources, 51-60;
display classes, 52;
DisplayManager._0.setup,
62;
DisplayManager*authName,
84, 88;
DisplayManager*authorize,
52, 78, 84, 88;
DisplayManager.autoRescan,
52, 55, 59, 67;
DisplayManager.errorFile,
63;
DisplayManager.pidFile, 68;
DisplayManager*reset, 95;
DisplayManager*session,
63-64;
DisplayManager*startup, 95;
server-specific, 52
restarting with xdm-pid, 68
CTRL-R and, 61
CTRL-RETURN and, 61,63
SIGHUP and, 45, 52, 78
SIGTERM and, 68
SCO version; (see scologin)
server access control and, 81;
MIT-MAGIC-COOKIE- 1,
78-79;
SUN-DES-l, 88;
XDM-AUTHORIZATION- 1,
83-84
server-specific scripts, 64
starting, 48, 67
starting automatically, 69-70
starting X session, 63-65
testing, 66-68
troubleshooting, 49-51
vendor environments and, 43
vs. xinit, 37-38
X terminals and, 53, 160,
173-175
X11R3, 45, 53, 65, 174
xconsole client and, 62
xmodmap and, 291
XDM Control Protocol, (see
XDMCP)
XDM-AUTHORIZATION-I, 83,
83-84, 207
using with xdm, 84
xdm-config file, 46, 51-60, 78, 84,
95
overriding, 67
syntax, 51-52
XDMCP, 45, 174
broadcast queries, 55-57, 173;
and subnet, 173
configuring X terminals for,
173-175
direct queries, 55-57, 173
display classes, 65
host access control, 47
indirect queries, 55, 57-59, 173
queries, 55-59, 164, 173;
workstations and, 53
server access control and, 77;
MIT-MAGIC-COOKIE- 1,
78-79;
SUN-DES-l, 88;
XDM-AUTHORIZATION- 1,
83-84
X terminals and, 160, 173-175
Xservers file and, 53
xdm-errors file, 46, 49-50, 63
xdm-pid file, 46, 68
xdpyinfo client, 158
xdvi client, 115
XENVIRONMENT environment
variable, 258,285
xev client, 291-293
344 X Window System Administrator's Guide
xfd client, 103, 108, 115
XFILESEARCHPATH environ-
ment variable, 286
xfontsel client, 20, 104
xhost client, 28, 35-36, 74-77, 93
overriding xauth command,
82-83
SUN-DES-1 and, 85, 88-90
xrsh command and, 79
xinit command, 16, 25, 37-38
-- flag, 38, 82, 89
configuration files; installing,
206;
.xinitrc, 37-38, 90;
.xserverrc, 38;
.xserverrc, 82
-dev flag, 38
server access control and,
81-82, 89-90
setting default font path, 106
using xauth with, 81-82
vs. xdm, 37-38, 43
.xinitrc file, 16, 25-26, 37-39
SUN-DES-1 and, 90
xcmsdb and, 153
xkeycaps client, 264-268, 291
Xlib, 7
xloadimage client, 96
xlogin widget, resources, 60-63
xlsfonts client, 20, 103, 108 "
xmessage client, 33
xmkmf command, 214-215,256
-a flag, 215,266
xmodmap client, 264, 290-293
checking keysyms with xev,
292
disabling CAPS LOCK, 290
mapping Backspace to Delete,
290
-pk option, 291
redefining pointer, 291
switching Control and CAPS
LOCK, 291
X terminals and, 291
.Xmodmap file, 291
XNeXT, 189, 277
xpert mailing list, 233,250
xpostit client, 14, 249
xrdb client, 24-25, 60-61, 64, 285,
287-288
cpp and, 287
-D option, 287
#define commands, 287
#ifdef commands, 287
#include commands, 287
-load option, 288
-merge option, 288
pre-defined symbols, 287
-query option, 288
Xremote, 162
Xresources file, 62-65
.Xresources file, 24-25, 47, 64,
286
sample, 15
-xrm option, 286
xrolodex client, 247
xrsh command, 36, 79
XRSH_AUTH_TYPE and, 79
XRSH AUTH TYPE environment
-- --
variable, 79
xsccd client, 153
.xserverrc file, 38
server access control and, 82
Xservers file, 46, 48, 53-55, 65,
174
default font path, 106
display classes, 55
rereading, 55
SIGHUP signal, 55
syntax, 53
X 11R3, 53, 55
XDMCP and, 45, 53
Xsession file, 18, 45-46, 63-65
.xsession and, 64
.xsession file, 25-26, 39, 45, 47,
49, 63
bypassing, 50, 64
C shell, 29
controlling process, 50
default search path, 29
error messages, 39
failsafe session, 50
foreground process, 50
problems with, 49-51
sample, 14
Xsession and, 64
.xsession-errors file, 47, 49-50,
63 -64
problems with, 50
xset client, 105, 116, 124
font server and, 136-137
fp option, 105, 114, 136
fp rehash option, 106, 115, 124
-q option, 105, 137
xset command, fp option, 172
xsetroot client, 25
Index 345
Xsetup_0 file, 47
Xstartup file, 47
xstuff, 237-238
Xsun, 38, 244
xterm client, 14, 16
-bg option, 144
build flags, 214
--C option, 94
console windows, 94
-fg option, 144
-fn option, 20, 103
fonts, 101, 106
-geometry option, 20
installing terminal definition for,
203 -204
login shell, 33-34
-Is option, 33-34
resized windows, 31-33
resources; font, 15;
loginShell, 33;
savedlines, 15;
scrollBar, 15
SUN-DES-I security and, 92
scroll bar, 15
secure keyboard feature, 93-94
shell issues, 31-34
terminal emulation, 31
VT 100 widget, 24
xtex client, 115-117
xtici color editor, 150-151
xtrek client, 138
XUSERFILESEARCHPATH envi-
ronment variable, 286
XView toolkit, 7
xwebster client, 259-264
Yellow Pages, (see NIS)
ypbind command, 87
ypmatch command, 85-86, 240
ypwhich command, 86, 240
.Z files, 107, 112, 236, 238, 242
Z
zcat command, 238, 242, 252
zmail client, 33
346 X Window System Administrator's Guide
About the Authors
Linda Mui started working for O'Reilly & Associates in 1986. She was first hired as a production
assistant, later became an apprentice system administrator, and is now a writer. Her first writing job
was for termcap and terminfo, which she co-authored with John Strang and Tim O'Reilly. She also
wrote Pick BASIC, on programming applications for Pick systems. In between writing jobs, Linda
works on troffmacros and tools for the O'Reilly & Associates production staff.
Linda was raised in the Bronx, New York and now lives in Cambridge, Massachusetts. Lately she
has been trying to improve herself by learning how to swim, play billiards, and accessorize.
Eric Pearce is an author and technical resource for O'Reilly & Associates. In addition to co-
authoring this book, he is also responsible for developing CD-ROM companion disks for books
produced by O'Reilly & Associates. Eric's interests include promoting public domain software,
Internet connectivity and network services.
Before coming to work for O'Reilly & Associates, Eric worked as a systems programmer for Boston
University, which he also attended as a student. His favorite activities include bicycling, snow-
boarding, rock climbing, and dangerous sports.
I I I
If you want more information about our
books, or want to know where to buy them,
we're happy to send it.
:1 Send me a free catalog of titles.
_3 What bookstores in my area carry your
books (U.S. and Canada only)?
L.1 Where can I buy your books outside the
U.S. and Canada?
:1 Send me information about consulting
services for documentation or program-
ming.
[] Send me information about bundling
books with my product.
Name
Address
City
State, ZIP
Country
Phone
Email Address
NAME
COMPANY
ADDRESS.
CITY
STATE Z l P
II
NO POSTAGE
NECESSARYIF
MAILEDIN THE
UNITED STATES
BUSINESS REPLY MAIL
FIRST CLASS MAIL PERMIT NO. 80 SEBASTOPOL, CA
POSTAGE WILL BE PAID BY ADDRESSEE
O'Reilly & Associates, Inc.
103 Morris Street Suite A
Sebastopol CA 95472-9902
NAME
COMPANY
ADDRESS
CITY
STATE ZIP
II
NO POSTAGE
NECESSARYIF
MAILEDIN THE
UNITED STATES
BUSINESS REPLY MAIL
FIRST CLASS MAIL PERMIT NO. 80 SEBASTOPOL, CA
POSTAGE WILL BE PAID BY ADDRESSEE
O'Reilly & Associates, Inc.
103 Morris Street Suite A
Sebastopol CA 95472-9902
Overseas Distributors
Effective January 1, 1990, customers outside the U.S. and Canada will be able to
order O" Reilly & Associates books through distributors near them. These overseas
locations offer international customers faster order processing, more local
bookstores and local distributors, and increased representation at trade shows
worldwide, as well as the high level, quality service our customers have always
received.
AUSTRALIA & NEW ZEALAND
(orders and inquiries)
Addison-Wesley Publishers, Pty. Ltd.
6 Byfield Street
North Ryde, N.S.W. 2113
AUSTRALIA
Telephone: 61-2-888-2733
t:AX: 61-2-888-9404
GREAT BRITAIN & AFRICA
(orders and inquiries)
Addison-Wesley Publishers Ltd.
Finchampstead Road
Wokingham, Berkshire RG11 2NZ
ENGLAND
Telephone: 44-734-794-000
FAX: 44-734-794-035
EUROPE & MIDDLE EAST
(orders and inquiries)
Addison-Wesley Publishing Group
Concertgebouwplein 25
1071 LM/nsterdam
THE NETHERLANDS
Telephone: 31-20-671-72-96
FAX: 31-20-664-53-34
U.S. & CANADA
(orders and inquiries)
O' Reilly & Associates, Inc.
103 Morris Street, Suite A
Sebastopol, CA 95472 U.S.A.
Telephone: 1-800-338-6887
Fax: 1-707-829-0104
LATIN AMERICA (inquiries)
Addison-Wesley Iberoamericana S A.
Blvd. de las Cataratas No. 3
Colonia Jardines del Pedregal
Delegacion Alvaro Obregon
Mexico 01900, D. F.
MEXICO
Telephone: 525-660-2497
FAX: 525-660-4930
LATIN AMERICA (orders)
Addison-Wesley Publishing Company
International Order Departznent
Jacob Way
Reading, MA 01867 U.S.A.
Telephone: 1-617-944-3700
FAX: 1-617-942-2829
ASIA except JAPAN (inquiries)
Addison-Wesley (Singapore) Pte. Ltd.
15 Beach Road
05-09/10 Beach Centre
SINGAPORE 0718
Telephone: 65-339-7503
FAX: 65-339-9709
ASIA except JAPAN (orders)
Addison-Wesley Publishing Company
International Order Department
Jacob Way
Reading, MA 01867 U.S.A.
Telephone: 1-617-944-3700
FAX: !-617-942-2829
JAPAN (orders and inquiries)
Toppan Conpany, Ltd.
Ochanomizu Square B, !-6
Kanda Surugadai
Chiyoda-ku, Tokyo 101
JAPAN
Telephone: 81-3-3295-3461
FAX: 8 I-3-3293-5963