如何重新映射 Logitech MX400 上的搜索按钮?

如何重新映射 Logitech MX400 上的搜索按钮?

我有一台罗技 MX400 无线鼠标。它有一个搜索按钮,我想用它来粘贴(而不是非常敏感但很难按的滚轮)。我已经用 xbindkeys 重新映射了其他按钮,并使用 xev 查找按钮按下代码,但这对搜索按钮不起作用。使用 xev 并单击搜索按钮,我得到以下事件

FocusOut event, serial 34, synthetic NO, window 0x3c00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 34, synthetic NO, window 0x3c00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 34, synthetic NO, window 0x0,
    keys:  4294967275 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

PropertyNotify event, serial 34, synthetic NO, window 0x3c00001,
    atom 0x1d7 (_NET_WM_ICON_GEOMETRY), time 23653064, state PropertyNewValue

没有 ButtonPress 事件。似乎搜索按钮在 X 事件以下的级别被拦截。有什么想法吗?我有 ubuntu 12.04。Ubuntu 实际上看到了点击并生成了一个搜索对话框,但在 xev 中没有点击事件的踪迹。

编辑

我检查了 xmodmap 提供的方法。我的.Xmodmap现在包含以下行

keycode 225 = XF86Paste NoSymbol XF86Paste``

现在运行xmodmap ~/.Xmodmap会完全禁用该按钮(或者至少,按下它不会得到任何结果)。我试过了xmodmap -pke,它打印出:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

很奇怪。所有其他条目的格式都类似。我接近解决方案了,但仍然有些奇怪。

编辑2

我尝试运行 xinput(从未听说过此命令。太神奇了)。Logitech 有两个条目。以下是列出每个条目的输出(ID 9 和 10)

Logitech USB Receiver                       id=9    [slave  pointer  (2)]
    Reporting 7 classes:
        Class originated from: 9. Type: XIButtonClass
        Buttons supported: 24
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
        Button state:
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 3:
          Label: Rel Vert Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0
        Class originated from: 9. Type: XIScrollClass
        Scroll info for Valuator 3
          type: 1 (vertical)
          increment: -1.000000
          flags: 0x2 ( preferred )


Logitech USB Receiver                       id=10   [slave  pointer  (2)]
    Reporting 6 classes:
        Class originated from: 10. Type: XIButtonClass
        Buttons supported: 7
        Button labels: "Button 0" "Button Unknown" "Button Unknown" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right"
        Button state:
        Class originated from: 10. Type: XIKeyClass
        Keycodes supported: 248
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0

测试设备 9 无法对按钮执行任何操作。测试设备 10 却可以工作,这是我单击时的输出

$ xinput test 10
key press   225 
key release 225 
key press   225 
key release 225 
key press   225 
key release 225

因此看起来鼠标在这方面充当了键盘的作用,但由于某种原因,xmodmap 在接收到键 225 时不执行任何操作。

** 编辑 **

我可以确认每次单击按钮时添加keycode 225 = a都会打印a。因此问题似乎与 XF86Paste 的实际处理方式有关。我正在发送它,但它没有粘贴。

答案1

为了模拟键盘事件,我建议你使用这个伟大的工具工具安装 xdotool

1. 安装xdotool通过终端(CTRL++ ALTT

sudo apt-get install xdotool

或使用软件中心安装 xdotool

2. 创建脚本CTRL使用 xdotool 模拟和的按键事件v。在终端中:

mkdir -p ~/bin  
gedit ~/bin/fakepaste

将以下内容复制到打开的编辑器窗口中。复制代码后保存,然后关闭它:

#!/bin/sh
exec /usr/bin/xdotool key CTRL+V  
EOF

现在使脚本可执行:

chmod +x ~/bin/fakepaste

3. 退出并登录以重新加载您的小路

4. 创建自定义快捷方式

前往System Settings,然后前往Keyboard,然后Shortcuts

按下+对话框底部的按钮。为您即将创建的快捷方式提供一个名称,并为命令填写:fakepaste。按下OK

您将在新的快捷键旁边看到disabled。单击该文本,然后按下要分配给键盘模拟的键。

您现在就可以使用搜索键进行粘贴了!

答案2

使用 xdotool 的 xbindkeys 解决方案

对于此解决方案,您将xbindkeys需要xdotool

杀死 xbindkeys 并转储你的按钮配置

killall xbindkeys

xbindkeys --defaults >> ~/.xbindkeysrc

添加新绑定

现在你可以修改此文件来添加自定义绑定,这些绑定具有以下形式

"<command>"
  <key combination>

所以如果你添加

"gedit"
  m:0x0 +b:4

gedit每次向上滚动时都会打开。

现在您可以尝试以下方法之一,选择最适合您的方法。在所有情况下xdotool click 2都会进行模拟,这是按下鼠标中键,这将粘贴内部和外部终端。

  1. 拦截鼠标发出的 225

    "xdotool click 2"
      m:0x0 +b:225
    
  2. 一般情况下拦截键码 225

    "xdotool click 2"
      c:225
    
  3. 替换所有XF86Search事件(首先将鼠标设置恢复为原始设置,以便您获得返回XF86Search值):

    "xdotool click 2"
      XF86Search
    

启动 xbindkeys 并测试

跑步

xbindkeys

看看它是否有效。

相关内容