跳转至内容

Multi-pointer X

来自 ArchWiki

Xorg 服务器从 1.7 版本开始引入了“multi-pointer”功能。基本上,它允许在屏幕上有多个鼠标光标(每个光标都有自己的键盘焦点),并用独立的物理输入设备来控制它们。它可以作为一种简易的 多座位 解决方案。

基本概念

主设备和从设备

随着 XInput2 的引入,输入设备被组织成一个两级层次结构:

  • 主设备,对应屏幕上的光标。
  • 从设备,对应物理输入设备。

主设备成对出现,一个用于指针,一个用于键盘。每个主设备可以连接多个从设备,这样主设备的光标就可以被连接到它的所有从设备控制。

客户端指针

当一个应用程序获取输入(例如全屏游戏)时,它会获取一个被设置为其客户端指针的主设备。默认情况下,客户端指针被设置为“Virtual core pointer”,但可以使用“xinput”工具将其设置为其他设备。

配置

配置文件

本文章或章节需要扩充。

原因:应添加关于如何使用 xorg.conf 配置 multipointer 的信息(在 Talk:Multi-pointer X 中讨论)

xinput 工具

可以使用 xinput 命令行工具添加更多指针。方法如下:

创建一个新的主设备对,命名为“name pointer”和“name keyboard”。

xinput create-master [name]

找出现有从设备的名称和 ID。

xinput list

将从设备重新连接到新创建的主设备。

xinput reattach [slave device name or id] [master device name or id]

例如,假设我们创建一个名为“Auxiliary”的设备(使用 remove-master 来撤销此操作)。

xinput create-master Auxiliary

当我们列出 xinput 设备时,应该会看到类似这样的内容:

Virtual core pointer
  >Virtual Core XTEST pointer
  >[probably your main mouse]
Virtual core keyboard
  >Virtual Core XTEST pointer
  >[probably your main keyboard]
  >[other function buttons]
Auxiliary pointer
  >auxiliary XTEST pointer
Auxiliary keyboard
  >auxiliary XTEST keyboard

然后,您需要做的是将您的第二个鼠标和键盘连接到 respective auxiliary positions。XTEST 设备在此处无关紧要。我发现确定哪个是什么的最简单方法就是拔掉东西,然后再次键入“xinput list”。

要连接设备,请键入:

xinput reattach [device id #] "Auxiliary pointer"

然后也为您的键盘执行此操作!

如果 DE/WM 对多指针的支持不佳,最好利用 set-cp,如果主设备是为仅一个窗口添加的,窗口 ID 可以从 xprop 或类似工具中找到。

xinput set-cp [window id] [master device name or id]

shamelessly stolen from Antonio Ospite at ao2.it

故障排除

闪烁

Compton 合成器可能会导致光标闪烁,应禁用它。

软件支持

有可能在不支持显式多指针的软件中使用多指针,但功能有限。不支持多指针的应用程序将无法区分多个指针,并将所有操作解释为由单个主设备对完成。

窗口管理器

在窗口管理器中,多指针支持可能意味着:

  • 识别多个焦点。
  • 将焦点窗口的客户端指针设置为“聚焦”它的指针。
  • 允许同时移动和调整窗口大小。

截至 2016 年 12 月 24 日,只有 multicursor-wm(开发已于 2011 年左右停止)支持多指针。

截至 2020 年 6 月 1 日,Dwm 可以工作,但效果不佳。当在 config.h 中设置鼠标悬停自动聚焦时,会出现焦点问题,键盘焦点会在应用程序之间轻松跳转。set-cp 可用于辅助此行为。

桌面管理器

桌面管理器也应该能够提供与窗口管理器相同的支持。

截至 2021 年 1 月 14 日,Plasma 工作得相当好,一些应用程序能够正确处理焦点,但它自带的工具,如 Application Runner (kickoff) 和 krunner,无法接受来自第二个主设备的输入。