使用组合键打字吗?

使用组合键打字吗?

我是一名 Ubuntu 10.04 用户,正在寻找一种方法,例如,+当我按住Windows键(我认为Super在 Linux 世界中是这样称呼的)并按下K键时,我的计算机会输入一个字符。我需要这个功能在所有应用程序中都能正常工作。(我是一个打字障碍者,我需要让 Ubuntu 适应我的需求。)谢谢!

答案1

由于您想重新映射所有应用程序的按键,最好的选择是使用 xmodmap。它非常灵活且功能强大,但需要在终端中输入一些命令。

步骤 0-方法

X 服务器管理键盘和所有键事件并将其转换为所有应用程序的键代码。

方法是将修饰键(如 Super 键或右 Alt 键)映射为“模式切换”键,并告诉 X 服务器根据是否在按住 Mode 键的情况下按下某个键来生成不同的代码。

默认情况下,没有定义模式切换键,并且所有键都配置为在按下或不按下模式切换键时生成相同的代码。这很好,因为这意味着除了您明确覆盖的键之外,其他键都不会有不同的行为或需要额外的配置。

但是,我希望您考虑使用右 Alt 键作为模式切换,特别是如果您还使用 compiz,因为一些 compiz 插件映射了超级键快捷键(例如,窗口选择器、shift 切换器等)。如果您不喜欢通过键盘控制 compiz,那么 Super 就很好。

对于 xmodmap,超级键被标识为 Super_L 或 Super_R。您需要选择一个用作模式切换键。或者,右 alt 键是 Alt_R。您可以通过运行 xev 并按下键盘上的必要键来确认这些。请参阅这个帖子步骤。

步骤 1 - 设置修改器贴图

  1. 打开终端 ( Applications -> Accesories -> Terminal) 并运行以下命令来创建文件当前的键绑定。我们将以此作为起点。

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. 在您最喜欢的文本编辑器中打开它。gedit curkeys.map &在 gedit 中打开它。在文件末尾,您将看到如下几行:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. 删除以“xmodmap: up to 4...”开头的行

  4. 编辑修饰符映射,使其看起来像这样。在每行开头添加单词“add”,并在修饰符名称后插入“=”。然后删除括号和逗号中的代码。另请注意,由于它是空的,我已经Mode_switch从一行mod5移动到mod3另一行。修改后的表格应如下所示 - 实际内容将与下面的内容略有不同(取决于您的键盘布局)。

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. 重新映射物理模式切换键。在末尾添加如下一行(如果需要,将 Super_L 替换为 Super_R 或 Alt_R)。

    keysym Super_L = Mode_switch
    
  6. 从任何修饰符定义中删除键名 (Super_L)。对于 Super_L,这意味着将其从 mod4 行中删除。

    add mod4    =    Super_R Hyper_L 
    

    现在,右侧的“Super”键仍将充当普通超级键,而左侧的键将具有特殊属性。

  7. 现在我们需要重新映射按键,以产生不同的代码,无论是否在按住 Super_L 时按下这些按键。我们文件中以 开头的每一行都keycode指定了每个按键的 4 个键符,这些键符将根据是否按下 Mod1(Shift 键)和模式切换键而生成。关联

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    如果我们想让 Super_L+k 按键生成一个“+”键,那么我们需要修改它以便读取

    keycode  45 = k K plus plus
    

    最后一个加号也将 Shift+Super_L+k 映射到加号,但可以将其映射到其他内容。每个键只有一行需要修改。编辑更多行以重新映射更多键 - 保留前 2 个条目不变以保留正常的按键行为。

  8. 保存文件并退出编辑器。

  9. 通过在终端中运行以下命令来安装键盘映射。第一个命令为本次会话设置键盘映射,第二个命令使键盘映射在以后的会话中永久生效。

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. 您可以通过按下修改后的键(例如 Super_L + k)立即进行测试。

步骤 3 - 添加/修改地图

一旦安装了修改后的地图,就可以轻松添加新的按键。

  1. 使用查找键码和键符号

  2. 通过运行此命令来映射键来测试它:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    用适当的值替换尖括号中的项目(如<code> <base>等)。

  3. 备份curkeys.map文件。

  4. 打开curkeys.map并编辑相应键代码的行。
  5. 使用以下命令重新应用(如果已执行第 2 步,则第一个命令不是必需的)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

注:1:在键盘快捷键中所做的修改(例如通过System -> Preferences -> Keyboard Shortcuts)会影响修饰符映射,并且通常会在下次登录时丢失。因此请避免这种情况。

笔记2:使用此方法时,我有时会收到类似这样的错误消息。我不知道这意味着什么,但这些通常无害。

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

有 xmodmap 的详细帮助这里

相关内容