使用组合键输入?


12

我是Ubuntu 10.04用户,他正在寻找一种方法,例如,当我按住WindowsKey(我认为它Super在Linux世界中被称为)并按下K键时,使我的计算机键入“ +”字符。我需要在所有应用程序中使用它。(我是一个有打字障碍的人,我需要使Ubuntu适应我的需求。)谢谢!

Answers:


15

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

步骤0-方法

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

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

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

但是,我希望您考虑使用Right 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:最多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_R或Alt_R替换Super_L)。

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

    add mod4    =    Super_R Hyper_L 
    

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

  7. 现在,无论是否在按住Super_L的同时按下键,我们都需要重新映射键以产生不同的代码。我们文件中的每一行keycode均以是否按下Mod1(Shift键)和Mode切换键为要生成的每个键指定4个键符号。(link

    !...........................................................................
    !        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映射到加号,但是可以将其映射到其他内容。对于每个键,只有1行可以修改。编辑更多行以重新映射更多键-完整保留前2个条目以保留正常的按键行为。

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

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

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

第3步-添加/修改地图

一旦安装了修改的映射,就可以轻松添加新密钥。

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

  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的详细帮助,请参见此处


这有什么运气吗?如果这无济于事或以任何方式不清楚请发表评论,我将进行修改并使其更有用。
koushik 2010年

1
请注意,在Linux Mint 17 Xfce(或至少在那里)中,它必须是~/.Xmodmap~/.xmodmap将被忽略。
zbr 2014年

2
不要忘记clear根据unix.stackexchange.com/a/4526/2512
Andy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.