以与外部键盘一致的方式交换<esc>和<caps lock>


8

我有一个名为〜/ .speedswapper的文件,其中包含以下内容:

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

...当我跑步时xmodmap ~/.speedswapper,这会切换escCaps Lock键。我的〜/ .profile文件中有这一行,因此每当我登录时,这些键都会切换。

但是,如果我插入外部USB键盘,则该设置似乎不会持久。我的笔记本电脑的键盘工作得很好,但是我必须再次运行命令才能使外部键盘切换两个键。幸运的是,这样做似乎并没有影响我笔记本电脑的键盘-它们似乎是同步的。

一种解决方案是在插入外部键盘时找到某种方式来运行xmodmap命令,但是如果它更健壮,我将对另一种键盘交换解决方案持开放态度。操作系统是Ubuntu 13.04。

鉴于justbrowsing的评论,看来可以通过编写udev规则来实现-我认为我必须使用RUN选项,并且应该在/ dev / hidraw0或/ dev / hidraw1上触发它们,当我插入键盘时会出现...,但我仍在尝试绕开这个概念,因此,我感谢任何知道udev在做什么的人的帮助。


请考虑为此编写udev规则
justbrowsing

Answers:


3

由于您的命令中有此命令~/.profile,因此在您登录时仅会执行一次。一种解决方法不是很好,是将命令放置在您的命令中,~/.bashrc以便每次打开终端时都会运行该命令。

更好的解决方案是定义一个udev规则,该规则将xmodmap在插入USB键盘时执行(我使用的是为USB键盘返回的值,因此您需要编辑此解决方案以适合您的情况):

  1. 获取USB键盘的详细信息。在插入键盘的情况下运行以下命令:

    $ /lib/udev/findkeyboards | grep USB
    USB keyboard: input/event6
    
  2. 要编写udev规则,您需要知道应该与之匹配的规则。您可以通过搜索条目的输出来udevadm info --export-db获得该event6条目,或者像这样直接解析它:

    udevadm info --export-db | perl -ne 'BEGIN{$/="\n\n"}print if /event6/'
    

    这将返回几行文本,其中包括我们将要使用的文本:

    E: ID_MODEL_ID=0002
    [...]
    E: ID_VENDOR_ID=1c4f
    
  3. udev在使用X程序之类的程序时变得复杂xmodmap,在导出$DISPLAY$XAUTHORITY。无论如何,我无法使其与您的方法一起使用,因此我的解决方案keymap改为使用。首先,您需要找出Esc和的关键代码Caps Lock,您可以通过运行

    sudo /lib/udev/keymap -i input/event6
    

    然后按相关的键。在我的系统上,这返回:

    scan code: 0x70029   key code: esc
    scan code: 0x70039   key code: capslock
    
  4. 创建一个包含以下行的新键盘映射规则:

    0x70029 capslock
    0x70039 esc
    

    并将其另存为/lib/udev/keymaps/speedswap

  5. 定义一个新udev规则。创建一个名为的文件,/etc/udev/rules.d/95-speedswap.rules并向其中添加以下行:

    ACTION=="add", 
    SUBSYSTEM=="input", 
    ATTRS{idVendor}=="1c4f", 
    ATTRS{idProduct}=="0002", 
    RUN+="keymap $name speedswap"
    

至少在我的系统上,应该这样做,插入我的外部USB会使Esc行为类似Caps Lock反之亦然


看起来不错,明天或后天再试试。我希望通过键盘无关的方式来执行此操作,但这比真正的需要更多的是“整洁” 。
evilsoup

@evilsoup您应该能够制定更通用的规则,尝试udevadm info --export-db使用一些键盘,看看它们的共同点。也许ID_MODEL=USB_KeykoardID_USB_DRIVER=usbhid但这可能还会触发使用错误设备的规则。由你决定。
terdon
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.