Продолжая эстафету по исправлению назойливой ошибки переключения клавиш для ноутбука MacBook Pro под линуксом я пробую победить ее через использование Layout options.
Проблема, которую я пытаюсь решить на протяжении длительно времени, заключается в том, что кнопки на клавиатуре MacBook Pro расположены не привычным для бывших пользователей MS Windows местах. В результате получаются перепутаны кнопки Windows Key и Alt. Что вносит хаос при работе с операционной системой Linux переключении окон, вызова системных меню и прочьи сложности.
Моя задача заставить X11 систему переназначить ряд кнопок с одних значений на другие. Проблема должна решаться штатными средствами, однако из за наличия ошибок в OS Linux, недоработок, и постоянных улучшениях внутри операционной системы я то нахожу частичное решение, то, после нового релиза операционной системы, откатываюсь назад и начинаю поиск сначала.
В предыдущей серии статей вы можете увидеть 2 способа исправления данной ситуации. Все они, к сожалению, содержат свои недостатки и ни один из них не решает указанную проблему полностью. В этот раз я подбираюсь к решению совсем близко, и практически нахожу рекомендованный (точнее единственный который работает) способ позволяющий переназначать кнопки.
Вот эти статьи:
-
через использование xmodmap для fedora 9
-
через использование xmodmap для fedora 10+
-
через создание нового типа клавиатуры
-
создание своей раскладки для консоли fedora
-
переназначение кнопок для Mac OS X
-
создание раскладки для Windows XP
Способы приведенные выше имеют различные проблемы. Некоторые способы требуют работы с исходниками, другие способы из за ошибок в X11 системе обработки событий не позволяют получить ожидаемый результат. И к сожалению ни один из выше приведенных способов не позволяет переключить кнопку Eject на кнопку PrintScreen.
http://blog.axet.ru/search/label/keyboard%20mapping
Рассматриваемый здесь очередной способ, так же не лишен недостатков среди которых:
- работа с исходниками
- не возможность переключить кнопку eject
Однако, на конец-то, у меня получилось достаточно прозрачно сделать требуемые изменения и получить наиболее приемлемый способ для преобразования кнопок. Теперь, все кнопки после преобразования работают как этого и ожидается, больше не происходит откатывания значения кнопки в различных ситуациях. Кроме того, часть работы уже выполнена за нас и такие преобразования как Windows key <-> Left Alt уже заложены в существующие правила Layout options и нам требуется только добавить два специфичных для нас правила:
- преобразование кнопки enter --> delete
- преобразование кнопки eject -> print scr
Итак. Для создания правил нам необходимо применить файл macuser.patch к пакету Федора 11 xkeyboard-config.
From: Alexey Kuznetsov <ak@axet.ru>
Date: Wed Jun 10 18:39:12 MSD 2009
Subject: [PATCH] add macoptions
diff -ur --new-file xkeyboard-config-1.5/rules/base.o_s.part xkeyboard-config-1.5.new/rules/base.o_s.part
--- xkeyboard-config-1.5/rules/base.o_s.part 2009-06-10 18:19:40.000000000 +0400
+++ xkeyboard-config-1.5.new/rules/base.o_s.part 2009-06-10 18:31:07.000000000 +0400
@@ -1,3 +1,5 @@
+ macuser:enter = +macuser(enter)
+ macuser:print = +macuser(print)
altwin:menu = +altwin(menu)
altwin:meta_alt = +altwin(meta_alt)
altwin:ctrl_win = +altwin(ctrl_win)
diff -ur --new-file xkeyboard-config-1.5/rules/base.xml.in xkeyboard-config-1.5.new/rules/base.xml.in
--- xkeyboard-config-1.5/rules/base.xml.in 2009-06-10 18:19:40.000000000 +0400
+++ xkeyboard-config-1.5.new/rules/base.xml.in 2009-06-10 18:32:51.000000000 +0400
@@ -4596,6 +4596,24 @@
</configItem>
</option>
</group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>macuser</name>
+ <_description>Mac User definitions</_description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>macuser:enter</name>
+ <_description>Act enter key as delete key</_description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>macuser:print</name>
+ <_description>Act eject key as print key</_description>
+ </configItem>
+ </option>
+ </group>
<group allowMultipleSelection="false">
<!-- Using special PC keys (Win, Menu) to work as standard X keys (Super, Hyper, etc.) -->
<configItem>
diff -ur --new-file xkeyboard-config-1.5/rules/evdev.xml.in xkeyboard-config-1.5.new/rules/evdev.xml.in
--- xkeyboard-config-1.5/rules/evdev.xml.in 2009-01-24 03:51:19.000000000 +0300
+++ xkeyboard-config-1.5.new/rules/evdev.xml.in 2009-06-10 18:33:09.000000000 +0400
@@ -4596,6 +4596,24 @@
</configItem>
</option>
</group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>macuser</name>
+ <_description>Mac User definitions</_description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>macuser:enter</name>
+ <_description>Act enter key as delete key</_description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>macuser:print</name>
+ <_description>Act eject key as print key</_description>
+ </configItem>
+ </option>
+ </group>
<group allowMultipleSelection="false">
<!-- Using special PC keys (Win, Menu) to work as standard X keys (Super, Hyper, etc.) -->
<configItem>
diff -ur --new-file xkeyboard-config-1.5/symbols/macuser xkeyboard-config-1.5.new/symbols/macuser
--- xkeyboard-config-1.5/symbols/macuser 1970-01-01 03:00:00.000000000 +0300
+++ xkeyboard-config-1.5.new/symbols/macuser 2009-06-10 18:26:53.000000000 +0400
@@ -0,0 +1,13 @@
+// $XKeyboardConfig$
+
+// $XFree86: xc/programs/xkbcomp/symbols/macuser,v 1.5 2003/12/03 14:09:08 pascal Exp $
+
+partial modifier_keys
+xkb_symbols "enter" {
+ key <KPEN> { [ Delete ] };
+};
+
+partial modifier_keys
+xkb_symbols "print" {
+ key <I169> { [ Print, Sys_Req ] };
+};
diff -ur --new-file xkeyboard-config-1.5/symbols/Makefile.am xkeyboard-config-1.5.new/symbols/Makefile.am
--- xkeyboard-config-1.5/symbols/Makefile.am 2009-01-14 01:14:47.000000000 +0300
+++ xkeyboard-config-1.5.new/symbols/Makefile.am 2009-06-10 18:33:16.000000000 +0400
@@ -29,7 +29,7 @@
tj tr \
ua us uz vn \
za \
-altwin capslock compose ctrl eurosign group inet \
+macuser altwin capslock compose ctrl eurosign group inet \
keypad kpdl level3 level5 nbsp olpc shift srvr_ctrl typo
dir_data = $(dist_symbols_DATA)
diff -ur --new-file xkeyboard-config-1.5/symbols/Makefile.in xkeyboard-config-1.5.new/symbols/Makefile.in
--- xkeyboard-config-1.5/symbols/Makefile.in 2009-01-28 01:25:37.000000000 +0300
+++ xkeyboard-config-1.5.new/symbols/Makefile.in 2009-06-10 18:33:24.000000000 +0400
@@ -229,7 +229,7 @@
tj tr \
ua us uz vn \
za \
-altwin capslock compose ctrl eurosign group inet \
+macuser altwin capslock compose ctrl eurosign group inet \
keypad kpdl level3 level5 nbsp olpc shift srvr_ctrl typo
dir_data = $(dist_symbols_DATA)
diff -ur --new-file xkeyboard-config-1.5/symbols/symbols.dir xkeyboard-config-1.5.new/symbols/symbols.dir
--- xkeyboard-config-1.5/symbols/symbols.dir 2009-01-28 01:42:11.000000000 +0300
+++ xkeyboard-config-1.5.new/symbols/symbols.dir 2009-06-10 18:33:43.000000000 +0400
@@ -253,6 +253,8 @@
-dp----- a------- cn(basic)
--p----- a------- cn(tib)
--p----- a------- cn(tib_asciinum)
+--p----- -m------ macuser(enter)
+--p----- -m------ macuser(print)
--p----- -m------ altwin(meta_alt)
--p----- -m------ altwin(ctrl_win)
--p----- -m------ altwin(ctrl_alt_win)
Далее, изменить файл
xkeyboard-config.spec:
--- xkeyboard-config.spec 2009-04-09 09:31:10.000000000 +0400
+++ xkeyboard-config.spec.new 2009-06-11 18:14:51.000000000 +0400
@@ -20,6 +20,7 @@
Patch6: xkeyboard-config-1.5-evdevkbds.patch
Patch7: xkeyboard-config-1.5-suspend-hibernate.patch
Patch8: xkeyboard-config-1.5-terminate.patch
+Patch10: macuser.patch
BuildArch: noarch
После чего скомпилировать rpm-пакет командой
rpmbuild -ba xkeyboard-config.spec
После установки пакета необходимо в программе
gnome-keyboard-properties найти закладки Layouts/Layout Options. И изменить параметры:
- Mac User defenitions/Act enter key as delete key
- Mac User defenitions/Act eject key as print key