Configuration HOWTO: Software Configuration

Next Previous Contents

## 3. Настройка приложений

Вот перечень файлов, которые мы будем настраивать: `/etc/profile` `/etc/bashrc` `.bashrc` `.bash_profile .inputrc .less .lessrc .xinitrc .fvwmrc .fvwm2rc95` `.Xmodmap .Xdefaults .jedrc. .abbrevs.sl .joerc .emacs` . Не добавляйте пользователей, пока вы не закончили настраивать вашу систему; вы можете положить общие файлы в `/etc/skel`.

## 3.1 `bash`(1)

Чтобы определить поведение `bash`, нужно редактировать следующие файлы:

- `/etc/bashrc` содержит общесистемные псевдонимы и функции;
- `/etc/profile` содержит общесистемные переменные окружения и приложения, которые запускаются при начальной загрузке;
- `$HOME/.bashrc` содержить пользовательские псевдонимы и функции;
- `$HOME/.bash_profile` содержит пользовательские переменные окружения и приложения, которые запускаются при начальной загрузке;
- `$HOME/.inputrc` содержить клавишные привязки и др. вещи.

Примеры этих файлов приведены ниже. Первый и наиболее важный : `/etc/profile`. Он содержит настройки многих свойств вашей системы, как вы увидите в следующих секциях.

    # /etc/profile

    # Системные переменные окружения и программы начальной загрузки
    # Функции и псевдонимы перенесены в /etc/bashrc

    # Этот файл определяет следующие свойства:
    #
    #   o пути
    #   o приглашения командной строки
    #   o некоторые переменные окружения
    #   o цвет ls
    #   o less
    #
    # Пользователи могут переопределить эти установки и/или добавить другие
    # $HOME/.bash_profile

    # установим нужный путь

    echo $PATH | grep X11R6 > /dev/null
    if [ $? = 1 ] ; then   # добавим новые пути
      PATH="$PATH:/usr/X11R6/bin:$HOME/bin:."
    fi

    # предупреждение пльзователя: регистрирующий или нерегистрирующий shell. Если регистрирующий, то приглашение
    # синего цвета; в противном случае бирюзового. Приглашение для Root'а красное.

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

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

    # задать действительный escape символ вместо ^[. Чтобы сделать это:
    # emacs: ^Q ESC   vi: ^V ESC   joe: ` 0 2 7   jed: ` ESC
    # Уберите `;1' если вы не любите атрибут `жирный'.
    ESC=^[
    PS1='$ESC[$COLOUR;37;1m$USER:$ESC[37;40;1m\w\$ '
    PS2="Continue> "

    # не создавать дамп памяти

    ulimit -c 0

    # установка umask

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

    # несколько переменных

    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

    # включить цвет в ls

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

    # настройка 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

Вот пример `/etc/bashrc`:

    # /etc/bashrc

    # Общесистемные функции и псевдонимы
    # Переменные окружения перенесены в /etc/profile

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

Похожий и .`bashrc`:

    # $HOME/.bashrc
    # Источник глобальных определений

    if [ -f /etc/bashrc ]; then
      . /etc/bashrc
    fi

    # необходимо предупредить пользователя, что он в нерегистрирующем shell

    if [ "$GET_PS1" = "" ] ; then
      COLOUR=45
    # определение действительного escape символа вместо ^[
      ESC=^[
      PS1='$ESC[$COLOUR;37m`whoami`:$ESC[37;40m\w\$ '
      export PS1
    fi

    # псевдонимы

    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

    # Несколько полезных функций

    inst() # Инсталировать .tar.gz архив в текущую директорию.
    { gzip -dc $1 | tar xvf - }

    cz() # Содержание .zip архива.
    { unzip -l $* }

    ctgz() # Содержание .tar.gz архива.
    {
      for file in $* ; do
        gzip -dc ${file} | tar tf -
      done
    }

    tgz() # Создать .tgz архив по типу zip.
    {
      name=$1 ; tar -cvf $1 ; shift
      tar -rf ${name} $*
      gzip -S .tgz ${name}
    }

Это пример `.bash_profile`:

    # $HOME/.bash_profile

    # Пользовательские переменные окружения и программы начальной загрузки
    # Этот файл содержить пользовательские настройки, который переопределяют
    # установленные в /etc/profile

    # Взять псевдонимы и функции
    if [ -f ~/.bashrc ]; then
      GET_PS1="NO"  # не изменять цвет приглашения
      . ~/.bashrc
    fi

    # назначить несколько директорий `по умолчанию'
    export CDPATH="$CDPATH:$HOME:$HOME/text:$HOME/text/geology"

    # исправить забой в rxvt 2.45
    if [ "$COLORTERM" != "" ] ; then
      stty erase ^?
      ESC=^[  # задать действительный escape символ вместо ^[
      echo -n "$ESC[36l"
    fi

Это пример `.inputrc`:

    # $HOME/.inputrc

    # клавишные привязки

    "\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          # убрать писк
    set meta-flag On                # разрешить 8-битный ввод (например, диакритические знаки)
    set convert-meta Off            # не выдалять 8-битные символы
    set output-meta On              # корректно отображать 8-битные символы
    set horizontal-scroll-mode On   # пролистывать длинные команды
    set show-all-if-ambiguous On    # после нажатия TAB

Для того, чтобы backspace и delete корректно работали в `xterm` и других X11 приложениях, необходимо сделать следующее:

- поместите это в ваш `.xinitrc`:

>     usermodmap=$HOME/.Xmodmap
>     xmodmap $usermodmap

- поместите это в ваш `.Xmodmap`:

>     keycode 22 = BackSpace
>     keycode 107 = Delete

это исправит консоль. Для исправления `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` немного более сложный, поскольку на его поведение влияют некоторые параметры, задаваемые во время компиляции. Смотрите выше `.bash_profile`.

Более детальную информацию по `bash`(1) и `readline`(3) смотрите в man.

Не надейтесь, что все программы будут работать корректно! Если вы, например, запускаете `joe` в `xterm` некоторые клавиши не будут работать; подобное верно и для версий `rxvt` старее 2.21.

## 3.2 `ls`(1)

`ls` может отображать содержание директории используя разные цвета для отображения разных типов файлов. Чтобы включить это свойство, добавьте следующие строчки в `/etc/profile`:

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

(Если у вас нет файла `/etc/DIR_COLORS`, удалите ссылку на него в первой строке.) Это устанавливает переменную окружения `LS_COLORS,` которая содержит список цветов установленных в `/etc/DIR_COLORS`. Примечание: не спрашивайте меня почему, но это не работает с версией `rxvt` старее v. 2.21; используйте вместо него `xterm`. Схоже на то, что `rxvt` имеет глюк, который не позволяет ему при некоторых обстоятельствах корректно наследовать окружение.

`ls` в дистрибутиве Caldera не имеет цветов, однако есть эквивалент `color-ls`. Добавьте это к `/etc/bashrc`:

>     alias ls="color-ls $LS_OPTIONS"

## 3.3 `less`(1)

С помощью этого прекрасного пейджера вы можете просматривать не только обыкновенный текст, но и сжатые gzip, tar и zip архивы, man страницы и все, что хотите. Его настройка включает несколько шагов:

- чтобы использовать его с клавишами перемещения, поместите этот ASCII файл `.lesskey` в вашу домашнюю директорию:

>     ^[[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

затем выполните команду `lesskey`. Она создаст двоичный файл `.less` содержащий клавишные привязки.
- сохраните следующий файл как `/usr/bin/lesspipe.sh`:

    #!/bin/sh
    # Это препроцессор для 'less'.  Он используется, когда установлена переменная окружения
    # LESSOPEN="|lesspipe.sh %s"

    lesspipe() {
      case "$1" in
      *.tar) tar tf $1 2>/dev/null ;; # Просмотр содержания .tar и .tgz файлов
      *.tgz|*.tar.gz|*.tar.Z|*.tar.z) tar ztf $1 2>/dev/null ;;
      *.Z|*.z|*.gz) gzip -dc $1  2>/dev/null ;; # Корректное отображение сжатых файлов
      *.zip) unzip -l $1 2>/dev/null ;; # Просмотр архивов
      *.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 # это не некоторый тип текста
          strings $1
        fi ;;
      esac
    }

    lesspipe $1

и не забудьте сделать его выполняемым с помощью комманды `chmod 755 lesspipe.sh`.
- поместите эти строки в `/etc/profile`:

>     LESS="-M-Q"                     # не показывать длинные сообщения
>     LESSEDIT="%E ?lt+%lt. %f"       # редактировать верхнюю строку
>     LESSOPEN="| lesspipe.sh %s"     # фильтр
>     VISUAL=jed                      # редактор по умолчанию --- вставьте ваш любимый
>     LESSCHARSET=latin1              # отображать диакритические символы если нужно
>     export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET

Переменная `LESSCHARSET` зависит от факта, что я живу в Италии и хочу использовать таблицу символов ISO 8859/1. Вы друзья американцы, японцы, русские и тому подобное лучше не устанавливайте ее.

## 3.4 `emacs`(1)

Я не использую `emacs`, поэтому я могу посоветовать вам только одно. Некоторые дистрибутивы `emacs` поставляются без предустановленной цветовой и синтаксической подсветки. Допишите это в ваш `.emacs`:

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

Это работает только для X11. Я отправляю вас внимательно почитать всю документацию по `emacs,` чтобы вы смоголи настроить его под свои нужды -- потенциально, это можеть занять несколько месяцев отладки...

## 3.5 `joe`(1)

Некоторые "товарищи" сообщают, что `joe` работает с цветами под X11, но не в tty. К тому же, не работают некоторые специльные клавиши. Насколько мне известно, никто не нашел решения для маленькой старой клячи; кое-кто предлагает отлаживать `/etc/termcap`.

Если вы столкнулись с этой проблемой, быстрое и плохое (и неэлегантное) решение следующее:

>     ~$ export TERM=vt100
>     ~$ joe myfile
>        (edit your file)
>     ~$ export TERM=linux

## 3.6 `jed`(1)

Это мой любимый редактор: он делает то, что я хочу, его легче и проще настраивать чем `emacs`, и IMHO отлично эмулирует другие редакторы. Многие пользователи в моем университете хотят, чтобы `jed` эмулировал `EDT`, редактор системы VMS.
Настроечным файлом для jed является`.jedrc` и все, что в `/usr/lib/jed/lib/`; предыдущий может быть взят из `jed.rc` в указанной дериктории.

- чтобы заставить `jed` корректно использовать специльные клавиши, создайте файл `/usr/lib/jed/lib/defaults.sl`, который содержит только одну строку:

>     () = evalfile("linux");

- отредактируйте `/usr/lib/jed/lib/linux.sl`; снимите комментарий со строки `Info_Directory = "/usr/info";` и добавьте `/bin/mail` после `UCB_Mailer =`;
- способ заставить `jed` эмулировать `EDT` (или другие редакторы ) довольно прямолинеен : вы только должны отредактивновать несколько строк в `.jedrc`. Если вы хотите использовать клавишу "+" на цифровой клавиатуре для удаления слов вместо единичных символов, добавьте это в`.jedrc`:

>     unsetkey("\eOl");
>     unsetkey("\eOP\eOl");
>     setkey("edt_wdel", "\eOl");
>     setkey("edt_uwdel", "\eOP\eOl");

после строки, следующего вида `() = evalfile("edt");`.
- чтобу `xjed` использовал цифровую клавиатуру для эмуляции `EDT`, вставьте следующее в `.Xmodmap`:

>     keycode 77  = KP_F1
>     keycode 112 = KP_F2
>     keycode 63  = KP_F3
>     keycode 82  = KP_F4
>     keycode 86  = KP_Separator

Более того, убедитесь, что ваш `/etc/X11/XF86Config` содержит следующие строки:

>     #    ServerNumLock  # должен быть откоментирован
>         XkbDisable

Это применяется для XFree 3.2. Если только вы не используете американский стандарт клавиатуры , заметьте, что ``XkbDisable'' создает проблемы. Вы исследуете это сами.
- настройка цветов для `xjed` производится добавлением следующих строк к `.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...

и выполните `ESC x abbrev_mode,` чтобы включить его. Чтобы аббревиатуры были включены по умолчанию, добавьте следующие строки к вашему `.jedrc`:

>     define text_mode_hook ()
>     {
>       set_abbrev_mode (1);
>     }
>     %
>     define fortran_hook ()
>     {
>       set_abbrev_mode (1);
>       use_abbrev_table ("Fortran");
>     }
>     % and so on...

## 3.7 `efax`(1)

Этот пакет вероятно самый удобный для простой отправки/получения факсов. Вам нужно будет создать скрипт `/usr/bin/fax`; легко работающий, но с некоторыми причудами, вызвавшими у меня головную боль:

- DIALPREFIX: простой выбор только `T' или `P' не будет работать в большинстве стран. Задайте вместо этого `ATDT' или `ATDP';
- INIT и RESET: эти строки содержат инициализаторы `-i' и `-k', необходимые для `efax`. Если вы хотите добавить AT команду, добавьте ее к соответствующей строке без `AT' с предшествующим ключом `-i' или `-k'. Например: чтобы добавить команду `ATX3' к INIT, вы добавите `-iX3'.

## 3.8 TeX и аналоги

Я предположу, что у вас дистрибутив teTeX. Остановимся здесь только на нескольких вещах:

- чтобы определить схему переносов для вашего языка, отредактируйте файл `/usr/lib/texmf/texmf/tex/generic/config/language.dat`, затем выполните:

>     ~# texconfig init ; texconfig hyphen

- если вы добавили пакет LaTeX, после добавления файлов в `/usr/lib/texmf/texmf/tex/latex/` выполните команду `texhash,` чтобы teTeX узнал о новом пакете;
- чтобы настроить `dvips`, нужно редактировать файл `/usr/lib/texmf/texmf/dvips/config/config.ps`. Помните, что строки, отвечающие за разрешение по умолчанию, также определяют поведение `xdvi`; если вам надоело задавать фонты каждый раз, когда вы запускаете пакет, поместите строку

>     XDvi*mfmode:

в `.Xdefault`. Это должно помочь.

## 3.9 PPP

Здесь я буду предполагать, что поддержка PPP + TCP/IP уже встроена в ядро при компиляции, активирован loopback интерфейс, вы уже имеете корректно инсталированный пакет `pppd` и зарегистрированы под root. Обычно ваш интернет провайдер должен поддерживать PPP.

Существует теперь два способа заставить PPP работать: a) ручная настройка, и b) с помощью конфигурационной программы, которая это делает сама. Какой бы вариант вы не выбрали, вам потребуется следующая информация:

- номер телефона вашего провайдера;
- сервер имен вашего провайдера;
- сервер почты и новостей вашего провайдера;
- домен вашего провайдера;
- ваше регистрационное имя и пароль.

Ручная настройка более хлопотная. Нужно отредактировать некоторые файлы и написать скрипты; не очень много работы, но легко наделать ошибок и новички часто пугаются. Здесь вам может помочь PPP-HOWTO. Как альтернатива, существуют утилиты, которые спрашивают перечисленную выше информацию и делают всю работу сами.

Будет несравненно лучше для вас, исли вы посетите товарища, который уже имеет настроенную связь с провайдером и скачаете один из следующих прекрасных инструментов:

- для X11 есть утилита EzPPP, домашняя страница которой находится по адресу `http://www.serv.net/~cameron/ezppp/index.html` . Очень легка в использовании и почти сама настраивается;
- для соединения в tty, попробуйте утилиту с `ftp://sunsite.unc.edu/pub/Linux/system/network/serial/ppp`. Одной из лучших является pppsetup-X.XX.tar.gz.
- наипростейшей настроечной утилитой на сегодня уверенно можно назвать `wvdial`. Вы даете ей телефон вашего провайдера, ваш логин, ваш пароль, и вы уже в полете. Из README файла: ``Сейчас для wvdial есть web страница по адресу: `http://www.worldvisions.ca/wvdial`''. Очень хороший инструмент.

## 3.10 POP клиент

Для получения вашей почты с POP сервера, вы используете таких POP клиентов как `fetchpop` или `fetchmail`. Последний более продвинут, и вероятно является единственным выбором, если PPP сервер вашего провайдера не может работать с командой LAST. Они доступны на `ftp://sunsite.unc.edu/pub/Linux/system/mail/pop`.

Для настройки этих клиентов:

- `fetchpop`: при первом запуске он вас спросит некоторые сведения. Ответьте на вопросы и вы готовы к работе.
- `fetchmail`: настройте подобно примеру `.fetchmailrc`:

>     # $HOME/.fetchmailrc
>     poll mbox.myisp.com with protocol pop3;
>       user john there with password _Loo%ny is john here

Вы должны установить права доступа к этому файлу с помощью команды `chmod 600 .fetchmailrc`, в противном случае `fetchmail` скорее всего не захочет запуститься. Этот пример показывает только основные настройки и предполагает, что у вас запущен `sendmail`; в принципе, возможности настройки безграничны. Почитайте http://www.ccil.org/~esr/fetchmail.

## 3.11 Система X Window

Как только вы заставили X работать (правильный выбор видеокарты и т.п.), существуют безграничные возможности для настройки - все зависит от того, какой менеджер окон вы выбрали. В любом случае, все сведется к редактированию одного или нескольких ASCII файлов в вашей домашней директории. Так для менеджеров окон:

- fvwm: скопируйте `/etc/X11/fvwm/system.fvwmrc` в вашу домашнюю директорию как `.fvwmrc`, просмотрите его и начинайте экспериментировать. Этот встроенный `system.fvwmrc` является по моему мнению слишком простым и не делает погоды в `fvwm`.
- fvwm95-2: скопируйте `/etc/X11/fvwm95-2/fvwm2rc95` в вашу домашнюю директорию как `.fvwm2rc95`, затем отредактируйте его. Встроенный пример достаточно хорош.
- TheNextLevel: этого немного труднее настраивать. Скопируйте `/etc/X11/TheNextLevel/.*` в вашу домашнюю директорию, внимательно их изучите, затем попробуйте поэкспериментировать с ними. Первое, на что нужно смотреть, это `.fvwm2rc.defines`.

К тому же, убедитесь, что у вас корректный `.xinitrc`. Например:

>     #!/bin/sh

>     # $HOME/.xinitrc

>     # настройка корректной работы некоторых клавиш

>     usermodmap=$HOME/.Xmodmap
>     xmodmap $usermodmap

>     xset s noblank  # выключить хранитель экрана
>     xset s 300 2    # хранитель экрана запустится через 5 минут
>     xsetroot -solid "medium blue" ?

>     # rxvt занимает меньше памяти, но у версий старше 2.21 есть глюки
>     # касательно клавиш и способа наследования окружения. Обновите версию или
>     # используйте вместо него xterm.

>     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.12 Fortran

Судя по моему опыту, если вам нужен Фортран, то лучшей альтернативой использованию `g77` будет Фортран --> Си транслятор `f2c` и перед ним `yaf77`.

`yaf77-X.Y.tgz` можно получить на `ftp://sunsite.unc.edu/pub/Linux/devel/lang/fortran` .

## 3.13 Настройки пользователей

Хорошая идея предоставить новому пользователю несколько готовых настроечных файлов во время первой регистрации в системе. Поместите следующие файлы в `/etc/skel`: `.bashrc .bash_profile .bash_logout .inputrc .less .xinitrc .fvwmrc .fvwm2rc95 .Xmodmap .Xdefaults .jedrc .abbrevs.sl. .joerc .emacs`

Заметьте, что `.pinerc` может быть не одинаковым; удостоверьтесь, что, как минимум, `user-domain`, `smtp-server`, и `nntp-server` установлены правильно.

## 3.14 Модернизация

Если вы обновляете ваш компьютер, не забудьте сохранить до этого некоторые дополнительные файлы. Некоторые из них: `/etc/X11/XF86Config,` `/usr/bin/fax,` ...

Next Previous Contents