我们要实现什么功能?

就是……像在OS X Lion中一样,鼠标滚轮滚动的方向就是页面移动的方向(模仿智能手机或平板电脑滚动)。

(无关紧要的一句话:可以这么想象,在Mac中,滚轮用于移动在窗口中的页面,而在Windows中,滚轮用于移动在页面上的窗口)

这个东西称为「反向滚动」(Reverse scrolling),或者「自然滚动」(Natural scrolling)

有哪些办法呢?

有那些方法可以实现呢?

 xmodmap,修改Xorg中的键映射和指针按钮映射(部分应用程序无效);xinput,修改libinput Natural Scrolling Enabled属性;synaptics,但是这个只是用于触控板;

这里并没有介绍图形化界面中的那些设置方法(在桌面环境中,可以在设置用找到「Natural scrolling」功能进行设置)。

有些东西一言难尽……

「xmodmap」与「XKB」没有直接关系。因为在“在X中如何处理keycode”中,「xmodmap」使用了不同想法(前XKB)。有关高级布局配置,请参阅「XKB」部分。

TODO 「xmodmap」与「XKB」的真正区别。为什么使用「xmodmap」后,某些应用是无效的。

# xmodmap(存在一些问题)

XMODMAP - 用于调整键盘和鼠标映射

为什么用到了这个技术?不知道,我搜索“linux change mouse scroll direction”后,出来的第一篇文章就是和XMODMAP有关的内容,发现这技术可以实现我想要的功能。大概是这个样子的(里面含有一些猜测的成分,并未找到直接相关的文档,也没有翻阅官方手册(因为成本和收益的原因),只看到一些介绍的博客):

  在Linux(或者其他操作系统)中,每个按键都映射到一个编号。下面鼠标按钮映射值:
        * mouse 1:左键* mouse 2:中间(滚轮。鼠标中间是可点击的,比如在Firefox中,在链接上单击中键,可以在新选项卡中打开页面)* mouse 3:右键* mouse 4:下滚动,滚轮逆时针(垂直方向)* mouse 5:上滚动,滚轮顺时针(垂直方向)* mouse 6:左滚动(没见过……)* mouse 7:右滚动(没见过……)* mouse 8:向后导航(没见过……)* mouse 9:向前导航(没见过……)
    可以使用''xev -event button''命令。在弹出的“Event Tester”窗口中进行点击操作,并观察控制台的输出,来观察鼠标的映射值。这里没有讨论键盘,键盘也有对应的映射值。

所以,要实现我们想要的那个效果,就是交换“4”和“5”键值:

#!/bin/sh# 如果要「交换」鼠标「垂直滚动」的方向,执行
xmodmap -e "pointer = 1 2 3 5 4 6 7 8 9 10"# 如果要「恢复」正常的垂直滚动方向,执行
xmodmap -e "pointer = 1 2 3 4 5 6 7 8 9 10"# 注意,某些应用需要「重新启动」才会生效,而有些应用不用重启就能生效。

如何持久化修改?

修改$HOME/.Xmodmap文件,追加如下内容:

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

根据需要配置数值的顺序。使用命令xmodmap ~/.Xmodmap来重新加载配置文件,使其生效。

如何修改「水平滚动」方向?

还是同一条命令,只是交换“6”和“7”即可,即执行xmodmap -e "pointer = 1 2 3 4 5 7 6 8 9 10"命令。

鼠标可能没有水平滚动,但是笔记本由触控板啊……

附加说明

某些Linux发行版或者说桌面环境中,提供了“Reverse Scrolling Direction”功能,又或者是禁用“Natural Scrolling”。还以使用naturalscrolling软件进行修改,真的是一如既往的混乱。参考「How to Reverse The Mouse Scrolling Direction in Ubuntu (aka Natural Scrolling)」「Kali Linux inverted scroll direction」

我只使用了XMODMAP。在「在Chromium中完全无效」的问题还在处理中。

# xinput(终极解决方案?)

「ArchWiki/Natural scrolling」
「GTK3 apps don't understand natural scrolling in Xubuntu」
没仔细研究过,但是感觉这是一种从驱动层面彻底交换滚动方向的方法:

#!/bin/shxinput list
xinput --set-int-prop ## "libinput Natural Scrolling Enabled" 8 1
xinput --set-int-prop ## "libinput Natural Scrolling Enabled" 8 0# 存在一个问题:使用「Ctrl + Alt + F1~6」切换到虚拟控制台后,再切换回来,需要重新设置。

参考文献

Mouse button mapping on Linux
ArchWiki/xmodmap
ArchWiki/Touchpad Synaptics
ArchWiki/X keyboard extension
Can I Xmodmap only a specific device?

