AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 5095
In Process
Amanda Jones
Amanda Jones
Asked: 2010-10-03 16:59:33 +0800 CST2010-10-03 16:59:33 +0800 CST 2010-10-03 16:59:33 +0800 CST

使用组合键打字?

  • 772

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

10.04 keyboard-layout accessibility
  • 1 1 个回答
  • 4567 Views

1 个回答

  • Voted
  1. koushik
    2010-10-03T22:24:53+08:002010-10-03T22:24:53+08:00

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

    步骤 0 - 方法

    X-server 管理键盘和所有键事件,并将其转换为所有应用程序的键码。

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

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

    但是,我希望您考虑使用 Right Alt 键作为模式切换,特别是如果您还使用 compiz,因为一些 compiz 插件映射超级键快捷方式(例如,窗口选择器、移位切换器等)。如果您不热衷于通过键盘控制 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 
      

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

    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 映射到加号,但这可以映射到其他东西。对于每个键,恰好有 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 的详细帮助。

    • 15

相关问题

  • 使用 dpkg 手动安装软件包是否会阻止未来的升级路径?

  • 如何完全删除 Ruby + Rails + Gems?

  • 从 8.04 LTS 升级到 10.04 LTS 的体验?

  • 删除在线状态菜单,但保留注销菜单?

  • 什么可能会阻止 xrandr 屏幕之间的鼠标移动?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve