4. Xmodmap 理论和 Xmodmap 解决方案

如果您想编辑并制作自己的 .Xmodmap 键盘布局定义,我将解释 .Xmodmap 文件中的一行,以明确您应该做什么。

此解释可用于所有键码。例如,以下行

keycode 0x11 = 8 asterisk aacute 8

(注意:键码 0x11 来源于 “xkeycaps” 实用程序;您也可以使用 X Window “xev” 实用程序来探索键盘难题。)

表示第一对,默认的一对,(数字 “8” 和 “asterisk”)在您按下键码 0x11(“8”)时将显示数字 “8”,在按下 “shift” 键时将显示 asterisk。按下 Scroll Lock 键后,还有另一个定义:ISO_NEXT_GROUP,这意味着当您按下默认的 “8” 键时,不会显示 “8”,而是显示 aacute (�);当您按下 “shift” 键时,将显示数字 “8”。因此,如果您更改 “aacute” 和 “8”,那么您放入 “aacute” 和 “8” 位置的任何内容都将被显示,例如

keycode 0x11 = 8 asterisk semicolon colon

将在您按下 Scroll Lock 键后,在您的 0x11 键码中给出 “semicolon” 和 “colon”。

ISO_NEXT_GROUP 由另一行定义。如果未定义此行,您将只能使用两个定义(“8” 和 “asterisk”) - 请查看我的 .Xmodmap 文件。如果您删除 ISO_NEXT_GROUP(右侧的下一对定义),您将只有一个键盘定义组(“8” 和 “asterisk”)。编辑 .Xmodmap 文件时要小心。您不得删除启用 Scroll Lock 功能的定义,除非您知道自己在做什么(或者您通过右 Alt 键映射第二个键盘)。这些行例如

keycode 0x4e = ISO_Next_Group

add mod5 = ISO_Next_Group,

等等。您还必须记住 Unix 是区分大小写的。如果您想了解更多关于键码的信息,请安装 “xkeycaps” 包或使用 “xev”。

4.1. 用于斯洛伐克语打字机布局的 .Xmodmap 示例文件

以下 .Xmodmap 示例文件包含两组键盘定义,您可以将其用作默认或 XKB 键盘选择的补充。您可以将此文件用作构建自己的键盘映射的示例。此文件需要根据您的特定目的进行编辑,此处仅作为提示。如果您将 “y Y” 等字母更改为 “t T”,那么在您通常有 “y Y” 键的键盘位置,您将拥有 “t T” 等。因此,您可以看到,通过这种方式,您可以几乎完全控制您的键盘 - 这在 Microsoft Windows 操作系统中只能通过特殊且肯定昂贵的程序才能实现。使用 Scroll Lock 键在第一组和第二组键定义之间切换。 _______________________cut_here_________________________

keycode 0x09 = Escape

keycode 0x43 = F1 F11 F1 Multi_key

keycode 0x44 = F2 F12 F2 F12

keycode 0x45 = F3 F13 F3 F13 idiaeresis

keycode 0x46 = F4 F14 F4 F14 mu yen

keycode 0x47 = F5 F15 F5 F15 guillemotright guillemotleft

keycode 0x48 = F6 F16 F6 F16 ograve

keycode 0x49 = F7 F17 F7 dead_abovedot oacute

keycode 0x4A = F8 F18 F8 dead_breve acute

keycode 0x4B = F9 F19 F9 dead_cedilla ugrave

keycode 0x4C = F10 F20 F10 dead_ogonek

keycode 0x5F = F11 F21 dead_acute dead_caron

keycode 0x60 = F12 F22 dead_abovering dead_diaeresis

keycode 0x6F = Print Execute dead_iota

keycode 0x4E = ISO_Next_Group

keycode 0x6E = Pause

keycode 0x31 = grave asciitilde semicolon dead_diaeresis

keycode 0x0A = 1 exclam plus 1

keycode 0x0B = 2 at lcaron 2

keycode 0x0C = 3 numbersign scaron 3

keycode 0x0D = 4 dollar ccaron 4

