左手使用鼠标,右手使用触摸板


10

我看到可以在一个面板中配置鼠标和触摸板(Ubuntu 13.10,默认设置,Gnome)。在某种程度上是这样。也就是说,我想让触摸板的配置与鼠标和鼠标不同。

当我连接了(USB)鼠标时,通常会用左手。因此,我将按钮切换为左手操作。但是,当我使用触摸板时,我对这种配置几乎没有任何感觉。因此,我想用右手。

有没有一种方法可以实现以下目的:当我插入鼠标(分别在检测到鼠标时)自动切换为惯用左手,而当我拔下鼠标时,自动切换为惯用右手?

Answers:


10

我了解您的无奈,但可以借助该xinput工具非常简单地解决此问题。

首先插入USB鼠标,然后运行以下命令:

xinput list

看看id你的鼠标。上面命令的输出可以类似于:

xinput | 猫
⎡虚拟核心指针id = 2 [主指针(3)]
虚拟核心XTEST指针id = 4 [从指针(2)]
SynPS / 2 Synaptics触摸板id = 14 [从指针(2)]
USB Mouse id = 11 [从指针(2)]
⎣虚拟核心键盘id = 3 [主键盘(2)]
    ...

在上面的示例中,USB鼠标具有id=11。我们将id在以下命令中使用此命令,该命令将只为USB鼠标(而不是tauchpad)交换左手按钮:

xinput set-button-map 11 3 2 1

一般来说:

xinput设置按钮映射ID 3 2 1

要还原更改,请使用:

xinput设置按钮映射ID 1 2 3

要永久进行更改,请在“ 启动应用程序”中添加以下命令(在Dash中搜索“ 启动应用程序”):

sh -c“ xinput设置按钮映射ID 3 2 1”

更新:

由于重新启动后id可能会更改,但USBmouse的名称不会更改,因此您也可以grep输入鼠标的名称并应用它。跳过详细信息。选择名称,最终解决方案如下所示:

在/ usr / bin / xinput列表中的ID | / bin / grep'USB 鼠标 '| / bin / grep -o [0-9] [0-9]`; 做xinput set-button-map $ id 3 2 1; 完成

将其打包到上述启动应用程序中,您将最终得到:

sh -c“,用于`/ usr / bin / xinput列表中的ID | / bin / grep'USB 鼠标 '| / bin / grep -o [0-9] [0-9]`;执行xinput set-button-map $ id 3 2 1;完成;”

2
我不知道是否应该编辑您的帖子。您的方法为我提供了正确的方向,但问题是/是重新启动可能会更改鼠标的ID。因此,我将其更改为“ sh -c "for id in '/usr/bin/xinput list | /bin/grep 'Razer' | /bin/grep -o [0-9][0-9]'; do xinput set-button-map $id 3 2 1; done;"行之有效”(也许有人必须在意正确的连字符)。提示。
LeO

@LeO在我的情况下,重新启动不会更改鼠标的ID。我没有测试更多的鼠标,也没有更改USB端口的位置。
RaduRădeanu13年

@LeO无论如何,您的想法很好,所以,请继续编辑答案。如果没有,我稍后再做。
RaduRădeanu13年

8

有一个比RaduRădeanu的答案中更简单的方法。xinput接受输入设备的名称作为其数字ID的替代。由于您的USB鼠标可能已被通用处理,因此很可能是它的名称USB Mouse。因此,您甚至可能不需要运行xinput list

因此xinput set-button-map,使用该名称代替数字ID的your 将变为:

xinput set-button-map "USB Mouse" 3 2 1

就像使用数字ID方式一样,用左手鼠标代替它并应该实现相同的目的。(并且替换为仍然可以将其切换为惯用鼠标。)xinput set-button-map id 3 2 13 2 13 2 11 2 3

这样做的好处是,只要最初就可以工作,它将在重新启动后继续工作,而不必使用冗长而复杂的命令获取设备的ID号。


1
这个答案确实值得更多的赞扬。
Mephisto

在我的情况下,我有一个无线鼠标+键盘,因此xinput list显示2个具有相同名称的条目(“ 2.4G Wireless Keyboard&Mouse”),但其中一个说“ [slave pointer(2)]”,而另一个说“ [slave keyboard(3 )]“。因此,在您的解决方案中,我出现此错误“有多个名为'2.4G Wireless Keyboard&Mouse'的设备”。目前,我正在使用Radu的解决方案添加grep 'slave pointer'。我不知道xinput是否允许以某种方式指定我们是在不执行所有操作的情况下引用指针。
matiascelasco

1

我发现另一个答案中的启动命令仅在id是两位数字时才有效。这是我的修改,该修改应同时适用于一位和两位数字:

启动应用程序中

bash -c "for id in `/usr/bin/xinput list | /bin/grep 'USB Mouse' | /bin/grep -o id=[0-9][0-9]*`; do xinput set-button-map ${id:3} 3 2 1; done;"

0
device_id=$(/usr/bin/xinput list \
            | /bin/grep 'slave  pointer' \
            | /bin/grep 'Wireless Keyboard&Mouse' \
            | tr " " "\n" \
            | /bin/grep "id=" \
            | /bin/grep -o [0-9][0-9]* \
        )
/usr/bin/xinput set-button-map $device_id 3 2 1 

这是解决两个问题的更详细的解决方案:

  • 它适用于任意位数的设备ID(与@robbie解决方案相同,但写的有点不同)
  • 认为设备名称可能重复。在我的情况下,我有一个无线鼠标+键盘,因此xinput list显示2个具有相同名称的条目(“ 2.4G Wireless Keyboard&Mouse”),但其中一个说“ [slave pointer(2)]”,而另一个说“ [slave keyboard(3 )]“。因此,使用@reedstrm解决方案时,我会遇到此错误“有多个名为'2.4G Wireless Keyboard&Mouse'的设备。”,而使用@RaduRădeanu解决方案时,它for会迭代2个ID,一个用于鼠标,一个用于键盘,并且有一个第二个错误消息“设备没有按钮”。
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.