Это связано с ошибкой локализации в дистрибутиве X Window, поставляемой с 2.2.8-RELEASE. xterm ищет файлы локализации в каталоге ${X11BASE}/lib/X11/locale, а например, ports/russian/X.language, устанавливает их в ${X11BASE}/lib/X11/nls. Соответственно нужно просто переписать файлы локализации в нужный каталог.
Самый простой способ: Закомментарить в файле ${X11BASE}/lib/X11/locale/koi8-r/XLC_LOCALE строчку encoding_name KOI8-R
Если вы можете пересобрать XFree86 из портов, то должен помочь следующий патч:
- --- lib/X11/imConv.c Sat Oct 24 09:50:13 1998 +++ lib/X11/imConv.c.new Thu Dec 3 18:20:07 1998 @@ -429,7 +429,7 @@ #endif {sUTF8, "utf8", "\033%B"}, /* Non-standard */ - {sCyrillic, "KOI8-R", "\033%/1\200\210koi8-r\002"}, + {sKoi8, "KOI8-R", "\033%/1\200\210koi8-r\002"}, {sLatin9, "ISO8859-15", "\033%/1\200\213iso8859-15\002"},/* a.k.a. Latin-0 */ };
Нужно просто положите его в /usr/ports/x11/XFree86/patches и пересобрать XFree86.
Еще способ: Изменить в /etc/XF86Config строчку XkbLayout с su на ru
Еще один способ: Запускать xterm, не имея установленных значений для LANG/LC_ALL
Есть предположение, что xterm в locale.aliases ищет первое минимальное соответствие на LANG, в случае ru бралось ISO. Нужно изменить запись для ru на нужное (koi8-r).