keycode 0x0E = 5 percent tcaron 5

keycode 0x0F = 6 asciicircum zcaron 6

keycode 0x10 = 7 ampersand yacute 7

keycode 0x11 = 8 asterisk aacute 8

keycode 0x12 = 9 parenleft iacute 9

keycode 0x13 = 0 parenright eacute 0

keycode 0x14 = minus underscore equal percent

keycode 0x15 = equal plus dead_acute dead_caron

keycode 0x33 = backslash bar ncaron parenright

keycode 0x16 = BackSpace

keycode 0x6A = Insert

keycode 0x61 = Home

keycode 0x63 = Prior

keycode 0x4D = Num_Lock Pointer_EnableKeys

keycode 0x70 = KP_Divide slash

keycode 0x3F = KP_Multiply asterisk

keycode 0x52 = KP_Subtract minus

keycode 0x17 = Tab ISO_Left_Tab

keycode 0x18 = q Q

keycode 0x19 = w W

keycode 0x1A = e E

keycode 0x1B = r R

keycode 0x1C = t T

keycode 0x1D = y Y z Z

keycode 0x1E = u U

keycode 0x1F = i I

keycode 0x20 = o O

keycode 0x21 = p P

keycode 0x22 = bracketleft braceleft uacute slash

keycode 0x23 = bracketright braceright adiaeresis parenleft

keycode 0x24 = Return

keycode 0x6B = Delete

keycode 0x67 = End

keycode 0x69 = Next

keycode 0x4F = KP_Home 7 KP_Home

keycode 0x50 = KP_Up 8

keycode 0x51 = KP_Prior 9

keycode 0x56 = KP_Add plus

keycode 0x42 = Caps_Lock

keycode 0x26 = a A

keycode 0x27 = s S

keycode 0x28 = d D

keycode 0x29 = f F

keycode 0x2A = g G

keycode 0x2B = h H

keycode 0x2C = j J

keycode 0x2D = k K

keycode 0x2E = l L

keycode 0x2F = semicolon colon ocircumflex quotedbl

keycode 0x30 = apostrophe quotedbl section exclam

keycode 0x53 = KP_Left 4

keycode 0x54 = KP_Begin 5

keycode 0x55 = KP_Right 6

keycode 0x32 = Shift_L ISO_Next_Group

keycode 0x34 = z Z y Y

keycode 0x35 = x X

keycode 0x36 = c C

keycode 0x37 = v V

keycode 0x38 = b B

keycode 0x39 = n N

keycode 0x3A = m M

keycode 0x3B = comma less comma question

keycode 0x3C = period greater period colon

keycode 0x3D = slash question minus underscore

keycode 0x3E = Shift_R

keycode 0x62 = Up

keycode 0x57 = KP_End 1

keycode 0x58 = KP_Down 2

keycode 0x59 = KP_Next 3

keycode 0x6C = KP_Enter Return

keycode 0x25 = Control_L ISO_Next_Group

!keycode 0x40 = Alt_L Meta_L

keycode 0x40 = Meta_L Alt_L

keycode 0x41 = space

keycode 0x71 = Alt_R Meta_R

keycode 0x6D = Control_R

keycode 0x64 = Left

keycode 0x68 = Down

keycode 0x66 = Right

keycode 0x5A = KP_Insert 0

keycode 0x5B = KP_Delete period

!keysym Alt_L = Meta_L

!keysym F12 = Multi_key

clear Shift

!clear Lock

clear Control

clear Mod1

clear Mod2

clear Mod3

clear Mod4

clear Mod5

add Shift = Shift_L Shift_R

add Control = Control_L Control_R

!add Mod1 = Alt_L Alt_R

add Mod1 = Meta_L Alt_R

add Mod2 = Num_Lock

add Mod5 = ISO_Next_Group

!add Mod1 =

!add Mod2 = Alt_R Alt_L Mode_switch

keycode 0x73 = ISO_Next_Group

keycode 0x74 = dead_acute dead_diaeresis

keycode 0x75 = dead_caron dead_abovering

_____________________________cut_here_____________________________