Qt 应用程序不遵守 Xmodmap

Qt 应用程序不遵守 Xmodmap

很久以前,我创建了一个~/.Xmodmap反转45来创建“自然滚动”:

pointer = 1 2 3 5 4 7 6 8 9 10 11 12

我以标准方式获取资源 ( .Xmodmap) 。这已经工作了很多年,没有出现任何问题。.xinitrcxmodmap $HOME/.Xmodmap &

我最近刚刚安装了一个名为cockatrice。我对该程序没有其他问题,除了由于某种原因,当我在程序内滚动时,我的滚动方向不是“自然的”(即,就好像我的滚动方向.Xmodmap不只被这个应用程序遵循)。

起初,我认为这是我的 Qt 输入模块的问题,但我意识到我已经在我的 中正确声明了QT_IM_MODULEto ,并且我从未在任何其他应用程序中遇到过此问题。xim.xinitrc

这是特定于应用程序的问题,还是特定于 Qt 的问题?我应该尝试什么来进一步解决这个问题(或解决它)?

尝试通过失败来普遍设置它xinput

$ xinput list 
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
# unneeded information regarding my keyboard
$ xinput set-prop 2 "Evdev Scrolling Distance" -1 -1 -1
property 'Evdev Scrolling Distance' doesn't exist, you need to specify its type and format

答案1

它似乎是 Qt 特定的(通过在 Qt Assistant 中尝试)。我认为这是因为 Qt 的滚轮事件仅使用滚动距离。

您可以将滚动距离设置为负值,而不是在此处使用 xmodmap。

/etc/X11/xorg.conf.d/对于由 evdev 管理的鼠标,您可以通过 中的文件进行设置:

Section "InputClass"
        Identifier "Reverse Scrolling"
        MatchIsPointer "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection

或者你可以xinput先尝试:

xinput set-prop <your device id> "Evdev Scrolling Distance" -1 -1 -1

(获取设备 ID xinput list:)

这些属性与实际设备一起列出。这里xinput list-props 12应该列出触摸板的属性。由于它是 synaptics 触摸板,因此这个手册页该属性应该是:

xinput set-prop <touchpad id> "Synaptics Scrolling Distance" -1 -1(只有两个值,垂直边缘和水平边缘。)

对于配置文件中的规则,它应该与MatchIsTouchpad

Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsTouchpad "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
EndSection

答案2

我想补充@Leiaz的答案。
就我而言,我正在使用罗技 M325
$ xinput

⎡ 虚拟核心指针 id=2 [主指针 (3)]
⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从指针 (2)]
⎜ ↳ HID 04b4:0823 id=10 [从指针 (2)]
⎜ ↳ Logitech M325 id=12 [从属指针 (2)]
⎜ ↳ Logitech M185/M225 id=11 [从属指针 (2)]

$ xinput list-props 12

设备“Logitech M325”:
启用设备 (152):1
坐标变换矩阵 (154):1.000000、0.000000、0.000000、0.000000、1.000000、0.000000、0.000000、0.000000、1.0000 00
libinput 加速速度 (286): 0.000000
libinput 加速速度默认值 ( 287): 0.000000
libinput Accel 配置文件可用 (288): 1, 1
libinput Accel 配置文件启用 (289): 1, 0
libinput Accel 配置文件启用默认 (290): 1, 0
libinput 自然滚动启用 (291): 0
libinput 自然滚动已启用 默认值 (292):0
libinput 发送事件模式可用 (271):1, 0
libinput 发送事件模式已启用 (272):0, 0
libinput 发送事件模式已启用 默认值 (273):0, 0
libinput 左手启用 (293): 0
libinput 左手启用 默认 (294): 0
libinput 滚动方法可用 (295): 0, 0, 1
libinput 滚动方法启用 (296): 0, 0, 0
libinput 滚动方法启用默认 (297) : 0, 0, 0
libinput 按钮滚动按钮 (298): 2
libinput 按钮滚动按钮 默认 (299): 2
libinput 中间仿真启用 (300): 0
libinput 中间仿真启用默认 (301): 0
设备节点 (274): “/dev/input/event16”
设备产品 ID (275):1133、16394
libinput 拖动锁定按钮 (302):
libinput 启用水平滚动 (303):1

请注意,有一个“Natural Scrolling Enabled (291)”属性,将其更改为“1”,鼠标滚轮的方向将相反。
$ xinput set-prop 12 291 1

如果您想将过程包装在 shell 脚本中,则如下:

#!/bin/bash

dev_id=$(xinput | sed -n '/Logitech M325/{s/^.*Logitech M325\s\+id=\([0-9]\+\).*$/\1/;p;}')

if [[ -z "$dev_id" ]];then
  exit 1
fi

nse_id=$(xinput list-props "$dev_id" | sed -n '/Natural Scrolling Enabled ([0-9]\+)/{s/^.*Natural Scrolling Enabled (\([0-9]\+\)).*/\1/;p;}')

if [[ -z "$nse_id" ]];then
  exit 1
fi

xinput set-prop "$dev_id" "$nse_id" 1
xinput list-props "$dev_id" | grep -o "Natural Scrolling Enabled ($nse_id):\s\+[0-9]" 

将“Logitech M325”更改为您自己的设备名称。

相关内容