「Linux」- 修改鼠标滚轮的滚动方向 @20210315相关推荐

  1. linux鼠标滚轮不能上下滚动页面,Windows10鼠标滚轮无法滚动页面如何解决

    如果遇到界面无法全部显示情况的话,那么win10系统用户就可以使用鼠标滚轮进行滚动翻页,方便阅读.不过,也有一些朋友会碰到无法在原本可以翻页的界面中使用鼠标滚轮翻页的问题,这是怎么回事呢?我们该如何操 ...

  2. steam 32位 linux 下载地址,「Linux」- 安装 Steam 客户端

    「Linux」- 安装 Steam 客户端 更新日期:2020年09月30日 问题描述 虽然不经常玩游戏(有玩的冲动,但是打开游戏之后又不想玩了),但是还是会安装 Steam 客户端 该笔记将记录:在 ...

  3. 综合设计一个OPPE主页--页面的插件引用(animate.css)--d动画的使用--滚轮或鼠标到该位置时,才有动画的切换---所以我们需要用jquery监听鼠标滚轮的滚动事件

    Animate.css | A cross-browser library of CSS animations. 里面有许多css的效果 首先使用 animate.css文件 link rel=&qu ...

  4. 「Linux」- 运行任天堂红白机游戏(“小霸王”) @20210308

    问题描述 # 02/16/2021 今天,闲来无事(其实也有事,就是累了,想休息一下),想再玩一玩这些小游戏,重温经典,所以就有了这篇文章,来记录这一过程.当我们不会去买一个红白机,虽然有卖的.我们想 ...

  5. vue实现简单的鼠标拖拽横向滚动和 鼠标滚轮横向滚动

    原文地址:vue实现简单的鼠标拖拽横向滚动和 鼠标滚轮横向滚动_超人不会飞啊的博客-CSDN博客_vue鼠标拖拽 这边如果是动态渲染的div,需要等dom渲染结束后.id存在了.再去设置this.sc ...

  6. 「Linux」- 禁用 IPv6 协议栈 @20210403

    问题描述 为什么禁用 IPv6 协议栈?因为很多配套的基础设置还未到位,因此使用 IPv6 会遇到很多问题,比如 a 5-second delay 问题. 该笔记将记录:在 Linux 中,如何禁用 ...

  7. 修改鼠标滚轮方向配置MacBook触控板的多指快捷操作

    修改鼠标滚轮方向&配置MacBook触控板的多指快捷操作 背景: 问题描述: 解决办法: 参考链接: 软件下载: 几点经验: 背景: 从 macOS 转到 windows 系统最不适应的就是鼠 ...

  8. 有道 linux 安装路径,「Linux」- 安装有道词典

    「Linux」- 安装有道词典 更新日期:2019年07月10日 @IGNORECHANGE 系统环境 系统环境:Debian 安装依赖 #!/bin/bash apt-get install pyt ...

  9. html鼠标滚轮不滚动页面,Windows10系统鼠标滚轮无法滚动页面如何解决

    如果遇到界面无法全部显示情况的话,那么win10系统用户就可以使用鼠标滚轮进行滚动翻页,方便阅读.不过,也有一些朋友会碰到无法在原本可以翻页的界面中使用鼠标滚轮翻页的问题,这是怎么回事呢?我们该如何操 ...

  10. docker运行linux桌面,「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例)...

    「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例) 更新日期:2021年01月15日 @IGNORECHANGE @WIP 问题描述 我们使用 Debian 发行版,但是某 ...

最新文章

  1. 清华园里的女生节:我今夜唯一的deadline,是为你写横幅
  2. linux常用文本编辑器nano/vi/vim
  3. Unity中如何计算带minimap的贴图资源的大小
  4. 【AutoML】强化学习如何用于模型量化?
  5. Emacs之魂(三):列表,引用和求值策略
  6. jQuery 定位到某个元素
  7. 1分钟了解区块链的本质
  8. 系统备份是对计算机硬件进行维户吗,计算机系统维护毕业论文_精品.doc
  9. java IO流的一些操作方法
  10. 黑客利用未修复的 Atlassian 服务器攻击电信运营商和 ISP
  11. 【学习总结】GirlsInAI ML-diary day-7-数据类型转换
  12. vbs 读unicode 编码格式的文件
  13. java中mysql.ini_为什么找不到mysql.ini文件,我是放在scr目录下的
  14. stm32固件库下载地址
  15. 移动彩信大小限制307200字节?
  16. *Android 多线程下载 仿下载助手(改进版)
  17. 一起动才够嗨!Android CoordinatorLayout 自定义 Behavior
  18. android自定义UI模板图文详解
  19. 广告电商系统开发功能只订单处理
  20. 海盗分赃问题-----简化问题,分而治之

热门文章

  1. 微信openid你了解多少?appid,appsecert又是啥?
  2. 2019蓝桥杯 - 迷宫
  3. 计算机设备管理没有打印机,win7电脑的设备和打印机选项无法打开怎么办?
  4. Opencv2.4.9源码分析——Stitching(七)
  5. YouTube技术架构
  6. 5G通信网络专题报告:新一轮移动通信网络建设迎来高潮
  7. html5中按钮点击事件,javascript按钮点击事件
  8. 《东京食尸鬼》观后感
  9. Some file crunching failed, see logs for details 一种情形的解决办法
  10. Error:Some file crunching failed, see logs for details Error:Execution failed for task ':app:mergeDe