在 ubuntu 20.04 LTS 上使用 python Xlib 或 C-API 操作第二个(辅助)鼠标输入
Manipulate second (auxiliary) mouse inputs with python Xlib or C-API on ubuntu 20.04 LTS
我正在开发 ubuntu 20.04 LTS,其中有 2 个电脑鼠标(Microsoft Microsoft® 2.4GHz Transceiver v9.0 Mouse, id=11
和 MX Vertical Mouse, id=31
)连接到 2 个不同的主机(Virtual core pointer, id=2
和 Auxiliary pointer id=27
), 请参阅 xinput
:
laptop:~/$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Mouse id=11 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=12 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=13 [slave pointer (2)]
⎜ ↳ ELAN9008:00 04F3:2A46 id=17 [slave pointer (2)]
⎜ ↳ GDX1515:00 27C6:01F4 Mouse id=19 [slave pointer (2)]
⎜ ↳ GDX1515:00 27C6:01F4 Touchpad id=20 [slave pointer (2)]
⎜ ↳ GDX1515:00 27C6:01F4 id=21 [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)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Power Button id=9 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 id=10 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 System Control id=14 [slave keyboard (3)]
↳ USB2.0 HD IR UVC WebCam: USB2.0 id=15 [slave keyboard (3)]
↳ USB2.0 HD IR UVC WebCam: USB2.0 id=16 [slave keyboard (3)]
↳ ELAN9008:00 04F3:2A46 id=18 [slave keyboard (3)]
↳ Intel HID events id=22 [slave keyboard (3)]
↳ Asus WMI hotkeys id=23 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=24 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=25 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=26 [slave keyboard (3)]
⎡ Auxiliary pointer id=27 [master pointer (28)]
⎜ ↳ Auxiliary XTEST pointer id=29 [slave pointer (27)]
⎜ ↳ MX Vertical Mouse id=31 [slave pointer (27)]
⎣ Auxiliary keyboard id=28 [master keyboard (27)]
↳ Auxiliary XTEST keyboard id=30 [slave keyboard (28)]
问题:
如何使用 python 操作附加到 Auxiliary pointer
(不是 Virtual core pointer
)的 Mx Vertical Mouse id=31
,例如使用 Xlib.ext.xtest.fake_input
、pyautogui.moveTo
、xaut
等,或者直接使用 X Window System
?
的 C
-API
问题:
这些基于 Xlib
的 python 软件包中的任何一个都只控制 Virtual core pointer
-master 和附加的 Microsoft Microsoft® 2.4GHz Transceiver v9.0 Mouse, id=11
-slave。这些包都通过将 Xlib.display.Display()
传递给 Xlib.ext.xtest.fake_input()
函数来控制初始 Virtual core pointer
-master 函数,该函数不需要任何进一步的输入来指定应该操纵哪个指针(...不确定关于最后一点)。我可以通过例如 Auxiliary pointer
-master 获得Xlib.ext.xinput.query_device(window, xinput.AllMasterDevices).devices[1]
但我不知道在哪里插入它。使用 Auxiliary pointer
的源 ID id=31
也没有帮助。
感谢任何建议、想法或解决方案,提前致谢!
X11/extensions/XInput2.h::XIWarpPointer 移动由 deviceid
指定的设备指针
XIWarpPointer
可用于控制由 mouse/cursor 附加到的主指针的 id(不是鼠标的设备 id)定义的鼠标光标:
#include <X11/extensions/XInput2.h>
Bool XIWarpPointer( Display *display,
int deviceid,
Window src_w,
Window dest_w,
double src_x,
double src_y,
int src_width,
int src_height,
double dest_x,
double dest_y);
这是一个示例,说明如何将它集成到 C 中或构建一个库,然后使用例如 python 进行交互。 CFFI:
我正在开发 ubuntu 20.04 LTS,其中有 2 个电脑鼠标(Microsoft Microsoft® 2.4GHz Transceiver v9.0 Mouse, id=11
和 MX Vertical Mouse, id=31
)连接到 2 个不同的主机(Virtual core pointer, id=2
和 Auxiliary pointer id=27
), 请参阅 xinput
:
laptop:~/$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Mouse id=11 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=12 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=13 [slave pointer (2)]
⎜ ↳ ELAN9008:00 04F3:2A46 id=17 [slave pointer (2)]
⎜ ↳ GDX1515:00 27C6:01F4 Mouse id=19 [slave pointer (2)]
⎜ ↳ GDX1515:00 27C6:01F4 Touchpad id=20 [slave pointer (2)]
⎜ ↳ GDX1515:00 27C6:01F4 id=21 [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)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Power Button id=9 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 id=10 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 System Control id=14 [slave keyboard (3)]
↳ USB2.0 HD IR UVC WebCam: USB2.0 id=15 [slave keyboard (3)]
↳ USB2.0 HD IR UVC WebCam: USB2.0 id=16 [slave keyboard (3)]
↳ ELAN9008:00 04F3:2A46 id=18 [slave keyboard (3)]
↳ Intel HID events id=22 [slave keyboard (3)]
↳ Asus WMI hotkeys id=23 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=24 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=25 [slave keyboard (3)]
↳ Microsoft Microsoft® 2.4GHz Transceiver v9.0 Consumer Control id=26 [slave keyboard (3)]
⎡ Auxiliary pointer id=27 [master pointer (28)]
⎜ ↳ Auxiliary XTEST pointer id=29 [slave pointer (27)]
⎜ ↳ MX Vertical Mouse id=31 [slave pointer (27)]
⎣ Auxiliary keyboard id=28 [master keyboard (27)]
↳ Auxiliary XTEST keyboard id=30 [slave keyboard (28)]
问题:
如何使用 python 操作附加到 Auxiliary pointer
(不是 Virtual core pointer
)的 Mx Vertical Mouse id=31
,例如使用 Xlib.ext.xtest.fake_input
、pyautogui.moveTo
、xaut
等,或者直接使用 X Window System
?
C
-API
问题:
这些基于 Xlib
的 python 软件包中的任何一个都只控制 Virtual core pointer
-master 和附加的 Microsoft Microsoft® 2.4GHz Transceiver v9.0 Mouse, id=11
-slave。这些包都通过将 Xlib.display.Display()
传递给 Xlib.ext.xtest.fake_input()
函数来控制初始 Virtual core pointer
-master 函数,该函数不需要任何进一步的输入来指定应该操纵哪个指针(...不确定关于最后一点)。我可以通过例如 Auxiliary pointer
-master 获得Xlib.ext.xinput.query_device(window, xinput.AllMasterDevices).devices[1]
但我不知道在哪里插入它。使用 Auxiliary pointer
的源 ID id=31
也没有帮助。
感谢任何建议、想法或解决方案,提前致谢!
X11/extensions/XInput2.h::XIWarpPointer 移动由 deviceid
指定的设备指针
XIWarpPointer
可用于控制由 mouse/cursor 附加到的主指针的 id(不是鼠标的设备 id)定义的鼠标光标:
#include <X11/extensions/XInput2.h>
Bool XIWarpPointer( Display *display,
int deviceid,
Window src_w,
Window dest_w,
double src_x,
double src_y,
int src_width,
int src_height,
double dest_x,
double dest_y);
这是一个示例,说明如何将它集成到 C 中或构建一个库,然后使用例如 python 进行交互。 CFFI: