多指针 X
从 1.7 版本开始,Xorg 服务器具有一项名为“多指针”的功能。 基本上,它允许在屏幕上拥有多个鼠标光标(每个光标都有自己的键盘焦点),并使用单独的物理输入设备来控制它们。 它可以作为一种简陋的 多座席 解决方案使用。
基本概念
主设备和从设备
随着 XInput2 的引入,输入设备被组织成一个两级层次结构
- 主设备,对应于屏幕上的光标
- 从设备,对应于物理输入设备
主设备成对出现,一个用于指针,一个用于键盘。 每个主设备可以连接多个从设备,以便主设备的光标可以由连接到它的所有从设备控制。
客户端指针
当应用程序捕获输入(例如全屏游戏)时,它会捕获一个设置为其客户端指针的主设备。 默认情况下,客户端指针设置为“Virtual core pointer”,但可以使用“xinput”实用程序将其设置为不同的指针。
配置
配置文件
xinput 工具
可以使用 xinput
CLI 工具添加更多指针。 以下是操作方法
创建一对新的主设备,分别命名为 “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
接下来您想要做的只是将您的辅助鼠标和键盘连接到相应的辅助位置。 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]
无耻地盗用自 Antonio Ospite at ao2.it
故障排除
闪烁
Compton 合成器可能会导致光标闪烁,应禁用。
软件支持
可以在不支持它的软件中使用多指针,但功能有限。 不支持它的应用程序将无法区分多个指针,并将所有操作解释为由单个主设备对完成。
窗口管理器
在窗口管理器中,多指针支持可能意味着
- 识别多个焦点
- 将焦点窗口的客户端指针设置为“聚焦”它的指针
- 允许同时移动和调整窗口大小
截至 2016 年 12 月 24 日,只有 multicursor-wm (开发于 2011 年左右停止) 支持多指针。
截至 2020-06-01,Dwm 可以工作,但效果不佳,当在 config.h
中设置悬停自动对焦时,会出现焦点问题,导致键盘焦点在应用程序之间轻松跳转。 可以使用 set-cp
来辅助此行为。
桌面管理器
桌面管理器也应该能够提供与窗口管理器相同的支持。
截至 2021-01-14,Plasma 工作良好,某些应用程序能够正确处理焦点,但它附带的工具(如 Application Runner (kickoff) 和 krunner)不接受来自第二个主设备的输入。
实用链接
- Xorg wiki 条目
- Xorg 多座席。 更复杂的多用户环境的使用指南。 需要 2 个不同的 xorg 会话和显卡!!
- 来自 Suckless DWM 的文章