如何在运行时禁用 Xorg 右键单击​​模拟

如何在运行时禁用 Xorg 右键单击​​模拟

我有一台带有触摸屏的计算机(实际上是 Banana Pi Pro),我已将其配置为通过以下方式模拟右键单击xorg.conf

Section "InputClass"
    Identifier "Touchscreen"
    Option "EmulateThirdButton" "1"
    Option "EmulateThirdButtonTimeout" "750"
    Option "EmulateThirdButtonThreshold" "30"
EndSection

这确实非常有效。但有时,当我想使用真正的鼠标时,这些设置变得相当烦人,因为鼠标左键长按会转换为鼠标右键单击。此外,由于 30 像素阈值,拖动选择变得不精确。

我想知道是否可以在使用鼠标时禁用右键单击模拟:

  1. 是否可以在运行时修改 Xorg 配置来更改“InputClass”部分?

  2. 如果不是,是否可以将此部分仅应用于一种特定的输入设备(触摸屏)?

  3. 如果唯一的方法是更新xorg.conf并重新启动服务器,那么最不痛苦的方法是什么?理想情况下,保留已经运行的应用程序会很好,但我怀疑这是可能的。

  4. 有没有一个程序可以做我想要的事情而不需要改变xorg.conf?像这个问题,其中xrandr用于动态配置参数,这些参数在通过配置时是静态的xorg.conf

答案1

xinput控制输入​​设置。它对于输入的作用与xrandr对于显示的作用相同。

运行xinput list以列出设备。每个设备都有一个名称和一个数字 ID。您可以使用此名称或此 ID 来列出相应设备的属性。设备 ID 可能取决于检测到设备的顺序,因此要定位特定设备,请使用其名称。例如,我有一个鼠标作为设备8;这是其属性的摘录:

$ xinput list-props 8
    Evdev Third Button Emulation (280):     0
    Evdev Third Button Emulation Timeout (281):     1000
    Evdev Third Button Emulation Button (282):      3
    Evdev Third Button Emulation Threshold (283):   20

因此,我可以使用以下任一命令来打开该设备的第三个按钮模拟:

xinput set-prop 8 280 1
xinput set-prop 8 'Evdev Third Button Emulation' 1

设备有一个层次结构,以xinput list图形方式表示。将属性应用于设备也会将其应用于其子设备。例如,您可以通过将属性应用于根指针来将属性应用于所有指针设备Virtual core pointer

答案2

感谢@Gilles 的回答,我安装xinput并发现了我的触摸屏设备的名称:

xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ft5x_ts                                   id=7    [slave  pointer  (2)]
⎜   ↳ GiGa HiD                                  id=9    [slave  pointer  (2)]

有了这些信息,我就可以自定义我的xorg.conf文件,使其仅影响设备ft5x_ts(触摸屏)MatchProduct范围:

Section "InputClass"
    Identifier "Touchscreen"
    MatchProduct "ft5x_ts"
    Option "EmulateThirdButton" "1"
    Option "EmulateThirdButtonTimeout" "750"
    Option "EmulateThirdButtonThreshold" "30"
EndSection

重新启动后,右键单击模拟仅在触摸屏上有效。

PS:或许值得一提的是,我的电脑是基于 Banana Pi Pro 的乐美客液晶模组,以便其他 Banana Pi 人可以找到这个主题。

相关内容