Configuration HOWTO

Guido ``goccia'' Gonzato

      ggonza@tin.it
      

Version 1.99.7. 6 November 2001.
Revision History                                                             
Revision v1.99.7             2001-11-06           Revised by: gg             
Updated and fixed DocBook tags.                                              
Revision v1.99.6             2000-08-31           Revised by: gg             


This HOWTO aims at making the fine--tuning of your newly installed Linux box
quicker and easier. Here you will find a set of configuration tips for the
most common applications and services.

-----------------------------------------------------------------------------
Table of Contents
1. Introduction
    1.1. Why This HOWTO
    1.2. What We Will Be Configuring
   
   
2. General System Setup
    2.1. A Few Words About Security
    2.2. Start the Logbook!
    2.3. Keyboard
    2.4. Boot and Rescue Floppy
    2.5. Console Colours
    2.6. Kernel Matters
    2.7. Hard Disk Performance
    2.8. Parallel Port Zip Drive
    2.9. Device Drivers
    2.10. Sound Card
    2.11. Login Messages
    2.12. Hostname
    2.13. Mouse
    2.14. Mount Points
    2.15. Automount Points
    2.16. lilo(8) and LOADLIN.EXE
    2.17. Printer Configuration (lpd)
    2.18. SVGATextMode
   
   
3. Common Administration Tasks
    3.1. Network Configuration
    3.2. Network for Notebooks
    3.3. Sharing the Internet
    3.4. Restricting Network Access
    3.5. NFS Exports
    3.6. Samba
   
   
4. Software Configuration
    4.1. bash (1)
    4.2. I18n
    4.3. ls (1)
    4.4. less (1)
    4.5. Editor
    4.6. pine (1)
    4.7. minicom (1)
    4.8. efax (1)
    4.9. Ghostscript
    4.10. TeX and Friends
    4.11. Docbook
    4.12. Avoid PPProblems!
    4.13. POP Client
    4.14. Basic Mail Filtering
    4.15. X Window System (XFree86)
    4.16. Users' Configurations
    4.17. Making .rpms
    4.18. Upgrading
   
   
5. Configuration Software + Docs
6. The End
    6.1. Copyright
    6.2. Feedback
    6.3. Disclaimer
   
   

1. Introduction

1.1. Why This HOWTO

Current distributions are approaching perfection, but some fine-tuning is
still needed. Many new users are intimidated by the apparent complexity of a
Linux system, and as a result I note that the same questions crop up on
c.o.l.setup over and over again. To try and remedy this situation, and for my
own convenience, I wrote a to--do list that eventually became this HOWTO.
Here you will find configuration tips and examples for the most common
applications, programs, and services, which should save you a fair amount of
time and work.

I realise that this HOWTO is quite RedHat-centric. Currently, I only have
access to Red Hat and Mandrake machines, kernels ranging from 2.0.36 to
2.2.15; so don't take any of my tips as gospel if you have other
distributions. Previous versions of this HOWTO provided some information for
SuSE, Debian and Caldera; but as I no longer have access to those machines, I
can't keep the details up-to-date. No information is better that inaccurate
information, so it's up to you to to adapt my tips to your distribution.

This HOWTO can't replace others, and it's not meant to. Reading docs and
HOWTOs always pays, so you're strongly advised to do so if you want to know
more. Also, no spoon--feeding here: if you realise you don't understand
something, please refer to the relevant HOWTO. Let me remind you that the
right place for seeking help with Linux configuration is Usenet, i.e. news:
comp.os.linux.setup. Please, don't seek help from me because I'm quite
overloaded.

The official place for this document, which also hosts all other HOWTOs I
refer to and some translations, is http://www.linuxdoc.org .
-----------------------------------------------------------------------------

1.2. What We Will Be Configuring

There can be endless hardware configurations for a PC, but in my experience
one is quite common: a PC fitted with a large HD split into three partitions
(one for DOS/Windows, one for Linux, one for the swap), sound card, modem,
CD-ROM drive, printer, mouse. A parallel port Zip Drive is also very common.
This machine is possibly part of a mixed Windows-Linux network, where it acts
as server.

This is the hardware I'll assume you want to configure, but it's easy to
adapt the following tips to different configurations. It's implicitly assumed
that you'll be root when editing/fixing/hacking.

And now, lads, sleeves up.
-----------------------------------------------------------------------------

2. General System Setup

2.1. A Few Words About Security

Even before your system boots, you should decide what level of security you
want to implement. To begin with, don't connect your machine to the network
until you have decided what to do.

Security is a vast subject that goes beyond the scope of this HOWTO; two good
starting points are the Linux Security Administrator's Guide http://
www.securityportal.com/lasg and the Linux Security Guide http://nic.com/~dave
/SecurityAdminGuide/index.html . You should consider at least the following
steps: using shadow passwords (Shadow Password HOWTO), restricting network
access to the machine (Section Section 3.4), using the Secure Shell (http://
www.openssh.org ) or the Secure Remote Password ( http://srp.stanford.edu/srp
/). Good luck.
-----------------------------------------------------------------------------

2.2. Start the Logbook!

To keep your installation in shape, it's essential that you know exactly what
happened to your machine, which packages you installed that day, what you
removed or modified, and so on. So, the first thing you'll do before you
tamper with your machine is start a ``logbook''. Therein you'll take note of 
every move you make as root; in my own logbook I also keep a section where I
list all modified system files, additional .rpms, and .tar.gz I installed.
Optimally, backtracking your moves you should be able to re-obtain a fresh
installation.

Make a backup copy of the system files you touch. Better still, use RCS;
you'll be able to backtrack all changes. Never work as root without logging
your moves!
-----------------------------------------------------------------------------

2.3. Keyboard

If you missed this step during installation or have changed your keyboard,
you'll have to:

 

  * look for a suitable key table starting from /usr/lib/kbd/keymaps/i386;
    for example, querty/it-latin1.kmap.gz supports the Italian keyboard;
   
  * edit the file /etc/sysconfig/keyboard so as it reads: KEYTABLE=
    "it-latin1";
   
  * to set up the keyboard repeat rate and delay time, add this line to /etc/
    rc.d/rc.sysinit:
    +---------------------------------------------------------------+
    |/sbin/kbdrate -s -r 16 -d 500  # or whatever you like          |
    +---------------------------------------------------------------+
     
   

 

To load the key table, issue
+---------------------------------------------------------------------------+
|/etc/rc.d/init.d/keytable start                                            |
+---------------------------------------------------------------------------+

Other special keys will be dealt with in the following sections. To enable
NumLock on by default, add these lines to /etc/rc.d/rc.sysinit:
+---------------------------------------------------------------------------+
|for tty in /dev/tty[1-9]*; do                                              |
|  setleds -D +num < $tty                                                   |
|done                                                                       |
+---------------------------------------------------------------------------+

Normally, the Linux console cannot distinguish between, say, Arrow and
Shift-arrow, but some applications (namely, the editor Section 4.5.3) do.
Normally, these key bindings are only available in xterm. The following key
map, which you can choose to load at boot time, is very handy:
+---------------------------------------------------------------------------+
|# Load this key map with: loadkey shift.map                                |
|# Shift + Up                                                               |
|shift keycode 103 = F100                                                   |
|string F100 = "\033[a"                                                     |
|# Shift + Left                                                             |
|shift keycode 106 = F101                                                   |
|string F101 = "\033[c"                                                     |
|# Shift + Right                                                            |
|shift keycode 105 = F102                                                   |
|string F102 = "\033[d"                                                     |
|# Shift + Down                                                             |
|shift keycode 108 = F103                                                   |
|string F103 = "\033[b"                                                     |
|# Ctrl + Ins                                                               |
|control keycode 110 = F104                                                 |
|string F104="\033[2^"                                                      |
|# Shift + Ins                                                              |
|shift keycode 110 = F105                                                   |
|string F105="\033[2$"                                                      |
|# Shift + PgUp                                                             |
|shift keycode 104 = F106                                                   |
|string F106 = "\033[5$"                                                    |
|# Shift + PgDn                                                             |
|shift keycode 109 = F107                                                   |
|string F107 = "\033[6$"                                                    |
|# Shift + Home                                                             |
|shift keycode 102 = F108                                                   |
|string F108 = "\033[1$"                                                    |
|# Shift + End                                                              |
|shift keycode 107 = F109                                                   |
|string F109 = "\033[4$"                                                    |
|# Shift + Del                                                              |
|shift keycode 111 = F110                                                   |
|string F110 = "\033[3$"                                                    |
|# Ctrl + Del                                                               |
|control keycode 111 = F111                                                 |
|string F111 = "\033[3^"                                                    |
+---------------------------------------------------------------------------+
-----------------------------------------------------------------------------

2.4. Boot and Rescue Floppy

Make a couple of boot floppies for your newly installed system. Your
distribution may include a command for creating such a floppy (say,
mkbootdisk or something like that); if not, these commands will do:

 
+---------------------------------------------------------------------------+
|#~ dd if=/boot/vmlinuz-2.0.36-0.7 of=/dev/fd0  # use your kernel image     |
|#~ rdev /dev/fd0 /dev/hda2                     # your Linux root partition |
+---------------------------------------------------------------------------+
 

Also, have at least a couple of rescue disks ready. There's a wide choice of
rescue disks at ftp://metalab.unc.edu/pub/Linux/system/recovery ; if you
don't know which one to choose, I suggest you try out Tomsbtrt, whose home
page is http://www.toms.net/rb . It's very complete, but some utilities seem
missing at first; for example, ftp is not there but you get nc (netcat)
instead. Please read its documentation.
-----------------------------------------------------------------------------

2.5. Console Colours

Why stick to white on black in Linux console? With the setterm command you
can choose nicer combinations:
+---------------------------------------------------------------------------+
|setterm -background blue -foreground red -bold on -store                   |
+---------------------------------------------------------------------------+

Type setterm alone for a list of arguments.
-----------------------------------------------------------------------------

2.6. Kernel Matters

IMHO, the first thing to do next is build a kernel that best suits your
system. It's very simple to do but, in any case, refer to the README file in
/usr/src/linux/ or the Kernel HOWTO. Hints:

 

  * consider carefully your needs. Choosing a kernel configuration, applying
    the patches, and compiling it once and for all is more productive than
    reconfiguring and recompiling each month; this is especially true if your
    Linux box is a server. Don't forget to include support for all the
    hardware you might likely add in the future (e.g. SCSI, Zip, network
    cards, etc); using modules is usually the best choice;
   
  * notebook users: if you plan to use a PCMCIA modem/fax, remember to
    compile serial support in the kernel. Don't compile it as a module, as
    this would need more complex configuration;
   
  * remember to compile everything you need; i.e., don't forget the pcmcia
    modules, or the ALSA sound drivers;
   
  * to save time the next time you reconfigure and recompile the kernel, it's
    a good idea to save your configuration on a file and keep it in a safe
    place. If you upgrade the kernel and use ``make oldconfig'', your old
    config file will be taken and any not included features will be prompted
    whether they should be included, resulting in a new, upgraded config
    file.
   

 
-----------------------------------------------------------------------------

2.7. Hard Disk Performance

Your (E)IDE hard disk's performance can be greatly enhanced by carefully
using hdparm(8). If your Linux distribution doesn't include it, you'll find
on ftp://metalab.unc.edu/pub/Linux/system/hardware ; look for a file called
hdparm-X.Y.tar.gz.

Since many details depend on your hard disk and HD controller, I can't give
you a general recipe. You risk to toast your filesystem, so read the man page
carefully before using some of the options. At its simplest, you could add
the following line to /etc/rc.d/rc.sysinit:

 
+---------------------------------------------------------------------------+
|/sbin/hdparm -c1 /dev/hda  # first IDE drive assumed                       |
+---------------------------------------------------------------------------+
 

which enables (E)IDE 32-bit I/O support. As for the `-m' option, this is what
hdparm author Mark Lord emailed me:

" (...) if your system uses components from the past couple of years [<
1997], it will be fine. Older than that, there *may* be a problem (unlikely).
The really buggy chips were the CMD0646 and RZ1000 chips, used *extensively*
on 486 and (early) 586 motherboards about 2-3 years ago. "

For recent machines, these settings should work fine:

 
+---------------------------------------------------------------------------+
|/sbin/hdparm -c1 -A1 -m16 -d1 /dev/hda                                     |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

2.8. Parallel Port Zip Drive

Stock kernels include the driver for both old (ppa) and new (imm) Zip drives.
If you recompile the kernel, make sure that SCSI support and SCSI disk
support are enabled. Remember, there can be conflicts between the printer and
the Zip drive on the same parallel port, so you have better use kernel
modules.

Zip disks are sold preformatted on partition /dev/sda4. To enable the Zip,
append this to /etc/rc.d/rc.sysinit:

 
+---------------------------------------------------------------------------+
|# Enable the Zip drive                                                     |
|/sbin/modprobe ppa  # imm for recent models                                |
+---------------------------------------------------------------------------+
 

Zip disks can be mounted via /etc/fstab as shown below, or via Mtools adding
this line to your /etc/mtools.conf:

 
+---------------------------------------------------------------------------+
|drive z: file="/dev/sda4" exclusive                                        |
+---------------------------------------------------------------------------+
 

besides, the command mzip allows you to eject, query the status, write and
password protect Zip disks; man mzip for details. The Mtools home page is at 
http://linux.wauug.org/pub/knaff/mtools.
-----------------------------------------------------------------------------

2.9. Device Drivers

Devices in /dev (or better, links to the actual device drivers) may be
missing. Check what devices your mouse, modem, and CD--ROM drive correspond
to, then do what follows:

 
+---------------------------------------------------------------------------+
|~# cd /dev                                                                 |
|/dev# ln -s ttyS0 mouse; ln -s ttyS1 modem; ln -s hdb cdrom; ln -s sda4 zip|
+---------------------------------------------------------------------------+
 

In most notebooks the mouse device is /dev/psaux: take this into account when
configuring X11. If you wish, do chmod 666 to these devices to make them
fully accessible by every user.
-----------------------------------------------------------------------------

2.10. Sound Card

My desktop PC is fitted with an old Sound Blaster 16; even if you've got
something different, you may take what follows as guidelines.

I compiled the sound card support as a module (sb.o). Then I put this in /etc
/conf.modules:

 
+---------------------------------------------------------------------------+
|options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330                       |
|alias sound sb                                                             |
+---------------------------------------------------------------------------+
 

To enable the sound, make sure that modprobe sound is invoked in /etc/rc.d/
rc.sysinit. Alternatively, get the tool sndconfig from the RedHat site.

Besides the standard kernel sound drivers, the Alsa drivers ( http://
www.alsa-project.org) are an excellent choice. Strangely, though, the sound
channels are muted by default. You'll want to use aumix and this /etc/aumixrc
to set the volume to 100%:

 
+---------------------------------------------------------------------------+
|vol:100:100:P                                                              |
|synth:100:100:P                                                            |
|pcm:100:100:P                                                              |
|line:100:100:P                                                             |
|mic:100:100:R                                                              |
|cd:100:100:P                                                               |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

2.11. Login Messages

If you wish to customise the login messages, check whether your /etc/rc.d/
rc.local overwrites /etc/issue and /etc/motd. (RedHat does.) If so, get on
with your editor.

If you'd like a colourised login message, you may adapt your rc.local
inserting lines like these:

 
+---------------------------------------------------------------------------+
|# put a real escape character instead of ^[. To do this:                   |
|# emacs: ^Q ESC   vi: ^V ESC   joe:  ` 0 2 7   jed: ` ESC                  |
|ESC="^["  # a real escape character                                        |
|BLUE="$ESC[44;37m"                                                         |
|NORMAL="$ESC[40;37m"                                                       |
|CLEAR="$ESC[H$ESC[J"                                                       |
|                                                                           |
|> /etc/issue                                                               |
|echo "$CLEAR" >> /etc/issue                                                |
|echo "$BLUE   Welcome to MyServer (192.168.1.1)   " >> /etc/issue          |
|echo "$NORMAL " >> /etc/issue                                              |
|echo "" >> /etc/issue                                                      |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

2.12. Hostname

Issuing the command hostname new_host_name may not be enough. To avoid the
dreaded sendmail lock, follow these steps (only valid for a stand--alone
machine):

 

  * edit /etc/sysconfig/network and change the hostname therein (e.g.
    new_host_name.your_domain); 
   
  * edit /etc/HOSTNAME appropriately; 
   
  * append the new hostname in the line in /etc/hosts:
    +---------------------------------------------------------------+
    |127.0.0.1       localhost  new_host_name.your_domain           |
    +---------------------------------------------------------------+
     
   

 
-----------------------------------------------------------------------------

2.13. Mouse

gpm mouse services are useful to perform cut and paste in tty mode, and to
use the mouse in some applications. Make sure that you have a file called /
etc/sysconfig/mouse and that it reads:

 
+---------------------------------------------------------------------------+
|MOUSETYPE="Microsoft"                                                      |
|XEMU3=yes                                                                  |
+---------------------------------------------------------------------------+
 

Moreover, you must have a file /etc/rc.d/init.d/gpm, where you'll put
additional command line parameters. Mine reads:

 
+---------------------------------------------------------------------------+
|...                                                                        |
|       daemon gpm -t $MOUSETYPE -d 2 -a 5 -B 132 # two-button mouse        |
|...                                                                        |
+---------------------------------------------------------------------------+
 

Obviously, make sure this configuration is right for your mouse type. In most
notebooks, MOUSETYPE is ``PS/2''.

If you like to use menus in console with Ctrl-button, then configure
gpm-root. Edit the default menu in /etc/gpm-root.conf, then launch gpm-root
from /etc/rc.d/rc.local.
-----------------------------------------------------------------------------

2.14. Mount Points

It's handy to have mount points for the floppy, other devices and
NFS-exported directories. For example, you can do the following:

 
+---------------------------------------------------------------------------+
|~# cd /mnt; mkdir floppy cdrom win zip server                              |
+---------------------------------------------------------------------------+
 

This creates mount points for a DOS/Win floppy, the CD--ROM, the Windows
partition, the parallel port Zip drive, and an NFS directory.

Now edit the file /etc/fstab and add the following entries:

 
+---------------------------------------------------------------------------+
|/dev/fd0        /mnt/floppy     auto            user,noauto 0 1            |
|/dev/cdrom      /mnt/cdrom      iso9660         ro,user,noauto 0 1         |
|/dev/zip        /mnt/zip        vfat            user,noauto,exec 0 1       |
|/dev/hda1       /mnt/win        vfat            user,noauto 0 1            |
|server:/export  /mnt/server     nfs             defaults                   |
+---------------------------------------------------------------------------+
 

Obviously, you must use the correct device in the first field.

Note the `auto' filesystem type in the first line; it allows you to mount
both ext2 and vfat (DOS/Windows) floppies, but you need a recent version of
mount. You may find mtools more convenient.
-----------------------------------------------------------------------------

2.15. Automount Points

If you don't like the mounting/unmounting thing, consider using autofs(5).
You tell the autofs daemon what to automount and where starting with a file,
/etc/auto.master. Its structure is simple:

 
+---------------------------------------------------------------------------+
|/misc   /etc/auto.misc                                                     |
|/mnt    /etc/auto.mnt                                                      |
+---------------------------------------------------------------------------+
 

In this example you tell autofs to automount media in /misc and /mnt, while
the mountpoints are specified in/etc/auto.misc and /etc/auto.mnt. An example
of /etc/auto.misc:

 
+---------------------------------------------------------------------------+
|# an NFS export                                                            |
|server          -ro                     my.buddy.net:/pub/export           |
|# removable media                                                          |
|cdrom           -fstype=iso9660,ro      :/dev/hdb                          |
|floppy          -fstype=auto            :/dev/fd0                          |
+---------------------------------------------------------------------------+
 

Start the automounter. From now on, whenever you try to access the inexistent
mount point /misc/cdrom, il will be created and the CD-ROM will be mounted.
-----------------------------------------------------------------------------

2.16. lilo(8) and LOADLIN.EXE

Many users run both Linux and DOS/Windows on their PC, and want to choose at
boot time which os to use; this should be done at install time, but in case,
do what follows. Let's suppose that /dev/hda1 contains DOS/Windows and that /
dev/hda2 contains Linux.

 
+---------------------------------------------------------------------------+
|~# fdisk                                                                   |
|Using /dev/hda as default device!                                          |
|                                                                           |
|Command (m for help):a                                                     |
|Partition number (1-4): 2                                                  |
|                                                                           |
|Command (m for help):w                                                     |
|~#                                                                         |
+---------------------------------------------------------------------------+
 

This makes the Linux partition bootable. Then write this basic /etc/lilo.conf
file:

 
+---------------------------------------------------------------------------+
|boot = /dev/hda2                                                           |
|compact                # may conflict with "linear"                        |
|delay = 100            # 10 seconds                                        |
|linear                 # gets rid of the "1024 cylinder" problem           |
|#lba32                 # alternative                                       |
|message = /boot/bootmesg.txt  # write your own, if you will                |
|root = current                                                             |
|image = /boot/vmlinuz  # boot linux by default as this entry comes first   |
|  label = linux                                                            |
|  read-only                                                                |
|#  append="mem=128M"   # to see more memory than 64M                       |
|other = /dev/hda1                                                          |
|  table = /dev/hda                                                         |
|  label = win                                                              |
+---------------------------------------------------------------------------+
 

Now issue /sbin/lilo and you're done. Being lilo a crucial part of your
installation, you're strongly advised to read its documentation anyway.

