Main page òÕÓÓËÉÊ ×ÁÒÉÁÎÔ Ðóññêèé âàðèàíò

Last updated: 2005-04-28

# Advice on configuring GNU/Linux distribution / installing GNU software

## Contents

1. Foreword
2. Russian Language Support
3. Mouse
4. Sound
5. Network card

## Foreword

This document describes steps you can take to fine-tune your GNU/Linux system. It describes our experience with Debian 3.0 and (to a lesser extent) Red Hat 8.0 distros, but most tricks will apply to other distros as well.

## Russian Language Support

### General

1. Make sure that required locale files are built. On Debian, it is as easy as running dpkg-reconfigure locales and selecting locales you want to build. On other systems, you have to use localedef(1) to compile locale files from source definition files and symbolic character names file (their location is displayed by localedef --help). On my Debian GNU/Linux, the following command builds Russian locale for KOI8-R encoding:

 localedef -i ru_RU -f koi8-r ru_RU.koi8r 
2. Set LC_* environment variables to your preferred locale. You don't have to set them all, but you should at least set LC_CTYPE (defines interpretation of characters for your locale) and LC_COLLATE (determines collation/sorting order for your locale). See man 1 locale for variables available and their description. If you use bash, add the following to your ~/.bash_profile:

 LC_CTYPE=ru_RU.koi8r LC_COLLATE=ru_RU.koi8r export LC_CTYPE LC_COLLATE 

(In place of ru_RU.koi8r, substitute your locale, which have to be built as described above. For the changes to take effect you have to logout/login.)

Note that you are better off using KOI8-R encoding. Don't mess with CP1251 (MS Windows) -- some programs may not support it, while KOI8-R is guaranteed for programs with Russian support. If you have to work with texts in CP1251, you have options other than enabling CP1251 throughout your system.

First, recode is a great tool for converting between a hoard of encodings. When reading text files in non-native encoding, it is best used with a pipe:

 recode cp1251..koi8r < file.txt | less 

You can even write a small wrapper script around recode / less pipeline, if you have to often read files in some certain encoding.

Next, for editing files in CP1251 and CP866 (and many other encodings) you can use Emacs. See Russian Language Support / Emacs.

### Console

1. For fast and easy Cyrillic setup, use console-cyrillic package (available in Debian). Edit /etc/console-cyrillic to your taste.
2. If you don't have console-cyrillic, you'd have to arrange for consolechars(8) and loadkeys(1) to load respectively Cyrillic console screen font / screen-font map; and Cyrillic keyboard translation table (residing in /usr/share/consolefonts/, /usr/share/consoletrans/ and /usr/share/keymaps/; or in /lib/kbd/consolefonts/, /lib/kbd/consoletrans/ and /lib/kbd/keymaps/). How you do this depends on your distribution. You can run them from system startup scripts, or from your account's startup scripts. For example, in Red Hat 8.0 you have to edit file /etc/sysconfig/i18n to have something like

 SYSFONT="koi8u_8x16" SYSFONTACM="koi8-r" 

and edit /etc/sysconfig/keyboard to have something like

 KEYBOARDTYPE="pc" KEYTABLE="ru1" 

(You may have to use different names for font / keymap files.)

On your next reboot the script /etc/init.d/keytable will read and enable these settings. Which key is used to switch between Cyrillic / Latin layouts depends on the keymap you loaded. It is usually documented at the beginning of the keymap file. You can also create a custom keymap if you don't like any of the preinstalled keymaps.

3. Many programs use readline(3) library for their console input, including bash(1), so you need also to set up readline to properly process characters with the eighth bit set. Add to your ~/.inputrc (or /etc/inputrc for a system-wide setup) the following lines:

 

set input-meta on
set convert-meta off
set output-meta on

 

While we are at it, if that terminal bell is driving you nuts, you can turn it off by setting

 

set bell-style visible

 

Note that this will work only for programs which use readline to read their input from the terminal.

### Filesystem drivers

For creating and/or reading files with Cyrillic names on FAT and ISO9660 (filesystem for CDs) partitions you need to setup console (see Russian Language Support / Console) and filesystem drivers. To mount vfat or iso9660 partitions with Cyrillic filenames, give the driver the option

 

