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 / 问题 / 1229540
Accepted
Jdclark
Jdclark
Asked: 2020-04-23 09:48:58 +0800 CST2020-04-23 09:48:58 +0800 CST 2020-04-23 09:48:58 +0800 CST

按下后如何暂时禁用键盘上的某个键?

  • 772

我把啤酒洒在我的机械键盘上,因为每当我按下它时它往往会重复“ a ”键(是的,我已经清洁过几次,使用过酒精等)。我尝试使用“弹跳键”来缓解此问题,但此功能会在按下所有键后暂时禁用它们。换句话说,“弹跳键”会干扰我在需要键入带有重复字母的单词(< 就像单词“letter”中的“t”)或重复aaa快速按退格键时快速键入的能力。

(好的,我不会在其余文本中留下重复,但你可以看到它以 m a a denning 频率发生)

如果有帮助,我使用 xev 来准确确定操作系统正在接收的命令序列,看起来每次“a”重复时都是因为键盘多次发送所需的序列(KeyPress 后跟 KeyRelease,然后 KeyPress其次是 KeyRelease 再次)。换句话说,键没有停留在“KeyPress”状态。它在重复自己,好像我多次按下并释放它一样。

我见过其他人问同样的问题,但解决方案实际上并不是我正在寻找的。例如,在这个问题的第一个答案中提出的解决方案禁用自动重复,但这对我不起作用,因为“a”没有陷入“按下”状态。同一问题中的第二个答案也不起作用,因为在按下问题键后它会禁用整个键盘。我只想暂时禁用“a”键,并且只禁用“a”键一段很短的时间(~50ms)。

幸运的是,我在打字时很少需要重复字母“a”,所以即使是使用自动更正之类的解决方案也对我有用。最好,我想使用一个使用 xbindkeys 的解决方案,因为我已经在使用该包来重新映射我的鼠标按钮。

编辑:针对下面的评论,以下是“xinput list”和“xev”的输出:

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SINOWEALTH Game Mouse                     id=9    [slave  pointer  (2)]
⎜   ↳ EST Gaming keyboard                       id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ SINOWEALTH Game Mouse Keyboard            id=10   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=11   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=13   [slave  keyboard (3)]
    ↳ Eee PC WMI hotkeys                        id=15   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=16   [slave  keyboard (3)]

$ xev
KeyPress event, serial 37, synthetic NO, window 0x7c00001,
    root 0x4e5, subw 0x0, time 188722500, (165,-16), root:(4636,676),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x7c00001,
    root 0x4e5, subw 0x0, time 188722576, (165,-16), root:(4636,676),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

在尝试实施@Raffa 的建议时,我使用“3”作为键盘 ID,并将键码保留为 38。但是,键仍然重复。

keyboard xmodmap xdotool xbindkeys
  • 1 1 个回答
  • 326 Views

1 个回答

  • Voted
  1. Best Answer
    Raffa
    2020-04-23T14:18:51+08:002020-04-23T14:18:51+08:00

    bash在脚本文件中试试这个:

    #!/bin/bash
    
    xinput test 11 |
    
    while read pkc
    do
       if [[ "$pkc" =~ "key press   38" ]]
       then
            xmodmap -e 'keycode 38 = ';
            sleep 0.5;
            xmodmap -e 'keycode 38 = a A';
       fi
    done
    
    • 将数字更改11为xinput test 11您的键盘设备编号。你可以通过运行找到这个号码xinput list。您可能需要检查该id数字是否适合您的键盘。为此,请选择前面的键盘id编号,然后通过运行检查终端并按键盘上的 。如果您得到这样的输出,那么这是您当前键盘的正确数字,如果没有输出,请继续测试其他数字,直到看到输出。slave keyboardidxinput test id_numberakey press 38idid

    • 将 nuber 38in"key press 38"和xmodmap -e 'keycode 38 = ';and更改xmodmap -e 'keycode 38 = a A';为密钥的密钥代码a。xev您可以通过运行并按a键找到此号码。

    • 将数字更改为所需的秒数,以禁用该0.5键。sleep 0.5;a


    创建和使用脚本文件的步骤:

    1. 通过在终端中运行以下命令,在编辑器中创建并打开文件:
    nano ~/no_aa.sh
    
    1. 将上述代码(修改后)复制并粘贴到编辑器中。

    2. 按Ctrl+保存脚本文件并退出编辑器,X然后按Y。

    3. 通过在终端中运行以下命令使脚本文件可执行:

    chmod +x ~/no_aa.sh
    
    1. 通过在终端中运行以下命令来运行脚本:
    bash ~/no_aa.sh
    
    1. 保持终端打开并a在其他应用程序中测试密钥,例如在 LibreOffice 编写器中编写。
    • 3

相关问题

  • 有哪些有用的键盘快捷键?[关闭]

  • 如何在 Compiz->Commands 中获得超过 12 个命令?[关闭]

  • 输入语言切换键只接受 shift-alt 而不是 alt-shift [关闭]

  • 如何在键盘上映射未映射的键?[关闭]

  • 如何重置我的键盘布局?

Sidebar

Stats

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

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

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

    • 24 个回答
  • Marko Smith

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

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +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
    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