To boot Linux from DOS/Windows without resetting, put LOADLIN.EXE in a
directory (in the DOS partition!) included in the DOS path; then copy your
kernel to, say, C:\TEMP\VMLINUZ. The following simple .BAT file will boot
Linux:

 
+---------------------------------------------------------------------------+
|rem   linux.bat                                                            |
|smartdrv /C                                                                |
|loadlin c:\temp\vmlinuz root=/dev/hda2 ro                                  |
+---------------------------------------------------------------------------+
 

If you use Windows 9x, set the properties of this .BAT so as it starts in
MS--DOS mode.
-----------------------------------------------------------------------------

2.16.1. Security Tip

Making a backup copy of your MBR before installing Linux is a safe move.
Prepare a Windows rescue floppy, and make sure it includes FDISK.EXE. To
restore the MBR, all you have to do is

 
+---------------------------------------------------------------------------+
|A:\> fdisk /mbr                                                            |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

2.17. Printer Configuration (lpd)

All distributions I know have a configuration tool for setting up the printer
(printtool, yast, or magicfilter); if you don't have it, this is a basic
manual configuration.

Let's suppose you have a non--PostScript (non ``Windows-only'' too!) printer
you want to use to print raw text (e.g., C source files) and PostScript files
via Ghostscript, which is assumed to be already installed.

Setting up the printer involves a few steps:

 

  * find out which one the parallel print device is: try
    +---------------------------------------------------------------+
    |~# echo "hello, world" > /dev/lp0                              |
    |~# echo "hello, world" > /dev/lp1                              |
    +---------------------------------------------------------------+
    and take note which one works. 
   
  * make two spool directories:
    +---------------------------------------------------------------+
    |~# cd /var/spool/lpd                                           |
    |/var/spool/lpd/# mkdir raw; mkdir postscript                   |
    +---------------------------------------------------------------+
     
   
  * if your printer exibits the ``staircase effect'' (most inkjets do),
    you'll need a filter. Try to print two lines with
    +---------------------------------------------------------------+
    |~# echo "first line" > /dev/lp1 ; echo "second line" > /dev/lp1|
    +---------------------------------------------------------------+
    if the output is like this:
    +---------------------------------------------------------------+
    |first line                                                     |
    |          second line                                          |
    +---------------------------------------------------------------+
    then save this script as /var/spool/lpd/raw/filter:
    +---------------------------------------------------------------+
    |#!/bin/sh                                                      |
    |# This filter eliminates the "staircase effect"                |
    |awk '{print $0, "\r"}'                                         |
    +---------------------------------------------------------------+
    and make it executable with chmod 755 /var/spool/lpd/raw/filter. 
   
  * make a filter for PostScript emulation. Write the following filter as /
    var/spool/lpd/postscript/filter:
    +---------------------------------------------------------------+
    |#!/bin/sh                                                      |
    |                                                               |
    |DEVICE=djet500                                                 |
    |RESOLUTION=300x300                                             |
    |PAPERSIZE=a4                                                   |
    |SENDEOF=                                                       |
    |                                                               |
    |nenscript -TUS -ZB -p- |                                       |
    |if [ "$DEVICE" = "PostScript" ]; then                          |
    |  cat -                                                        |
    |else                                                           |
    |  gs -q -sDEVICE=$DEVICE \                                     |
    |    -r$RESOLUTION \                                            |
    |    -sPAPERSIZE=$PAPERSIZE \                                   |
    |    -dNOPAUSE \                                                |
    |    -dSAFER \                                                  |
    |    -sOutputFile=- -                                           |
    |fi                                                             |
    |                                                               |
    |if [ "$SENDEOF" != "" ]; then                                  |
    |  printf "\004"                                                |
    |fi                                                             |
    +---------------------------------------------------------------+
    (in this example an HP DeskJet printer is assumed. Adapt it to your
    printer). 
   
  * finally, add the following entries in /etc/printcap:
    +---------------------------------------------------------------+
    |# /etc/printcap                                                |
    |lp|ps|PS|PostScript|djps:\                                     |
    |        :sd=/var/spool/lpd/postscript:\                        |
    |        :mx#0:\                                                |
    |        :lp=/dev/lp1:\                                         |
    |        :if=/var/spool/lpd/postscript/filter:\                 |
    |        :sh:                                                   |
    |raw:\                                                          |
    |        :sd=/var/spool/lpd/raw:\                               |
    |        :mx#0:\                                                |
    |        :lp=/dev/lp1:\                                         |
    |        :if=/var/spool/lpd/raw/filter:\                        |
    |        :sh:                                                   |
    +---------------------------------------------------------------+
     
   

 

For more complex or exotic printing configurations, the Printing-HOWTO awaits
you.

If you use printtool, be aware that the GSDEVICE chosen by Printtool will
work, but not necessarily at its best for your printer. You may consider
fiddling a bit with the file postscript.cfg; for instance, I changed GSDEVICE
from cdj500 to djet500 and now my prints come out much quicker.
-----------------------------------------------------------------------------

2.18. SVGATextMode

This utility, available on ftp://tsx-11.mit.edu/pub/linux/sources/sbin, is
useful for changing the console screen resolution, font, and cursor shape.
Users whose language include accented characters will be able to use them in
console applications, while notebook users may change the cursor shape to
make it more visible.

Edit /etc/TextConfig or /etc/TextMode, starting with the default VGA
definition. Europeans should be happy with this ``LoadFont'' section:

 
+---------------------------------------------------------------------------+
|Option "LoadFont"                                                          |
|FontProg "/usr/bin/setfont"                                                |
|FontPath "/usr/lib/kbd/consolefonts"                                       |
|FontSelect "lat1u-16.psf"   8x16 9x16 8x15 9x15                            |
|FontSelect "lat1u-14.psf"   8x14 9x14 8x13 9x13                            |
|FontSelect "lat1u-12.psf"   8x12 9x12 8x11 9x11                            |
|FontSelect "lat1u-08.psf"   8x8  9x8  8x7  9x7                             |
+---------------------------------------------------------------------------+
 

Once you're done, try your configuration with a command like SVGATextMode
"80x34x9", and if everything appears to be working fine, remove the warnings
from /etc/TextMode and include this line in etc/rc.d/rc.sysinit:

 
+---------------------------------------------------------------------------+
|# SVGATextMode                                                             |
|/usr/sbin/SVGATextMode "80x34x9"                                           |
+---------------------------------------------------------------------------+

Please note that the block cursor only works with some modes; on my notebook,
"80x30x9".
-----------------------------------------------------------------------------

3. Common Administration Tasks

Here is where the fun begins. This section is rather network-centric, though
many other tasks await you.

Networking is a vast subject which cannot be fully covered here. The
reference is the NET-3 HOWTO, and most distributions provide documentation on
setting up network services. Only a few points will be recalled here.

A quick to-do list for the services you may want to install: cron and timed
tasks like calendar or reminder, Http, Samba, telnet/ssh access, anonymous
ftp, POP/IMAP server, NFS...
-----------------------------------------------------------------------------

3.1. Network Configuration

If your network card wasn't recognised at install time, don't worry: in most
cases it's either NE2000 or 3c59x compatible. Issue the command modprobe ne
or modprobe 3c59x and see if the relevant module is loaded, then add this
line in /etc/conf.modules:

 
+---------------------------------------------------------------------------+
|alias eth0 ne  # or 3c59x                                                  |
+---------------------------------------------------------------------------+
 

Now you're ready to use netcfg or similar tool to set up the network
configuration. The relevant files are /etc/HOSTNAME, etc/hosts, /etc/
resolv.conf, /etc/sysconfig/network, and /etc/sysconfig/network-scripts/
ifcfg-eth0; services should be started with scripts in /etc/rc.d/init.d.

This is a sample etc/hosts:

 
+---------------------------------------------------------------------------+
|127.0.0.1               localhost                                          |
|192.168.1.1             paleo.eocene.net        paleo                      |
|192.168.1.2             nautilus.eocene.net     nautilus                   |
+---------------------------------------------------------------------------+
 

This is /etc/resolv.conf:

 
+---------------------------------------------------------------------------+
|search df.unibo.it,eocene.net                                              |
|nameserver 195.210.91.100                                                  |
+---------------------------------------------------------------------------+
 

This is /etc/sysconfig/network (Red Hat-dependent):

 
+---------------------------------------------------------------------------+
|NETWORKING=false                                                           |
|FORWARD_IPV4=true                                                          |
|HOSTNAME=nautilus.eocene.net                                               |
|DOMAINNAME=eocene.net                                                      |
+---------------------------------------------------------------------------+
 

And finally, /etc/sysconfig/network-scripts/ifcfg-eth0. This one, too, is Red
Hat-dependent; it must be executable.

 
+---------------------------------------------------------------------------+
|DEVICE=eth0                                                                |
|IPADDR=192.168.1.2                                                         |
|NETMASK=255.255.255.0                                                      |
|NETWORK=192.168.1.0                                                        |
|BROADCAST=192.168.1.255                                                    |
|ONBOOT=no                                                                  |
+---------------------------------------------------------------------------+
 

Although the actual method of starting network services of your distribution
may be much more complex, the following script should be enough to get you
started:

 
+---------------------------------------------------------------------------+
|#!/bin/sh                                                                  |
|                                                                           |
|# net-up.sh: set up network access                                         |
|                                                                           |
|DEVICE=eth0                                                                |
|IPADDR=192.168.1.100                                                       |
|NETMASK=255.255.255.0                                                      |
|NETWORK=192.168.1.0                                                        |
|GATEWAY=192.168.1.1                                                        |
|                                                                           |
|ifconfig $DEVICE $IPADDR netmask $NETMASK up                               |
|route add -net $NETWORK netmask $NETMASK $DEVICE                           |
|route add default gw $GATEWAY                                              |
+---------------------------------------------------------------------------+
If you'd like to do networking experiments with the loopback interface, all
you have to do is:
+---------------------------------------------------------------------------+
|ifconfig lo 127.0.0.1                                                      |
|route add -host 127.0.0.1 lo                                               |
+---------------------------------------------------------------------------+
 

This script is handy for enabling network access when you use a rescue disk.
Obviously, this lets you only ping, ftp and telnet to the outside; it won't
start any daemon.
-----------------------------------------------------------------------------

3.2. Network for Notebooks

When you plug the network PC card in, the script /etc/pcmcia/network will be
run. All it needs is a properly set up /etc/sysconfig/network-scripts/
ifcfg-eth0.

Setting up the network can become a bit trickier, though. In fact, you must
provide the right settings for each network you connect to, as well as
settings for the notebook when it's not connected.

I rolled up a rough but functional solution. I use my notebook as a
stand-alone machine, connecting to the net via PPP; at home, IP address
192.168.1.2; and at university, IP 137.204.x.y. So, I created a set of
configuration files for each network; all these are kept in /etc/mobnet. A
script is then used to select the working environment. For instance, this is
/etc/mobnet/home.cfg:

 
+---------------------------------------------------------------------------+
|# /etc/mobnet/home.conf                                                    |
|                                                                           |
|HOSTNAME=nautilus.eocene.net    # complete hostname                        |
|DOMAINNAME=eocene.net           # your domain                              |
|IPADDR=192.168.1.2                                                         |
|NETMASK=255.255.255.0                                                      |
|NETWORK=192.168.1.0                                                        |
|BROADCAST=192.168.1.255                                                    |
|GATEWAY=192.168.1.1                                                        |
|FORWARD_IPV4=true                                                          |
|NAMESERVER=195.210.91.100       # required                                 |
|SEARCH=df.unibo.it,eocene.net   # optional                                 |
|SERVICES="inet httpd smb sshd"                                             |
+---------------------------------------------------------------------------+
 

