限制鼠标在可见区域的X11设置

6

我目前使用Linux Mint 17.2 with Cinnamon操作系统,并且连接了两个显示器。

当我在Cinnamon设置中将这两个显示器设为相邻时,鼠标可以自由地穿越两个屏幕之间的边界,但无法离开可见区域。

也就是说,如果我将两个显示器的位置只共享到了角落,那么鼠标会被锁定在当前屏幕上,只有在通过角落时才能移到另一个屏幕。

然而,将两个显示器设置为非相邻状态,则允许鼠标在虚拟帧缓冲区内自由移动,包括不可见区域。

我曾认为Cinnamon设置了控制此行为的标志,但使用xrandr更改监视器位置会产生同样的效果。

同样,当我仅启动Xorg,没有窗口管理器,只使用xrandr配置显示器时,结果一样。

到底是什么阻止了鼠标在所有显示器相邻的情况下离开可见区域? 有没有办法覆盖这种行为?

控制这个功能可能很有用,例如,能够防止鼠标在尝试点击边框附近的内容时离开显示器,而无需运行繁忙的循环监视鼠标并将其移回(也不需要通过使显示器相邻来加倍帧缓冲区大小)。

更多的控制可以用于使鼠标“不愿意”离开当前窗口,或实现其他有趣的功能。至少,它将使重新实现这个东西成为可能,以便它可以锁定鼠标到Chrome浏览器或OpenGL游戏等应用程序的窗口中,而不仅仅是xterm之类的应用程序。

现在想起来了,如果这种方法还没有实现,我甚至可以尝试去实现它,并找到相关的代码。

2个回答

3

好的,我已经找到相关的代码。

这种行为是硬编码在Xorg X服务器中的RandR扩展中的,包括可见区域连续性检查。

绝对没有可配置的选项。除非你同意dwm的创建者对“配置”一词的理解 :)
我同意。现在相关的代码位置是 randr/rrpointer.crandr/rrcrtc.c:332,1685
不过如果有人能为此创建一个适当的X服务器扩展就太好了。


这些年有什么变化吗?还是现状依旧? - Robert Siemer

0

正如你已经发现的那样:如果您的监视器区域是不连续的,似乎xrandr将允许指针使用整个x11屏幕。我只是故意移动了一个像素的位置(使用xrandr选项--pos),以释放鼠标。

一旦鼠标可以到达任何地方,就应该可以用指针障碍来限制它:

http://who-t.blogspot.com/2012/12/whats-new-in-xi-23-pointer-barrier.html

这需要XFixes扩展版本5+,并且通过链接中描述的事件和临时屏障解除得到了XInput的增强...这可能在这里不是必需的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接