18.04 系统范围内的自然滚动?

18.04 系统范围内的自然滚动?

这是为了让“自然滚动”又名“反向滚动”能够与全系统所有使用 USB 鼠标和指点杆的应用程序配合使用。这个问题从 12.04 版本开始就让我抓狂,我最后用了一堆变通方法才让它正常工作。

我在用着Ubuntu Studio 18.04(xfce 4.12 桌面)并且在“偏好设置”中有一个“自然滚动”选项。它在浏览器和文件管理器以及文本编辑器等中按预期工作。但是,在 xfce4-terminal 和 mousepad(文本编辑器)以及其他一些应用程序中,它仍然是“非自然滚动”

有人知道这个主题的开发状态吗?我遗漏了什么吗?

在重新开始并测试所有这些解决方法之前,我将不胜感激任何帮助。

Ubuntu Studio 18.04.1 搭载 xfce 4.12 4.15.0-20-lowlatency #21-Ubuntu SMP PREEMPT

答案1

我记得,即使在默认 (x)ubuntu 应用程序中,不一致的“反向滚动”行为也是由于 GTK2 和 GTK3 中的滚动处理不同造成的。不知道这是否仍然适用。

无论如何,我刚刚发现“旧 xinput 技巧”仍然有效(xUbuntu 18.04.1,xinput 版本 1.6.2),所以我不妨分享一下它的工作原理。以及如何让它在重启后继续使用。

测试/临时解决方案

列出所有当前可用的指针和键盘:

xinput list

会出现如下内容:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Laser Mouse                  id=9    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [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)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]

选择id有问题的指针,列出其所有设备属性:

xinput list-props 12

Device 'TPPS/2 IBM TrackPoint':
    Device Enabled (143):   1
    Coordinate Transformation Matrix (145): 1.000000, ...
    libinput Natural Scrolling Enabled (281):   1
    libinput Natural Scrolling Enabled Default (282):   0
    libinput Scroll Methods Available (283):    0, 0, 1
    libinput Scroll Method Enabled (284):   0, 0, 1
    libinput Scroll Method Enabled Default (285):   0, 0, 1
    libinput Button Scrolling Button (286): 2
    ...


这就是我们所需要的:libinput Natural Scrolling Enabled (281)

要全局启用自然滚动,即针对“TPPS/2 IBM TrackPoint”(针对当前会话),首先在“鼠标和触摸板”首选项中将其关闭。
输入以下两行之一,按 Enter。(两者的作用相同,因为要读取或写入属性,您可以使用其完整(!)名称或其 ID)

xinput set-prop 12 "libinput Natural Scrolling Enabled" 1

xinput set-prop 12 "281" 1

现在通过系统偏好设置,在自然滚动无法工作的应用程序中进行测试。

永久解决方案

如果上述测试在你的机器上成功,那么你可以在每次登录会话时使用一个小的启动脚本应用更改。匹配的脚本部分deviceName来自这个关于按钮地图的答案由@zerobandwidth提供。

将以下代码保存natural_scrolling.sh到您的主目录或/any/path/youLike

#!/bin/bash
# Find all xinput devices whose name matches any of the arguments passed here,
# then set the Natural Scrolling' property to '1' regardless of its
# current state.

# expect multiple arguments, store them as array
deviceNames="$@"

# exit if no argument is passed
if [ "$deviceNames" = "" ]; then
        echo "No argument received, exiting."
        echo "Call this script with argument(s) like 'Logitech' that match"
        echo "any of your attached pointer devices."
    exit 1
fi

for deviceName in $deviceNames
do
    deviceId=$(xinput --list | awk -v search="$deviceName" \
    '$0 ~ search {match($0, /id=[0-9]+/);\
                  if (RSTART) \
                    print substr($0, RSTART+3, RLENGTH-3)\
                 }'\
     )
  # set device-specific property (works i.e for 'TrackPoint' & 'Logitech')
  xinput set-prop $deviceId "libinput Natural Scrolling Enabled" 1
done

将脚本标记为可执行:

chmod +x natural_scrolling.sh

使用唯一的(!)device_name字符串作为参数来调用它:

/any/path/youLike/natural_scrolling.sh Logitech TrackPoint

将其添加到您的启动应用程序中,即通过 xfce 中的会话和启动首选项,然后通过注销并重新登录进行测试。

答案2

唉,我没有足够的声誉来发表评论,所以我必须添加这个作为答案。对于任何偶然发现这一点的人来说,上面的代码中有一个非常小的错误。倒数第二行:

xinput set-prop $id "libinput Natural Scrolling Enabled" 1

应该读:

xinput set-prop $deviceId "libinput Natural Scrolling Enabled" 1

另外,我使用 Logitech Ultrathin Mouse,不知道出于什么原因,它既可以连接鼠标又可以连接键盘,因此在 中出现了两次xinput list。因此,我添加了管道输出以head -1限制返回的内容仅为第一个条目(在我的情况下始终是鼠标):

...
                    print substr($0, RSTART+3, RLENGTH-3)\
                 }' | head -1 \
     )
...

相关内容