This is mnet, the script I use to choose the network profile:

 
+---------------------------------------------------------------------------+
|#!/bin/sh                                                                  |
|# mnet: script to set up the "mobile network" configuration.               |
|# Last modified: 15 July 2000                                              |
|                                                                           |
|# start or stop services                                                   |
|activate_services()                                                        |
|{                                                                          |
|  for service in $(echo $SERVICES) ; do                                    |
|    [ -x /etc/rc.d/init.d/$service ] && /etc/rc.d/init.d/$service $1       |
|  done                                                                     |
|}                                                                          |
|                                                                           |
|# usage                                                                    |
|if [ $# = 0 ] ; then                                                       |
|  echo "Usage: mnet <config name>"                                         |
|  echo "Example: mnet office"                                              |
|  exit 1                                                                   |
|fi                                                                         |
|                                                                           |
|# check if the configuration exists                                        |
|if [ ! -e /etc/mobnet/$1.conf ]; then                                      |
|  echo "This configuration doesn't exist."                                 |
|  exit 1                                                                   |
|fi                                                                         |
|                                                                           |
|# read the configuration                                                   |
|. /etc/mobnet/$1.conf                                                      |
|                                                                           |
|# set up the host name                                                     |
|echo $HOSTNAME > /etc/HOSTNAME                                             |
|/bin/hostname $HOSTNAME                                                    |
|                                                                           |
|# set up the name server(s)                                                |
|cat <<EOF > /etc/resolv.conf                                               |
|# /etc/resolv.conf                                                         |
|search $SEARCH                                                             |
|nameserver $NAMESERVER                                                     |
|EOF                                                                        |
|                                                                           |
|# stop previous services, if any                                           |
|if [ -f /etc/mobnet/services.prev ]; then                                  |
|  NEWSERVICES=$SERVICES                                                    |
|  . /etc/mobnet/services.prev                                              |
|  activate_services stop                                                   |
|  SERVICES=$NEWSERVICES                                                    |
|fi                                                                         |
|                                                                           |
|if [ $1 != "none" ]; then                                                  |
|# set up the network parameters                                            |
|  cat <<EOF > /etc/sysconfig/network                                       |
|  NETWORKING=yes                                                           |
|  FORWARD_IPV4=true                                                        |
|  HOSTNAME=$HOSTNAME                                                       |
|  DOMAINNAME=$DOMAINNAME                                                   |
|  GATEWAY=$GATEWAY                                                         |
|  GATEWAYDEV=eth0                                                          |
|EOF                                                                        |
|                                                                           |
|  cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-eth0                    |
|  DEVICE=eth0                                                              |
|  IPADDR=$IPADDR                                                           |
|  NETMASK=$NETMASK                                                         |
|  NETWORK=$NETWORK                                                         |
|  BROADCAST=$BROADCAST                                                     |
|  ONBOOT=no                                                                |
|EOF                                                                        |
|  /bin/chmod +x /etc/sysconfig/network-scripts/ifcfg-eth0                  |
|                                                                           |
|  # copy the other config files                                            |
|  /bin/cp -f /etc/mobnet/hosts.$1       /etc/hosts                         |
|  /bin/cp -f /etc/mobnet/smb.conf.$1    /etc/smb.conf                      |
|                                                                           |
|  echo -n "Insert the network PC card and press <enter> when done: "       |
|  read                                                                     |
|                                                                           |
|  # OK, now start services                                                 |
|  activate_services start                                                  |
|  echo "SERVICES=\"$SERVICES\"" > /etc/mobnet/services.prev                |
|                                                                           |
|else # it's not "none"                                                     |
|                                                                           |
|  cat <<EOF > /etc/sysconfig/network                                       |
|  NETWORKING=false                                                         |
|  FORWARD_IPV4=false                                                       |
|  HOSTNAME=$HOSTNAME                                                       |
|  DOMAINNAME=$DOMAINNAME                                                   |
|EOF                                                                        |
|  /bin/rm -f /etc/sysconfig/network-scripts/ifcfg-eth0*                    |
|  /sbin/ifconfig eth0 down                                                 |
|  echo "SERVICES=$SERVICES" > /etc/mobnet/services.prev                    |
|  echo "Now you may remove the PC card."                                   |
|  exit 0                                                                   |
|                                                                           |
|fi                                                                         |
|                                                                           |
|# end of mnet.                                                             |
+---------------------------------------------------------------------------+
 

As I said, it is rough and even not complete: other files may depend on the
network, like /etc/fstab, /etc/exports, and /etc/printcap. Think about
network printers and NFS shares. Feel free to adapt this bare-bone solution
to your needs.
-----------------------------------------------------------------------------

3.3. Sharing the Internet

One of the most useful tasks for a Linux server. Currently, most stock
kernels come with IP firewalling, masquerading and forwarding enabled by
default; if in doubt, consult the IP-Masquerade mini-HOWTO to learn how to
enable them. Then install ipfwadm (kernels 2.0.x; http://www.xos.nl/linux/
ipfwadm/) or ipchains (kernels 2.2.x; http://www.adelaide.net.au/~rustcorp/
ipfwchains/ipfwchains.html ). Remember to enable kernel modules for the
services you need, e.g. for ftp you'll add this line to /etc/rc.d/
rc.sysconfig:

 
+---------------------------------------------------------------------------+
|/sbin/modprobe ip_masq_ftp                                                 |
+---------------------------------------------------------------------------+
 

Other modules are usually found in /lib/modules/KERNEL-VERSION/ipv4.

Enabling IP masquerading for other machines in your local network is very
simple. First, check the network initialisation scripts (/etc/sysconfig/
network should be the right place) to see if they contain a line that reads
FORWARD_IPV4=true. It's used to set /proc/sys/net/ipv4/ip_forward to 1 when
the network subsystem comes up.

Add these lines to /etc/rc.d/rc.sysinit:

 
+---------------------------------------------------------------------------+
|# default: packets cannot reach the outside                                |
|/sbin/ipfwadm -F -p deny                                                   |
|# allow all machines on the local network to reach the Internet            |
|/sbin/ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0                       |
|# alternatively, allow only these two machines                             |
|# /sbin/ipfwadm -F -a m -S 192.168.1.100/24 -D 0.0.0.0/0                   |
|# /sbin/ipfwadm -F -a m -S 192.168.1.101/24 -D 0.0.0.0/0                   |
+---------------------------------------------------------------------------+
 

If you use a kernel of the 2.2.x series, use ipfwadm-wrapper instead of
ipfwadm to get started quickly. More information at http://ipmasq.cjb.net.

Now you'll want something to let client machines dial the ISP; I use Mserver
( http://cpwright.villagenet.com/mserver/). Edit etc/mserver.conf; the only
entries that you should modify are ``checkhost'', ``shadow'', and ``cname''.
Then define your connection(s). Obviously, install a suitable client on the
client machines.
-----------------------------------------------------------------------------

3.4. Restricting Network Access

Let's suppose you connect to the Internet via PPP. Once you're connected,
your machine may become vulnerable to attacks. Insert this in /etc/
hosts.allow:

 
+---------------------------------------------------------------------------+
|# only allow access to localhost                                           |
|ALL: 127.                                                                  |
+---------------------------------------------------------------------------+
 

and this in /etc/hosts.deny:

 
+---------------------------------------------------------------------------+
|# deny access to everyone                                                  |
|ALL: ALL                                                                   |
+---------------------------------------------------------------------------+
 

If you belong to a network with direct Internet access, you had better
disable finger, telnet, and possibly other services for security reasons; use
ssh instead of telnet. The file to edit is /etc/inet.conf. Alternatively, you
can restrict network access putting this in /etc/hosts.allow:

 
+---------------------------------------------------------------------------+
|in.telnetd: 192.168.1., .another.trusted.network                           |
|in.ftpd: 192.168.1., .another.trusted.network                              |
+---------------------------------------------------------------------------+
 

and this in /etc/hosts.deny:

 
+---------------------------------------------------------------------------+
|in.telnetd: ALL                                                            |
|in.ftpd: ALL                                                               |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

3.5. NFS Exports

It is common to export home directories on the server; a problem arises if a
user's UID and GID are not consistent across different machines. If user
`guido' has UID/GID = 500 on server and UID/GID = 512 on client, a convenient
configuration is this:

 
+---------------------------------------------------------------------------+
|# /etc/exports                                                             |
|/tmp            my.client.machine(rw)                                      |
|/home/guido     my.client.machine(rw,all_squash,anonuid=512,anongid=512)   |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

3.6. Samba

Almost trivial, but there's always a little bit to do. If you want to connect
Windows 98/NT clients, did you remember to read the docs and, in case, enable
clear text passwords? The distribution includes .reg files for Win9x/NT/2000;
if your clients can't connect to the Linux server, load them on every client.

Samba comes with a fairly complete sample /etc/smb.conf, but strangely it
lacks a section showing how to (un)mount removable media. The clauses preexec
and postexec do the trick:

 
+---------------------------------------------------------------------------+
|[cdrom]                                                                    |
|  comment = CD-ROM                                                         |
|  path = /mnt/cdrom                                                        |
|  public = yes                                                             |
|  read only = yes                                                          |
|; you might need to use "root preexec/postexec"                            |
|  preexec = mount /mnt/cdrom                                               |
|  postexec = umount /mnt/cdrom                                             |
+---------------------------------------------------------------------------+
 

Also: you know what Swat is, don't you? Enable it adding this line in your /
etc/inetd.conf:

 
+---------------------------------------------------------------------------+
|swat      stream  tcp     nowait.400      root /usr/sbin/swat swat         |
+---------------------------------------------------------------------------+
 

and this in /etc/services:

 
+---------------------------------------------------------------------------+
|swat            901/tcp                                                    |
+---------------------------------------------------------------------------+
 

Restart inetd with SIGHUP, and point your browser to http://localhost:901.
-----------------------------------------------------------------------------

4. Software Configuration

These are the the configuration files we are going to custimise: /etc/profile
/etc/bashrc .bashrc .bashrc .bash_profile .bash_logout .inputrc .less .lessrc
.xinitrc .fvwmrc .fvwm2rc95 .Xmodmap .Xmodmap.num .Xdefaults .jedrc
.abbrevs.sl .joerc .emacs . Don't add users until you have completed your
system configuration; you'll put the dot files in /etc/skel.
-----------------------------------------------------------------------------

4.1. bash (1)

Arguably, the most important piece of software after the kernel. To tailor
the behaviour of bash, these are the main files to edit:

 

  * /etc/bashrc contains system wide aliases and functions; 
   
  * /etc/profile contains system wide environment stuff and startup programs;
   
  * $HOME/.bashrc contains user aliases and functions; 
   
  * $HOME/.bash_profile contains user environment stuff and startup programs;
   
  * $HOME/.inputrc contains key bindings and other bits. 
   

 

Examples of these files are shown below. First, the most important: /etc/
profile. It's used to configure a lot of features in your Linux box, as you
will see in the following sections. Please look out for reverse quotes!

 
# /etc/profile                                                               
                                                                             
# System wide environment and startup programs                               
# Functions and aliases go in /etc/bashrc                                    
                                                                             
# This file sets up the following features and programs:                     
# path, prompts, a few environment variables, colour ls, less,               
# rxvt, Backspace key behaviour, xterm title.                                
#                                                                            
# Users can override these settings and/or add others in their               
# $HOME/.bash_profile                                                        
                                                                             
# first: root or normal user? Set PATH and umask accordingly. Note that the  
# PATH is normally set by login (1), but what if you access the machine      
# via ssh?                                                                   
                                                                             
if [ $(id -gn) = $(id -un) -a $(id -u) -gt 14 ]; then                        
  umask 002  # normal user                                                   
  PATH="/usr/local/bin:/bin:/usr/bin:."                                      
else                                                                         
  umask 022  # root                                                          
  PATH="/sbin:/bin:/usr/sbin:/usr/bin"                                       
fi                                                                           
                                                                             
# Now extend the PATH.                                                       
PATH="$PATH:/usr/X11R6/bin:$HOME/bin:." # !!! Beware of ./ !!!               
                                                                             
# notify the user: login or non-login shell. If login, the prompt is         
# blue; otherwise, magenta. Root's prompt is red.                            
# See the Colour-ls mini HOWTO for an explanation of the escape codes.       
USER=$(whoami)                                                               
if [ $LOGNAME = $USER ] ; then                                               
  COLOUR=44  # blue                                                          
else                                                                         
  COLOUR=45  # magenta                                                       
fi                                                                           
                                                                             
if [ $USER = 'root' ] ; then                                                 
  COLOUR=41  # red                                                           
  PATH="$PATH:/usr/local/bin" # my choice                                    
fi                                                                           
                                                                             
ESC="\033"                                                                   
PROMPT='\h'    # hostname                                                    
STYLE='m'      # plain                                                       
# PROMPT='\u'  # username                                                    
# STYLE=';1m'  # bold                                                        
PS1="\[$ESC[$COLOUR;37$STYLE\]$PROMPT:\[$ESC[37;40$STYLE\]\w\\$ "            
PS2="> "                                                                     
                                                                             
# Ulimits: no core dumps, max file size 200 Mb.                              
ulimit -c 0 -f 200000                                                        
                                                                             
# a few variables                                                            
USER=$(id -un)                                                               
LOGNAME=$USER                                                                
MAIL="/var/spool/mail/$USER"  # sendmail, postfix, smail                     
# MAIL="$HOME/Mailbox"        # qmail                                        
NNTPSERVER=news.myisp.it      # put your own here                            
VISUAL=jed                                                                   
EDITOR=jed                                                                   
HOSTNAME=$(/bin/hostname)                                                    
HISTSIZE=1000                                                                
HISTFileSIZE=1000                                                            
export PATH PS1 PS2 USER LOGNAME MAIL NNTPSERVER                             
export VISUAL EDITOR HOSTNAME HISTSIZE HISTFileSIZE                          
                                                                             
# enable colour ls                                                           
eval $(dircolors /etc/DIR_COLORS -b)                                         
export LS_OPTIONS='-s -F -T 0 --color=yes'                                   
                                                                             
# customize less                                                             
LESS='-M-Q'                                                                  
LESSEDIT="%E ?lt+%lt. %f"                                                    
LESSOPEN="| lesspipe.sh %s"                                                  
LESSCHARDEF=8bcccbcc13b.4b95.33b. # show colours in ls -l | less             
# LESSCHARSET=latin1                                                         
PAGER=less                                                                   
export LESS LESSEDIT LESSOPEN VISUAL LESSCHARDEF PAGER                       
                                                                             
# you might need this to fix the backspace key in rxvt/xterm                 
stty erase ^H  # alternative: ^?                                             
                                                                             
# set xterm title: full path                                                 
case $TERM in                                                                
  xterm*|rxvt)                                                               
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'       
    ;;                                                                       
esac                                                                         
                                                                             
for i in /etc/profile.d/*.sh ; do                                            
  if [ -x $i ]; then                                                         
    . $i # beware - variables and aliases might get overridden!              
  fi                                                                         
done                                                                         
                                                                             
# call fortune, if available                                                 
if [ -x /usr/games/fortune ] ; then                                          
echo ; /usr/games/fortune ; echo                                             
fi                                                                           
 

This is a sample /etc/bashrc:

 
# /etc/bashrc                                                                
                                                                             
# System wide functions and aliases                                          
# Environment stuff goes in /etc/profile                                     
# Insert PS1 definitions here if you experience problems.                    
                                                                             
export CDPATH="$CDPATH:~"                                                    
                                                                             
# common aliases                                                             
alias cp='cp -i'                                                             
alias l=less                                                                 
alias ls="ls $LS_OPTIONS"                                                    
alias mv='mv -i'                                                             
alias rm='rm -i'                                                             
alias rmbk='/bin/rm -f .*~ *~ *aux *bak *log *tmp 2> /dev/null'              
alias u='cd ..'                                                              
alias which="type -path"                                                     
alias x=startx                                                               
                                                                             
# A few useful functions                                                     
c ()    # cd to the new directory and list its contents                      
{                                                                            
  cd $1 ; ls                                                                 
}                                                                            
                                                                             
inst()  # Install a .tar.gz archive in current directory                     
{                                                                            
  if [ $# != 0 ]; then tar zxvf $1; fi                                       
}                                                                            
                                                                             
cz()    # List the contents of a .zip archive                                
{                                                                            
  if [ $# != 0 ]; then unzip -l $*; fi                                       
}                                                                            
                                                                             
ctgz()  # List the contents of a .tar.gz archive                             
{                                                                            
  for file in $* ; do                                                        
    tar ztf ${file}                                                          
  done                                                                       
}                                                                            
                                                                             
tgz()   # Create a .tgz archive a la zip.                                    
{                                                                            
  if [ $# != 0 ]; then                                                       
    name=$1.tar; shift; tar -rvf ${name} $* ; gzip -9 ${name}                
  fi                                                                         
}                                                                            
                                                                             
crpm()  # list information on an .rpm file                                   
{                                                                            
  if [ $# != 0 ]; then rpm -qil $1 | less; fi                                
}                                                                            
 

This is a sample .bashrc:

 
# $HOME/.bashrc                                                              
# Source global definitions                                                  
                                                                             
if [ -f /etc/bashrc ]; then                                                  
  . /etc/bashrc                                                              
fi                                                                           
                                                                             
# this is needed to notify the user that they are in non-login shell         
if [ "$GET_PS1" = "" ] ; then                                                
  COLOUR=45; ESC="\033"; STYLE=';1m';  # STYLE='m'                           
  USER=$(whoami)                                                             
  export PS1="\[$ESC[$COLOUR;37$STYLE\]$USER:\[$ESC[37;40$STYLE\]\w\\$ "     
fi                                                                           
                                                                             
# personal aliases                                                           
alias backup='tar -Mcvf /dev/fd0'                                            
alias dial='eznet up myisp'                                                  
alias f='cd ~/fortran'                                                       
alias hangup='eznet down'                                                    
alias lyx='lyx -width 580 -height 450'                                       
alias restore='tar -M -xpvf /dev/fd0'                                        
                                                                             
# personal functions                                                         
xj()    # Launch xjed and a file in background                               
{                                                                            
  xjed $1 &                                                                  
}                                                                            
 

This is a sample .bash_profile:

 
# $HOME/.bash_profile                                                        
                                                                             
# User specific environment and startup programs                             
# This file contains user-defined settings that override                     
# those in /etc/profile                                                      
                                                                             
# Get user aliases and functions                                             
if [ -f ~/.bashrc ]; then                                                    
  GET_PS1="NO"  # don't change the prompt colour                             
  . ~/.bashrc                                                                
fi                                                                           
                                                                             
# set a few `default' directories                                            
export CDPATH="$CDPATH:$HOME:$HOME/text:$HOME/text/geology"                  
 

This is a sample .inputrc:

 
# $HOME/.inputrc                                                             
                                                                             
# key bindings                                                               
"\e[1~": beginning-of-line                                                   
"\e[3~": delete-char                                                         
"\e[4~": end-of-line                                                         
# (F1 .. F5) are "\e[[A" ... "\e[[E"                                         
"\e[[A": "info \C-m"                                                         
                                                                             
set bell-style visible          # please don't beep                          
set meta-flag On                # allow 8-bit input (i.e, accented letters)  
set convert-meta Off            # don't strip 8-bit characters               
set output-meta On              # display 8-bit characters correctly         
set horizontal-scroll-mode On   # scroll long command lines                  
set show-all-if-ambiguous On    # after TAB is pressed                       
 

To make the backspace and delete keys work correctly in xterm and other X11
applications, the following is also needed:

 

  * put this in your .xinitrc:
    +---------------------------------------------------------------+
    |usermodmap=$HOME/.Xmodmap                                      |
    |xmodmap $usermodmap                                            |
    +---------------------------------------------------------------+
     
   
  * then your .Xmodmap will contain:
    +---------------------------------------------------------------+
    |keycode 22 = BackSpace                                         |
    |keycode 107 = Delete                                           |
    +---------------------------------------------------------------+
    this fixes the console. To fix xterm: 
   
  * put this in your .Xdefaults:
    +---------------------------------------------------------------------+
    |xterm*VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\  |
    |        <Key>Delete:        string(0x1b) string("[3~")\n\            |
    |        <Key>Home:          string(0x1b) string("[1~")\n\            |
    |        <Key>End:           string(0x1b) string("[4~")\n\            |
    |        Ctrl<Key>Prior:     string(0x1b) string("[40~")\n\           |
    |        Ctrl<Key>Next:      string(0x1b) string("[41~")              |
    |                                                                     |
    |nxterm*VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\ |
    |        <Key>Delete:        string(0x1b) string("[3~")\n\            |
    |        <Key>Home:          string(0x1b) string("[1~")\n\            |
    |        <Key>End:           string(0x1b) string("[4~")\n\            |
    |        Ctrl<Key>Prior:     string(0x1b) string("[40~")\n\           |
    |        Ctrl<Key>Next:      string(0x1b) string("[41~")              |
    +---------------------------------------------------------------------+
     
   

 

rxvt is a wee bit more complicated, as some compile--time options influence
its behaviour. See the above /etc/profile.

More info in bash (1) and readline (3) man pages.

Don't expect every application to work correctly! If you run joe in xterm,
for instance, some keys won't work; the same holds for some versions of rxvt.
-----------------------------------------------------------------------------

4.2. I18n

(This section doesn't apply to native English speakers.)

A.k.a. ``internationalisation''. Gasp. This long word means ``to adapt Linux
to your local conventions: language, format of date, currency etc.''.

Although Red Hat has its own method for setting up i18n (/etc/sysconfig/
i18n), you may want to enable your language only in some cases. I, for one,
enabled i18n in kdm (via kdmconfig) and xfce, but want to read English
messages when I work in console or xterm.

Consider these lines:

 
+---------------------------------------------------------------------------+
|LANG=it # choose your language: fr, de, es, ...                            |
|LANGUAGE=it                                                                |
|LC_ALL=it                                                                  |
|export LANG LANGUAGE LC_ALL                                                |
+---------------------------------------------------------------------------+
 

If you insert them in your .xinitrc or .xsession just before the line that
starts the window manager, you'll get internationalised messages - including
those in xterms started from within the window manager. But if you'd rather
get English messages, set the language to ``en'' and put the same lines in
.bash_profile.
-----------------------------------------------------------------------------

4.3. ls (1)

ls can display directory listings using colours to highlight different file
types. To enable this feature, you just need a couple of lines in /etc/
profile as seen above. However, this won't work with old versions of rxvt;
use some flavour of xterm instead. It looks like some old rxvts have a bug
that prevents them from inheriting the environment correctly in some
circumstances.
-----------------------------------------------------------------------------

4.4. less (1)

With this excellent pager you can browse not only plain text files, but also
gzip compressed, tar and zip archives, man pages, and what have you. Its
configuration involves a few steps:

 

  * to use it with the movement keys, have this plain ASCII file .lesskey in
    your home directory:
    +---------------------------------------------------------------+
    |^[[A   back-line                                               |
    |^[[B   forw-line                                               |
    |^[[C   right-scroll                                            |
    |^[[D   left-scroll                                             |
    |^[OA   back-line                                               |
    |^[OB   forw-line                                               |
    |^[OC   right-scroll                                            |
    |^[OD   left-scroll                                             |
    |^[[6~  forw-scroll                                             |
    |^[[5~  back-scroll                                             |
    |^[[1~  goto-line                                               |
    |^[[4~  goto-end                                                |
    |^[[7~  goto-line                                               |
    |^[[8~  goto-end                                                |
    +---------------------------------------------------------------+
    then run the command lesskey. (These are escape sequences for vt100-like
    terminals.) This creates a binary file .less containing the key bindings.
   
  * write the following file as /usr/bin/lesspipe.sh:
    #!/bin/sh                                                                     
    # This is a preprocessor for 'less'.  It is used when this environment        
    # variable is set:   LESSOPEN="|lesspipe.sh %s"                               
                                                                                  
    lesspipe () {                                                                 
      case "$1" in                                                                
      *.tar) tar tf $1 2>/dev/null ;; # View contents of .tar and .tgz files      
      *.tgz|*.tar.gz|*.tar.Z|*.tar.z) tar ztf $1 2>/dev/null ;;                   
      *.Z|*.z|*.gz) gzip -dc $1  2>/dev/null ;; # View compressed files correctly 
      *.tar.bz2) bzip2 -dc $1 | tar tf - ;;                                       
      *.bz2) bzip2 -dc $1  2>/dev/null ;;                                         
      *.zip) unzip -l $1 2>/dev/null ;; # View archives                           
      *.arj) unarj -l $1 2>/dev/null ;;                                           
      *.rpm) rpm -qpil $1 2>/dev/null ;;                                          
      *.cpio) cpio --list -F $1 2>/dev/null ;;                                    
      *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.l|*.man)                          
        file $1 | grep roff > /dev/null                                           
        if [ $? = 0 ]; then                                                       
          groff -Tascii -mandoc $1                                                
        fi ;;                                                                     
      *) file $1 | grep "te[sx]t" > /dev/null ;                                   
        if [ $? = 1 ] ; then # it's not some kind of text                         
          strings $1                                                              
        fi ;;                                                                     
      esac                                                                        
    }                                                                             
                                                                                  
    # treat link targets, not links themselves                                    
    file $1 | grep symbolic > /dev/null                                           
    if [ $? = 0 ]; then                                                           
      TARGET=$(file $1 | awk '{print $NF}')                                       
      lesspipe $TARGET                                                            
    else                                                                          
      lesspipe $1                                                                 
    fi                                                                            
    then make it executable with chmod 755 lesspipe.sh. 
   
  * put the variables that affect less in /etc/profile as seen above. 
   

 
-----------------------------------------------------------------------------

4.5. Editor

Only the most popular will be covered here.
-----------------------------------------------------------------------------

4.5.1. emacs (1)

I rarely use emacs, so I have only a couple of tips for you. Some emacs
distributions don't come preconfigured for colours and syntax highlighting.
Put this in your .emacs:

 
+---------------------------------------------------------------------------+
|(global-font-lock-mode t)                                                  |
|(setq font-lock-maximum-decoration t)                                      |
+---------------------------------------------------------------------------+
 

This only works in X11. Moreover, to enable accented characters you'll add
this line:

 
+---------------------------------------------------------------------------+
|(standard-display-european 1)                                              |
+---------------------------------------------------------------------------+
 

I'll leave it to you to peruse all of emacs' documentation to find out how to
tailor it to your needs---potentially, it can take months of hacking. The
Dotfile generator (Section Section 5) is a good helping hand.
-----------------------------------------------------------------------------

4.5.2. joe (1)

(Why use joe when jed is so small and powerful? Duh.)

Some versions of joe don't work with colours in console, and some special
keys don't work either. A quick and dirty (and inelegant) solution to the
former problem is this:

 
+---------------------------------------------------------------------------+
|~$ export TERM=vt100                                                       |
|~$ joe myfile                                                              |
|   (edit your file)                                                        |
|~$ export TERM=linux                                                       |
+---------------------------------------------------------------------------+
 

To make the special keys work, all you have to do is edit .joerc, .jstarrc or
your favourite emulation; you can start from the system-wide config files in
/usr/lib/joe. Look for the fourth section (key bindings). This enables Home
and End:

 
+---------------------------------------------------------------------------+
|bol ^[ [ 1 ~    Go to beginning of line                                    |
|eol ^[ [ 4 ~    Go to end of line                                          |
+---------------------------------------------------------------------------+
 

Find out the desired ESC sequences typing cat followed by the special keys.
-----------------------------------------------------------------------------

4.5.3. jed (1)

This is my favourite editor: it does what I need, it's lighter and easier to
configure than emacs, and emulates other editors quite well. Many users at my
university use jed to emulate EDT, VMS' system editor.

jed's configuration files are .jedrc and /usr/lib/jed/lib/*; the former can
be adapted from jed.rc in the latter directory.

 

  * if xjed apparently doesn't recognise the DEL key, add or comment out
    these lines in your .jedrc:
    +---------------------------------------------------------------+
    |#ifdef XWINDOWS                                                |
    |  x_set_keysym (0xFFFF, 0, "\e[3~");                           |
    |  setkey (``delete_char_cmd'', "\e[3~");                       |
    |#endif                                                         |
    +---------------------------------------------------------------+
     
   
  * to make jed emulate EDT (or other editors) all you have to do is edit a
    couple of lines in .jedrc. If you want the numeric keypad `+' to delete
    words instead of a single character, add this in .jedrc:
    +---------------------------------------------------------------+
    |unsetkey("\eOl");                                              |
    |unsetkey("\eOP\eOl");                                          |
    |setkey("edt_wdel", "\eOl");                                    |
    |setkey("edt_uwdel", "\eOP\eOl");                               |
    +---------------------------------------------------------------+
    after the line that reads () = evalfile("edt") (or similar); 
   
  * to make xjed use the numeric keypad for EDT emulation, insert the
    following in .Xmodmap:
    +---------------------------------------------------------------+
    |keycode 77  = KP_F1                                            |
    |keycode 112 = KP_F2                                            |
    |keycode 63  = KP_F3                                            |
    |keycode 82  = KP_F4                                            |
    |keycode 86  = KP_Separator                                     |
    +---------------------------------------------------------------+
     
   
  * colour customization for xjed is done adding lines like these in
    .Xdefaults:
    +---------------------------------------------------------------+
    |xjed*Geometry: 80x32+150+50                                    |
    |xjed*font: 10x20                                               |
    |xjed*background: midnight blue                                 |
    |# and so on...                                                 |
    +---------------------------------------------------------------+
     
   
  * the ``abbreviation'' feature is an invaluable timesaver. Write a file
    like the following as $HOME/.abbrevs.sl (you can change this name by
    inserting variable Abbrev_File = "/usr/lib/jed/abbrev.sl"; in .jedrc):
    +---------------------------------------------------------------+
    |create_abbrev_table ("Global", "0-9A-Za-z");                   |
    |define_abbrev ("Global", "GG", "Guido Gonzato");               |
    |create_abbrev_table ("TeX", "\\A-Za-z0-9");                    |
    |define_abbrev ("TeX", "\\beq", "\\begin{equation}");           |
    |define_abbrev ("TeX", "\\eeq", "\\end{equation}");             |
    |% and so on...                                                 |
    +---------------------------------------------------------------+
    and type ESC x abbrev_mode to enable it. To enable the abbreviation by
    default, add entries like these to your .jedrc:
    +---------------------------------------------------------------+
    |define text_mode_hook ()                                       |
    |{                                                              |
    |  set_abbrev_mode (1);                                         |
    |}                                                              |
    |%                                                              |
    |define fortran_hook ()                                         |
    |{                                                              |
    |  set_abbrev_mode (1);                                         |
    |  use_abbrev_table ("Fortran");                                |
    |}                                                              |
    |% and so on...                                                 |
    +---------------------------------------------------------------+
     
   

 
-----------------------------------------------------------------------------

4.6. pine (1)

Edit the global configuration in /usr/lib/pine.conf, taking care at least of
the following fields: user-domain, smtp-server, and nntp-server. Note that
inbox-path depends on your MTA: if you use sendmail or postfix, that'll be
var/spool/mail/$USER; with Qmail, /home/$USER/Mailbox (but root will use /var
/qmail/alias/Mailbox.
-----------------------------------------------------------------------------

4.7. minicom (1)

Users can't use minicom unless a global configuration has been made by root.
Remember to make it.
-----------------------------------------------------------------------------

4.8. efax (1)

This package is probably the most convenient for simple sending/receiving of
faxes. You'll have to tailor the script /usr/bin/fax or (mandrake) /etc/
fax.config; easy job, but a couple of quirks caused me quite a headache:

 

  * to find out whether your modem is class 1, 2, or 2.0, use minicom or
    similar program to issue the command at+fclass=?. The reply may be like
    0,1,2; 1 and 2 are the classes supported by your modem; 
   
  * DIALPREFIX: chances are that simply putting `T' or `P' won't work in some
    countries-in Italy, at least. Put `ATDT' or `ATDP' instead; 
   
  * INIT and RESET: these strings contain the initialisers `-i' and `-k',
    needed by efax. If you want to add an AT command, add it to the
    appropriate string leaving out `AT' and preceding the rest with either
    `-i' or `-k'. Example: to add the `ATX3' command to INIT, you'll append
    `-iX3'. 
   

 

That done, there are a few permissions to fix to enable non-root users to
send and receive faxes. The directories /var/lock and /var/spool/fax must be
writable. To do so, create the group faxusers, add users to it, then type:

 
+---------------------------------------------------------------------------+
|~# chown root.faxusers /var/lock                                           |
|~# mkdir /var/spool/fax # if it doesn't exist yet                          |
|~# chown root.faxusers /var/spool/fax; chmod g+w /var/spool/fax            |
+---------------------------------------------------------------------------+
 

As a normal user, you'll issue newgrp faxusers before sendig a fax.
-----------------------------------------------------------------------------

4.9. Ghostscript

This essential tool suffers from a small snag. Owing to to the well-known
export regulations in the USA, the utility pdf2ps doesn't work with encrypted
.pdf files. Never mind: point your browser to http://www.ozemail.com.au/
~geoffk/pdfencrypt, download the file pdf_sec.ps and replace the file with
the same name that comes with the Ghostscript distribution.
-----------------------------------------------------------------------------

4.10. TeX and Friends

The ``root'' of a TeX system is the directory $TEXMF, which is /usr/share/
texmf in teTeX; other distributions may differ (search for ``texmf'' on your
system). You normally add stuff or fiddle with files therein.
-----------------------------------------------------------------------------

4.10.1. Expanding $TEXINPUTS

To include PostScript figures or TeX files that reside in subdirectories, it
is convenient to expand TeX's search path to include subdirectories. Put this
command in your .bash_profile:

 
+---------------------------------------------------------------------------+
|export TEXINPUTS="$HOME/mylib::./figures"                                  |
+---------------------------------------------------------------------------+
 

which makes TeX search in $HOME/mylib before the default directories, and the
directory ./figures afterwards.
-----------------------------------------------------------------------------

4.10.2. Hyphen Patterns

To configure the hyphenation pattern for your language, edit the file $TEXMF/
tex/generic/config/language.dat, then do:

 
+---------------------------------------------------------------------------+
|~# texconfig init ; texconfig hyphen                                       |
+---------------------------------------------------------------------------+
 

Even if you don't write in English, don't remove the entry ``english''; TeX
pukes without it.
-----------------------------------------------------------------------------

4.10.3. dvips (1)

To tailor dvips, the file to edit is $TEXMF/dvips/config/config.ps. Be aware
that the fields regarding the default resolution also affect xdvi's
behaviour; if you experience annoying attempts to create fonts each time you
run it, put the line

 
+---------------------------------------------------------------------------+
|XDvi*mfmode:                                                               |
+---------------------------------------------------------------------------+
 

in your .Xdefault. This should help.
-----------------------------------------------------------------------------

4.10.4. Adding LaTeX Packages

Additional LaTeX packages are available from your nearest CTAN (Comprehensive
TeX Archive Network) mirror site, e.g. ftp://ftp.dante.de/pub/tex. Unpack the
package under $TEXMF/tex/latex.

If no .sty file exist, run the command latex newstyle.ins or latex
newstyle.dtx to create it, then run the command texhash so that teTeX
recognises the new package.
-----------------------------------------------------------------------------

4.11. Docbook

LaTeX is the best choice for typesetting, Docbook for multiformat documents
(This HOWTO is written in Docbook.) Once you get all of the tools in place,
you'll want to use simple scripts to avoid the complex command line. If these
are not provided with the distribution, use the following db2pdf as template:
#!/bin/sh                                                                    
                                                                             
if [ $# = 0 ]; then                                                          
  echo "Usage: db2pdf <file.sgml> [file2.sgml ...]"                          
  exit 1                                                                     
fi                                                                           
                                                                             
# Standard Mandrake location:                                                
DSSSL=/usr/share/sgml/docbook/dsssl-stylesheets-1.57/print/docbook.dsl       
# Standard RedHat location:                                                  
# /usr/lib/sgml/stylesheets/nwalsh-modular/print/docbook.dsl                 
                                                                             
if [ ! -f $DSSSL ]; then                                                     
  DSSSL=$(find /usr/ -name "docbook.dsl" | grep print)                       
fi                                                                           
                                                                             
for FILE in $*                                                               
do                                                                           
  NAME=$(echo $FILE | awk -F'.' '{print $1}')                                
  echo "Processing $FILE..."                                                 
  jade -t tex -d $DSSSL $NAME.sgml                                           
  pdfjadetex $NAME.tex                                                       
done                                                                         
                                                                             
# End of db2pdf                                                              

If you find that your PostScript od .PDF looks very bad, the file to hack is
dbparams.dsl. In my Mandrake system, it's located in /usr/share/sgml/docbook/
dsssl-stylesheets-1.57/print/.
-----------------------------------------------------------------------------

4.12. Avoid PPProblems!

I'll take it for granted that your kernel has PPP + TCP/IP support compiled
in, that loopback is enabled, and that you already have the pppd package
correctly installed and, if you will, set uid root. Obviously, your ISP must
support PPP.

There are now two ways to get PPP to work: a) manual configuration, and b) a
configuration program that automagically sees to it. Whichever option you
choose, have the following information on hand:

 

  * your ISP's telephone number; 
   
  * your ISP's name, mail and news server address; 
   
  * your ISP's domain; 
   
  * your username and password. 
   

 

Manual configuration is a drudgery. It's about editing files and writing
scripts; not too much work, but it's easy to make mistakes and newcomers are
often intimidated. The PPP HOWTO is there for you. Alternatively, there are
tools that ask for the information above and do all the work.

Gnome and KDE include, respectively, gnome-ppp and kppp which are easy enough
to set up. Alternatively, I suggest that you have a look at a couple of
tty--based tools, wvdial and eznet. You feed them your ISP's phone number,
your username, your password, and you're in business. Their home pages are at
http://www.worldvisions.ca/wvdial and http://www.hwaci.com/sw/eznet. Both are
great, but I prefer the latter.
-----------------------------------------------------------------------------

4.12.1. A Quick Start with eznet

First of all, create an /etc/resolv.conf like this:

 
+---------------------------------------------------------------------------+
|nameserver w.x.y.z                                                         |
+---------------------------------------------------------------------------+
 

where you'll insert the address of your ISP's nameserver. To create an
account with eznet, issue the following command:

 
+---------------------------------------------------------------------------+
|#~ eznet add service=YOUR_ISP user=NAME password=PASSWORD phone=PHONE      |
+---------------------------------------------------------------------------+
 

which creates the file /var/eznet/eznet.conf, owned by root.root with
permissions 600; chmod it to 666 if you want it to be world readable. Now
dial your ISP with eznet up YOUR_ISP. If the modem keeps waiting for the dial
tone and won't connect, then try this command:

 
+---------------------------------------------------------------------------+
|#~ eznet change YOUR_ISP init0=atx3                                        |
+---------------------------------------------------------------------------+
 

To hang up, the command is eznet down. That's all!
-----------------------------------------------------------------------------

4.12.2. A Quick Start with wvdial

wvdial's setup is even shorter. Type wvdialconf /etc/wvdial.conf, then edit
the resulting file to include your username, password, and phone number. Try
it out with wvdial, and keep your fingers crossed. To hang up, stop it with
Ctrl-C.
-----------------------------------------------------------------------------

4.13. POP Client

To retrieve your mail from a POP3 server, you need a POP client. Most such
clients require that you run an MTA like sendmail, qmail or postfix; a bit of
an overkill on low-spec machines. However, there are clients that work
without an MTA. The first kind is well represented by fetchmail; the second
by fetchpop or frenchie. Sites: ftp://metalab.unc.edu/pub/Linux/system/mail/
pop, http://www.lowcountry.com/~jscottb/tcltk.shtml.

To configure these clients:

 

  * fetchpop: the first time you run it, you'll be prompted for some
    information. Answer the questions and you're set. fetchpop must be used
    with the -r switch if your ISP's POP3 server doesn't implement the
    command LAST properly.  
   
  * frenchie: as above, edit  /.frenchie/frenchierc; 
   
  * fetchmail: adapt this sample .fetchmailrc:
    +---------------------------------------------------------------+
    |# $HOME/.fetchmailrc                                           |
    |poll mbox.myisp.com with protocol pop3;                        |
    |  user john there with password _Loo%ny is john here           |
    +---------------------------------------------------------------+
    One user reported that adding ``smtphost localhost'' to the second line
    improved performance dramatically. You must set the permissions to this
    file with the command chmod 600 .fetchmailrc, otherwise fetchmail will
    rightly refuse to start. This example is very basic; there are endless
    possibilities of configuration. Check out at http://www.ccil.org/~esr/
    fetchmail. 
   

 
-----------------------------------------------------------------------------

4.14. Basic Mail Filtering

You will want to protect yourself from spam or huge mail messages. There are
two cases: 1) permanent connection to the net, 2) a POP link. In the first
case, you can write a .procmailrc file, while in the second there are tools
for checking the mail prior to fetching it.

A very simple .procmailrc that defines a few rules:

 
+---------------------------------------------------------------------------+
|# $HOME/.procmailrc                                                        |
|                                                                           |
|MAILDIR=$HOME/mail # make sure it exists                                   |
|                                                                           |
|# Store messages directed to the "foo" mailing list to $HOME/mail/foo      |
|:0                                                                         |
|* ^To:.*foo                                                                |
|foo                                                                        |
|                                                                           |
|# Discard messages that are not explicitly sent to me or to one of the     |
|# mailling lists I subscribed to.                                          |
|:0                                                                         |
|* !^TO(guido|jed|lugvr|ldp|nobody)                                         |
|/dev/null                                                                  |
|                                                                           |
|# ditto, for messages larger than 50k.                                     |
|:0                                                                         |
|* > 50000                                                                  |
|/dev/null                                                                  |
+---------------------------------------------------------------------------+
 

man procmailex for further examples.

POP users will want to use poppy, a useful Perl script for checking the mail
before fetching it. Get it from ftp://metalab.unc.edu/system/mail/pop.
-----------------------------------------------------------------------------

4.15. X Window System (XFree86)

4.15.1. Setting Up the X Server

Come on, it's no longer as difficult as it used to be... All major
distributions include a tool for setting up X11 (e.g. XConfigurator, sax,
XF86Setup, or at least xf86config). X configuration is virtually automatic
these days, but a few video cards may cause a headache.

First of all, check out at the XFree86 site ( ftp://metalab.unc.edu/system/
mail/pop) whether your video card is supported. If so, then try this
procedure:

 

  * install the plain VGA server;
   
  * go to ftp://ftp.XFree86.org/pub/XFree86/current/binaries, cd to the
    proper Linux subdirectory, and download the archives X_version_bin.tgz,
    X_version_set.tgz, and all the servers. Amongst other programs, the first
    archive contains the most up-to-date SuperProbe; 
   
  * unpack X_version_bin.tgz to a temporary directory, cd to it, and run ./
    SuperProbe. If your video card is recognised, chances are that you'll be
    able to set it up. Otherwise, hard luck;
   
  * install the servers and X_version_set.tgz from /usr/X11R6/, then run
    XF86Setup.
   

 

This has always worked for me, but your mileage may vary. Please note that
most times X11 won't start because you chose wrong specs for your monitor!
Start with conservative settings, i.e. 800x600 and 256 colours, then pump it
up. Warning: these operations are dangerous and your monitor might be
damaged!

If your card isn't supported, you can either: 1) wait for the next version of
XFree86; 2) buy a commercial X server; 3) buy a supported video card. Quartum
non datur.
-----------------------------------------------------------------------------

4.15.2. The X Startup Sequence

There are two ways to launch X11: from the console via startx, or directly
via /etc/inittab.
-----------------------------------------------------------------------------

4.15.3. Keypad

We have seen above how to make a few special keys work. The sample file
.Xmodmap works well if you want to use Xjed, but it makes the keypad
unusable. You'll then need another config file, which we'll call
.Xmodmap.num:

 
+---------------------------------------------------------------------------+
|! Definitions can be found in <X11/keysymdef.h                             |
|                                                                           |
|keycode 77  = Num_Lock                                                     |
|keycode 112 = KP_Divide                                                    |
|keycode 63  = KP_Multiply                                                  |
|keycode 82  = KP_Subtract                                                  |
|keycode 86  = KP_Add                                                       |
|keycode 79  = KP_7                                                         |
|keycode 80  = KP_8                                                         |
|keycode 81  = KP_9                                                         |
|keycode 83  = KP_4                                                         |
|keycode 84  = KP_5                                                         |
|keycode 85  = KP_6                                                         |
|keycode 87  = KP_1                                                         |
|keycode 88  = KP_2                                                         |
|keycode 89  = KP_3                                                         |
|keycode 90  = KP_0                                                         |
|keycode 91  = KP_Decimal                                                   |
+---------------------------------------------------------------------------+
 

Make sure that your /etc/X11/XF86Config does not contain these three lines:

 
+---------------------------------------------------------------------------+
|  ServerNumLock                                                            |
|  Xleds                                                                    |
|  XkbDisable                                                               |
+---------------------------------------------------------------------------+
 

and in case, comment them out. To re-enable the keypad, you'll issue the
command xmodmap .Xmodmap.num.
-----------------------------------------------------------------------------

4.15.4. Graphical Login with xdm

To be greeted by a graphical login, edit the file /etc/inittab, which should
include a line like this:

 
+---------------------------------------------------------------------------+
|x:5:respawn:/usr/bin/X11/xdm -nodaemon # also kdm or gdm                   |
+---------------------------------------------------------------------------+
 

where 5 is the runlevel corresponding to X11. Modify the line that defines
the default runlevel (usually 2 or 3), changing it as above:

 
+---------------------------------------------------------------------------+
|id:5:initdefault:                                                          |
+---------------------------------------------------------------------------+
 

The number of colours is specified in /etc/X11/xdm/Xserver:

 
+---------------------------------------------------------------------------+
|:0 local /usr/X11R6/bin/X :0 -bpp 16 vt07  # first X server, 65k colours   |
|:1 local /usr/X11R6/bin/X :1 -bpp 32 vt08  # second X server, true colour  |
+---------------------------------------------------------------------------+
 

If you already have .xinitrc, copy it to .xsession and make the latter
executable with chmod +x .xsession. Now issue the command telinit 5 and
you're in business.
-----------------------------------------------------------------------------

4.15.5. Window Manager

Once X works, there are endless possibilities of configuration; it depends on
the window manager you use, there are tens to choose from. Mostly, it's all
down to editing one or more ASCII files in your home directory; in other
cases you don't have to edit a thing, and use an applet or even a menu.

Some examples:

 

  * the fvwm family: copy /etc/X11/fvwm/system.fvwmrc (or similar) to your
    home using the appropriate name, browse it and start experimenting. You
    may waste a lot of time before you get the precise look and feel you
    like;
   
  * WindowMaker: it has several config files that live under $HOME/GNUstep,
    and a cool configuration applet; 
   
  * KDE, Gnome, xfce and others: nothing to edit manually here, everything
    can be done via the menu.
   

 

In short: if you don't mind editing config file, choose something like icewm,
fvwm*, blackbox etc; if you do mind, the choice is currently restricted to
KDE, Gnome, WindowMaker, and Xfce. Email me if I'm wrong.

It's important to have a good .xinitrc. An example:

 
+---------------------------------------------------------------------------+
|#!/bin/sh                                                                  |
|# $HOME/.xinitrc                                                           |
|                                                                           |
|usermodmap=$HOME/.Xmodmap                                                  |
|xmodmap $usermodmap                                                        |
|                                                                           |
|xset s noblank  # turn off the screen saver                                |
|xset s 300 2    # screen saver start after 5 min                           |
|xset m 10 5     # set mouse acceleration                                   |
|                                                                           |
|rxvt -cr green -ls -bg black -fg white -fn 7x14 \                          |
|  -geometry 80x30+57+0 &                                                   |
|                                                                           |
|if [ "$1" = "" ] ; then  # default                                         |
|  WINMGR=wmaker                                                            |
|else                                                                       |
|  WINMGR=$1                                                                |
|fi                                                                         |
|                                                                           |
|$WINMGR                                                                    |
+---------------------------------------------------------------------------+
 

Although it doesn't appear to be strictly required, make it executable with
chmod +x .xinitrc.

The .xinitrc above lets you choose the window manager: try
+---------------------------------------------------------------------------+
|$ startx startkde # or other w.m.                                          |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

4.15.6. Defaults for X11 Apps

Find out where the app-defaults directory is (it should be /usr/X11R6/lib/X11
/app-defaults). Several apps keep a configuration file there.
-----------------------------------------------------------------------------

4.15.7. Adding Fonts

Recent versions of XFree86 (say, > 3.3.4) use an X Font Server that supports
PostScript Type 1 and True Type fonts natively, so you can use the wealth of
fonts available on the net. There's a simple procedure to follow.

Suppose that you downloaded a Type 1 font collection, e.g. Freefont ( ftp://
ftp.gimp.org/pub/gimp/fonts/freefonts-0.10.tar.gz ). To make it visible to
the font server, unpack the archive from /usr/X11R6/lib/X11/fonts/. Then edit
/etc/X11/fs/config, add an entry for the new directory, and restart the font
server.

If you're rolling your own font collection, you'll need to supply the files
fonts.dir and fonts.scale; the tool to make them is type1inst, available from
http://http://goblet.anu.edu.au/~m9305357/type1inst.html .

As for the True Type fonts, group them in a directory of your choice and
create fonts.dir using ttmkfdirfonts.dir, included in the Freetype archive; 
http://www.freetype.org . Then proceed as above. For example, if you want to
use the Windows fonts you have in, say, /mnt/win/windows/fonts, go to that
directory, run ttmkfdir, edit /etc/X11/fs/config and restart the font server.

It all started from the original True Type X font server: http://http://
www.dcs.ed.ac.uk/home/jec/programs/xfsft/ . 
-----------------------------------------------------------------------------

4.16. Users' Configurations

When you're done editing the dot files, copy them to /etc/skel as seen in
Section Section 4.
-----------------------------------------------------------------------------

4.17. Making .rpms

rpm is such a wonderful method of keeping packages under control that I'm
reluctant to install .tar.gz archives but in very few special cases (e.g.,
security). Whenever you install a tarball, consider turning it into an .rpm
archive, then reinstall it; consult the RPM HOWTO. Also, if you use recent
gcc versions, it may be advisable to put this in your /etc/rpmrc:

 
+---------------------------------------------------------------------------+
|optflags: i386 -O2 -mpentiumpro                                            |
+---------------------------------------------------------------------------+
 
-----------------------------------------------------------------------------

4.18. Upgrading

If you upgrade your machine, do your backup as usual and remember to save a
few additional files. Some could be /etc/X11/XF86Config, /usr/bin/fax, all
the stuff in /usr/local, the kernel configuration, the whole /etc, and all
the mail in /var/spool/mail.

Then it's time to upgrade (in rare cases, downgrade!) applications that your
distribution ship with, and to add additional packages. Keep a list of these
ones.
-----------------------------------------------------------------------------

5. Configuration Software + Docs

There are several programs that make Linux easy to setup and configure. Some
are becoming sort of standard: Red Hat, Caldera and other distributions ship
with apps like setup, printtool, netcfg, usertool, etc, while S.u.S.E. ships
with a comprehensive configuration program called Yast. Other useful programs
are:

 

  * The Dotfile Generator: fine X app with modules to configure packages like
    emacs, bash, procmail and more. Its page is at http://www.imada.ou.dk/
    ~blackie/dotfile;
   
  * Linuxconf: the ultimate configuration tool. It can do everything, both in
    console and under X. Go to http://www.solucorp.qc.ca/linuxconf at once. 
   

 

Documents on Linux configuration are popping up everywhere. One of the most
complete is TrinityOS, http://www.ecst.csuchico.edu/~dranch/LINUX/
index-linux.html . Bug the author to have him turn the document in nicer
formats.

A jolly good page is http://dotfiles.com. Just what it says - a collection of
configuration files.
-----------------------------------------------------------------------------

6. The End

6.1. Copyright

Copyright (c) by Guido Gonzato, ggonza at tin.it. This document may be
distributed only subject to the terms and conditions set forth in the LDP
License at http://www.linuxdoc.org/COPYRIGHT.html, except that this document
must not be distributed in modified form without the author's consent.

If you have questions, please refer to the Linux Documentation Project home
page, http://www.linuxdoc.org.
-----------------------------------------------------------------------------

6.2. Feedback

Perhaps even more than other HOWTOs, this one needs and welcomes your
suggestions, criticisms, and contributions. Not only is feedback welcome:
it's necessary. If you think something is missing or wrong, please email me.
If you have a distribution other than Red Hat/Mandrake and your config files
are different or placed in other directories, please tell me and I'll include
your tips. My aim is making life with Linux as easy as possible.

Linux has a huge number of packages, so it's impossible to include directions
for all of them. Please keep your requests/suggestions pertinent to the
``most reasonable'' programs---I'll leave it to your common sense.
-----------------------------------------------------------------------------

6.3. Disclaimer

This document is provided ``as is''. I put great effort into writing it as
accurately as I could, but you use the information contained in it at your
own risk. In no event shall I be liable for any damages resulting from the
use of this work.

Many thanks to all other HOWTO authors and man pages writers/maintainers,
whose work I've shamelessly pilfered; and to all people who provided me with
feedback.

I hope you'll find this work useful, though. Whenever I install a new Linux
box, I actually do...

Enjoy,

Guido =8-)
