Previous Next Contents

3. Software Configuration

3.1 bash(1)

To tailor bash's behaviour, these are the files to edit:

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.


# /etc/profile

# System wide environment and startup programs
# Functions and aliases go in /etc/bashrc

# This file sets the following features:
#
#   o path
#   o prompts
#   o a few environment variables
#   o colour ls
#   o less behaviour
#   o keyboard settings
#
# Users can override these settings and/or add others in their
# $HOME/.bash_profile

# set a decent path

echo $PATH | grep X11R6 > /dev/null
if [ $? = 1 ] ; then   # add entries to the path
  PATH="$PATH:/usr/X11R6/bin:$HOME/bin:."
fi

# notify the user: login or non-login shell. If login, the prompt is
# coloured in blue; otherwise in magenta. Root's prompt is red.

USER=`whoami`
if [ $LOGNAME = $USER ] ; then
  COLOUR=44
else
  COLOUR=45
fi

if [ $USER = 'root' ] ; then
  COLOUR=41
fi

# put a real escape character instead of ^[
PS1='^[[$COLOUR;37;1m$HOSTNAME:^[[37;40;1m\w\$ '
PS2="Continue> "

# no core dumps, please

ulimit -c 0   

# set umask

if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
        umask 002
else
        umask 022
fi

# a few variables

USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
EDITOR=jed
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
HISTFILESIZE=1000
export PATH PS1 PS2 USER LOGNAME MAIL EDITOR HOSTNAME HISTSIZE HISTFILESIZE

# enable colour ls

eval `dircolors /etc/DIR_COLORS -b`
export LS_OPTIONS='-F -s -T 0 --color=tty'

# customize less

LESS='-M-Q'
LESSEDIT="%E ?lt+%lt. %f"
LESSOPEN="| lesspipe.sh %s"
VISUAL=jed
LESSCHARSET=latin1
export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET

# customise the keyboard

/sbin/kbdrate -s -r 16 -d 500

for i in /etc/profile.d/*.sh ; do
        if [ -x $i ]; then
                . $i
        fi
done

This is /etc/bashrc:


# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

alias which="type -path"
alias d="ls"
alias dir="d"

This is .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

COLOUR=45
# put a real escape character instead of ^[
PS1='^[[$COLOUR;37m$USER:^[[37;40m\w\$ '

# aliases

alias cp='cp -i'
alias l=less
alias lyx='lyx -width 900 -height 700'
alias mv='mv -i'
alias rm='rm -i'
alias x=startx

# A few useful functions

inst() # Install a .tar.gz archive in the current directory.
{ gzip -dc $1 | tar xvf - }

cz() # List the contents of a .zip archive.
{ unzip -l $* }

ctgz() # List the contents of a .tar.gz archive.
{
  for file in $* ; do
    gzip -dc ${file} | tar tf -
  done
}

tgz() # Create a .tgz archive a la zip.
{
  name=$1 ; tar -cvf $1 ; shift
  tar -rf ${name} $*
  gzip -S .tgz ${name}
}

This is .bash_profile:


# $HOME/.bash_profile

# User specific environment and startup programs
# This file contains user-defined settings that override
# those in /etc/profile

# Get aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# re-get PS1 settings

if [ $USER = 'root' ] ; then
  COLOUR=41
else
  COLOUR=44
fi

# put a real escape character instead of ^[
PS1='^[[$COLOUR;37;1m$HOSTNAME:^[[37;40;1m\w\$ '

export PS1

This is .bash_logout:


# $HOME/.bash_logout
clear

This is .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
set show-all-if-ambiguous On

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

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 goes for rxvt. Rumour has it that it's a termcap problem.

3.2 ls(1)

ls can display directory listings using colours to highlight different file types. To enable this feature, add these lines to /etc/profile:

eval `dircolors /etc/DIR_COLORS -b`
export LS_OPTIONS='-F -T 0 --color=tty'

This sets the environment variable LS_COLORS that contains the colour list set up in /etc/DIR_COLORS. Note: don't ask me why, but this won't work with some versions of rxvt; use some flavour of xterm instead. It looks like rxvt has a bug that prevents it from inheriting the environment correctly in some circumstances.

3.3 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 so on. Its configuration involves a few steps:

3.4 emacs(1)

Some emacs distributions don't come preconfigured for colours and syntax highlighting. Write this in your .emacs:

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

This only works in X11. I'll leave it to you to peruse all of emacs' documentation to discover how to tailor it to your needs---potentially, it can take months of hacking...

3.5 joe(1)

Check in /usr/bin/ whether jmacs, jstar, and jpico are symlinks to joe or standalone binaries; in the latter case, you may turn them to symlinks to save some disk space:

~# cd /usr/bin
/usr/bin# ln -sf joe jmacs ; ln -sf joe jstar ; ln -sf joe jpico

Then, all you have to do is copy /usr/lib/joe/joerc to your home dir as .joerc and tailor it.

3.6 jed

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

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

3.7 TeX and Friends

I'll assume you have the TeTeX distribution. Just a couple of things here:

3.8 PPP

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. (These requirements should be there by default.) There are now two ways to get PPP to work: a) manual configuration, and b) using a program that automagically sees to it. First, the manual option.

Let's suppose that your ISP's specifications are the following:

To configure manually your PPP connections, you'll do:

Phew! If you're lucky, this should work. Otherwise, be prepared to study the PPP-HOWTO.

So much for manual configuration. There's a fine package that makes all this drudgery a thing of the past, though: it's called ezppp and you'll find it at http://www.serv.net/~cameron/ezppp/index.html . Download it at once.

3.9 POP Client

To retrieve your mail from a POP server, use a POP client like fetchpop or fetchmail. The latter is probably the only option if your provider's PPP server has problems with the command LAST.

To configure these clients:

3.10 X Window System

Once you've managed to make X work (right video card etc.), there are endless possibilities of configuration; it depends on the window manager you use. In any case, it's all down to editing one or more ASCII files in your home directory. As for the window manager:

In addition, be sure you have a proper .xinitrc. An example:

#!/bin/sh

# $HOME/.xinitrc

# set a few keys correctly

usermodmap=$HOME/.Xmodmap 
xmodmap $usermodmap

xset s noblank  # turn off the screen saver
xset s 300 2    # screen saver start after 5 min
xsetroot -solid "medium blue" &

# rxvt saves memory, but has a few bugs:
#   - home and end keys are not recognised;
#   - backspace and delete don't work as in console;
#   - colours are not properly inherited by the environment;
#   - problems with the environment in general;
# xterm is therefore better in many cases. However, rxvt is best
# for running some colour apps like mc.

xterm -ls -bg black -fg white -sb -sl 500 -j -ls -fn 10x20 -fb 10x20bold \
-title "Color xterm" -geometry 80x25+150+0 &

fvwm95-2

3.11 Fortran

In my experience, if you need Fortran a good alternative to g77 is the Fortran-to-C translator f2c and the front-end yaf77.

Get yaf77 from ftp://sunsite.unc.edu/pub/Linux/devel/languages/fortran/yaf77-1.4.tgz and its mirrors.

3.12 Users' Configurations

It's a good idea to let new users have a few configuration files ready when they first log in. Put the following files in /etc/skel: bashrc, bash_profile, bash_logout, inputrc, less, xinitrc, fvwmrc, fvwm2rc95, Xmodmap, Xdefaults, jedrc, joerc, emacs.

(Note: due to formatting problems, I had to remove the leading dot (`.') from each of these files.)

Note that .pinerc can't be fully tailored; make sure that at least the fields user-domain, smtp-server, and nntp-server are set up.


Previous Next Contents