iocharset=XXXX

 

where XXXX stands for encoding name. For example, I use the following entries in /etc/fstab file to read and/or write files with Cyrillic names on floppies and CD's:

 

/dev/fd0   /mnt/floppy  vfat    user,noauto,iocharset=koi8-r    0   0
/dev/cdrom /mnt/cdrom   iso9660 ro,user,noauto,iocharset=koi8-r 0   0

 

Note that to be able to use this option, you have to include Native Language Support (in File systems' section) and select appropriate encoding when you are building your kernel. As far as I know, there is also (limited) support for NTFS, but I never tried it.

### Emacs

Emacs has its own mechanism for supporting international character sets. Whether you use Emacs or XEmacs, enabling Cyrillic support for your console / X Window is not sufficient if you want to have Cyrillic in Emacs.

Emacs internally uses a single multibyte character encoding, so that it can intermix characters from various encodings in a single buffer or string. When reading and writing files, Emacs translates between the multibyte character encoding and various other coding systems.

For interactive input, Emacs defines input methods'. At the terminal, you may be typing Latin characters without using facilities that your console / X Window provides for entering Cyrillic, but input method currently in effect defines how Emacs translates these Latin characters into the multibyte character encoding Emacs uses internally.

For Emacs to correctly display text on your terminal, you also have to tell Emacs what character encoding your terminal uses. Emacs translates its internal multibyte encoding into this encoding when characters are output to the terminal (be it console or X Window terminal emulator).

One consequence of this scheme is that to use Cyrillic in Emacs, you don't even have to setup your terminal's keyboard for Cyrillic, you only need to have Cyrillic font loaded.

If you are using XEmacs, you can direct XEmacs to use the font you want either by adding the following line to your ~/.Xresources:

 

emacs*font: -misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r

 

 

(cond (window-system (set-frame-font "-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r")))

 

(The latter setting overrides the former. Substitute name of your font -- remember it must support encoding that you select for terminal output, see below. If you choose the first method, you will have to restart X server for the setting to take effect.)

Emacs provides the following commands and variables for all these customizations:

• set-language-environment -- command to set your language environment. Emacs is able to automatically detect some encodings when opening files. The language environment controls which coding systems to recognize when reading text. It also specifies the default coding system to use when you create a file. Each language environment also specifies a default input method.
• set-terminal-coding-system -- you bet this command sets the coding system for terminal output.
• set-keyboard-coding-system -- if you have configured your terminal's keyboard for Cyrillic, i.e. your keyboard can produce 8-bit characters, you can set this variable so that Emacs can correctly process those characters.
• set-default-buffer-file-coding-system -- specifies the choice of coding system to use when you create a new file. It applies when you visit a new file, and when you create a buffer and then save it in a file.
• set-selection-coding-system -- specifies the coding system for sending selected text to the window system, and for receiving the text of selections made in other applications.
• codepage-setup -- reads code page number CODEPAGE and creates a coding system cpCODEPAGE (IBM codepage CODEPAGE). If you want to be able to read / edit / write files in cp1251, you should setup cp1251 coding system with this command.

See Emacs manual for more (if it is installed on your system, type info emacs).

All these commands / variables can be run / set in your Emacs initialization file, so that they are applied every time you start up Emacs. Add to your ~/.emacs the following lines:

 

(set-language-environment 'Cyrillic-KOI8)
(set-terminal-coding-system 'koi8)
(set-keyboard-coding-system nil)
(setq default-buffer-file-coding-system 'koi8)
(set-selection-coding-system 'koi8)
(codepage-setup 1251)

 (Adjust the coding systems. For the setting to take effect, restart Emacs.) Some useful commands related to the coding systems: Enable / disable the use of selected input method by C-\' (in our context meaning toggle Latin / Cyrillic). To visit (open) a file in certain encoding, you type C-x RET c' (that is Ctrl-x RETURN c'), select your encoding (TAB' key shows available options), and type C-x C-f' for visiting the file in the selected encoding. To save a file in some encoding (other than coding of the file), you type C-x RET c', then select your encoding, and type C-x C-s' to save the file in the selected encoding (type C-x C-w' if you want to save the file under different name). To convert selected region to a different encoding, type M-x encode-coding-region' and select encoding. 

### X Window

This description applies to XFree86 4.3.0.1. In /etc/X11/XF86Config-4(5), section "InputDevice" for the default keyboard (or for the one you use, if you customized your XF86Config-4), remove (better comment out)

 

Option "XkbDisable"

 

This will enable X keyboard extension which provides support for non-US keyboards. Then add

 

Option  "XkbRules"  "xfree86"
Option  "XkbModel" "pc104"
Option  "XkbLayout" "us,ru"

 

This will provide two layouts (US and Russian), and make Menu and right Windows buttons on your Windows keyboard act as a toggle button for switching between the layouts, and right Alt as a (temporary) switch between layouts. If you are lucky enough not to have a Windows keyboard, you can set "grp:toggle" (right Alt) as a toggler for keyboard layouts. Check /etc/X11/xkb/rules/xfree86 for other possible combinations. For more information, read /etc/X11/xkb/README.config.

Also, don't forget to install Cyrillic fonts, if they are not yet installed.

### gnome-terminal

I describe version 1.4.0.6. In Preferences dialog set

 

Open IM (input method)

 

and unset

 

Swap Delete/Backspace
Delete generates DEL/^H
Enable multibyte support
Meta sets the eighth bit

 

Also, choose a Cyrillic font in appropriate encoding.

### Xpdf

For Russian language support, I downloaded xpdf-cyrillic.tar.gz and ran the commands (again, paths may vary)

 

tar xzf xpdf-cyrillic.tar.gz
cd xpdf-cyrillic
install -d /usr/share/xpdf/cyrillic
cp Bulgarian.nameToUnicode KOI8-R.unicodeMap /usr/share/xpdf/cyrillic

 

If needed, edit /etc/xpdfrc and change paths /usr/local/share/xpdf/cyrillic/ to paths /usr/share/xpdf/cyrillic/.

If you want to have access to ghostscript fonts, edit /etc/xpdfrc and uncomment lines which start with displayFontT1 and change the paths to ghostscript fonts as appropriate (on Debian it is /usr/share/fonts/type1/gsfonts/).

### TeX

I use teTeX (version 2.0.2) distribution. In this section, $TEXMF stands for the path to your teTeX distribution (usually /usr/share/texmf/). I describe how to setup Cyrillic support for use with Plain TeX, both for TeX and pdfTeX. I do not describe how to use Cyrillic in LaTeX -- it is well documented elsewhere. Note that I describe how to build the required formats manually, which should work on most systems. However, some distributions provide tools which make life easier by running low-level commands automatically. For instance, in teTeX 2.0.2 there is a texconfig(1) configuration tool; many configuration files are centralized in /etc/texmf/ (see update-updmap(8), update-texmf(8), update-fmtutil(8)). After (re)configuring formats, you can run fmtutil(8), instead of manually running initex(1). 1. Cyrillic fonts 1. I use two Cyrillic font packages in addition to the ones that come with teTeX distribution, that is, PSCyr and Literat fonts downloadable from  ftp://mch5.chem.msu.su/pub/russian/psfonts/ ftp://ftp.vsu.ru/pub/tex/font-packs/pscyr/ ftp://ftp.vsu.ru/pub/tex/literat.zip ftp://ftp.vsu.ru/pub/tex/literat-*.tar.gz  If you install these fonts, make sure that references to map files for the new fonts are added to extra_modules variable in$TEXMF/dvips/config/updmap (or /etc/texmf/dvips/, /etc/texmf/updmap.d/ on newer systems).

In case of $TEXMF/dvips/config/updmap, add  extra_modules=" tli.map pscyr.map txr.map "  for Literat, PSCyr and TXfonts packages respectively (the last one comes with teTeX). If your updmap does not already have the map file for Cyrillic Computer Modern (cmcyr.map) listed in common_modules variable, you can include it in extra_modules as well. In case your system uses /etc/texmf/ hierarchy, add map files to /etc/texmf/dvips and put something like  Map tli.map Map pscyr.map Map txr.map  into /etc/texmf/updmap.d/, in a file, e.g., 10mymaps.cfg, then run update-updmap(8). 2. if you want to use Type1 fonts by default when both Type1 and Metafont versions are available (a good idea if you want to produce PDF documents), make sure$TEXMF/dvips/config/updmap contains the line

 type1_default=true 

and rerun updmap. If your system uses /etc/texmf/updmap.d/00updmap.cfg instead, check that it contains a line dvipsPreferOutline true' and run update-updmap(8).

2. CyrPlain
1. install Babel and ruhyphen (or ukrhyph for Ukrainian), if not yet (pre)installed;
2. edit $TEXMF/tex/generic/config/language.dat and make sure the following line(s) is uncommented (for Ukrainian, choose the line with your encoding):  russian ruhyphen.tex ukrainian ukrhyph.t2a  3. edit$TEXMF/tex/generic/ruhyphen/ruhyphen.tex and select appropriate font encoding and hyphenation scheme (you can also select hyphenation scheme later in $TEXMF/tex/cyrplain/config/cyrtex.cfg); the same goes for$TEXMF/tex/generic/ukrhyph/ukrhyph.tex;
4. edit $TEXMF/tex/cyrplain/config/cyrtex.cfg. Select fonts and font encoding. For example, for cmcyr fonts in T2A encoding, add  \c wcm/t2a/txxdefs/cm/cyrcmfnt  and for cmcyr fonts in LCY encoding, add  \c xcm/lcy/txxdefs/cm/cyrcmfnt  Select hyphenation scheme (if you have not yet done so in 2.c), default input encoding for your documents, and whether you want to be able to switch input encodings:  \def\Pattern{ct} \let\ifinpenc\iftrue \def\definpenc{koi8-r}  5. For Ukrainian, you can also define language switch command at the end of$TEXMF/tex/cyrplain/base/cyrtex.tex:

 \def\Ukrainian{\set@hyphenmins22\language\l@ukrainian}\let\Ukr\Ukrainian 
6. build cyrtex.fmt with the command

 tex --ini --fmt=cyrtex --progname=tex cyrtex.ini 

and either place it in $TEXMF/web2c or make a link to it from there; 7. run texhash. 8. To use Cyrillic in your Plain TeX documents, either place  %&cyrtex  in the very first column of the very first line of your document, or run tex with parameters tex --fmt cyrtex --translate-file=cp8bit'. Then, to select input and font encodings for you document, use for example  \inputencoding{koi8-r} \fontencoding{T2A}  Note that cmcyr fonts do not contain Ukrainian glyphs. You can load other Cyrillic fonts, for example, Literat (see Cyrillic fonts for installation). At the beginning of your document, type  \font\tenrm=tlir6a at 10pt \font\tenbf=tlib6a at 10pt \font\tenit=tliri6a at 10pt \font\tensl=tliro6a at 10pt \rm  to replace the basic 10pt fonts. 3. pdfTeX The following works for pdfTeX version 3.14159-1.00a-pretest-20011114-ojmw (Web2C 7.3.7). First, setup CyrPlain. Then: 1. build cyrpdftex with the command  pdftex --ini --fmt=cyrpdftex cyrtex.ini  and either place it in$TEXMF/web2c or make a link to it from there;

2. in $TEXMF/web2c/texmf.cnf, add the line  TEXINPUTS.cyrpdftex = .;$TEXMF/{pdftex,tex}/{plain,generic,}// 
3. if you want to insert figures in your documents, build mptopdf.efmt (for pdfeTeX) and/or mptopdf.fmt (for pdfTeX) with the commands

 pdftex --ini mptopdf pdfetex --ini mptopdf 

and either place them in $TEXMF/web2c or make links to them from there (use mpost to produce postscript figures, then mptopdf to convert them into pdf figures; now you can insert them into your pdfTeX document -- see documentation); 4. texhash; 5. if pdftex throws the following warnings at you:  Warning: pdftex (file /home/oleg/texmf/dvips/config/pdftex.map): invalid entry for rtxphvbo': SlantFont/ExtendFont can be used only with embedded T1 fonts Warning: pdftex (file /home/oleg/texmf/dvips/config/pdftex.map): invalid entry for rtxphvro': SlantFont/ExtendFont can be used only with embedded T1 fonts Warning: pdftex (file /home/oleg/texmf/dvips/config/pdftex.map): invalid entry for rtxptmbo': SlantFont/ExtendFont can be used only with embedded T1 fonts Warning: pdftex (file /home/oleg/texmf/dvips/config/pdftex.map): invalid entry for rtxptmro': SlantFont/ExtendFont can be used only with embedded T1 fonts  you can edit$TEXMF/dvips/config/pdftex.map and replace the following lines

 rtxphvbo Helvetica-Bold ".167 SlantFont TeXBase1Encoding ReEncodeFont" <tx8r.enc rtxphvro Helvetica ".167 SlantFont TeXBase1Encoding ReEncodeFont" <tx8r.enc rtxptmbo Times-Bold ".167 SlantFont TeXBase1Encoding ReEncodeFont" <tx8r.enc rtxptmro Times-Roman ".167 SlantFont TeXBase1Encoding ReEncodeFont" <tx8r.enc 

with this:

 rtxphvbo Helvetica-Bold "TeXBase1Encoding ReEncodeFont" <tx8r.enc rtxphvro Helvetica "TeXBase1Encoding ReEncodeFont" <tx8r.enc rtxptmbo Times-Bold "TeXBase1Encoding ReEncodeFont" <tx8r.enc rtxptmro Times-Roman "TeXBase1Encoding ReEncodeFont" <tx8r.enc 
4. dvips

This is not really about Cyrillic, but anyway.

If you want dvips to output to a file by default but not to lpr, edit $TEXMF/dvips/config/config.ps and comment out the line  o |lpr  If you want to add unsupported papersize to dvips, for instance a5, add the following lines to$TEXMF/dvips/config/config.ps:

 @ a5 148.5mm 209.9mm @+ ! %%DocumentPaperSizes: a5 @+ %%BeginPaperSize: a5 @+ a5 @+ %%EndPaperSize 

Just remember that this makes you document not portable (for compilation, not viewing) to systems which do not have this definition in their config.ps.

## Mouse

The main problem with the mouse is that gpm(8) (text console mouse driver) and X Window do not work together very well. To make them behave, you can instruct gpm to repeat mouse commands on a device file, and X Window to read the commands from that device file.

I used the following setup for my mouse (A4 Tech three button mouse, with wheel). For other mice you might need to choose different mouse type for gpm. See man 8 gpm.

1. Instruct gpm to run as repeater by adding the following to /etc/gpm.conf:

 repeat_type=raw type=imps2 
2. If you want to paste by right button instead of middle button, add the following line to /etc/gpm.conf:

 append=" -2 " 
3. Restart gpm (/etc/init.d/gpm restart' as root).
4. In /etc/X11/XF86Config-4, change settings in InputDevice section for your mouse:

 Option "Buttons" "5" Option "Protocol" "IMPS/2" Option "Device" "/dev/gpmdata" Option "ZAxisMapping" "4 5" 
5. If you want to be able to paste by Right+Left button press, add the following line to your /etc/X11/XF86Config-4:

 Option "Emulate3Buttons" "yes" 

## Sound

Build kernel with appropriate driver included. If you choose it to be built as a module, then add to /etc/modules.conf (in Debian, edit files in /etc/modutils and run update-modules(8)), assuming the name of the driver for your sound card is emu10k1 (see /lib/modules/2.4.XX/kernel/drivers/sound):

 alias sound-slot-0 emu10k1 

You may also need to add (for the mixer):

 alias sound-service-0-0 emu10k1 

## Network card

If you build the driver as a module, add to /etc/modules.conf (in Debian, edit files in /etc/modutils and run update-modules(8)), assuming that the name of the driver is ne (see /lib/modules/2.4.XX/kernel/drivers/net):

 alias eth0 ne 

You may also need to add the following for (ISA) cards:

 options ne io=0xXXX irq=XX