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 / 问题 / 1289458
Accepted
Simon
Simon
Asked: 2020-11-04 17:16:31 +0800 CST2020-11-04 17:16:31 +0800 CST 2020-11-04 17:16:31 +0800 CST

键映射:组合键到组合键

  • 772

简而言之,我想将 Ctrl+H/L 映射到 Ctrl+Left/Right autokey,而xbindkeys+ xdotool/xvkbd不起作用。详情如下:

我现在autokey用来实现映射,效果很好,但在某些应用程序中它无法工作,因为它autokey是一个高级应用程序。所以我想实现一个低级的键映射。

应用程序不能这样做xmodmap,xkb因为 Ctrl+Left/Right 不是键符。我试过xbindkeys+ xdotool。以下配置脚本xbindkeys不起作用:(为了简化问题,我将键映射到“a”而不是 Ctrl+Left/Right)

#.xbindkeys
"xdotool key a"
Control+h

我认为这是因为按下的键会影响 的执行xdotool,因为以下工作:

#.xbindkeys
"xdotool key --clearmodifier a"
Control+h+Release

但是我就是不想在松开按键的时候触发命令,我想让它在按键的时候立即生效,所以我把配置改成:

#.xbindkeys
"xdotool keyup h; xdotool key --clearmodifier a"
Control+h

这个配置还是可以的,但是不能实现自动重复,就是长按键盘不松开,命令只执行一次。我也尝试过xvkbd,但现在确实有效:

#.xbindkeys
"xvkbd -text 'a'"
Control+h

谁能给我一些帮助来实现我的关键地图?

keyboard-layout shortcut-keys xkb xdotool
  • 1 1 个回答
  • 465 Views

1 个回答

  • Voted
  1. Best Answer
    Simon
    2020-11-05T05:24:15+08:002020-11-05T05:24:15+08:00

    对不起,我低估了xkb的力量,它可以做的比我想象的要多得多。它是 X-server 最基本、最全面的键盘管理器。我已经使用 xkb 满足了我的要求。如果您也对如何操作感兴趣,可以在 Arch Linux Wiki 上找到一个非常有用的教程。也欢迎就这个话题发帖。

    以下是我案例的详细信息(尽管我强烈建议阅读链接页面,因为它非常有用且不会太长):

    首先,获取您当前的键盘布局:

    xkbcomp $DISPLAY ~/.config.xkb
    

    然后.config.xkb用一些编辑器打开文件,比如 vscode。您可以看到该文件由 5 个块组成(键码、类型、兼容性、符号、几何):

    xkb_keymap {
    xkb_keycodes "..." {...};
    xkb_types "..." {...};
    xkb_compatibility "..." {...};
    xkb_symbols "..." {...};
    xkb_geometry "..." {...};
    }
    

    在xkb_types块中,添加:

    type "newType" {
        modifiers= Shift+Control;
        map[Shift]= Level2;
        map[Control]= Level3;
        map[Shift+Control]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Control";
    };
    

    在xkb_symbols块中,找到以下两个子块:

    key <AC06> {
        type= "ALPHABETIC",
        symbols[Group1]= [               h,               H ]
    };
    key <AC09> {
        type= "ALPHABETIC",
        symbols[Group1]= [               l,               L ]
    };
    

    并将这两个子块更改为:

    key <AC06> {
        type= "newType",
        symbols[Group1]= [               h,               H,            Left ],
        actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<LEFT>) ]
    };
    key <AC09> {
        type= "newType",
        symbols[Group1]= [               l,               L,            Right ],
        actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<RGHT>) ]
    };
    

    最后,将键盘布局重置为修改后的布局:

    xkbcomp ~/.config.xkb $DISPLAY
    

    附录

    如果有人想知道如何映射到左/右而不是 Control+左/右,我添加了附录。

    唯一的变化是将块中的子块替换xkb_symbols为

    key <AC06> {
        type= "newType",
        symbols[Group1]= [               h,               H,            Left ],
        actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<LEFT>, clearmods=Control) ]
    }
    
    • 1

相关问题

  • 如何阻止“gnome-screensaver”将我的键盘重置为默认布局?

  • 如何在 Ubuntu 中眨眼间显示桌面?[关闭]

  • 输入语言切换键只接受 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