Главная > Операционные системы > Linux >
Русский Debian FAQ

Русский Debian FAQ.

Часто задаваемые вопросы при работе с Linux и дистрибутивом Debian 2.2.

Patch level 19, 25 октября 2000, 23:18.


Авторские права

Автором является Виктор Вислобоков

Замечания

  • Автор не несет никакой ответственности за какой-либо ущерб, который может быть причинен при использовании данной информации.
  • Все замечания, исправления, дополнения, пожелания описать что-либо поподробней и другие, просьба направлять по данному выше адресу E-mail.
  • Разрешается копирование, модификация и распостранения данного FAQ в любых целях, кроме коммерческих при сохранении в документе секций "Авторские права", "Замечания" и "Благодарности".
  • Коммерческое использование только с письменного разрешения автора.

    Благодарности

    Косте Кудрину (2:5054/69@Fidonet.org) за большую помощь в вопросе 2.7 и за моральную поддержку.
    Алексею Выскубову (2:5030/5.914@Fidonet.org) за справедливую критику, вопрос 4.4 и за дополнение к вопросам 2.1,2.3 и прочая и прочая... ;)
    Leon B. Kanter (2:465/148.1@Fidonet.org) за вопрос 6.1
    Максиму Лобашову max@t37.nevod.perm.su за замечание к вопросу 2.1.
    IPLabs Linux Team http://www.iplabs.ru/Linux за дополнения к вопросу 2.3.

    Перечень вопросов, на которые даны ответы в данном FAQ



      1. Общие вопросы по дистрибутиву
    1. Что такое Debian?
    2. Чем отличается Debian от других дистрибутивов Linux?
    3. Какими способами можно установить Debian?
    4. Какая версия Debian на сегодня самая свежая?
    5. Как мне сделать собственный .deb пакет?
      2. Русификация
    1. Что нужно сделать, чтобы в текстовом режиме можно было читать и писать по русски?
    2. Как сделать так, чтобы в моем mc (Midnight Commander) были видны русские буквы и чтобы я мог их там набирать, а то лезет всякая ерунда?
    3. Как получить возможность вводить и читать русские буквы в X Window?
    4. Захотел прочитать текстовый файл на русском языке, который я сделал в DOS'е, а там русских букв нет, вместо них почему-то псевдографика. Каким образом можно прочитать текстовые файлы из DOS'а?
    5. Почему у меня программа для работы с электронной почтой elm говорит Unknown charset, когда я пишу письма на русском языке? Как с этим бороться?
    6. Как заставить Netscape Navigator показывать русские буквы в кодировках KOI-8 и CP1251?
      3. Конфигурирование и настройка приложений
    1. Когда работаю в mc (Midnight Commander) в эмуляторе терминала xterm в X Window, то возникают проблемы с клавишами. Понять не могу, что за ерунда. Как это вылечить?
    2. У меня на первом винте стоит Linux но есть и второй винт, на котором стоит DOS, как мне добится чтобы LILO грузил мне DOS?
    3. Говорят, что якобы можно грузить Linux напрямую из DOS'а не пользуясь LILO. Это действительно так? Если да, то как это сделать?
    4. У меня стоят три менеждера окон к X Window. Куда мне прописать чтобы грузился fvwm95?
    5. Как соединятся с провайдером для выхода в Internet через модем, по протоколу PPP?
      4. Система и приложения
    1. Как создавать и удалять новых пользователей?
    2. Как монтировать и демонтировать файловые системы?
    3. При архивировании командой tar получается архив, который не влазит на одну дискету. Как мне разбить такой архив по дискетам?
    4. Как обновлять софт, если у меня есть подключение к Интернету? Hеужели выкачивать новые пакеты, а потом руками ставить?
    5. У меня старая версия ядра, но я достал исходники новой версии, а также патчи. Что мне делать с патчами и как мне теперь собрать ядро и сделать его загружаемым?
      5. Поддержка различного железа
    1. У меня есть второй винт, который зацеплен на один шлейф с первым. Какому устройству он соответствует?
    2. Как можно заставить работать под Linux звуковую карточку на чипсете OPTi 930xx?
      6. Баги, фиксы и рекомендации по обходу некоторых "узких" мест.
    1. Почему, когда я переключаюсь из текстовой консоли в X Window и двигаю своей PS/2 мышкой X Window Server падает с сообщением: psaux: device resource is busy?
    2. Почему, когда groff форматирует текст с ключем -Tlatin1 вместо символов переноса пустота? Как сделать, чтобы все было нормально?
    3. А почему у меня системное время какое-то левое? Разница с тем, что должно быть составляет 5 часов. Время на часах в CMOS'е нормальное.В чем дело?

    Жду ваших вопросов для включения в FAQ

  • Что такое Debian?

    Debian это один из дистрибутивов Linux (UNIX подобной сетевой операционной системы).

    Чем отличается Debian от других дистрибутивов Linux?

    Форматом пакетов и программой которая обслуживает данные пакеты, процедурой инсталляции. Кроме того есть отличия и в структуре каталогов, и в месте расположения конфигурационных файлов. Кроме того в Debian'е сделана попытка подогнать все под UNIX'овый стандарт System V. Можно также заметить, что Debian является рекордсменом по количеству пакетов, которые идут в составе дистрибутива.

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

    Не лишне также отметить, что Debian на данный момент является рекордсменом по количеству пакетов, идущих в дистрибутиве.

    Можно даже снять уже поставленный пакет. Это значит, что вы можете из установленных файлов пакета снова сделать .deb пакет.


    Какими способами можно установить Debian?

    Несколькими способами
  • с загрузочного CD ROM
  • с CD ROM с помощью дискет
  • с одного из разделов жесткого диска
  • по FTP
  • по HTTP
  • через NFS


    Какая версия Debian'а на сегодня самая свежая?

    В начале августа 2000 года был официально выпущен Debian 2.2, который имеет название POTATO. Хотя версия считается стабильной, дальнейшая работа по выявлению и устранению ошибок продолжается.

    Также идет работа над следующей версией с названием Woody. В данный момент эта версия пока еще в начальном этапе разработки.

    Свежие новости от самих разработчиков можно узнать на родном сайте Debian'а http://www.debian.org/

    Впечатления от этой версии пока не очень хорошие. Дистрибутив раздулся и теперь занимает пять дисков CD-ROM. Куча самых разнообразных изменений, в том числе и в уже устоявшихся вещах. Версия GNOME очень старая и нестабильная. Из положительных впечатлений могу отметить то, что многие программы после установки правильной русской локализации начинают говорить по-русски.


    Как мне сделать собственный .deb пакет?

    Я рассмотрю здесь простой способ, основанный на ручной сборке пакета, без использования специфических утилит типа deb-make и других.

    Для начала, вы должны иметь, то что вам нужно установить с помощью собираемого вами пакета. Путь это будет какая-либо утилита, расширяющие возможности системы. (С тем же успехом - это могут быть дополнительные файлы шрифтов или еще что-нибудь). Пусть эта утилита называется probe. Положим, что к этой утилите вы написали страничку руководства man с названием probe.1 и кроме того положим, что есть какой-либо файл, где разобран пример работы с данной утилитой с именем example. Путь файл с примером и страничка руководства называются сопровождающими файлами.

    Важно, чтобы вы представляли, где должна быть размещена эта утилита и сопровождающие ее файлы. Обычно исполняемые файлы размещают в /usr/bin. Странички руководства man размещают в /usr/man/man.1, а всякие примеры в /usr/lib/<имя утилиты>. Пусть так будет и в нашем случае.

    Итак, выполняем следующие шаги:

    1. Создаем временный каталог с именем DEB
    2. Создаем в этом каталоге подкаталоги, в которые нужно поместить утилиту и сопровождающие файлы. При этом каталоги создаются так, как будто DEB является корневым каталогом. Таким образом, в нашем случае, файлы должны быть размещены следующим образом:
          DEB/usr/bin/probe
          DEB/usr/man/man1/probe.1
          DEB/usr/lib/probe/example
      
    3. Создаем в каталоге DEB служебный каталог с именем DEBIAN
    4. В этом каталоге создаем обязательный файл control и по вашему желанию также могут быть добавлены файлы preinst, postinst, prerm, postrm и conffiles. Вот для чего они нужны:

      control Служебная информация о пакете
      conffiles Список конфигурационных файлов
      preinst Скрипт, выполняемый перед началом установки пакета
      postinst Скрипт, выполняемый после установки пакета
      prerm Скрипт, выполняемый перед удалением пакета
      postrm Скрипт, выполняемый после удаления пакета

      Нелишним будет напомнить, что скрипты должны иметь права на выполнение, иначе ничего выполняется у вас не будет.

    5. Теперь заполняем файл control служебной информацией. Эту информацию впоследствии будет использовать менеджер пакетов dpkg и программа dselect. Информацию можно занести в любом текстовом редакторе. Для нашего случая я привожу уже готовый файл:
          Package: probe
          Version: 1.0
          Architecture: i386
          Maintainer: Ivan Ivanov <ivan@perm.ru>
          Description: My probe utility
           This is my utility
      
      Теперь поясним, что к чему. Слова с двоеточиями являются служебными и выполняют закрепленные за ними функции. Здесь даны далеко не все возможные слова - остальные найдете на страничке руководства man с названием deb-control(5). За словом Package: должно идти имя пакета. В этом имени не должно быть заглавных букв или небуквенных символов типа "!", "?" и т.д. За словом Version: должен идти номер версии. За словом Architecture: архитектура машины для которой собирается пакет. Для платформы Intel это i386. За словом Maintainer: должно следовать имя автора пакета, с необязательным адресом электронной почты (в нашем случае ivan@perm.ru). За словом Description: должно следовать краткое, или полное описание пакета (можно использовать русские буквы, но тогда в dselect'е вы будете иметь проблемы). Краткое описание следует непосредственно за словом. Полное описание начинается со следующей строки. Обратите внимание: перед фразой This is my utility стоит пробел. Он указывает, что данная фраза является продолжением описания. Если его не поставить, то при сборке пакета вы получите сообщение об ошибке.
    6. Создайте и заполните остальные файлы, указанные в таблице, если ВАШЕМУ пакету это нужно (в данном случае они не нужны).
    7. Выйдите из каталога DEB
    8. Для генерации .deb пакета наберите команду dpkg -b <имя каталога> <имя пакета .deb>. В нашем случае эта команда будет выглядеть так:
          dpkg -b DEB probe-1.0.deb
      
      Если вы правильно выполнили все описанные выше инструкции, то вы получите файл probe-1.0.deb, который вы можете теперь установить через команду dpkg -i probe-1.0.deb.

    Не правда ли, все это довольно просто? Вы можете пойти дальше, создав свое собственное дополнение к стандартному дистрибутиву в стиле Debian и подключать его через каталог local в программе dselect. Однако создание такого дополнения, с генерацией файла Packages будет посложнее. По этому я настоятельно рекомендую вам почитать страницы руководства man с названиями: dpkg(8), dpkg-deb(1), deb-control(5) и dpkg-scanpackages(8).


  • Что нужно сделать, чтобы в текстовом режиме можно было читать и писать по-русски?

    Для этого вы должны получить права суперпользователя (root), либо зарегистрировавшись в системе как root, либо выполнив команду su.

    Для начала необходимо выполнить несколько подготовительных действий.

    Переместитесь в директорию /etc и найдите там файл profile. Это файл, который выполняется при регистрации любого пользователя в системе. Загрузите любой редактор (мне, например, очень нравится joe) и добавьте в этот файл следующие строки:

          export LANG=ru_RU.KOI8-R
          export PAGER=less
          export LESSCHARSET=koi8-r
    
    Переменная LANG говорит системе о региональных установках. Переменная PAGER определяет программу, которая будет показывать вам текст при вызове man (по умолчанию установлено more, но less более мощная программа, позволяющая использовать для перемещения по тексту стрелки, клавиши PgUp, PgDn, а также поиск образца в тексте и т.д). Переменная LESSCHARSET нужна программе less для корректного вывода русских букв в кодировке KOI-8.

    Это еще не все. Найдите в этом же каталоге файл environment, и исправте его содержимое на:

        LANG=ru_RU.KOI8-R
    
    X Window System теперь не использует этот файл, зато его используют (или могут использовать) некоторые другие программы.

    Но и это еще не все. Перейдите в домашний каталог пользователя root (он так и называется /root), найдите там файл .bashrc и уберите оттуда строчку

        export LANG=C
    
    Иначе потом, когда вы зайдете в систему пользовтелем root, вы будете долго удивляться почему не работает локализация. Дружно скажем спасибо за этот "подарок" maintainer'у пакета bash.

    А вот теперь приступим собственно к русификации. Русификацию консоли можно выполнить опираясь на два разных пакета: kbd и console-tools. Пакет kbd - это старый способ, который не позволяет некоторые новомодные вещи и поэтому ему на смену приходит console-tools.

    Для пакета kbd Я предоставляю вам два способа, точно таких же как и для предыдущей версии Debian. Какой из них считать идеологически правильным я не знаю. Выбирайте любой, который вам понравится, так как в конечном счете они делают одно и тоже.

    Способ 1.
    Вашему вниманию предлагается маленький сценарий, который должен быть помещен в /etc/init.d под именем russian и который является необходимой частью русификации текстового режима:

    #--------------------------------------------------------------------------
    #                                 russian
    #--------------------------------------------------------------------------
    
    # Set leds and META for terminals
    for t in 1 2 3 4
    do
       setleds -num /dev/null
    done
    
    # Load russian fonts
    echo -e "			\033[1;34;47m      Loading Russian Font      \033[36;40m"
    setfont Cyr_a8x16 >/dev/null 2>/dev/null
    
    # Load russian keys
    echo -e "			\033[1;37;44m      Loading Russian Keys      \033[36;40m"
    loadkeys ru1.map >/dev/null 2>/dev/null
    
    # Map screen 
    echo -e "			\033[1;33;41m      Loading  Map  Screen      \033[36;40m"
    mapscrn koi2alt > /dev/null 2>/dev/null
    
    # Enable mapping on tty
    for t in 1 2 3 4
    do
       echo -e "\033(K" >/dev/tty$t
       echo -e "			\033[0;30;42m  Enable mapping on \033[0;31;42m /dev/tty$t  \033[0;36;40m"
    done
    #-------------------------------end of file---------------------------------
    
    Не могу не упомянуть ценное замечание Максима Лобашова. Оно заключается в том, что данный выше сценарий рассчитан на русификацию только первых четрых консолей. Однако обычно при установке дистрибутива устанавливается шесть консолей. И таким образом две оставшиеся русифицированы не будут. Однако это можно легко поправить - добавьте цифры в строке с for например так:
            for t in 1 2 3 4 5 6
    
    и проблемы решаться.

    После установки сценария вы должны сделать ссылки на этот файл из каталогов, содержащих сценарии, выполняемые при установке уровня запуска (run level) системы командой init. Это каталоги /etc/rc*.d. Многопользовательскому режиму работы системы соответствует каталог /etc/rc2.d. Когда вы переместитесь туда, то увидите, что в нем уже есть множество ссылок, каждая из которых имеет имя, начинающееся с буквы ``S'', за которой следует цифра. Ссылки указывают на исполняемые файлы в каталоге /etc/init.d. Вам нужно создать ссылку на /etc/init.d/russian, при этом для нашего случая нужно выбрать номер после ``S'', который бы был постарше. У меня например это 88 (файлы выполняются по старшинству - более малые номера выполняются раньше). Итак делаем ссылку, находясь в каталоге /etc/rc2.d:

             ln -sf /etc/init.d/russian S88russian
    
    Чтобы этот сценарий выполнился вам нужно перегрузить машину, или перезапустить систему в многопользовательском режиме. Впрочем, как мне заметили можно обойтись и без этого: просто набрав
             /etc/init.d/russian
    
    Однако в этом случае вы должны сделать это из shell'а (например из bash). Вы не должны находится в Midnight Commander'е или в терминале xterm в X Window. Кроме этого, после запуска данной выше программы вы должны разрегистрироваться в системе (команда exit в shell'е), чтобы при следующей регистрации (login) отработали файлы /etc/profile и .inputrc.
      Перегрузить машину можно тремя способами:
    1. нажать клавиши Ctrl-Alt-Del (на некоторых машинах не работает)
    2. ввести команду reboot
    3. ввести команду shutdown -g0 и после сообщения "System halted" нажать reset (самый правильный способ).
    Перезапустить систему в многопользовательском режиме можно введя команду
           init S
    
    которая перегрузит систему в однопользовательский режим, и после выдачи сообщения
           Give root password for maintenance
           (or type Control-D for normal startup):
    
    нужно нажать Ctrl-D, что приведет к загрузке системы в многопользовательском режиме.

    После перезагрузки,до выдачи приглашения к регистрации в системе (login) вы должны увидеть изображение российского флага на каждом из цветов которого будет запись о загрузке определенного сервиса. Если этого не будет, то посмотрите внимательно все ли вы сделали как было указано выше. Если изображение появилось, то после регистрации в системе при нажатии на правый Alt вы сможете вводить русские буквы.

    Способ 2. Однажды мне написал человек, который утверждал, что мой способ идеологически неправильный и я должен все переделать вот так, как рассказывает он. Мне немного не понравился тон его письма и я ответил ему, что тот способ, который я предлагаю вполне нормален и прекрасно все делает. На что он заметил, что рано или поздно этот способ устареет, а значит и мой FAQ. Последнее мне еще больше не понравилось и я предложил ему написать свой FAQ. Более ничего я об этом человеке не слышал. В связи с продажей машины я даже потерял его адрес. Однако его слова я запомнил и специально для тех, кто будет считать первый способ идеологически устаревшим (хотя здесь можно спорить долго) я прилагаю второй способ, воссозданный со слов (ибо его сценарий потерялся вместе с адресом):

    Итак: вам понадобится сценарий следующего вида:

    #!/bin/sh
    
    # Set leds and META for terminals
    for t in 1 2 3 4 5 6
    do
       setleds -num /dev/null
    done
    
    if [ -r /etc/kbd/config ] ; then
        . /etc/kbd/config
    fi
    
    SETFONT="/usr/bin/setfont"
    SETKEYS="/bin/loadkeys"
    SETTRANS="/usr/bin/mapscrn"
    VCSTIME="/usr/sbin/vcstime"
    
    # start vcstime
    if [ "${DO_VCSTIME}" = "yes" -a -x ${VCSTIME} ] ; then
        echo -n Starting clock on text console: `basename ${VCSTIME}`
        ${VCSTIME} &
        echo .
    fi
    
    echo -e "			\033[1;34;47m      Loading Russian Font      \033[36;40m"
    if [ x$CONSOLE_FONT != x -a -x ${SETFONT} ] ; then
        ${SETFONT} ${CONSOLE_FONT} 2>/dev/null
    fi
    
    echo -e "			\033[1;37;44m      Loading Russian Keys      \033[36;40m"
    if [ x$CONSOLE_MAP != x -a -x ${SETKEYS} ] ; then
        ${SETKEYS} ${CONSOLE_MAP} 2>/dev/null
    fi
    
    echo -e "			\033[1;33;41m      Loading  Map  Screen      \033[36;40m"
    if [ x$CONSOLE_TRANS != x -a -x ${SETTRANS} ] ; then
        ${SETTRANS} ${CONSOLE_TRANS} 2>/dev/null
    fi
    
    for t in 1 2 3 4 5 6
    do
       echo -e "\033(K" >/dev/tty$t
       echo -e "			\033[0;30;42m  Enable mapping on \033[0;31;42m /dev/tty$t  \033[0;36;40m"
    done
    
    Этот сценарий вам нужно записать под именем /etc/rc.boot/kbd поверх старого /etc/rc.boot/kbd.

    Далее вам нужно исправить файл /etc/kbd/config, чтобы он выглядел так

    CONSOLE_FONT=Cyr_a8x16
    CONSOLE_MAP=ru1.map
    CONSOLE_TRANS=koi2alt
    
    Теперь вы можете либо перегрузить машину (теперь перезапуском многопотельзовательского режима вы не отделаетесь), либо опять-таки из shell'а просто ввести команду:
             /etc/rc.boot/kbd
    
    и далее разрегистрироваться (командой exit) и зарегистрироваться снова (login).

    А теперь вернемя к русификации консоли с помощью пакета console-tools. Там очень все просто. Вы можете взять как и в первом случае маленький сценарий, который должен быть помещен в /etc/init.d под именем russian и с которым точно также как в первом способе, описанном выше нужно сделать ссылку после его установки:

    #--------------------------------------------------------------------------
    #                                 russian
    #--------------------------------------------------------------------------
    
    # Set leds and META for terminals
    for t in 1 2 3 4
    do
       setleds -num /dev/null
    done
    
    # Enable mapping on tty
    for t in 1 2 3 4
    do
       echo -e "\033(K" >/dev/tty$t
    done
    #-------------------------------end of file---------------------------------
    

    Можно плюнуть на этот сценарий и вместо этого использовать данный здесь файл /etc/issue.

    Все что нужно сделать еще - это пойти в каталог /etc/console-tools и привести файл config в этом каталоге в следующий вид:

    SCREEN_FONT=Cyr_a8x16
    APP_CHARSET_MAP=koi2alt.trans
    DO_VCSTIME=no
    
    А также выбрать вашу любимую раскладку клавиатуры из каталога /usr/share/keymaps/i386/qwerty и скопировать ее на место файла default.kmap.gz.

    Замечу, что строка DO_VCSTIME в файле config может быть установлена в "yes" и тогда при загрузке в правом верхнем углу у вас появятся идущие часы.


    Как сделать так, чтобы в моем mc (Midnight Commander) были видны русские буквы и чтобы я мог их там набирать, а то лезет всякая ерунда?

    Сначала нужно включить работу с восемью битами. Для этого нажмите F9 затем выберите Option, далее Display bits и наконец Full 8 bit. Там же проставьте Full 8 bit input. Не забудьте потом сохранить эту конфигурацию. Это все.

    Как получить возможность вводить и читать русские буквы в X Window?

    Ну что же, можно сказать дождались. Ура. Наконец-то, теперь можно настроить Xkb, благодаря тому, что сервера X Window, входящие в комплект Debian 2.2 поддерживают русскую локализацию.

    Однако, необходимо заметить, что до сих пор, некоторые приложения не умеют работать с русскими буквами, введенными посредством Xkb с правильной раскладкой клавиатуры. Таких программ очень мало, но увы они есть. Я же советую по возможности избавляться от таких программ. Поэтому про настройку Xmodmap я рассказывать не буду - обратитесь к FAQ для Debian 2.0 там все это есть.

    Внимание! Xkb не будет работать, если вы не сделали локализацию текстового режима, как описано выше.

    Когда будете пользоваться программой XF86Setup, вам предложат установить русскую клавиатуру. Сделайте это и не забудьте выбрать способ переключения по вашему вкусу. Для садомазохистов, которые предпочитают делать конфиг ручками могу сказать, что в этом файле должны быть такие строки:

    Section "Keyboard"
       Protocol        "Standard"
       XkbRules        "xfree86"
       XkbModel        "pc101"
       XkbLayout       "ru"
       XkbOptions      "grp:ctrl_shift_toggle"
    EndSection
    

    Перед первым запуском вы должны убедиться, что вы установили русские шрифты (пакет xfntcyr), а также устанвили и настроили какой-нибудь менеджер окон (например fvwm). Кроме того нужно внести правки в файл /etc/X11/XF86Config. Убедитесь, что один из FontPath указывает на каталог с русскими шрифтами (обычно это /usr/X11R6/lib/X11/fonts/cyrillic).

    Теперь можно запускать X Window вашим любимым способом. Чтобы проверить, что получилось запустите Xterm или Rxvt с параметром -fn <полное_имя_русского_шрифта> (В полном имени не должно быть никаких ``*'', все должно быть задано. См. файл font.dir в каталоге /usr/X11R6/lib/X11/fonts/cyrillic). После того как окно появится, введите для пробы несколько английских букв, а затем переключитесь на русские буквы (тем способом, который вы выбрали в программе XF86Setup) и вводите русские буквы. Если ничего не вводится значит вы что-то не доделали, проверьте. Если вместо русских букв выводятся греческие значит вы задали неправильный шрифт для терминала в параметре -fn.

    Об опыте настройки Xkb и затачивании некоторых программ под работу с Xkb можно почитать на страничке Алексея Выскубова.

    Здесь можно почитать статью О настройке локализации и Xkb от IPLabs Linux Team.


    Захотел прочитать текстовый файл на русском языке, который я сделал в DOS'е, а там русских букв нет, вместо них почему-то псевдографика. Каким образом можно прочитать текстовые файлы из DOS'а?

    В операционной системе DOS используется альтернативная кодировка русских букв. В UNIX'ах и в Linux используется кодировка KOI-8. Для того чтобы работать с тестовыми файлами на русском языке в Linux можно либо настроить Linux так, чтобы он работал в альтернативной кодировке как DOS, а можно перекодировать файл из альтернативной кодировки в KOI-8.

    Первый способ я рассматривать не буду, поскольку обычно так не принято в кругу людей, работающих в UNIX'ах - это дурной тон, хотя возможно кое-кто со мной и не согласится.

    Что касается второго способа, то предлагаю вашему вниманию два перекодировщика, написанные на shell'е с использованием стандартных команд системы. Автор этих перекодировщиков мне не известен

    файл altkoi8

    #!/bin/sh
    # -----------------------------------------------------------------
    #  altkoi8 - перекодировщик из альтернативной кодировки в KOI-8
    # -----------------------------------------------------------------
    tr \
    '\240''\241''\242''\243''\244''\245''\246''\247''\250'\
    '\251''\252''\253''\254''\255''\256''\257''\340''\341'\
    '\342''\343''\344''\345''\346''\347''\350''\351''\352'\
    '\353''\354''\355''\356''\357''\200''\201''\202''\203'\
    '\204''\205''\206''\207''\210''\211''\212''\213''\214'\
    '\215''\216''\217''\220''\221''\222''\223''\224''\225'\
    '\226''\227''\230''\231''\232''\233''\234''\235''\236''\237''\304' \
    '\301''\302''\327''\307''\304''\305''\326''\332''\311'\
    '\312''\313''\314''\315''\316''\317''\320''\322''\323'\
    '\324''\325''\306''\310''\303''\336''\333''\335''\337'\
    '\331''\330''\334''\300''\321''\341''\342''\367''\347'\
    '\344''\345''\366''\372''\351''\352''\353''\354''\355'\
    '\356''\357''\360''\362''\363''\364''\365''\346''\350'\
    '\343''\376''\373''\375''\377''\371''\370''\374''\340''\361''_'  |
    tr -d '\r' #вот эта фигня предназначена исключительно для того,
    	   #чтобы полностью подогнать формат доса к unix - это
    	   #аналог флага -t в команде mcopy,mwrite,mread.
    

    файл koi8alt

    #!/bin/sh
    # -----------------------------------------------------------------
    #  koi8alt - перекодировщик из KOI-8 в альтенативную кодировку
    # -----------------------------------------------------------------
    tr \
    '\301''\302''\327''\307''\304''\305''\326''\332''\311''\312''\313'\
    '\314''\315''\316''\317''\320''\322''\323''\324''\325''\306''\310'\
    '\303''\336''\333''\335''\337''\331''\330''\334''\300''\321''\341'\
    '\342''\367''\347''\344''\345''\366''\372''\351''\352''\353''\354'\
    '\355''\356''\357''\360''\362''\363''\364''\365''\346''\350''\343'\
    '\376''\373''\375''\377''\371''\370''\374''\340''\361'  \
    '\240''\241''\242''\243''\244''\245''\246''\247''\250''\251''\252'\
    '\253''\254''\255''\256''\257''\340''\341''\342''\343''\344''\345'\
    '\346''\347''\350''\351''\352''\353''\354''\355''\356''\357''\200'\
    '\201''\202''\203''\204''\205''\206''\207''\210''\211''\212''\213'\
    '\214''\215''\216''\217''\220''\221''\222''\223''\224''\225''\226'\
    '\227''\230''\231''\232''\233''\234''\235''\236''\237'  |
    sed -e s/$/
    / #подстановка cr в конец строки для глупого позорного
    	       #msdos - сильно замедляет работу программы, но ничего
    	       #другого с ходу не придумал. осторожнее с символом
    	       # 
     - нет у меня толкового описания sed - приходится так.
    	       #еще раз - у меня red показывает курсор со звездой внутри и
    	       #букву M
    
    Сразу оговорюсь. В настоящее время имеются 2 или 3 "стандарта" KOI-8. Расположение русских букв в них совпадает, но отличается расположение символов псевдографики. Так что если у вас при перекодировке возникнут проблемы с псевдографикой, то...

    Видя живой интерес начинающих к перекодировщикам я помещаю здесь еще два: из Win1251 в Koi8-r и обратно, написанных мной по мотивам двух предыдущих

    файл winkoi8

    #!/bin/sh
    # -----------------------------------------------------------------------
    # Перекодировщик из cp1251 в koi8. Copyright(c) Victor G.Vislobokov 1999
    # -----------------------------------------------------------------------
    
    tr \
    '\300''\301''\302''\303''\304''\305''\306''\307''\310''\311''\312''\313'\
    '\314''\315''\316''\317''\320''\321''\322''\323''\324''\325''\326''\327'\
    '\330''\331''\332''\333''\334''\335''\336''\337''\340''\341''\342''\343'\
    '\344''\345''\346''\347''\350''\351''\352''\353''\354''\355''\356''\357'\
    '\360''\361''\362''\363''\364''\365''\366''\367''\370''\371''\372''\373'\
    '\374''\375''\376''\377' \
    '\341''\342'\
    '\367''\347''\344''\345''\366''\372''\351''\352''\353''\354''\355''\356'\
    '\357''\360''\362''\363''\364''\365''\346''\350''\343''\376''\373''\375'\
    '\377''\371''\370''\374''\340''\361''\301''\302''\327''\307''\304''\305'\
    '\326''\332''\311''\312''\313''\314''\315''\316''\317''\320''\322''\323'\
    '\324''\325''\306''\310''\303''\336''\333''\335''\337''\331''\330''\334'\
    '\300''\321' |
    tr -d '\r'
    
    

    файл koi8win

    #!/bin/sh
    # -----------------------------------------------------------------------
    # Перекодировщик из koi8 в cp1251. Copyright(c) Victor G.Vislobokov 1999
    # -----------------------------------------------------------------------
    
    tr \
    '\341''\342'\
    '\367''\347''\344''\345''\366''\372''\351''\352''\353''\354''\355''\356'\
    '\357''\360''\362''\363''\364''\365''\346''\350''\343''\376''\373''\375'\
    '\377''\371''\370''\374''\340''\361''\301''\302''\327''\307''\304''\305'\
    '\326''\332''\311''\312''\313''\314''\315''\316''\317''\320''\322''\323'\
    '\324''\325''\306''\310''\303''\336''\333''\335''\337''\331''\330''\334'\
    '\300''\321' \
    '\300''\301''\302''\303''\304''\305''\306''\307''\310''\311''\312''\313'\
    '\314''\315''\316''\317''\320''\321''\322''\323''\324''\325''\326''\327'\
    '\330''\331''\332''\333''\334''\335''\336''\337''\340''\341''\342''\343'\
    '\344''\345''\346''\347''\350''\351''\352''\353''\354''\355''\356''\357'\
    '\360''\361''\362''\363''\364''\365''\366''\367''\370''\371''\372''\373'\
    '\374''\375''\376''\377' |
    sed -e s/$/
    /
    
    Наконец, тем, кто хочет иметь быстрый и классный перекодировщик с поддержкой кучи различных кодировок, рекомендую скомпилировать его из файла на языке С, следующего содержания:
    /**  recode.c  **/
    
    #include 
    #include 
    #include 
    
    typedef unsigned char uchar;
    
    uchar ai[] = {176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
                  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
                  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
                  136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,
                  152,153,154,129,156,157,158,159,160,161,162,163,164,165,166,167,
                  168,169,170,171,172,173,174,175,240,241,242,243,244,245,246,247,
                  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
                  130,132,135,134,128,133,131,155,248,249,250,251,252,253,254,255};
    
    uchar ak[] = {225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
                  242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
                  193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
                  136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,
                  152,153,154,129,156,157,158,159,160,161,162,163,164,165,166,167,
                  168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,
                  210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
                  130,132,135,134,128,133,131,155,184,185,186,187,188,189,190,191};
    
    uchar aw[] = {192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
                  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
                  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
                  136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,
                  152,153,154,129,156,157,158,159,160,161,162,163,164,165,166,167,
                  168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,
                  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
                  130,132,135,134,128,133,131,155,184,185,186,187,188,189,190,191};
    
    uchar ia[] = {244,195,240,246,241,245,243,242,176,177,178,179,180,181,182,183,
                  184,185,186,187,188,189,190,191,192,193,194,247,196,197,198,199,
                  200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
                  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
                  216,217,218,219,220,221,222,223,248,249,250,251,252,253,254,255};
    
    uchar ik[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
                  242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
                  193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
                  210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
                  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191};
    
    uchar iw[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
                  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
                  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
                  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
                  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191};
    
    uchar ka[] = {244,195,240,246,241,245,243,242,176,177,178,179,180,181,182,183,
                  184,185,186,187,188,189,190,191,192,193,194,247,196,197,198,199,
                  200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
                  216,217,218,219,220,221,222,223,248,249,250,251,252,253,254,255,
                  238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,
                  175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,
                  158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
                  143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154};
    
    uchar ki[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
                  238,208,209,230,212,213,228,211,229,216,217,218,219,220,221,222,
                  223,239,224,225,226,227,214,210,236,235,215,232,237,233,231,234,
                  206,176,177,198,180,181,196,179,197,184,185,186,187,188,189,190,
                  191,207,192,193,194,195,182,178,204,203,183,200,205,201,199,202};
    
    uchar kw[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
                  254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
                  239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
                  222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
                  207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218};
    
    uchar wa[] = {244,195,240,246,241,245,243,242,176,177,178,179,180,181,182,183,
                  184,185,186,187,188,189,190,191,192,193,194,247,196,197,198,199,
                  200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
                  216,217,218,219,220,221,222,223,248,249,250,251,252,253,254,255,
                  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239};
    
    uchar wi[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
                  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
                  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
                  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
                  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239};
    
    uchar wk[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
                  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
                  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
                  225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
                  242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
                  193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
                  210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
    
    /**********************************************************/
    main(argc, argv)
    char **argv;
    int argc;
    {
    FILE *in, *out;
    struct stat buf;
    uchar *table, c;
    char temp[1024];
    int i;
    if(argc < 2 || argc > 4)
       usage(argv[0]);
    if(!strcmp(argv[1], "-ai"))
       table = ai;
    else if(!strcmp(argv[1], "-ak"))
       table = ak;
    else if(!strcmp(argv[1], "-aw"))
       table = aw;
    else if(!strcmp(argv[1], "-ia"))
       table = ia;
    else if(!strcmp(argv[1], "-ik"))
       table = ik;
    else if(!strcmp(argv[1], "-iw"))
       table = iw;
    else if(!strcmp(argv[1], "-ka"))
       table = ka;
    else if(!strcmp(argv[1], "-ki"))
       table = ki;
    else if(!strcmp(argv[1], "-kw"))
       table = kw;
    else if(!strcmp(argv[1], "-wa"))
       table = wa;
    else if(!strcmp(argv[1], "-wi"))
       table = wi;
    else if(!strcmp(argv[1], "-wk"))
       table = wk;
    else
       usage(argv[0]);
    in = 0;
    out = 0;
    if(argc == 2 || (argc == 3 && !strcmp(argv[2], "-")))
       {
       in = stdin;
       out = stdout;
       }
    else if(argc == 4)
       {
       if(!strcmp(argv[2], "-"))
          in = stdin;
       if(!strcmp(argv[3], "-"))
          out = stdout;
       }
    if(argc > 2)
       {
       if(!in)
          {
          if(stat(argv[2], &buf) < 0)
             {
             printf("%s: cannot open input file '%s'.\n", argv[0], argv[2]);
             exit(1);
             }
          in = fopen(argv[2], "r");
          if(!in)
             {
             printf("%s: cannot open input file '%s'.\n", argv[0], argv[2]);
             exit(1);
             }
          }
       if(!out)
          {
          if(argc == 3)
             sprintf(temp, "%s.%d", argv[0], getpid());
          else
             strcpy(temp, argv[3]);
          out = fopen(temp, "w");
          if(!out)
             {
             printf("%s: cannot open %s file '%s'.\n", argv[0],
                    ((argc == 3) ? "temporary" : "output"), temp);
             fclose(in);
             exit(1);
             }
          }
       }
    if(!in)
       {
       printf("%s: cannot open standard input.\n", argv[0]);
       exit(1);
       }
    if(!out)
       {
       printf("%s: cannot open standard output.\n", argv[0]);
       fclose(in);
       exit(1);
       }
    while((i = getc(in)) != -1)
       {
       i &= 0377;
       if(i & 0200)
          i = table[i & 0177];
       putc(i, out);
       }
    fclose(in);
    fclose(out);
    if(argc == 3 && strcmp(argv[2], "-"))
       {
       unlink(argv[2]);
       link(temp, argv[2]);
       unlink(temp);
       }
    }
    
    /**********************************************************/
    usage(name)
    char *name;
    {
    fprintf(stderr, "Usage: %s -{ai|ak|aw|ia|ik|iw|ka|ki|kw|wa|wi|wk} ", name);
    fprintf(stderr, "[input_file [output_file]]\n       Parameters are:\n");
    fprintf(stderr, "       -ai         - from Alternative to ISO,\n");
    fprintf(stderr, "       -ak         - from Alternative to Koi8,\n");
    fprintf(stderr, "       -aw         - from Alternative to Windows,\n");
    fprintf(stderr, "       -ia         - from ISO to Alternative,\n");
    fprintf(stderr, "       -ik         - from ISO to Koi8,\n");
    fprintf(stderr, "       -iw         - from ISO to Windows,\n");
    fprintf(stderr, "       -ka         - from Koi8 to Alternative,\n");
    fprintf(stderr, "       -ki         - from Koi8 to ISO,\n");
    fprintf(stderr, "       -kw         - from Koi8 to Windows,\n");
    fprintf(stderr, "       -wa         - from Windows to Alternative,\n");
    fprintf(stderr, "       -wi         - from Windows to ISO;\n");
    fprintf(stderr, "       -wk         - from Windows to Koi8;\n");
    fprintf(stderr, "       input_file  - name of input file, ");
    fprintf(stderr, "may be \"-\" as standard input;\n");
    fprintf(stderr, "       output_file - name of output file, ");
    fprintf(stderr, "may be \"-\" as standard output.\n");
    exit(1);
    }
    
    Этот файл прислал мне Сергей Сивков, при этом он сказал мне, что автор неизвестен.

    Компилировать нужно так:

        gcc -o recode recode.c
    или
        make recode.c
    
    и пользоваться полученным файлом. У вас может уже стоять GNU recode, так что лучше переименовать одну из этих программ, или запускать как
        /some/path/to/recode
    

    Почему у меня программа для работы с электронной почтой elm говорит Unknown charset, когда я пишу письма на русском языке? Как с этим бороться?

    Дело опять таки в русификации.
      Известный мне способ это победить таков:
    1. в домашнем каталоге создается каталог .elm
    2. в этом каталоге создается файл elmrc
    3. в этот файл прописывается строчка
               CHARSET=koi8-r
      

    Как заставить Netscape Navigator показывать русские буквы в кодировках KOI-8 и CP1251?

    Этот вопрос неизменно занимает сегодня умы многих начинающих. Несмотря на некоторое количество достаточно древних решений этот вопрос поднимается снова и снова. Ответ на него таков: на данный момент русифицировать Netscape Navigator корректно невозможно. Однако есть несколько хитрых приемов, которые хотя и не являются 100% корректными, но тем не менее позволяют вам добиться тех целей, которые ставит перед нами данный выше вопрос. Что же касается корректной русификации, то будем надеяться, что в скором времени она появится благодаря тому, что Netscape начинает распространять свои исходники бесплатно. Однако владельцам старых версий все равно придется жить по старому.

    Хочу заметить, что здесь рассказывается о русификации именно старых версий. Современные версии Netscape Communicator уже не требуют установки специальных шрифтов в кодировке Windows 1251, а также прекрасно понимают как KOI8-R, так и cp1251 и работают через Xkb.

    Начнем с кодировки KOI-8. Здесь особых проблем быть не должно. В дистрибутив входят кирилистрические (русские) шрифты для X Window, которые вам нужно установить перед тем как мы продолжим. Пакет с этими шрифтами называется в Debian 2.0 xfntcyr_3.3.2.2-4.deb и находится в секции x11. Естественно, что версия пакета может отличаться от приведенной мной.

    Итак, установите данный пакет командой

    	dpkg -i xfntcyr_3.3.2.2-4.deb
    
    После чего поправьте файл /etc/X11/XF86Config. В этом файле вам нужно найти слова Section "Files" и в этой секции добавить строчку вида
    	FontPath  "/usr/X11R6/lib/X11/fonts/cyrillic"
    
    Это нужно, чтобы X Windows "увидела" ваши свежеустановленные шрифты. Затем, вам нужно перезапустить X Windows если вы уже находитесь там и запустить X Windows, в противном случае. Это нужно для того, чтобы X Windows при запуске перечитала файл конфигурации /etc/X11/XF86Config куда вы внесли изменения.

    Теперь, когда запуск X Windows произошел, вы можете запустить Netscape Navigator. Зайдите в меню Options, затем General Preferences и наконец в Fonts. Выберите среди доступных кодировок Cyrillic(koi8-r), а затем установите для ее отображения какие-нибудь cronyx шрифты: рекомендую Helvetica и Courier.

    Далее выйдите из меню настроек и зайдите в Options в подменю Document Encoding. В этом подменю выберите Cyrillic(KOI8-R). Теперь Netscape Navigator должен показывать вам русские буквы на страничках в кодировке KOI-8. Но здесь есть некоторые замечания, о которых читайте ниже.

    С кодировкой CP1251 будет посложнее. Во-первых, в дистрибутивах шрифты для X Windows в этой кодировке просто отсутствуют и вам их потребуется где-то достать. Правда для вас я подготовил Debian'овский пакет с этими шрифтам и вы можете его взять прямо отсюда, если нажмете на xfnt1251_1.1-1.deb.

    Если по какой-то причине вам не понравятся эти шрифты или этот пакет, то ищите их в Internet'е.

    Далее вы проделываете те же манипуляции с установкой пакета, правкой файла /etc/X11/XF86Config и перезапуском (или запуском) X Windows как и для случая с кодировкой KOI-8. Так же как и в случае с KOI-8 вы должны затем запустить Netscape Navigator, зайдите в меню Options, затем General Preferences и наконец в Fonts. Но вот здесь начинаются различия. Среди доступных кодировок вам нужно выбрать User defined, так как создатели Netscape Navigator не предусмотрели в меню наличия кодировки CP1251. Для кодировки User defined (при условии установки пакета xfnt1251_1.1-1.deb) выберите какие-либо iccm шрифты.

    Далее выйдите из меню настроек и зайдите в Options в подменю Document Encoding. В этом подменю выберите User defined. Теперь Netscape Navigator должен показывать вам русские буквы на страничках в кодировке CP1251. Но здесь есть некоторые замечания, о которых читайте ниже.

    Финальной частью установки шрифтов как для KOI-8 так и для CP1251 является сохранение опций: зайдите в меню Options и выберите Save Options. Если вы этого не сделаете, то при следующем запуске Netscape Navigator вам придется задавать шрифты для кодировок и Document Encoding заново.

    ЗАМЕЧАНИЯ.

    1. Для переключения между кодировками нужно зайти в Options и подменю Document Encoding и выбрать Cyrillic (KOI8-R) для кодировки KOI-8 и User defined для кодировки CP1251.
    2. Не удивляйтесь, если на страничке в тэгах FORM языка HTML (таких как Button, TextArea и т.д.) вы не увидите русских букв). Виноват Netscape, но поделать тут вряд ли что-то можно (хотя и здесь есть свои лазейки).
    3. В Netscape Navigator версий 3.x были проблемы с Java при включении кодировки KOI-8 (и вообще любой отличной от кодировки по умолчанию).
    4. Есть чудаки, которые жестко прописывают charset в тегах html. В том случае, если charset был установлен в cp1251, вы не сможете посмотреть эту страничку, несмотря на установленные шрифты в кодировке 1251, поскольку Netscape автоматически будет переключаться на cp1251, а не на User Defined.
    5. Данные способы русификации были опробованы на версиях 3.00-4.04, за остальные я не ручаюсь.

    Когда работаю в mc (Midnight Commander) в эмуляторе терминала xterm в X Window, то возникают проблемы с клавишами. Понять не могу, что за ерунда. Как это вылечить?

    Самое первое, что надлежит сделать - это настроить локаль и Xkb. Без этого насройка клавиш mc в xterm представляется сущим мучением.

    После этих действий, у вас в mc заработают все клавиши. Однако это далеко не все. Кроме этого, в mc у вас не работают сочетания клавиш Alt+<клавиша>. Так что необходим шаг номер два:

    • Правите файл /usr/X11R6/lib/X11/app-defaults/XTerm. В конец этого файла нужно добавить кусок:
      *VT100*translations:	#override \
           aReturn: string(0x1b) string(0x0d) \n\
           aTab: string(0x1b) string(0x09) \n\
           aspace: string(0x1b) string(" ") \n\
           aa: string(0x1b) string("a") \n\
           ab: string(0x1b) string("b") \n\
           ac: string(0x1b) string("c") \n\
           ad: string(0x1b) string("d") \n\
           ae: string(0x1b) string("e") \n\
           af: string(0x1b) string("f") \n\
           ag: string(0x1b) string("g") \n\
           ah: string(0x1b) string("h") \n\
           ai: string(0x1b) string("i") \n\
           aj: string(0x1b) string("j") \n\
           ak: string(0x1b) string("k") \n\
           al: string(0x1b) string("l") \n\
           am: string(0x1b) string("m") \n\
           an: string(0x1b) string("n") \n\
           ao: string(0x1b) string("o") \n\
           ap: string(0x1b) string("p") \n\
           aq: string(0x1b) string("q") \n\
           ar: string(0x1b) string("r") \n\
           as: string(0x1b) string("s") \n\
           at: string(0x1b) string("t") \n\
           au: string(0x1b) string("u") \n\
           av: string(0x1b) string("v") \n\
           aw: string(0x1b) string("w") \n\
           ax: string(0x1b) string("x") \n\
           ay: string(0x1b) string("y") \n\
           az: string(0x1b) string("z")
      
    Вот только после этого можно нормально работать с mc.

    У меня на первом винте стоит Linux но есть и второй винт, на котором стоит DOS, как мне добится чтобы LILO грузил мне DOS?

    Если вы хотите грузить операционную систему с винта отличного от Master на первом IDE порту, то вам необходимо определить так называемый chain загрузчик для этого винта. В LILO версии 20 и выше этот загрузчик встроен прямо в код LILO. Вот пример файла /etc/lilo.conf, в котором прописана загрузка Linux с Master винта, а DOS со Slave.
    # устройство откуда берется LILO   
    boot=/dev/hda
    # раздел, где находится главная(корневая) файловай система
    root=/dev/hda1
    # спецификация compact работает не везде   
    compact
    # определяет нормальный текстовый режим 80x25
    # можно задать слово ask, чтобы при загрузке спрашивало
    # номер видеорежима. Можно просто подставить цифру
    # видеорежима
    vga=normal
    # при prompt выдается приглашение boot: и ожидается
    # ввод метки для выбора операционной системы на
    # загрузку или Enter для загрузки первой по порядку.
    # Можно определить delay , где n десятые
    # секунды, которые LILO будет ждать, после чего произведет
    # загрузку первой по порядку операционной системы.
    # Во время ожидания можно нажать Ctrl и перейти в режим
    # prompt
    prompt
    # ------------- секция загрузки Linux -------------
    # образ ядра Linux
    image=/vmlinuz
    # метка, вводимая на приглашение boot:
    label=Linux
    read-only
    # -------------- секция загрузки DOS --------------
    # DOS раздел
    other=/dev/hdb1
    # инициализация chain загрузчик
    map-drive = 0x80
           to = 0x81
    map-drive = 0x81
           to = 0x80
    # метка, вводимая на приглашение boot:
    label=dos
    

    Говорят, что якобы можно грузить Linux напрямую из DOS'а не пользуясь LILO. Это действительно так? Если да, то как это сделать?

    Действительно вполне можно загружать Linux из DOS'а, хотя такой метод и не пользуется популярностью, так как из-за ненадежности файловой системы FAT у DOS'а и подверженности ее влиянию вирусов вы можете испортить файлы, необходимые для загрузки.
      Для загрузки из DOS'а вам понадобятся только два файла:
    1. программа loadlin.exe из дистрибутива.
    2. ядро собранное для вашей машины (подойдет и из дистрибутива, если в ядре есть поддержка аппаратуры, которая представлена на вашей машине).
    Заметим, что ядро должно быть обработано командой rdev.Например, если мы имеем образ ядра в файле vmlinuz в текущем каталоге, а ваша корневая файловая система размещена на устройстве /dev/hda1 необходимо выполнить:
             rdev vmlinuz /dev/hda1 
    
    чтобы ядро после загрузки знало, где ваша корневая (главная) файловая система (/), затем
             rdev -R vmlinuz 1
    
    что установит флаг первоначального монтирования файловой системы как read-only, что необходимо программе fsck для проверки файловой системы, затем можно (но не обязательно)
            rdev -v vmlinuz 
    
    для установки текстового видеорежима, отличного от стандартного 80x25, где n - это номер режима.

    После выполнения данных действий положите файл vmlinuz вместе с loadlin.exe куда-нибудь на диск DOS. Для загрузки, в DOS'е достаточно переместится в тот каталог, где находятся эти два файла и ввести команду:

            loadlin vmlinuz
    
    Однако можно обойтись и без обработки ядра командой rdev. Можно просто указать loadlin, в каком месте находится главная файловая система. Например:
            loadlin vmlinuz root=/dev/hda1
    

    У меня стоят три менеждера окон к X Window. Куда мне прописать чтобы грузился fvwm95?

    Теперь в Debain'е файл /etc/X11/window-managers не используется. Вместо него вам нужно воспользоваться механизмом альтернатив. Введите команду:
    update-alternatives --display x-window-manager
    
    и вы получите список установленных в системе менеджеров окон. Введите команду:
    update-alternatives --config x-window-manager
    
    и вам выдаст диалог, в котором вы сможете выбрать нужный менеджер окон, который будет и запускаться при старте X Window.

    Как соединятся с провайдером для выхода в Internet через модем, по протоколу PPP?

    Для начала, если ядро у вас собрано без поддержки протоколов PPP и SLIP вам нужно собрать его заново с поддержкой этих протоколов. Как собирать ядро описано в этом же FAQ. См. список вопросов.

    Еще недавно я бы сказал, что готовой программы нет, но теперь готовая программа есть прямо в дистрибутиве Debian. Она называется pppconfig. Все что вам нужно сделать - это честно и правдиво ответить на все вопросы, которые задаст вам эта программа.

    Соединение осуществляется командой pon, а завершение соединения с провайдером осуществляется вызовом команды poff, которая убивает демон, отвечающий за связь и заставляет его положить "трубку" модема.

    Как вы уже поняли - это решение далеко не самое красивое. Например, можно воспользоваться diald - о чем ниже. Однако это очень простое решение,

    Установление соединения при помощи демона diald

    Прежде всего хочу заметить, что данные здесь конфигурационные файлы могут для вас не подойти, хотя у меня они работают. Все описанное ниже дает скорее понятие о том как все это настраивать, чем конкретное готовое решение. В любом случае очень рекомендую тщательно изучить страницы руководства man по pppd и diald, а также PPP-HOWTO.

    Пакет diald входит в состав дистрибутива Debian, да и по моему в другие дистрибутивы тоже. Ну а если у вас все-таки его не оказалось, вы всегда можете выкачать его из Internet.

    После того как вы установите пакет, например, командой

    	dpkg -i diald-0.16.4-1.deb
    
    В каталоге /etc/diald у вас появятся его конфигурационные файлы. Вам понадбится править только два из них. В файле с именем diald.options хранится конфигурация diald, а в файле с именем connect находится сценарий, который устанавливает модемное соединение, набирая номер и выполняя функции идентификации пользователя.

    Начнем с файла diald.options. Ниже дан в качестве примера мой:

    mode ppp
    connect "chat -f /etc/ppp/pppscript"
    device /dev/ttyS1
    speed 19200
    modem
    lock
    crtscts
    local 192.168.0.1
    remote 192.168.0.2
    netmask 255.255.255.0
    impulse 120,60
    dynamic
    defaultroute
    pppd-options noipdefault name "victor_v" asyncmap 0
    include /etc/diald/standard.filter
    
    Данная конфигурация расчитана на использование diald с протоколом PPP с аутентификацией пользователя по протоколу PAP. Адреса local и remote даны "от балды". Так как далее используется ключ dynamic, а в параметре ppp-options задано значение noipdefault, то при установлении связи адреса удаленной машины-сервера и адреса вашей машины будут изменены на те, которые сообщит удаленная машина.

    Параметр device установлен в значение /dev/ttyS1, что соотвествует второму последовательному порту COM2. Вы же можете изменить это значение, если ваш модем использует другой порт. (Для COM1 будеь /dev/ttyS0 и т.п.). Параметр speed установлен в значение 19200 и означает портовую скорость. Скорость вы также должны задать ориентируясь на модем, которым вы пользуетесь. Возможные значения: 2400, 9600, 19200, 34800, 57600 и т.д.

    Параметр impulse установлен в значение 120,60. Это говорит о том, что diald будет проверять простаивает ли линия через каждые 2 минуты (120 сек) и будет разрывать соединение (класть "трубку" модема), если в течении 1 минуты (60 сек) линия будет продолжать простаивать. Простой линии выражается в отсутствии приема или передачи пакетов через модем. Таким образом вы экономите деньги на повременной оплате за телефон и за Internet. Излишне говорить, что вы можете настроить эти параметры под себя.

    Особо нужно отметить параметр connect. В данном примере он установлен в значение chat -f /etc/ppp/pppscript. Ниже приводится содержимое файл pppscript

    ABORT ERROR
    ABORT BUSY
    ABORT "NO CARRIER"
    ABORT "NO DIALTONE"
    REPORT "CARRIER"
    REPORT "CONNECT"
    TIMEOUT 90
    "" AT&F1 "OK" ATDT900020 "CONNECT"
    
    Мне было удобнее пользоваться таким файлом, чем поставляемым с пакетом diald файлом connect. Это потому, что мой провайдер использует аутентификацию пользователей по протоколу PAP. Если же сервер у вашего провайдера настроен на ввод имени и пароля по приглашениям Login: и Password:, то вам лучше воспользоваться файлом connect. Тогда строчка с параметром connect в файле diald.options будет выглядеть так:
        connect "/etc/diald/connect"
    
    Файл connect хорошо задокументирован внутри и проблем с его использованием быть не должно. Вам нужно будет только поменять параметры MODEM_INIT на строку инициализации вашего модема, PHONE_NUMBER на номер телефона вашего провайдера, USER_CHAT_SEQ на строку-приглашение, которую вы получаете для ввода имени, USER_NAME на ваше регистрационное имя у провайдера, PASSWD_CHAT_SEQ на строку-приглашение, которую вы получаете для ввода пароля, PASSWORD на ваш пароль у провайдера и наконец PROMPT на строку, которую вы получаете в случае успешного ввода имени и пароля.

    Возможно вам придется поэкспериментировать пока у вас все получится. Для этой цели могу рекомендовать терминальную программу minicom, где вы всегда сможете установить соединение в ручную и посмотреть все строки приглашения.

    Следующий этап - это файл /etc/ppp/options. Ниже дан в качестве примера мой:

    lock
    defaultroute
    crtscts
    noipdefault
    modem
    asyncmap 0
    debug
    19200
    /dev/ttyS1
    name "victor_v"
    
    Здесь вроде все должно быть понятно, тем более, что часть параметров перекрывается конфигурационным файлом для diald. Замечу только, что строка name "victor_v" нужна только в случае использования протокола PAP.

    Для тех, у кого провайдер использует как и у меня аутентификацию пользователей по протоколу PAP будет нужен еще файл /etc/ppp/pap-secrets. Вот пример моего:

    # Secrets for authentication using PAP...
    # client	server	     secret        IP addresses
    "victor_v"          *          "password"
    
    Вместо password должен стоять ваш пароль, а вместо victor_v ваше регистрационное имя у провайдера. Кроме того, оно же прописывается как вы можете заметить и в файл /etc/ppp/options и в файл /etc/diald/diald.options. Естественно, что для тех у кого провайдер не поддерживает PAP, эти параметры в данных файлах не нужны.

    Далее вам необходимо настроить свою систему для использования DNS провайдера. У вас должен быть адрес DNS-сервера провайдера. Его нужно поместить в файл /etc/resolv.conf. Вот пример моего файла:

    nameserver 194.84.131.242
    search permonline.ru
    
    где параметр nameserver задает адрес DNS-сервера провайдера, а параметр search имя домена провайдера.

    Ну вот теперь кажется все. После окончания всех настроек перезапустите diald командой

        /etc/init.d/diald restart
    
    Теперь, когда вы в Netscape или в Lynx или в mc обратитесь на адрес, который неизвестен вашей системе, diald попытается установить соединение с вашим провайдером и если это получится, то вы попадете туда куда обратились.

    Если у вас не получилось. Что же мне жаль. Причин может быть множество. Здесь я могу только посоветовать вам подробно изучить документацию.


    Как создавать и удалять новых пользователей?

    Добавлять командой adduser. Читайте man adduser для подробной информации. Удаляются пользователи командой deluser или при удалении информации из /etc/passwd руками в редакторе. Заметим, что также имеется команда addgroup для создания групп. Вся служебная информация по пользователям и группам хранится в файлах /etc/passwd и /etc/group (не рассматривается случай наличия shadow).

    Как монтировать и демонтировать файловые системы?

    Командами mount и umount. Читайте man mount и man umount для подробной информации. Служебная информация по автоматическому монтрованию находится в файле /etc/fstab читайте man fstab. Формат каждой записи, занимающей одну строку в файле следующий:
    1. устройство (Device)
    2. каталог для монтирования (Mount point)
    3. тип файловой системы (Type FS)
    4. опции монтирования
    5. количество попыток монтирования
    6. дамп
    Кроме того при установке пакета fdutils можно пользоваться командами fdmount и fdumount для floppy дисков, что полезно для обычных пользователей, чтобы не давать им прав на пользование командами mount и umount.

    Ядра версии 2.0.34 и выше позволяют задавать при монтировании набор символов для файловой системы. Таким образом в Linux теперь становится возможным монтировать, например, разделы VFAT от Windows 95 так, что в именах файлов видны русские буквы. Например:

    	mount /dev/hdb1 /mnt/C -t vfat -o iocharset=koi8-r,codepage=866
    
    Однако это будет работать только в том случае, если при сборке ядра вы указали поддержку NLS koi8-r и cp866.

    При архивировании командой tar получается архив, который не влазит на одну дискету. Как мне разбить такой архив по дискетам?

    tar поддерживает возможность разбить архив на несколько дискет. Для этого к обычной комбинации букв, которую вы используете для создания или разворачивания архива добавляется буква 'M' (большая). Пример:
           tar cMvf /dev/fd0 /usr/local
    
    создаст архив на дискете. Если места на дискете не хватит, то появится надпись:
           prepare volume #2 for /dev/fd0 and hit return:
    
    после чего вы можете продолжить создание архива, вставив следующую дискету и нажав Enter.

    Разворачивание многотомного архива производится как же как и обычного, только нужно добавить букву 'M'. Пример:

           tar xMvf /dev/fd0
    
    Недостаток заключается в том, что многотомные архивы со сжатием не поддерживаются. Если же необходитость в сжатии есть, то сперва нужно подготовить сплошной сжатый архив, а потом уже его разбивать по дискетам.

    Как обновлять софт, если у меня есть подключение к Интернету? Hеужели выкачивать новые пакеты, а потом руками ставить?

    Конечно, нет. В принципе, существуют два способа.

    Первый: Можно поставить пакет dpkg-ftp, после чего в программе dselect при выборе access method появляется ftp. Плюсы: все обычные плюсы dselect'а. Минусы: слишком большая, на мой взгляд, интерактивность :) И необходимость хорошо понимать, с какого сервера мы берем софт и где он лежит.

    Второй:Можно поставить пакет dftp. Работа с ним выглядит так:

            # dftp getnew
    
    После этого происходит подключение к ftp.debian.org, и оттуда выкачивается список пакетов. Через некоторое время Вы обнаружите на экране Ваш любимый редактор (кажется, тот, который /bin/vi), в котором будет открыт файл cо списком пакетов; после каждого пакета идет его описание. Строчки, начинающиеся с #, как обычно, комментарии. Соответственно, строчки, не начинающиеся с # - имена файлов, которые мы хотим выкачать. По умолчанию не будут закомментарены только новые версии уже установленных пакетов. После выхода из редактора dftp выкачает нужные пакеты и поставит их. Hадо отметить, что ставит пакеты он разумно, например, при наличии новой версии libc она ставится первой.

    P.S.1. Все то же самое можно сделать по шагам:

                    dftp getlist
                    dftp select
                    dftp getselect
                    dftp unpack
    
    и, при желании, dftp clean, которое удалит список пакетов и установленные пакеты (не деинсталлирует их, а удалит выкачанные).

    P.S.2. Многие пакеты обновляются _без смены_ номера Debian'а. Hапример, в 1.3.1. сменились такие вещи, как XFree, документация к нему, adduser, libc итп.


    У меня старая версия ядра, но я достал исходники новой версии, а также патчи. Что мне делать с патчами и как мне теперь собрать ядро и сделать его загружаемым?

    Сперва по патчи. Вынужден огорчить - в Debian'е что-то делают с исходниками ядра (по крайней мере в Debian'е 1.3.1) так, что патчи к этим исходникам применятся не хотят. Однако если дистрибутив у вас под рукой, то это не беда - исходники ядра можно взять оттуда, естественно не в виде .deb, а в .tgz. Если у вас в системе установлены исходники ядра из .deb (установлены они или нет можно справится у программы dselect по названию пакета kernel-source), то удалите их с помощью менеджера пакетов dpkg, например:
            dpkg --purge kernel-source-2.0.30
    
    После этого скопируйте файл .tgz с исходниками ядра в каталог /usr/src и перейдите в этот же каталог.

    Далее нужно развернуть этот .tgz, как например показано ниже:

            tar xzvf linux-2.0.30.tgz
    
    естественно, что название вашего .tgz файла может отличаться от приведенного.

    В результате должен появится каталог с названием linux-2.0.30. Теперь нужно сразу же сделать ссылку с именем linux на этот каталог:

            ln -sf linux-2.0.30 linux
    
    А вот теперь собственно займемся патчем. Патчи обычно поставляются в виде файла с расширением .gz или .dgz, словом patch (или его сокращением) и номером версии в имени файла. Например:
            patch-2.0.31.gz
    	ptch2031.dgz
    
    Важно помнить, что номер версии пачта должен быть старше номера версии исходных текстов ядра, которые вы собрались патчить не больше, чем на 1 patchlevel. Например, для данного случая мы имеем исходные тексты ядра версии 2.0.30 (то что мы разворачивали tar), значит патч должен быть версии 2.0.31. Ни версия 2.0.30 ни версия 2.0.32 не подойдут!

    Предположим, что у вас правильная версия патча - 2.0.31. Развернем его в каталоге /usr/src:

            gzip -d patch-2.0.31.gz
    
    или для другого имени файла
            gzip -d ptch2031.dgz -S .dgz
    
    В результате получится текстовый файл с таким же именем, но без расширения, который собственно готов к употреблению. Патчение ядра осуществляется командой:
            patch -p0 < patch-2.0.31
    
    для второго случая
            patch -p0 < ptch2031
    
    Должна запустится утилита patch, а на экране пробежать строки сообщения, генерируемые этой утилитой. Если вдруг вдруг утилита стала задавать вам вопросы, то либо вы что-то сделали неправильно, либо у вас кривой патч или исходные тексты ядра. Если все в порядке, то утилита завершает свою работу без каких-либо сообщений об ошибках и не задает никаких вопросов в процессе работы.

    Теперь пришла пора сборки ядра. Тем кто сразу имеет готовые исход- ные тексты ядра без патчей нужно выполнить разворачивание исходных текстов в каталог /usr/src и создать ссылку как уже было описано выше. Естественно тем, кто уже имеет у себя развернутые исходные тексты ядра и ссылку беспокоится не нужно.

    Далее переходим в каталог /usr/src/linux и запускаем команду:

            make menuconfig
    
    После компиляции промежуточных файлов на экране появится интерактивное меню, с помощью которого вам нужно установить требуемую конфигурацию ядра. Описывать что означают пункты меню я не буду - если вы сами не знаете, то до самостоятельной сборки ядра вы еще не доросли. Читайте документацию или просите помочь более компетентных людей.

    После того как выбор конфигурации ядра вами закончен нужно выйти с сохранением и набрать команду:

            make depend
    
    В процессе работы происходит связывание выбранной вами конфигурации ядра с теми файлами исходных текстов, которые будут компилироваться при сборке ядра.Затем наберите команду
           make zlilo
    
    если вы используете системный загрузчик lilo. В процессе работы будет собрано ядро с именем vmlinuz и файл System.map, после чего, и ядро и этот файл будет помещены в корневой каталог ("/") и в завершении будет вызван lilo, что приведет к его автоматической переинтсаляции с параметрами, заданными в /etc/liloconfig.

    Замечу, что если у вас в корневом каталоге были такие же файлы, то они будут переименованы с расширением .bak.

    Второе замечание состоит в том, что обычно в Debian'е в корневом каталоге находятся только ссылки на файлы ядра и System.map, которые находятся в каталоге /boot. Что вам делать в этом случае (самому перенести файлы в этот каталог и переименовать/поправить ссылки или удалить эти сслыки, как и ядро и System.map из каталога /boot - рещайте сами).

    В конечном итоге у вас в корневом каталоге должны остаться либо сами файлы vmlinuz и System.map, либо ссылки на эти файлы. Теперь, если вы все-таки перенесли файлы в каталог /boot, а в корневом каталоге оставили ссылки, вы должны снова запустить lilo, командой:

             lilo
    
    На этом этап сборки нового ядра и его установки можно было бы считать законченным, НО! Осталась немаловажная часть - модули к ядру! Увы множество бед и вопросов происходит именно от них. Для того, чтобы проблем не было вы должны снова перейти в каталог /usr/src и продолжить компиляцию командами:
             make modules; make modules_install
    
    В процессе работы будут сделаны модули, для тех компонентов ядра, которые вы указали как модульные при конфигурации по команде make menuconfig, и эти модули будут проинсталлированы в каталог /lib/modules/<номер версии ядра>. При следующей загрузке будет произведено сканирование имеющихся модулей после чего их имена будут записаны в файл modules.dep в этом же каталоге.

    Внимание! Если вы решили собрать ядро этой же версии, но с другими параметрами, не забудьте удалить modules.dep иначе новые модули, которые возможно появятся после сборки ядра не будут видится системой.

    Новый способ

    Если же вы крутой Debian'щик, т.е. достаточно грамотны, чтобы понимать, что делаете, то рекомендую поставить пакет kernel-package. После его устновки вам станет доступной утилита make-kpkg. Тогда вы можете после запуска make menuconfig сразу же запустить
           make-kpkg binary
    
    После того как команда отработает, вы получите готовые к установке .deb пакеты kernel-image, kernel-headers, kernel-sources и kernel-doc.

    У меня есть второй винт,который зацеплен на один шлейф с первым. Какому устройству он соответствует?

    В Linux очень простая нумерация HDD. Вот буквенные обозначения:
    Master на первом IDE порту hda
    Slave на пером IDE порту hdb
    Master на втором IDE порту hdc
    Slave на втором IDE порту hdd
    Когда говорят о разделах (партициях) на каком-либо жестком диске, то к этим буквенным обозначеним добавляется цифра, соответствующая номеру раздела. Заметим, что данные номера определяют с помощью fdisk для Linux, иначе можно допустить ошибку.

    Как можно заставить работать под Linux звуковую карточку на чипсете OPTi 930xx?

    Данная карточка работает в DOS в режиме Sound Blaster Pro. Использовать ее в этом же режиме в Linux невозможно - ядро либо просто не обнаружит ее, либо будет неправильно с ней работать.

    Чтобы все-таки заставить работать эту карточку под Linux, необходимо собрать ядро с поддержкой звуковой карты Mad16 Mozard. При этом не забудьте включить /dev/dsp and /dev/audio support, а также Midi interface и FM synthesizer (YM3812-OPL3) support.

    Я настоятельно рекомендую оформить это все в виде модуля, а не жестко вставлять в ядро. Такой подход дает некоторые преимущества: можно задавать параметры к получившемуся модулю sound.o при его загрузке, а также, когда звук не нужен, просто не загружать данный модуль.

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

    С параметрами этой программы я думаю разберетесь сами. Если звук необходим вам все время, то можно запускать эту программу автоматически в процессе загрузки.


    Почему, когда я переключаюсь из текстовой консоли в X Window и двигаю своей PS/2 мышкой X Window Server падает с сообщением: psaux: device resource is busy?

    Наверняка при этом запущен General Purpose Mouse сервер (gpm) - несмотря на правки предыдущих версий он продолжает конфликтовать с сервером X Window, если работаем с мышкой PS/2, с serial мышкой вроде бы все нормально (версия gpm 1.10).

    Еще совсем недавно я предложил бы вам просто убивать gpm перед запуском X Windows, однако буквально на днях я увидел довольно простое решение этой проблемы, которое предлагает Leon B.Kanter (2:465/148.1@Fidonet.org) и которым я спешу с вами поделится.

    Итак вам нужно добавить при запуске gpm ключ -R. Этот ключ говорит gpm перенаправлять данные поступающие от мышки в FIFO /dev/gpmdata. Это можно сделать, если запустить программу gpmconfig, зарегистрировавшись как супепользователь (root). После того как вы введете параметры, соответствующие вашей мышке, вам предложат ввести дополнительные параметры

        Do you want do add any additional arguments []?
    
    Вот на это приглашение вы и должны ввести -R. После того как gpmconfig закончит работу, вы должны перезапустить gpm. Это делается двумя командами:
        /etc/init.d/gpm stop
        /etc/init.d/gpm start
    
    Теперь вам нужно внести исправления в файл /etc/X11/XF86Config. Найдите слова Section "Pointer" и удалите все строки между этими словами и словом EndSection, а затем поместите на место удаленных строк следующие:
        Device	"/dev/gpmdata"
        Protocol	"MouseSystems"
        Emulate3Buttons
    
    Все, теперь при переключении из текстовой консоли в X Windows никаких падений X сервера быть не должно.

    Почему, когда groff форматирует текст с ключем -Tlatin1 вместо символов переноса ("-") пустота? Как сделать, чтобы все было нормально?

    На мой взгляд дело в кривых таблицах для groff, где авторы просто допустили ошибку. Впрочем все довольно легко поправить.
    1. Идем в каталог /usr/share/groff/font/devlatin1
    2. Заходим поочередно редактором в каждый из находящихся там файлов, которые соответствуют различным шрифтам, кроме файла DESC, где задано описание (это файлы B, BI, I, R).
    3. Находим в этих файлах строку
                           char173
      
      и удаляем ее.

    После этого все должно заработать нормально. Не забудьте подчистить каталоги кэша у man'а иначе вы будете недоумевать почему это не сработало, в то время как man будет брать отформатированные ранее (до наших исправлений) файлы из кэша. Так что я настоятельно рекомендую вам удалить все файлы, которые находятся в каталогах /var/catman/cat*, что можно сделать командами

        rm /var/catman/cat*/*
        rm /var/catman/X11R6/cat*/*
        rm /var/catman/local/cat*/*
    

    А почему у меня системное время какое-то левое? Разница с тем, что должно быть составляет часы. Время на часах в CMOS'е нормальное.В чем дело?

    Тут вы должны вспомнить как вы устанавливали дистрибутив. В один прекрасный момент вам был задан вопрос:
        Is you clock set to GMT (y/n)?
    
    Вы, наверное, особо не задумываясь ответили "y", хотя в переводе на русский вопрос звучал бы так:
        Ваши часы установлены по времени GMT?
    
    Время GMT - это время Гринвичского меридиана. Местное время может вычислятся с помощью него прибавлением или вычитанием количества часов, соответствующих вашему часовому поясу. Например в городе Перми, разница между местным временем и GMT составляет плюс 5 часов, т.е. местное время - это GMT+5. Вам, наверное, будет удобнее ориентироваться на московское время, это GMT+3.

    Вернемся к сути вопроса. Чтобы время показываемое системой командой date было нормальным, вы можете или поставить часы в CMOS'е на время GMT или сказать системе, чтобы она не производила коррекцию времени на местное по временной зоне, добавляя ее к времени в CMOS'е.

    Первый способ самый простой. Для него всего-то нужно при перезагрузке машины зайти до загрузки в Setup и поправить там время на GMT. Однако не всех устраивает такой способ, хотя он наиболее правильный. Это обусловлено тем, что если у вас на машине стоят другие операционные системы, то они не будут правильно показывать время. К счастью есть и второй способ.

    Чтобы сказать системе, что не нужно производить коррекцию времени в CMOS'е согласно временной зоне, придется поработать руками. Дело в том, что существующий сценарий установки временной зоны tzconfig после инсталляции системы не позволяет задавать или убирать коррекцию времени. Для того чтобы ее убрать нужно:

  • переместится в каталог /etc/default и отредактировать в любом редакторе файл rcS.

      В этом файле вы должны найти строчку вида

          UTC=yes
      
      и заменить ее на строчку
          UTC=no
      
      Тогда после перезагрузки машины время будет нормальным.

    • Источник http://www.linuxoid.ru/


      Украинская Баннерная Сеть

      Главная  Алфавитный индекс  Справка  Добавить FAQ  E-mail
      Новости  Поиск по сайту

      © УкрFAQ 2002
      Сайт создан в системе uCoz