FreeBSD: не работающие клавиши delete и backspace. Часть #1
Проблема с правильным функционированием клавиш delete и backspace интересует многих пользователей Linux. Это связано с нестандартным поведением этих клавиш, нажимая которые мы хотим увидеть совершенно иное действие.
Перевод.
Цель данного документа сделать правильный функционал клавиши <—- (то есть Backspace на клавиатуре), чтобы стереть влево, и клавиши Delete стирания под курсором. Кажется все дистрибутивы Linux уже решили данную проблему. Однако до сих пор много людей ищут в интернете решение, и поэтому представленная здесь информация, я думаю будет применима и к другим разновидностям UNIX.
Как такового четкого решения проблемы нет, но есть довольно хорошие «костыли» (обходные пути). Все что необходимо, сказать Xterm как обращаться с ключами, а затем сообщить другим приложениям об этом (то есть как Xterm обрабатывает ключи). База данных TERMINFO содержит описание того, как все виды терминалов обрабатывать ключи. Приложения смотрят на переменную TERM, а затем ищут соответствующую базу данных для значения определенного ключа. Например, клавиша со стрелкой влево, и находит строку соответствующую ей. Это означает, что эти строки в базе данных лучше соответствующих текущих настроек XTerm. Это влечет за собой изменение записи в Terminfo XTerm.
Это кратко, и теория.
В данной таблице приведен список того, что необходимо изменить в различных средах:
Прежде чем что то менять, обязательно делайте резервные копии оригинальных файлов!
Terminfo
Сначала выясним, является ли запись TERMINFO для XTerm в соответствии с вашими настройками XTerm:
infocmp | grep kbs
эта команда должна возвратить строку, которая включает в себя kbs=\177
. Это означает DEL (или ^?) или клавишу возврата, это то что нам нужно.
infocmp | grep kdch1
команда должна возвратить строку с kdch1=\E[3~
. Это означает, что \Е[3~
отображает клавишу удаления. Вы можете увидеть kbs=^H
и/или kdch1=\177
, или там не будет kdch1
вообще. Вы можете либо изменить запись Terminfo, как описано на странице устранения неисправностей (просто изменение или добавление kdch1=\E[3~
и kbs=\177
, но сначала сделайте резервную копию!) Поместите файл в ~/.terminfo/x/xterm
(для тестирования) и выполните команду:
export TERMINFO=~/.terminfo
и/или для Tcsh:
setenv TERMINFO ~/.terminfo
Убедитесь, что переменная TERM установлена в XTerm:
echo $TERM
должно возвратить "Xterm"
. Если это так (скрестите пальцы:-) ), то от рута скопируйте этот файл сюда:
/etc/terminfo/x/xterm
(для debian) или
/usr/lib/terminfo/x/xterm
(для RedHat, Slackware).
Сделайте резервные копии оригиналов, и проверяйте работоспособность, прежде чем заменять какие либо файлы!
Xterm
Xterm (и ему подобные) требует совсем немного конфигурации. В /etc/X11/Xresources
и ~/.Xdefaults /etc/X11/Xresources
или ~/.Xdefaults
(или там где он связан с другими Xresources) добавьте строку:
*VT100.Translations: #override \
<Key>BackSpace: string(0x7F)\n\
<Key>Delete: string("\033[3~")\n\
<Key>Home: string("\033[1~")\n\
<Key>End: string("\033[4~")
*ttyModes: erase ^?
Rxvt использует только Xresources, если он собран с помощью этой опции. Так как rxvt использует Readline, чтобы переходить в начало и в конец вам придется редактировать .inputrc
(см. Bash раздел).
Redhat пользователи могут скачать SRPM (исходники) и скомпилировать rxvt у себя с этим feature.h, обеспечивая правильные сочетания клавиш.
Добавление xterm
или nxterm
перед *vt100.translations
позволяет сделать настройки специфичные для XTerm или nxterm. Но иногда это не работает как надо, поэтому пробуйте использовать оба nxterm*VT100.Translations
и xterm*VT100.Translations
Кстати, я говорил вам что Ctrl-v эта последовательность посылается shell? Попробуйте Ctrl-v-Delete, это должно возвратить ^[[3~
в XTerm (попробуйте еще с помощью ESC, и вы увидите ^[[3~
, что соответствует \е
для чтения строки приложений, а \033
для Xresources).
1. Синтаксис Xresources файлов очень строг, убедитесь что вы не оставляете пробелы после обратной косой черты в каждой строке. Также следите за символом новой строки (\n\), его не должно быть на последней строке записи.
2. Секции имеют названия, если вы используете только *VT100.Translations
он будет работать для всех XTerm и ему подобных.
3. Для получения информации о Xresources и других X связанных с ним, обратитесь к
man X
X
Если вы используете XFree86, убедитесь что вы включили расширения XKB в /etc/X11/XF86Config
и /etc/X11/XF86Config
. Это должно быть включено по умолчанию, так что я думаю с этим все будет хорошо. Обратите внимание на различные раскладки клавиатуры. Теперь XFree86 будет транслировать консоль, и все должно работать в X. Если у вас есть проблемы, или хотите возиться с дополнительными символами, создайте Xmodmap. Кроме того, если вы хотите набирать специальные символы в X, xmodmap также может быть использован для настройки функциональных клавиш. Это хорошо описано на страницах справки (man xmodmap
)
Убедитесь, что следующие строки присутствуют в Xmodmap:
keycode 22 = BackSpace
keycode 107 = Delete
Обратите внимание, что коды клавиш в X не такие как в VT. Используйте
showkey
чтобы посмотреть коды клавиш генерируемые клавиатурой в VT и xev в X.
Существует отличный GUI для конфигурации клавиатуры в иксах: xkeycaps
Другой способ генерации специальных символов в X (без использования xmodmap) является в определении Compose-ключа (для использования в качестве «мертвого ключа») в XF86Config в разделе Keyboard:
RightCtl Compose
Теперь у вас есть Compose-ключ с такими же свойствами как и в VT разделе. Не забудьте установить переменную окружения
LC_CTYPE=iso-8859-1
(см VT опции). Обратитесь к man XF86Config
, если вы хотите узнать больше.
Примечание: это кажется не работает в эмуляторе терминала rxvt.
Кроме того, владельцы windows клавиатур (с дополнительными клавишами, это не обязательно должна быть M$ natural клавиатура) могут включить XKEYBOARD расширение (включено по умолчанию) в XF86Config и раскомментировать строку (следуйте инструкциям в файле):
XkbModel "microsoft"
Теперь вы можете использовать кнопку с флагом windows, чтобы использовать какие нибудь экзотические действия, например нажмите на нее в сочетании с какой либо другой клавишей (явный недостаток заключается в том, что нет никакой логики в расположении специальных символов)
Еще один способ использования «мертвых клавиш» в X является установка модифицированной версии libx11, которая включает в себя поддержку мертвых клавиш (прозрачный для всех приложений). Во-первых, скачайте модифицированную версию libx11 (убедитесь, что вы скачиваете правильную версию, если вы используете Glibc заменить этим libx11, ELF-libc5 и ELF-libc6). Теперь отключите ХКВ расширение для xfree86 (отредактируйте XF86Config и запустите xmodmap с параметрами на Xmodmap файл с мертвыми клавишами dead_acute, dead_grave, dead_cedilla, dead_ogonek и Multi_keys тоже.
Особым случаем является использование XDM или Slim, вам нужно отключить ХКВ из /etc/X11/xdm/Xservers
файла, передавая параметр -kb
к X серверу таким образом:
:0 local /usr/X11R6/bin/X -kb
и затем в файле /etc/X11/xdm/Xsetup_0
добавьте строку для загрузки Xmodmap:
if [ -r /etc/X11/xinit/.Xmodmap ]; then
/usr/X11R6/bin/xmodmap /etc/X11/xinit/.Xmodmap
fi
Теперь символы доступны через клавишу AltGr, неработающие клавиши также могут работать в XDM.
Продолжение следует.
Оцените статью или поделитесь ей в соцсетях:
Рекомендуемые статьи:
Комментарии
Нет комментариев к данной статье.