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


10

我有一个Logitech 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有两个条目。这是列出每个列表的输出(标识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的实际处理方式有关。我正在发送它,但没有粘贴。


xbindkeys准备好在启动时运行吗?您可以禁用它,然后再试一次吗?
赛斯(Seth)2013年

@iSeth:被杀死的xbindkeys。再次尝试,结果相同。
Stefano Borini

打开终端并运行,tail -f /var/log/dmesg然后尝试按按钮。您是否获得任何有关按键/按钮的输出?
赛斯

1
在发布另一个废话答案之前...使用找出您的鼠标的输入ID,xinput list然后使用找出您的搜索键的按钮代码xinput test <MOUSE ID>。这样行吗?
mrcktz

1
似乎存在一个已确认的错误,可以xev显示XF86Paste / XF86Copy事件,但没有任何反应。这意味着您必须使用组合键CTRL + v进行粘贴。Xmodmap将按钮1:1映射,但是您可以使用键盘快捷键设置在按键时触发命令的执行(请参阅我的答案)。
mrcktz

Answers:


3

为了模拟键盘事件,我建议您使用出色的工具xdotool安装xdotool

1.xdotool通过端子(CTRL+ ALT+ T安装

sudo apt-get install xdotool

或使用软件中心安装xdotool

2.创建一个脚本,使用xdotool效仿按下按键的事件CTRLv。在终端中:

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

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

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

现在使脚本可执行:

chmod +x ~/bin/fakepaste

3.注销并登录以重新加载PATH

4.创建自定义快捷方式

System Settings,然后去Keyboard,然后Shortcuts

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

在新快捷方式旁边,您会看到disabled。单击该文本,然后按要分配给键盘仿真的键。

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


1
我看不到这对鼠标按钮有什么帮助,它会更改键盘快捷键。
赛斯

2
@iSeth:关键是事实证明罗技鼠标既是键盘又是鼠标。除了搜索按钮,它是所有事物的鼠标,它像键盘一样工作
Stefano Borini 2013年

2

xdotool的xbindkeys解决方案

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

杀死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

看看是否可行。


我想告诉您,我认为你们俩应该得到赏金,因为你们对我的帮助很大。我仍然不知道您的解决方案是否有效,我明天将对其进行测试,但是赏金期满了,我也不想浪费它。只要我有足够的积分,我就会给予您相同的赏金。谢谢
Stefano Borini

好的,谢谢(尽管我不知道是否可行)。很高兴能为您提供帮助;)
Gerhard Burger 2013年

嗯...你是对的。我只能在这里奖一个。不用担心,只要我有足够的代表,我就会答应您的其他答案之一。
Stefano Borini

不,不,不要打扰。我很好;)
Gerhard Burger 2013年
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.