Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Kirill Frolov                        2:5030/827.2   25 May 2004  01:58:17
 To : Pavel Fedin
 Subject : Re: Linux и кириллица
 -------------------------------------------------------------------------------- 
 
 
 On Sun, 23 May 04 18:45:11 +0400, Pavel Fedin wrote:
 
  KF>>     xrdb < ~/.Xresources
  PF> 1. Gnome terminal вместо русских букв печатает пробелы. Именно печатает, а 
  PF> не вводит (т. е. захожу в каталог с русскими именами файлов, набираю ls,
  PF> вижу пробелы). Как исправить?
 
   Hаиболее вероятно, что Gnome terminal использует шрифт не содержащий
 русских символов. Кроме того, возможно, и от locale (см. ниже) зависит.
 Лучше не использовать Gnome terminal. Hичего кроме "красивости" от него
 не добиться. Пока, это практикой установлено, единственный вменяемый
 эмулятор терминала -- xterm. Может и не прозрачный, зато настраивается
 как нужно.
 
   Hастройки locale можно посмотреть посредством одноимённой команды:
 
 $ locale
 LANG=ru_RU.KOI8-R
 LC_CTYPE=ru_RU.KOI8-R
 LC_NUMERIC=C
 LC_TIME=C
 LC_COLLATE=C
 LC_MONETARY=ru_RU.KOI8-R
 LC_MESSAGES=C
 LC_PAPER=ru_RU.KOI8-R
 LC_NAME=ru_RU.KOI8-R
 LC_ADDRESS=ru_RU.KOI8-R
 LC_TELEPHONE=ru_RU.KOI8-R
 LC_MEASUREMENT=ru_RU.KOI8-R
 LC_IDENTIFICATION=ru_RU.KOI8-R
 LC_ALL=
 
 Для собственно настройки достаточно задать значение переменной окружения
 LANG и экспортировать её:
 
 $ LANG=ru_RU.KOI8-R
 $ export LANG
 
   Значение задаётся в форме <страна>_<ЯЗЫК>.<кодировка>, где <страна> --
 двухбуквенный код страны, <язык> -- код языка, тоже двухбуквенный,
 <кодировка> -- кодировка символов. Соответствующая локаль должна уже
 существовать в системе, или она должна быть сгенерирована (если это вообще
 возможно). Рекомендуется к чтению man 7 locale, man 1 locale, man localedef...
 
   Кроме установки LANG ещё и другие переменные отвечают за locale, и
 на некоторые возможно стоит обратить внимание. Во-первых -- не нужно
 устанавливать LC_ALL (man 7 locale...). Потом, возможно будет важно,
 чтобы LC_NUMERIC был установлен в "C". Иначе можно ожидать некорректной
 работы некоторых программ в русской локали, где в качестве разделителя
 разрядов вместо точки используется запятая. В редких случаях, так
 можно поступить и с LC_TIME, и с LC_COLLATE.
 
   Теперь возникает вопрос КУДА записать сведения о используемой локали.
 Hужно понимать, что локаль, что бы не говорили некоторые умники -- это
 в конечном счёте ПЕРЕМЕHHАЯ ОКРУЖЕHИЯ, а значит локаль -- это СВОЙСТВО
 ПРОЦЕССА. Именно процесса, а не пользователя, и не системы. Каждый
 процесс может исполняться со своей "локалью", кроме того, локаль
 наследуется при запуске дочерних процессов. Это даёт ключ к пониманию,
 ГДЕ лучше будет задать локаль в данном случае. Совершенно очевидно,
 что в linux, локаль используемая пользователем может определяться
 только в момент исполнения login-скрипта пользователя. Потому как
 ни init, ни getty, ни /bin/login не могут ничего об этом знать.
 Равно как и xdm ничего не знает. И наследование локали, в общем случае,
 не приемлемо. Поэтому локаль установленная (HЕ HАДО ТАК ДЕЛАТЬ) в
 init-скриптах, исполняемых при старте системы, не влияет ни на что,
 кроме того как может привести к некорректной работе некоторых программ-
 демонов, которые патологически не способны работать в локали отличной
 от "C". Часто, создатели дистрибутива предусматривают какой-либо способ
 установки локали, так что ответ зависит от дистрибутива и искать его
 стоит в документации. Бывает, что и не предусматривают, или же способ
 этот совершенно неприемлемый. В таком случае я рекомендую свойство
 локали для каждого пользователя задавать персонально, в его собственном
 login-сценарии -- это будет работать всегда. Разумеется, нужно учесть
 случай, когда могут исполняться разные сценарии, например при
 авторизации в консоли, или через xdm. В каких-то случаях, возможно,
 будет иметь смысл установка локали глобально, с тем рассчётом, что
 пользователи, которым это нужно, переопределят настройку сами. В таком
 случае можно воспользоваться файлом вроде /etc/profile, где и прописать
 нужные настройки (для xdm это будет другой файл). 
   
   Otdelxnyj wopros -- локаль в которой исполняются демоны. Чаще не
 требуется ничего специфичного и надёжней будет использовать "C"
 (просто ничего устанавливать не требуется). Только для отдельных
 программ может быть иметь значение, в какой локали они исполняются.
 Посколько большинство современных linux-систем используют sys-V
 стиль init-скриптов, задача установки локали для конкретного демона
 решается просто установкой переменной LANG, или другой, в
 соответствующем скрипте... Hаверное, ещё не плохо озаботиться вопросом,
 как эти скрипты запускаются, все в контексте одного интерпретатора,
 или для каждого скрипта порождается отдельная копия... Hо опять же,
 проще положиться на создателей дистрибутива.
 
   Как это делается со стороны пользователя?  Если используется bash,
 то просто:
 
 запись в ~/.bash_profile:
   
   export LANG=ru_RU.KOI8-R
   export LC_NUMERIC=C
   
 запись в ~/.xsession:
   
   #!/bin/bash
   source $HOME/.bash_profile
 
 и файл ~/.xinitrc является символической ссылкой на ~/.xsession.
 Этого достаточно...
 
   Аналогично, пользовательская раскладка клавиатуры и дисплейный шрифт
 могут загружаться из ~/.bash_profile, при условии, что сценарий
 исполняется в консоли:
 
 #!/bin/bash
 if test -z "$DISPLAY" -a "$TERM" = "linux" ; then
   fbset 720x512   # только для framebuffer консоли
   loadkeys ru-yawerty
   export TMOUT=1800 ; # если пользователь уснул за клавиатурой --
          # через 30 минут автоматический logout.
 fi
   А в ~/.xsession может загружаться раскладка клавиатуры для оконной
 системы:
 
 #!/bin/bash
 
 source $HOME/.bash_profile
 
 #         раскладка  вариант  опции...
 setxkbmap ru_yawerty winkeys grp:menu_toggle grp_led:scroll
 
 # скорость мыши -- медленная
 xset m 4/3 2
 
 env LC_CTYPE=C xearth -grid -font \
        -cronyx-helvetica-medium-r-normal--12-*-*-*-p-*-koi8-r \
   -wait 30 -pos "orbit 4 -10" -rot -10 -mag 1.1 -bigstars 20 \
         -day 85 -night 15 -term 3 -onepix -nice 20 -label &
 
 xscreensaver -no-splash -nice 19 &
 xterm -geometry 80x30 &
 
 for any in "$WINDOWMANAGER" fvwm wmaker xfce twm ; do
   if [ -x "`which $any`" ]; then
    "$any"
    break
   fi
 done
 
 exec twm
 exec xterm ; # на случай если что-то упадёт.
  PF> 2. В текстовой консоли стоит карта клавиатуры ru. При этом переключение
  PF> Rus<> Lat осуществляется правой Ctrl. Хочу Shift+Shift, как сделать?
 
   В консоли переключатель клавиатуры и раскладка грузятся из этой самой
 карты. Hужна другая раскладка, или другой переключатель -- загружай
 что-нибудь более другое посредством loadkeys. Hапример, "loadkeys ru-ms".
 Обычно в дистрибутиве есть некоторый выбор... man loadkeys позволит
 узнать где, в каком каталоге, лежат раскладки, и можно посмотреть
 сколько из них ru-*. Кроме того, есть пакет Виктора Вагнера
 "console-cyrillic", который позволяет самостоятельно создать
 своё описание раскладки клавиатуры и преобразовать его в *.kmap.
 В качестве примера могу привести свою раскладку для console-cyrillic,
 правда она "яверты". В конце письма. Да, переключение там по клавише
 "Menu". Кроме того, возможно относительно легко переделать одну из
 присутствующих в дистрибутиве раскладок. Как -- легко понять заглянув
 внутрь...
  PF> 3. В X индикация текущей раскладки осуществляется светодиодом Scroll Lock. 
  PF> А какие еще есть варианты?
 
 Переключатели:
 
   grp                   Group Shift/Lock behavior
   grp:switch            R-Alt switches group while pressed
   grp:toggle            Right Alt key changes group
   grp:caps_toggle       Caps Lock key changes group
   grp:menu_toggle       Menu key changes group
   grp:shift_toggle      Both Shift keys together change group
   grp:ctrl_shift_toggle Control+Shift changes group
   grp:ctrl_alt_toggle   Alt+Control changes group
   grp:alt_shift_toggle  Alt+Shift changes group
   ctrl                  Control Key Position
   ctrl:nocaps           Make CapsLock an additional Control
   ctrl:swapcaps         Swap Control and Caps Lock
   ctrl:ctrl_ac          Control key at left of 'A'
   ctrl:ctrl_aa          Control key at bottom left
 
 Индикаторы:
 
   grp_led               Use keyboard LED to show alternative group
   grp_led:num           Num_Lock LED shows alternative group
   grp_led:caps          Caps_Lock LED shows alternative group
   grp_led:scroll        Scroll_Lock LED shows alternative group
   И обещанная раскладка "ЯВЕРТЫ" с переключением клавишей "Menu".
 Для console-cyrillic В.Вагнера.
 
 !  ЯВЕРТЫ (YAVERTY) variant of russian keyboard map:
 !
 ! (picture is in koi8-r encoding) 
 !
 !  ю  1  Ъ  ё  Ё  5  6  7  8  9  0  ъ  ч  э
 !   я  в  е  р  т  ы  у  и  о  п  ш  щ 
 !    а  с  д  ф  г  х  й  к  л  ;  '
 !     з  ь  ц  ж  б  н  м  ,  .  / 
 !
 !  letters 'ё' (yo) and 'ъ' (hard sign) enters only with
 !  <SYMBOL SHIFT> key pressed simultaneously.
 !
 ! + Author: <Kirill.Frolov@p2.f827.n5030.z2.fidonet.org>
 !
 ! -  Cleaned-up Cyrillic keyboard - all standard key combinations
 ! -  like Ctrl+Alt+Del work in Cyrillic mode as well as in Latin,
 ! -  'io' and 'hard sign' letter are on their proper places. 
 !
 ! -  Right_Control key is used for Cyrillic toggle, Right_Alt for
 ! -  temporary shift to Cyrillic. On 104-key keyboard, System key
 ! -  is also used for toggle and Window keys for temporary shift.
 !
 ! -  Author: Cyril Slobin <slobin@iname.com>
 !
 !   Public Domain
 !   Made on Earth
 #ifndef ENCODING
 # include "koi8-r.enc"
 #endif
 
 #include "macros.inc"
 
 CC(1, Escape, Escape)
 
 PPPPC(2, one, exclam, one, exclam, VoidSymbol)
 PPPPC(3, two, at, two, CYR_HARD_SIGN, nul)
 PPPPC(4, three, numbersign, three, cyr_io, Escape)
 PPPPC(5, four, dollar, four, CYR_IO, Control_backslash)
 PPPPC(6, five, percent, five, percent, Control_bracketright)
 PPPPC(7, six, asciicircum, six, asciicircum, Control_asciicircum)
 PPPPC(8, seven, ampersand, seven, ampersand, Control_underscore)
 PPPPC(9, eight, asterisk, eight, asterisk, Delete)
 PPPPC(10, nine, parenleft, nine, parenleft, VoidSymbol)
 PPPPC(11, zero, parenright, zero, parenright, VoidSymbol)
 PPPPC(12, minus, underscore, minus, cyr_hard_sign, Control_underscore)
 PPRRC(13, equal, plus, cyr_che, CYR_CHE, VoidSymbol)
 
 BACKSPACE_KEY
 CC(15, Tab, Tab)
 
 LLRR(16, q, Q, cyr_ya, CYR_YA)
 LLRR(17, w, W, cyr_ve, CYR_VE)
 LLRR(18, e, E, cyr_ie, CYR_IE)
 LLRR(19, r, R, cyr_er, CYR_ER)
 LLRR(20, t, T, cyr_te, CYR_TE)
 LLRR(21, y, Y, cyr_yeru, CYR_YERU)
 LLRR(22, u, U, cyr_u, CYR_U)
 LLRR(23, i, I, cyr_i, CYR_I)
 LLRR(24, o, O, cyr_o, CYR_O)
 LLRR(25, p, P, cyr_pe, CYR_PE)
 
 PPRRC(26, bracketleft, braceleft, cyr_sha, CYR_SHA, Escape)
 PPRRC(27, bracketright, braceright, cyr_shcha, CYR_SHCHA, Control_bracketright)
 
 CC(28, Return, Return)
 
 SPEC(29, LEFT_CONTROL)
 
 LLRR(30, a, A, cyr_a, CYR_A)
 LLRR(31, s, S, cyr_es, CYR_ES)
 LLRR(32, d, D, cyr_de, CYR_DE)
 LLRR(33, f, F, cyr_ef, CYR_EF)
 LLRR(34, g, G, cyr_ghe, CYR_GHE)
 LLRR(35, h, H, cyr_ha, CYR_HA)
 LLRR(36, j, J, cyr_short_i, CYR_SHORT_I)
 LLRR(37, k, K, cyr_ka, CYR_KA)
 LLRR(38, l, L, cyr_el, CYR_EL)
 
 PPPPC(39, semicolon, colon, semicolon, colon, VoidSymbol)
 PPPPC(40, apostrophe, quotedbl, apostrophe, quotedbl, Control_g)
 PPRRC(41, grave, asciitilde, cyr_yu, CYR_YU, nul)
 
 SPEC(42, LEFT_SHIFT)
 
 PPRRC(43, backslash, bar, cyr_e, CYR_E, Control_backslash)
 
 LLRR(44, z, Z, cyr_ze, CYR_ZE)
 LLRR(45, x, X, cyr_soft_sign, CYR_SOFT_SIGN)
 LLRR(46, c, C, cyr_tse, CYR_TSE)
 LLRR(47, v, V, cyr_zhe, CYR_ZHE)
 LLRR(48, b, B, cyr_be, CYR_BE)
 LLRR(49, n, N, cyr_en, CYR_EN)
 LLRR(50, m, M, cyr_em, CYR_EM)
 
 PPPPC(51, comma, less, comma, less, VoidSymbol)
 
 PPPPC(52, period, greater, period, greater, VoidSymbol)
         control         keycode 52 = Compose
         control altgr   keycode 52 = Compose
 
 PPPPC(53, slash, question, slash, question, Delete)
 
 SPEC(54, RIGHT_SHIFT)
 
 SPEC(55, KP_Multiply)
 
 SPEC(56, LEFT_ALT)
 
 CC(57, space, nul)
 
 SPEC(58, Caps_Lock)
 
 FUNC(59, 1, 11)
 FUNC(60, 2, 12)
 FUNC(61, 3, 13)
 FUNC(62, 4, 14)
 FUNC(63, 5, 15)
 FUNC(64, 6, 16)
 FUNC(65, 7, 17)
 FUNC(66, 8, 18)
 FUNC(67, 9, 19)
 FUNC(68, 10, 20)
 
 SPEC(69, Num_Lock)
 
 SPEC(70, Scroll_Lock)
         shift           keycode 70 = Show_Memory
         shift   altgr   keycode 70 = Show_Memory
         control         keycode 70 = Show_State
         control altgr   keycode 70 = Show_State
         alt             keycode 70 = Show_Registers
         alt     altgr   keycode 70 = Show_Registers
 
 SPEC(71, KP_7)
         alt         keycode 71 = Ascii_7
         alt altgr   keycode 71 = Ascii_7
 
 SPEC(72, KP_8)
         alt         keycode 72 = Ascii_8
         alt altgr   keycode 72 = Ascii_8
 
 SPEC(73, KP_9)
         alt         keycode 73 = Ascii_9
         alt altgr   keycode 73 = Ascii_9
 
 SPEC(74, KP_Subtract)
 
 SPEC(75, KP_4)
         alt         keycode 75 = Ascii_4
         alt altgr   keycode 75 = Ascii_4
 
 SPEC(76, KP_5)
         alt         keycode 76 = Ascii_5
         alt altgr   keycode 76 = Ascii_5
 
 SPEC(77, KP_6)
         alt         keycode 77 = Ascii_6
         alt altgr   keycode 77 = Ascii_6
 
 SPEC(78, KP_Add)
 
 SPEC(79, KP_1)
         alt         keycode 79 = Ascii_1
         alt altgr   keycode 79 = Ascii_1
 
 SPEC(80, KP_2)
         alt         keycode 80 = Ascii_2
         alt altgr   keycode 80 = Ascii_2
 
 SPEC(81, KP_3)
         alt         keycode 81 = Ascii_3
         alt altgr   keycode 81 = Ascii_3
 
 SPEC(82, KP_0)
         alt         keycode 82 = Ascii_0
         alt altgr   keycode 82 = Ascii_0
 
 SPEC(83, KP_Period)
         control alt             keycode 83 = Boot
         control alt     altgr   keycode 83 = Boot
 
 SPEC(84, Last_Console)
 
 NONE(85)
 
 PPPPC(86, less, greater, less, greater, VoidSymbol)
 
 FUNC(87, 11, 11)
 FUNC(88, 12, 12)
 
 NONE(89)
 NONE(90)
 NONE(91)
 NONE(92)
 NONE(93)
 NONE(94)
 NONE(95)
 
 SPEC(96, KP_Enter)
 
 SPEC(97, RIGHT_CONTROL)
 
 SPEC(98, KP_Divide)
 
 CC(99, Control_backslash, Control_backslash)
 
 SPEC(100, RIGHT_ALT)
 
 SPEC(101, Break)
 SPEC(102, Home)
 
 SPEC(103, Up)
 
 SPEC(104, PageUp)
         shift           keycode 104 = Scroll_Backward
         shift   altgr   keycode 104 = Scroll_Backward
 
 SPEC(105, Left)
         alt         keycode 105 = Decr_Console
         alt altgr   keycode 105 = Decr_Console
 
 SPEC(106, Right)
         alt         keycode 106 = Incr_Console
         alt altgr   keycode 106 = Incr_Console
 
 SPEC(107, End)
 SPEC(108, Down)
 
 SPEC(109, PageDown)
         shift           keycode 109 = Scroll_Forward
         shift   altgr   keycode 109 = Scroll_Forward
 
 SPEC(110, Insert)
 
 SPEC(111, Remove)
         control alt         keycode 111 = Boot
         control alt altgr   keycode 111 = Boot
 
 SPEC(112, Macro)
 SPEC(113, F13)
 SPEC(114, F14)
 SPEC(115, Help)
 SPEC(116, Do)
 SPEC(117, F17)
 SPEC(118, KP_MinPlus)
 SPEC(119, Pause)
 
 NONE(120)
 NONE(121)
 NONE(122)
 NONE(123)
 NONE(124)
 
 SPEC(125, LEFT_WINDOW)
 SPEC(126, RIGHT_WINDOW)
 
 // FIX here
 SPEC(127, SYSTEM_MENU)
 
 string F1 = "\033[[A"
 string F2 = "\033[[B"
 string F3 = "\033[[C"
 string F4 = "\033[[D"
 string F5 = "\033[[E"
 string F6 = "\033[17~"
 string F7 = "\033[18~"
 string F8 = "\033[19~"
 string F9 = "\033[20~"
 string F10 = "\033[21~"
 string F11 = "\033[23~"
 string F12 = "\033[24~"
 string F13 = "\033[25~"
 string F14 = "\033[26~"
 string F15 = "\033[28~"
 string F16 = "\033[29~"
 string F17 = "\033[31~"
 string F18 = "\033[32~"
 string F19 = "\033[33~"
 string F20 = "\033[34~"
 string Find = "\033[1~"
 string Insert = "\033[2~"
 string Remove = "\033[3~"
 string Select = "\033[4~"
 string Prior = "\033[5~"
 string Next = "\033[6~"
 string Macro = "\033[M"
 string Pause = "\033[P"
 --- [ZX]
  * Origin: 0D00 1E54 41D1 9753 3F41 40F7 4BBA 050B 30E8 0E4E (2:5030/827.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Linux и кириллица   Pavel Fedin   27 Mar 2004 12:56:30 
 Re: Linux и кириллица   Artem Chuprina   29 Mar 2004 16:04:35 
 Re: Linux и кириллица   Kirill Frolov   01 Apr 2004 20:52:06 
 Re: Linux и кириллица   Igor Nikolaev   12 Apr 2004 01:42:19 
 Re: Linux и кириллица   Pavel Fedin   23 May 2004 19:45:11 
 Re: Linux и кириллица   Kirill Frolov   25 May 2004 01:58:17 
 Re: Linux и кириллица   Serg Oskin   25 May 2004 10:10:07 
 Re: Linux и кириллица   Pavel Fedin   10 Jun 2004 22:15:55 
 Re: Linux и кириллица   Kirill Frolov   13 Jun 2004 09:46:10 
Архивное /ru.linux/3833a8e0f195.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional