These are the the configuration files we are going to custimise:
/etc/profile /etc/bashrc .bashrc
.bash_profile .inputrc .less .lessrc .xinitrc .fvwmrc .fvwm2rc95
.Xmodmap .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.
bash
(1)
To tailor bash
's behaviour, these are the main files to edit:
$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.
# /etc/profile # System wide environment and startup programs # Functions and aliases go in /etc/bashrc # This file sets up the following features: # # o path # o prompts # o a few environment variables # o colour ls # o less # # 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 ^[. To do this: # emacs: ^Q ESC vi: ^V ESC joe: ` 0 2 7 jed: ` ESC # Remove `;1' if you don't like the `bold' attribute. ESC=^[ PS1='$ESC[$COLOUR;37;1m$USER:$ESC[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' # customise less LESS='-M-Q' LESSEDIT="%E ?lt+%lt. %f" LESSOPEN="| lesspipe.sh %s" VISUAL=jed LESSCHARSET=latin1 export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET for i in /etc/profile.d/*.sh ; do if [ -x $i ]; then . $i fi done
This is a sample /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 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 # put a real escape character instead of ^[ ESC=^[ PS1='$ESC[$COLOUR;37m`whoami`:$ESC[37;40m\w\$ ' export PS1 fi # 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 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 the 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" # fix rxvt 2.45 backspace if [ "$COLORTERM" != "" ] ; then stty erase ^? ESC=^[ # put a real escape character instead of ^[ echo -n "$ESC[36l" fi
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 in
xterm
and other X11 applications, the following is also needed:
.xinitrc
:
usermodmap=$HOME/.Xmodmap
xmodmap $usermodmap
.Xmodmap
:
keycode 22 = BackSpace
keycode 107 = Delete
this fixes the console. To fix xterm
:
.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 .bash_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 versions
of rxvt
older than 2.21.
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'
(If you don't have the file
/etc/DIR_COLORS
,
remove the reference
to it in the first line.) 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 rxvt
older than v. 2.21;
use some flavour of xterm
instead. It looks like rxvt
has a bug
that prevents it from inheriting the environment correctly in some
circumstances.
Caldera's ls
doesn't have colours, but there's an equivalent
color-ls
. Add this in /etc/bashrc:
alias ls="color-ls $LS_OPTIONS"
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:
.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
. This creates a binary file .less
containing the key bindings.
#!/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 *.zip) unzip -l $1 2>/dev/null ;; # View archives *.arj) unarj -l $1 2>/dev/null ;; *.rpm) rpm -q -p -i -l $1 2>/dev/null ;; *.cpio) cpio --list -F $1 2>/dev/null ;; *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` FILE=`echo $FILE | cut -d ' ' -f 2` if [ "$FILE" = "troff" ]; then groff -s -p -t -e -Tascii -mandoc $1 fi ;; *) file $1 | grep text > /dev/null ; if [ $? = 1 ] ; then # it's not some kind of text strings $1 fi ;; esac } lesspipe $1
chmod 755 lesspipe.sh
.
LESS="-M-Q" # long prompt, silent
LESSEDIT="%E ?lt+%lt. %f" # edit top line
LESSOPEN="| lesspipe.sh %s" # filter
VISUAL=jed # default editor---insert your favourite
LESSCHARSET=latin1 # display accented letters if needed
export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET
The variable LESSCHARSET
depends on the fact that I live in Italy and
want to use the ISO 8859/1 character set. You fellow Americans, Japanese,
Russians and so on had better not set it.
emacs
(1)
I don't use emacs
, so I have only one piece of advice to give you.
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 find out how to tailor it to your needs---potentially, it
can take months of hacking...
joe
(1)
Some people report that joe
works with colours under X11, but not in tty.
In addition, some special keys don't work. To my knowledge, no one has found
a solution to the former small nag; someone suggested hacking on
/etc/termcap.
If you experience that problem, a quick and dirty (and inelegant) solution is this:
~$ export TERM=vt100
~$ joe myfile
(edit your file)
~$ export TERM=linux
jed
(1)
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.
jed
's configuration files are .jedrc
and
/usr/lib/jed/lib/*;
the former can be adapted from jed.rc
in the latter directory.
jed
use the special keys correctly, write the file
/usr/lib/jed/lib/defaults.sl whose only line reads:
() = evalfile("linux");
Info_Directory = "/usr/info";
and
add /bin/mail
after UCB_Mailer =
;
jed
emulate EDT
(or other editors)
is straightforward: you just have to edit a couple of lines in .jedrc
.
If you want to use 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");
.
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
Moreover, make sure that your /etc/X11/XF86Config contains the
following lines:
# ServerNumLock # must be commented out
XkbDisable
This applies to XFree 3.2. Unless you use a standard American keyboard
though, note that ``XkbDisable'' brings some little problems. You'll find
out by yourself.
xjed
is done adding lines like these
in .Xdefaults
:
xjed*Geometry: 80x32+150+50
xjed*font: 10x20
xjed*background: midnight blue
$HOME/.abbrevs.sl
:
create_abbrev_table ("Global", "");
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 have the abbreviation
on by default, add entries like these in your .jedrc
:
define text_mode_hook ()
{
set_abbrev_mode (1);
}
%
define fortran_hook ()
{
set_abbrev_mode (1);
use_abbrev_table ("Fortran");
}
% and so on...
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; easy job, but a couple of quirks caused me quite an headache:
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'. For example: to add the `ATX3' command to INIT, you'll
append `-iX3'.
I'll assume you have the teTeX distribution. Just a couple of things here:
~# texconfig init ; texconfig hyphen
texhash
so
that teTeX recognises the new package;
dvips
, the file to edit is
/usr/lib/texmf/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 .Xdefault
. This should help.
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 suid 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:
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.
You'll be surely better off if you reach out for a friend who's already connected and download one of the following nice tools:
http://www.serv.net/~cameron/ezppp/index.html
.
Very easy to use, almost self--explanatory;
ftp://sunsite.unc.edu/pub/Linux/system/network/serial/ppp
. One of the finest is pppsetup-X.XX.tar.gz.
wvdial
.
You feed it your ISP's phone number, your username, your password, and you're
in business. From the README file: ``There is a (currently cheesy) web page
for wvdial at:
http://www.worldvisions.ca/wvdial
''.
Very fine tool.
To retrieve your mail from a POP server, you use a POP client
like fetchpop
or fetchmail
. The latter is more advanced, and is
probably the only option if your ISP's PPP server can't deal with the command
LAST. They're available on
ftp://sunsite.unc.edu/pub/Linux/system/mail/pop
.
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.
fetchmail
: adapt this sample .fetchmailrc
:
# $HOME/.fetchmailrc
poll mbox.myisp.com with protocol pop3;
user john there with password _Loo%ny is john here
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 and assumes that you have a running
sendmail
; there are endless possibilities of configuration. Check out on
http://www.ccil.org/~esr/fetchmail.
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:
.fvwmrc
, browse it and start experimenting. This
contributed system.fvwmrc
is IMHO a wee bit too simple and doesn't do
justice to fvwm
.
.fvwm2rc95
, then edit it. The contributed example is quite good.
.fvwm2rc.defines
.
In addition, make 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 a lot of memory, but versions older than 2.21 have bugs
# affecting the keys and the way the environment is inherited. Upgrade
# or use xterm instead.
xterm -ls -bg black -fg white -sb -sl 500 -j -ls -fn 10x20 -fb 10x20bold \
-title "Color xterm" -geometry 80x25+150+0 &
fvwm95-2
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-X.Y.tgz
from
ftp://sunsite.unc.edu/pub/Linux/devel/lang/fortran
.
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 .abbrevs.sl. joerc
.emacs
Note that .pinerc
can't be fully tailored; make sure that at least the
fields user-domain
, smtp-server
, and nntp-server
are properly
set up.
If you upgrade your machine, remember to save a few additional files beforehand. Some of them are: /etc/X11/XF86Config, /usr/bin/fax, ...