Yellow Rabbit

Способ настройки клавиатуры Xorg

Настройка клавиатуры Xorg - ноутбук Acer C720

Клавиатура хромбука Acer C720 видимо хороша для прогулок по сети и работы в Chrome OS, но мне для написания программ некоторых клавиш не хватает. Это Home, End, PageUp, PageDown, Insert и Delete.

Можно попробовать использовать клавишу Alt (генерирует символ Alt) как модификатор для курсорных клавиш. Тогда получаются следующие клавиатурные комбинации:

КлавишаКомбинация
InsertAlt + \
DeleteAlt + BackSpace
HomeAlt + Left (←)
EndAlt + Right (→)
PageUpAlt + Up (↑)
PageDownAlt + Down (↓)

Для модификации раскладки используем xkb. Сначала создадим каталог для конфигурационных файлов:


	mkdir -p ${HOME}/.config/xkb/types ${HOME}/.config/xkb/symbols

В файле ${HOME}/.config/xkb/types/c720 указываем как будут себя вести совместно два модификатора - Shift и Alt. Интерес представляют ситуации, когда нажат Alt, то есть уровень 3.


xkb_types "c720" {
	virtual_modifiers Alt;
	type "ARROW" {
		modifiers	= Shift+Alt;
		map[Shift]	= Level2;
		map[Alt]	= Level3;
		map[Alt+Shift]	= Level3;
		level_name[Level1] = "Base";
		level_name[Level2] = "Caps";
		level_name[Level3] = "Alt";
	};
};

В файле ${HOME}/.config/xkb/symbols/c720 на уровне 3 производим подмену символов клавиш на нужные и не забываем очистить флажок модификатора, иначе новые символы будут обрабатываться неверно.


xkb_symbols "c720" {
	key <BKSL> {
		type="ARROW",
		repeat=yes,
		symbol[Group1] = [backslash, bar, Insert],
		symbol[Group2] = [backslash, slash, Insert],
		actions[Group1] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<INS>, clearmods=Alt)
		],
		actions[Group2] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<INS>, clearmods=Alt)
		]
	};
	key <BKSP> {
		type="ARROW",
		repeat=yes,
		[BackSpace, BackSpace, Delete],
		actions[Group1] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<DELE>, clearmods=Alt)
		]
	};
	key <LEFT> {
		type="ARROW",
		[Left, Left, Home],
		actions[Group1] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<HOME>, clearmods=Alt)
		]
	};
	key <RGHT> {
		type="ARROW",
		repeat=yes,
		[Right, Right, End],
		actions[Group1] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<END>, clearmods=Alt)
		]
	};
	key <UP> {
		type="ARROW",
		repeat=yes,
		[Up, Up, Prior],
		actions[Group1] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<PGUP>, clearmods=Alt)
		]
	};
	key <DOWN> {
		type="ARROW",
		[Down, Down, Next],
		actions[Group1] = [
			NoAction(),
			NoAction(),
			RedirectKey(key=<PGDN>, clearmods=Alt)
		]
	};
};

Осталось записать в .xinitrc следующую команду для загрузки изменённой раскладки:


setxkbmap -layout "us+c720" -types "complete+c720" -print|xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}"