This book introduces programming methods in the Linux environment, including Linux system commands, Shell scripts, programming languages (gawk, Perl), system kernel, security system, X Window, etc. It is rich in content and comprehensive in discussion, covering all aspects of the Linux system. The CD that comes with this book includes the latest version of the RedHat Linux system and the installation method, as well as a large amount of program code in this book, which greatly facilitates readers and provides a comprehensive reference for technicians who use and will use Linux systems.
Contents Preface Chapter 1 Introduction to Linux System Chapter 1 Introduction to Linux…1
1.1 The Origin of Linux 1
1.2 The Free Software Foundation’s GNU Project 1
1.3 Linux pronunciation 2
1.4 Features of Linux 2
1.5 Basic hardware requirements 3
1.6 How to get Linux 3
1.6.1 Download Linux 3 from the Internet
1.6.2 Obtaining Linux 3 from CD
1.7 Linux-related Web sites and news discussion groups 6
1.8 Disadvantages of Linux 7
Chapter 2 Shell and Common Commands 8
2.1 Login and logout8
2.2 Shell of Linux system 8
2.3 Common shell commands 9
2.3.1 Change account password 9
2.3.2 Online help 9
2.3.3 Remote login 9
2.3.4 File or directory processing 9
2.3.5 Changing the working directory 10
2.3.6 Copy file 10
2.3.7 Move or change file and directory names 10
2.3.8 Create a new directory10
2.3.9 Delete directory 11
2.3.10 Delete files 11
2.3.11 List the current directory location 11
2.3.12 View file content 11
2.3.13 View file contents by pages 11
2.3.14 Check the disk space occupied by the directory 11
2.3.15 File transfer 11
2.3.16 Setting file permissions 12
2.3.17 Check the name of the workgroup to which you belong13
2.3.18 Changing file or directory workgroup ownership 13
2.3.19 Change the last modification time of a file or directory13
2.3.20 Links to files 13
2.3.21 Searching for strings in files 14
2.3.22 Search the path of a file or command 14
2.3.23 Comparing the contents of files or directories14
2.3.24 File printout 14
2.3.25 Printing of general documents 14
2.3.26 Printing of troff files 14
2.3.27 Printer control command 14
2.3.28 Process control 15
2.3.29 Shell variable 16
2.3.30 Environment variables 16
2.3.31 Alias 16
2.3.32 Historical commands 17
2.3.33 File compression 17
2.3.34 Use of pipeline commands 17
2.3.35 Input/output control 18
2.3.36 View users in the system 18
2.3.37 Change username18
2.3.38 View username 18
2.3.39 View users of all workstations on the current system 19
2.3.40 Chatting with a user on a workstation 19
2.3.41 Check whether the remote system is normal 19
2.3.42 Introduction to the use of email 19
Chapter 3 Network Functions of Linux Systems 21
3.1 Network protocols supported by Linux 21
3.1.1 TCP/IP 21
3.1.2 TCP/IP version 6 21
3.1.3 IPX/SPX 21
3.1.4 AppleTalk Protocol Suite 21
3.1.5 Wide Area Network 22
3.1.6 ISDN 22
3.1.7 PPP, SLIP and PLIP 22
3.1.8 Amateur Radio 22
3.1.9 ATM 22
3.2 File sharing and print sharing under Linux system 22
3.2.1 Machintosh environment 22
3.2.2 Windows environment 22
3.2.3 Novell Environment 23
3.2.4 UNIX environment 23
3.3 Internet/Intranet functions in Linux systems 23
3.3.1 Email 23
3.3.2 Web server 24
3.3.3 Web browser 24
3.3.4 FTP Server and Client 24
3.3.5 News Service 24
3.3.6 Domain Name System 24
3.3.7 DHCP and bootp 24
3.3.8 NIS 24
3.4 Remote execution of applications under Linux system 24
3.4.1 Telnet 25
3.4.2 Remote commands 25
3.4.3 X Window 25
3.5 Network interconnection function of Linux system 25
3.5.1 Router 25
3.5.2 Bridge 25
3.5.3 IP masquerading 25
3.5.4 IP Statistics 26
3.5.5 IP Aliases 26
3.5.6 Flow limiter 26
3.5.7 Firewall 26
3.5.8 Port download 26
3.5.9 Load Balancing 26
3.5.10 EQL 27
3.5.11 Proxy Server 27
3.5.12 Dial on demand 27
3.5.13 Pipes, Mobile IP and Virtual Personal Networks 27
3.6 Network management in Linux systems 27
3.6.1 Network management applications under Linux system 27
3.6.2 SNMP 28
3.7 Enterprise Linux Network 28
3.7.1 High availability 28
3.7.2 RAID 28
3.7.3 Redundant Networks 28
Chapter 4 Introduction to Linux System Management 29
4.1 root account 29
4.2 Starting and shutting down the system 29
4.2.1 Booting from floppy disk 29
4.2.2 Starting with LILO 29
4.2.3 Shut down the Linux system 30
4.3 Mounting the file system 30
4.3.1 Mount floppy disk 30
4.3.2 Creating a new file system 30
4.3.3 Unmounting the file system 31
4.4 Checking the file system 31
4.5 Using files as swap areas 31
4.6 System and file backup 32
4.7 Setting up the system 33
4.7.1 Set system name 33
4.7.2 Using maintenance disk 33
4.7.3 Reset root account password 33
4.7.4 Set login information 33
Part 2 Linux High-Level Language and Management Programming Chapter 5 Shell Programming 35
5.1 Creating and running shells 35
5.1.1 Creating a shell 35
5.1.2 Running the shell 35
5.2 Using shell variables36
5.2.1 Assigning values to variables 36
5.2.2 Reading the value of a variable 37
5.2.3 Position variables and other system variables 37
5.2.4 The role of quotation marks 37
5.3 Numerical operation commands 38
5.4 Conditional expression 40
5.4.1 if expression 40
5.4.2 case expression 41
5.5 Loop statement 42
5.5.1 for statement 43
5.5.2 while statement 43
5.5.3 until statement 44
5.6 shift command 44
5.7 select statement 45
5.8 repeat statement 46
5.9 Subfunction 46
Chapter 6 gawk language programming 48
6.1 Main functions of gawk 48
6.2 How to execute the gawk program 48
6.3 Files, records and fields 48
6.4 Patterns and Actions 49
6.5 Comparison operations and numerical operations 50
6.6 Internal functions 50
6.6.1 Random numbers and mathematical functions 51
6.6.2 String internal functions 51
6.6.3 Internal functions of input and output 52
6.7 Strings and numbers52
6.8 Formatted output 52
6.9 Changing field separators 54
6.10 Metacharacters 54
6.11 Calling the gawk program 55
6.12 BEGIN and END 55
6.13 Variable 56
6.14 Built-in variables 56
6.15 Control Structure 57
6.15.1 if expression 57
6.15.2 while loop 57
6.15.3 for loop 58
6.15.4 next and exit 58
6.16 Array 58
6.17 User-defined functions 58
6.18 Several examples 59
Chapter 7 Perl Language Programming 60
7.1 What is Perl 60
7.2 Current status of Perl 60
7.3 First try with Perl 60
7.4 Perl variables 60
7.4.1 Scalar 60
7.4.2 Array 63
7.4.3 Related arrays 65
7.5 File handles and file operations 65
7.6 Loop Structure 66
7.6.1 foreach loop 66
7.6.2 Judgment operation 66
7.6.3 for loop 67
7.6.4 while and until loops 67
7.7 Conditional Structure 67
7.8 Character matching 68
7.9 Replacement and translation 69
7.9.1 Replacement 69
7.9.2 Translation 70
7.10 Subprocess 70
7.10.1 Definition of subprocess 70
7.10.2 Parameter 70
7.10.3 Return value 70
7.11 Complete example of a Perl program 71
Part 3 Linux System Kernel Analysis Chapter 8 Introduction to Linux Kernel 73
8.1 System initialization 73
8.2 System operation 73
8.3 Various system calls provided by the kernel 74
8.3.1 Basic concepts of processes and basic data structures of the system 74
8.3.2 Creating and destroying processes 74
8.3.3 Executing program 74
8.4 Accessing file systems 75
Chapter 9 System Processes 76
9.1 What is a process 76
9.2 Structure of processes 76
9.3 Process Scheduling 78
9.4 Files used by processes 79
9.5 Virtual memory used by processes 80
9.6 Creating processes 81
9.7 Process time and timers 81
9.7.1 Real-time clock 81
9.7.2 Virtual Clock 81
9.7.3 Image clock 81
9.8 Program execution 82
9.8.1 ELF files 82
9.8.2 Script files 82
Chapter 10 Memory Management 83
10.1 The role of memory management 83
10.2 Abstract model of virtual memory 83
10.3 Loading pages on demand 84
10.4 Exchange 85
10.5 Shared virtual memory 85
10.6 Access control 85
10.7 Caching 86
10.7.1 Buffer cache 86
10.7.2 Page Cache 86
10.7.3 Swap Cache 86
10.7.4 Hardware Cache 86
10.8 System page table 86
10.9 Page allocation and deallocation 87
10.9.1 Allocation of pages 88
10.9.2 Release of pages 88
10.10 Memory mapping 88
10.11 Request paging 89
10.12 Page Caching 89
10.13 Kernel Swap Daemon 90
Chapter 11 Interprocess Communication 91
11.1 Signaling mechanism 91
11.2 Pipeline Mechanism 92
11.3 System V IPC mechanism 93
11.3.1 Message queue 93
11.3.2 Semaphores 94
11.3.3 Shared memory 96
Chapter 12 PCI 98
12.1 PCI System 98
12.2 PCI address space 98
12.3 PCI Setup Header 99
12.4 PCI I/O and PCI Memory Address 100
12.5 PCI-ISA Bridge 100
12.6 PCI-PCI Bridge 100
12.7 PCI initialization 101
12.7.1 Linux system kernel data structure related to PCI 101
12.7.2 PCI Device Drivers 102
12.7.3 PCI BIOS functions 105
12.7.4 PCI Fixup 105
Chapter 13 Interrupts and Interrupt Handling 106
13.1 Interrupts 106
13.2 Programmable Interrupt Controller 106
13.3 Initializing the data structure for interrupt processing 107
13.4 Interrupt handling 108
Chapter 14 Device Drivers 109
14.1 Management of hardware devices 109
14.2 Polling and interrupts 110
14.3 Direct Memory Access 110
14.4 Memory 111
14.5 Interface between device driver and kernel 111
14.5.1 Character devices 112
14.5.2 Block devices 113
14.6 Hard disk 113
14.6.1 IDE hard disk 115
14.6.2 Initializing the IDE hard disk subsystem 115
14.6.3 SCSI hard disk 115
14.6.4 Initializing the SCSI disk subsystem 116
14.6.5 Passing block device requests 118
14.7 Network equipment 118
14.7.1 Network device file name 118
14.7.2 Bus information 118
14.7.3 Network interface tags 119
14.7.4 Protocol information 119
14.7.5 Initializing network devices 119
Chapter 15 File Systems 121
15.1 Linux file system overview 121
15.2 ext2 file system 122
15.2.1 Index node of ext2 122
15.2.2 ext2 superblock 124
15.2.3 ext2 data block group descriptor 124
15.2.4 Directories in ext2 125
15.2.5 Finding files in an ext2 file system 125
15.2.6 Changing the size of files in the ext2 file system 126
15.3 VFS 127
15.3.1 VFS superblock 128
15.3.2 VFS inode 129
15.3.3 Registering the file system 129
15.3.4 Mounting the file system 130
15.3.5 Finding files in VFS 131
15.3.6 Undoing a file system 131
15.3.7 VFS inode cache 132
15.3.8 VFS Directory Caching 132
15.4 Buffer caching 133
15.5 /proc file system 135
Chapter 16 Network Systems 136
16.1 Introduction to TCP/IP Network 136
16.2 Layering of TCP/IP networks 137
16.3 BSD Sockets 138
16.4 INET socket layer 140
16.4.1 Creating a BSD socket 141
16.4.2 Specifying an address for the INET BSD socket 141
16.4.3 Creating connections on INET BSD sockets 142
16.4.4 Listening on the INET BSD socket 142
16.4.5 Receiving connection requests 143
16.5 IP layer 143
16.5.1 Socket buffer 143
16.5.2 Receiving IP packets 144
16.5.3 Sending IP packets 144
16.5.4 Data fragmentation 144
16.6 Address Resolution Protocol 145
Chapter 17 System Kernel Mechanism 147
17.1 Bottom Half processing 147
17.2 Task Queue 148
17.3 Timers 149
17.4 Waiting queue 149
17.5 Semaphore 150
Part 4 Advanced Programming of Linux Systems Chapter 18 Linux Kernel Module Programming 151
18.1 A simple program Hello World 151
18.2 Device files 152
18.3 /proc file system 156
18.4 Using /proc to enter 158
18.5 Communicating with device files 162
18.6 Startup parameters 169
18.7 System calls 170
18.8 Blocking processes 172
18.9 Replacing printk 177
18.10 Scheduling tasks 178
Chapter 19 Programming for Process Communication 181
19.1 Introduction to inter-process communication 181
19.2 Half-duplex UNIX pipes 181
19.2.1 Basic concepts 181
19.2.2 Creating pipelines using C language 182
19.2.3 A simple way to create a pipeline 185
19.2.4 Automation using pipes 187
19.2.5 Things to note when using half-duplex pipes 188
19.3 Named Pipes 188
19.3.1 Basic concepts 188
19.3.2 Creating FIFO 188
19.3.3 FIFO operation 189
19.3.4 FIFO blocking 190
19.3.5 SIGPIPE signal 190
19.4 System V IPC 190
19.4.1 Basic concepts 190
19.4.2 Basic concepts of message queue 191
19.4.3 System call msgget() 194
19.4.4 System call msgsnd() 195
19.4.5 System call msgctl() 197
19.4.6 An instance of msgtool 199
19.5 Programming with Semaphores 201
19.5.1 Basic concepts 201
19.5.2 System call semget() 202
19.5.3 System call semop() 203
19.5.4 System call semctl() 204
19.5.5 Examples of using semaphore sets: semtool 205
19.6 Shared Memory 209
19.6.1 Basic concepts 209
19.6.2 System internal user data structure
shmid_ds 209
19.6.3 System call shmget() 210
19.6.4 System call shmat() 211
19.6.5 System call shmctl() 211
19.6.6 System call shmdt() 212
19.6.7 Examples of using shared memory: shmtool 212
Chapter 20 Advanced Threaded Programming 215
20.1 The concept and use of threads 215
20.2 A simple example 215
20.3 Thread synchronization 217
20.4 Using the Semaphore Coordinator 218
20.5 Implementation of semaphore 220
20.5.1 Semaphore.h 220
20.5.2 Semaphore.c 221
Chapter 21 Linux System Network Programming 225
21.1 What is a socket 225
21.2 Two Types of Internet Sockets 225
21.3 Network protocol layering 225
21.4 Data structures 225
21.5 IP addresses and how they are used 226
21.5.1 socket() 226
21.5.2 bind() 226
21.5.3 connect() 227
21.5.4 listen() 228
21.5.5 accept() 228
21.5.6 send() and recv() 229
21.5.7 sendto() and recvfrom() 230
21.5.8 close() and shutdown() 230
21.5.9 getpeername() 231
21.5.10 gethostname() 231
21.6 DNS 231
21.7 Client/Server Model 232
21.8 Simple data streaming server program 232
21.9 A simple streaming client program 234
21.10 Datagram Socket 235
21.11 Blocking 237
Chapter 22 Linux I/O Port Programming 240
22.1 How to use I/O port 240 in C language
22.1.1 General methods 240
22.1.2 Another alternative: /dev/port 241
22.2 Hardware interrupts and DMA access 241
22.3 Highly accurate time 241
22.3.1 Delay time 241
22.3.2 Measurement of time 243
22.4 Using other programming languages 243
22.5 Some Useful I/O Ports 243
22.5.1 Parallel Port 243
22.5.2 Game port 244
22.5.3 Serial Port 245
Part 5 Linux System Security Analysis Chapter 23 System Administrator Security 247
23.1 Security Management 247
23.2 Super User 247
23.3 File system security 247
23.3.1 Linux file system overview 247
23.3.2 Device files 248
23.3.3 /etc/mknod command 249
23.3.4 Security considerations 249
23.3.5 find command 250
23.3.6 secure program 250
23.3.7 ncheck command 250
23.3.8 Installing and removing file systems 250
23.3.9 System directories and files 251
23.4 Programs running as root 251
23.4.1 Starting the system 251
23.4.2 init process 251
23.4.3 Entering multi-user 252
23.4.4 shutdown command 252
23.4.5 System V cron program 252
23.4.6 cron programs after System V version 252
23.4.7 /etc/profile 253
23.5 /etc/passwd file 253
23.5.1 Password aging 253
23.5.2 UID and GID 254
23.6 /etc/group file 254
23.7 Adding, deleting and moving users 254
23.7.1 Adding users 254
23.7.2 Delete user 255
23.7.3 Moving users to another system 255
23.8 Security Check 255
23.8.1 Accounting 255
23.8.2 Other check commands 256
23.8.3 Issues with security inspection procedures 256
23.8.4 What to do after the system is leaked 257
23.9 Restricted environments 258
23.9.1 Restricted enclosures 258
23.9.2 Using chroot() to restrict users 258
23.10 Small system security 259
23.11 Physical Security 259
23.12 User awareness 260
23.13 System administrator awareness 261
23.13.1 Keeping system administrators’ personal logins secure 261
23.13.2 Keeping systems secure 261
Chapter 24 System Programmer Security 263
24.1 System subroutines 263
24.1.1 I/O subroutines 263
24.1.2 Process control 263
24.1.3 File attributes 264
24.1.4 UID and GID processing 265
24.2 Standard C Library 265
24.2.1 Standard I/O 265
24.2.2 Processing of /etc/passwd 266
24.2.3 /etc/group processing 267
24.2.4 Encryption subroutine 268
24.2.5 Running the shell 268
24.3 Writing safe C programs 268
24.3.1 Security issues to consider268
24.3.2 SUID/SGID Program Guidelines 269
24.3.3 Methods of compiling and installing SUID/SGID programs 269
24.4 Design of root user program 270
Chapter 25 Network Security of Linux Systems 272
25.1 UUCP system overview 272
25.1.1 UUCP commands 272
25.1.2 uux commands 272
25.1.3 uucico program 273
25.1.4 uuxqt program 273
25.2 Security issues of UUCP 273
25.2.1 USERFILE file 273
25.2.2 L.cmds file 274
25.2.3 uucp login 274
25.2.4 Files and directories used by uucp 274
25.3 HONEYDANBER UUCP 275
25.3.1 Differences between HONEYDANBER UUCP and old UUCP 275
25.3.2 Login name rules 276
25.3.3 MACHINE rules 277
25.3.4 Combining MACHINE and LOGNAME
Rule 278
25.3.5 uucheck command 278
25.3.6 Gateway 278
25.3.7 Login file check 279
25.4 Other networks 279
25.4.1 Remote job login 279
25.4.2 NSC Network System 280
25.5 Communications Security 280
25.5.1 Physical Security 280
25.5.2 Encryption 281
25.5.3 User identity authentication 282
25.6 Network security of SUN OS system 283
25.6.1 Securing NFS 283
25.6.2 NFS security flaws 284
25.6.3 Remote procedure call authentication 284
25.6.4 Linux Authentication Mechanism 284
25.6.5 DES Authentication System 285
25.6.6 Encoding of public keywords 286
25.6.7 Naming network entities 286
25.6.8 Application of DES identification system 287
25.6.9 Remaining security issues 287
25.6.10 Performance 288
25.6.11 Problems caused by startup and setuid programs 288
25.6.12 Summary 289
Chapter 26 User Security of Linux Systems 290
26.1 Password Security 290
26.2 File permissions 290
26.3 Directory Licensing 291
26.4 umask command 291
26.5 Set user ID and group user ID permissions 291
26.6 cp mv ln and cpio commands 291
26.7 su and newgrp commands 292
26.7.1 su command 292
26.7.2 newgrp command 292
26.8 File Encryption 292
26.9 Other security issues 293
26.9.1 User’s .profile file 293
26.9.2 ls -a 293
26.9.3 .exrc files 293
26.9.4 Temporary files and directories 293
26.9.5 UUCP and other networks 293
26.9.6 Trojan Horse 294
26.9.7 Decoy 294
26.9.8 Computer viruses 294
26.9.9 To leave the terminal you are logged in294
26.9.10 Intelligent terminal 294
26.9.11 Disconnecting from the system 294
26.9.12 cu command 295
26.10 Tips for keeping your account secure 295
Part Six: Internal Structure and Usage of X Window System Chapter 27 Basic Knowledge of X Window System 297
27.1 Introduction to X Window System 297
27.1.1 Characteristics of X 297
27.1.2 What is a window system 298
27.1.3 History of X development 299
27.1.4 Product of X 299
27.1.5 X 299 released by MIT
27.2 Basic structure of X 302
27.2.1 Basic elements of X 303
27.2.2 How service programs and client programs interact and communicate 304
27.2.3 X’s network overview 306
27.3 Overview of X 307 from a user interface perspective
27.3.1 Management Interface: Window Manager 307
27.3.2 Application interfaces and toolboxes 309
27.3.3 Other system perspectives 309
27.4 Terminology and notation 310
27.4.1 Terminology 310
27.4.2 Symbols 311
27.5 Starting and shutting down the X 312
27.5.1 Starting X 312
27.5.2 Ways to execute X program 313
27.5.3 Close X 314
27.6 Window manager basics—uwm 315
27.6.1 What is a window manager315
27.6.2 Starting uwm 315
27.6.3 Basic window operations—uwm
Menu 315
27.6.4 Moving windows 316
27.6.5 Resizing windows 316
27.6.6 Creating a new window 316
27.6.7 Managing screen space 318
27.6.8 Aborting application windows 320
27.6.9 Other ways to activate uwm menu 320
27.7 Network devices using x 320
27.7.1 Specify remote terminal—display
Option 321
27.7.2 Practical use of remote displays 322
27.7.3 Controlling Access Monitors—xhost 322
27.8 Terminal emulator—detailed introduction to xterm 323
27.8.1 Selecting xterm functions—menu and command line options 323
27.8.2 Scroll xterm screen 324
27.8.3 Recording the interaction process with the terminal—writing records 325
27.8.4 Cutting text 325
27.8.5 Using Tektronix Simulation Functions 326
27.8.6 Using different fonts 327
27.8.7 Using Color 327
27.8.8 Other xterm options 327
27.8.9 Configuring the terminal keyboard 328
Chapter 28 Utilities and Tools 329
28.1 Utilities 329
28.2 Saving, displaying and printing screen images 330
28.3 Applications using X 332
28.3.1 Text Editor—Xedit 333
28.3.2 Mail/messaging systems—xmh 336
28.4 Examples and Game Programs 336
28.4.1 Finding a path through a random maze—maze 336
28.4.2 The big eye that serves as the mouse pointer—
xeyes 336
28.4.3 Wisdom board game—puzzle 337
28.4.4 Print a big X logo—xlogo 337
28.4.5 Jumping polyhedron—ico 337
28.4.6 Dynamic geometric patterns—muncher and
plaid 337
28.7 Programs for displaying information and status 337
28.7.1 List the characteristics of X service programs—
xdpyinfo 338
28.7.2 Obtaining information about a window 338
28.7.3 Observing the event of X—xev 340
Chapter 29 Customizing the X Window System 341
29.1 Using X fonts and colors 341
29.1.1 Preliminary fonts 341
29.1.2 Font naming 342
29.1.3 Observing the content of a specific font—xfd 343
29.1.4 Saving fonts and positions 343
29.1.5 Example: Adding a new font to your service program 345
29.1.6 Using the color of X 346
29.2 Defining and using graphics 347
29.2.1 System Graphics Library 347
29.2.2 Interactive graphics editing—bitmap 347
29.2.3 Other ways to edit graphics 349
29.2.4 Customizing the root window—xsetroot 349
29.3 Defining application default options—
Resources 350
29.3.1 What are resources350
29.3.2 XToolkit 351
29.3.3 Managing resources—Resource Manager 353
29.3.4 Types of resources—how to specify values 358
29.4 Actual use of resources 359
29.4.1 Where to save default values for resources 359
29.4.2 Saving default values on service programs—
xrdb 363
29.4.3 Common bugs and fixes 366
29.5 Customizing the Keyboard and Mouse 367
29.5.1 Practical use of conversions 368
29.5.2 Conversion—formats and rules 374
29.5.3 Common problems in conversion specifications 377
29.6 Keyboard and mouse—correspondences and parameters 379
29.6.1 Keyboard and mouse mapping—xmodmap 379
29.6.2 Keyboard and mouse parameter settings—xset 382
29.7 Further introduction and customization of uwm 384
29.7.1 New features of uwm 384
29.7.2 Customizing uwm 386
29.8 Display Manager—xdm 390
29.8.1 What needs to be done 390
29.8.2 xdm 391
29.8.3 More information on xdm 392
29.8.4 uwm configuration 395
Appendix A Gcc usage introduction 396
Appendix B Installing the X Window Window System 410
Expand