Subject: Re: [Netbsd-docs-ru] =?KOI8-R?Q?=F2=D5=D3=D3=CB=C9=CA_=D1=DA=D9?=
To: Mixa <mihael_s_2001@mail.ru>
From: Mike M. Volokhov <mishka@apk.od.ua>
List: netbsd-docs-ru
Date: 11/16/2004 14:55:06
On Tue, 16 Nov 2004 10:17:47 +0300
Mixa <mihael_s_2001@mail.ru> wrote:

> А что необходимо для реализации сабжа?
> http://guinness.cs.stevens.edu/pipermail/netbsd-docs-ru/2004-June/000007.html
> - этот совет что-то не помог... А так хотелось бы, в Х я работаю очень
> мало, в основном в консоли и хотелось бы читать почту, просматривать
> странички и писать тексты на великом и могучем.

ОК. Попробуем следующий рецепт.


1) Подразумевается, что имеется установленная NetBSD-2.0 или выше
(включая NetBSD-2.99.x a.k.a. current). Все операции, описанные ниже,
проводились на NetBSD 2.99.10 от 10/11/2004, так как я уже не имею под
рукой NetBSD 1.6.x.

2) Необходимы исходные файлы ядра NetBSD.

3) Необходимо использование wscons. Для этого в конфигурационном файле
ядра должны быть похожие строки:

	wsdisplay*	at ....
	wskbd*		at ....
	...
	pseudo-device	wsmux ...
	pseude-device	wsfont ...

NB: Оговорюсь сразу, что я не разработчик wscons, и поэтому не могу
сказать, есть ли реальная необходимость в параметрах wscons (options WS*
в ядре) для того, чтобы появилась возможность переключать раскладки и
грузить шрифты. Возможно, это "options WSEMUL_VT100". На моей системе я
использовал настройки ядра GENERIC.

4) Суть проблемы в том, что если алфавит родного языка пользователя
*существенно* отличается от английского, то очень проблематично набирать
текст на "ридний мове", удерживая при этом клавишу переключения
раскладок. Для того, чтобы исправить эту ситуацию, на данный момент
нужно изменить драйвер wskbd с помощью следующего патча:

Index: wskbd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/wscons/wskbd.c,v
retrieving revision 1.76
diff -u -r1.76 wskbd.c
--- wskbd.c	3 Jun 2004 19:04:58 -0000	1.76
+++ wskbd.c	16 Nov 2004 09:41:10 -0000
@@ -1590,7 +1590,7 @@
 		break;
 
 	case KS_Mode_switch:
-		update_modifier(id, type, 0, MOD_MODESHIFT);
+		update_modifier(id, type, 1, MOD_MODESHIFT);
 		break;
 
 	case KS_Num_Lock:

Этот тривиальный патч меняет поведение драйвера при нажатии на клавишу,
определенную как "Mode_switch".

5) Пересобираем и устанавливаем новое ядро:

	cd src/sys/arch/i386/conf
	config GENERIC
	cd ../compile/GENERIC
	make dependall
	make install

6) С системой не идут русские шрифты. Следовательно, нужно загрузить и
установить один из них, например, koi8-r-8x16.fnt из проекта FreeBSD:

	загрузка файла .....
	uudecode -p < /path/to/koi8-r-8x16.fnt > /usr/share/wscons/fonts/koi8r.816

7) Дальше все так, как описано в документации. При запуске нужно
загрузить шрифт и раскладку. Для этого добавляем следующие строки в файл
/etc/wscons.conf:

	font koi8 - - iso /usr/share/wscons/fonts/koi8r.816
	mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r

8) Перезагрузка. Чтобы изменения в ядре и в настройках wscons вступили в
силу, достаточно перегрузится.

9) После перезагрузки нужно активировать шрифт на каком-нибудь
виртуальном терминале:

	wsconsctl -dw font=koi8

10) И последний штрих - локализация приложений:

	setenv LC_CTYPE ru_RU.KOI8-R	# для C shell
	export LC_CTYPE=ru_RU.KOI8-R	# для Bourne shell


Проблемы и ньюансы текущей реализации wscons:

- Два последних шага нужно делать каждый раз после перезагрузки системы.

- При переключении видео режимов загруженный шрифт повреждается. Его
нужно заново перегружать с помощью wsconsctl. При этом нужно переключать
на шрифт, который не установлен текущим:

	wsfontload -N koi8-1 -e iso /usr/share/wscons/fonts/koi8r.816
	wsfontload -N koi8-2 -e iso /usr/share/wscons/fonts/koi8r.816
	wsconsctl -dw font=koi8-1
	.... mode change ....
	wsconsctl -dw font=koi8-2
	.... mode change ....
	wsconsctl -dw font=koi8-1
	.... and so on ...

- Я думаю, что Mode_switch лучше использовать с "блокировкой" (см.
патч), а текущее поведение драйвера переименовать в Mode_shift.

- раскладка /usr/share/wscons/keymaps/pckbd.ru.koi8-r хорошо подходит
для того, чтобы заменить пару слов в тексте, но набирать в ней большие
объемы... скажем, непривычно.

Если будет время, я попробую доработать wscons с учетом этих пунктов.

--
Михаил