如何为 Trackpoint、Trackpad 和 Mouse 分别为设置 xbindkey?

如何为 Trackpoint、Trackpad 和 Mouse 分别为设置 xbindkey?

我已经在 kUbuntu 18.04 上通过 xbindkeys 配置了我的 Logitech MX-Revolution 鼠标。我在滚轮上设置了额外的按钮(左/右滑动)来播放下一首/上一首歌曲。

我的问题是,我的 Logitech 鼠标上的按键映射相当于在触控板上左右滚动(手指滑动)。由于我的联想 Thinkpad 也有一个带物理鼠标按钮的轨迹点,因此这也相当于在左右移动轨迹点时按下鼠标中键。

我该如何告诉 xbindkeys,如果我使用 Logitech 鼠标上的按键事件,它应该只播放下一首/上一首歌曲?我该如何为不同的输入设备分别设置 xbindkeys?

这是我的.xbindkeysrc 文件:

######### MultimediaControl #########

# backward button => previous song       
"xte 'key XF86AudioPrev'"                
   m:0x0 + b:6                                   

# forward button => next song            
"xte 'key XF86AudioNext'"                
   m:0x0 + b:7

#################################

提前致谢!

答案1

有一个解决方法使用出色的工具xinput

就您而言,您总共有 3 个鼠标设备,其中 2 个是内置的,一个是外置鼠标。

首先,我们需要获取这 3 个设备的 ID。

  1. 跑步xinput list

示例输出:

pratap@i7-6550U:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ PixArt USB Optical Mouse                  id=10   [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=12   [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver Mouse               id=16   [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver Consumer Control    id=17   [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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Toshiba input device                      id=13   [slave  keyboard (3)]
    ↳ Logitech USB Receiver                     id=14   [slave  keyboard (3)]
    ↳ Logitech USB Receiver System Control      id=15   [slave  keyboard (3)]
    ↳ Logitech USB Receiver Consumer Control    id=18   [slave  keyboard (3)]
pratap@i7-6550U:~$ 

我有 3 个设备,都是鼠标输入

  1. PixArt USB 光电鼠标 id=10
  2. ETPS/2 Elantech 触摸板 id=12
  3. 罗技 USB 接收器鼠标 id=16

例如,当 Logitech USB 接收器鼠标的 id=16 鼠标滚轮向上和鼠标滚轮向下时,我想绑定两个命令,即按钮 b:4 和 b:5

如果我的~/.xbindkeysrc内容如下所示,则所有 3 个设备将执行相同的功能。

######### MultimediaControl #########

# backward button => my Command       
"gnome-control-center"                
   m:0x0 + b:4                                   

# forward button => my Command            
"gnome-tweaks"                
   m:0x0 + b:5

#####################################
  1. 运行xmodmap -pp并查看有多少个按钮可用。

man xmodmap

       -pp     This option indicates that the current  pointer  map  should  be  printed  on  the
           standard output.

示例输出xmodmap -pp

pratap@i7-6550U:~$ xmodmap -pp
There are 20 pointer buttons defined.

    Physical        Button
     Button          Code
        1              1
        2              2
        3              3
        4              4
        5              5
        6              6
        7              7
        8              8
        9              9
       10             10
       11             11
       12             12
       13             13
       14             14
       15             15
       16             16
       17             17
       18             18
       19             19
       20             20

pratap@i7-6550U:~$ 

这意味着即使我们没有 20 个物理按钮,我们也可以配置特定按钮来执行这 20 个按钮中的其他按钮的操作。

  1. 现在修改~/.xbindkeysrc文件内容如下。

内容:

######### MultimediaControl #########

# backward button => my Command       
"gnome-control-center"                
   m:0x0 + b:19                                   

# forward button => my Command            
"gnome-tweaks"                
   m:0x0 + b:20

#####################################
  1. 跑步killall xbindkeys; xbindkeys

所以现在很清楚,如果我按下 b:19 和 b:20,我的命令就会运行。

现在的诀窍是将罗技鼠标的物理按钮映射到 id=16 b:4 和 b:5 到 b:19 和 b:20

man xinput

   --set-button-map device map_button_1 [map_button_2 [...]]
           Change  the  button mapping of device. The buttons are specified in physical order
           (starting with button 1) and are mapped to the logical button provided. 0 disables
           a button. The default button mapping for a device is 1 2 3 4 5 6 etc.
  1. 跑步xinput --set-button-map 16 1 2 3 19 20

例子:

pratap@i7-6550U:~$ xinput --set-button-map 16 1 2 3 19 20
pratap@i7-6550U:~$ 

完成后,现在您可以~/.xbindkeysrc使用 Logitech 鼠标滚轮向上和向下运行两个命令,而其他两个设备则具有其原始功能,即上下滚动。

注销或重启后,此按钮映射将不再保留。

  1. 添加此命令xinput --set-button-map 16 1 2 3 19 20在系统启动时运行。

请注意,如果您将来更换罗技鼠标的 USB 插槽,id 可能会与 xinput 列表不同,这将不起作用。您需要获取 id 并在启动命令中更改它。

答案2

注销或重启后,此按钮映射将不再保留。

  1. 添加此命令 xinput --set-button-map 16 1 2 3 19 20 在系统启动时运行。请注意,如果您将来更改罗技鼠标的 USB 插槽,则 ID 可能与 xinput 列表不同,这将不起作用。您需要获取 ID 并在启动命令中更改它。

你可以通过告诉 xinput 设备名称而不是变量设备 id 来避免这个问题:而不是 xinput --set-button-map 16 1 2 3 19 20使用xinput --set-button-map pointer:'Logitech USB Receiver Mouse' 1 2 3 19 20

相关内容