无需 root 且无需 x11 即可获得键盘输入

无需 root 且无需 x11 即可获得键盘输入

我正在尝试在 C/C++ 程序中捕获键盘输入,而不需要 root 权限,也不使用 X11 XNextEvent()

我尝试直接打开设备,但出于明显的安全原因,直接访问硬件需要 root 权限。我尝试打开的设备/dev/input/by-id/(my keyboard name here)映射到事件管道 ( /dev/input/event<#>),需要 root 权限才能读取。

X11 库允许我捕获键盘事件(使用XNextEvent),但是当客户端想要无头运行且没有 GUI 时,我不能依赖安装了 X11 的客户端。

我需要能够捕获所有键盘键,包括shiftaltctrlsuper(Windows 或 Mac)键。最好,我还想捕获媒体键,例如播放、音量调高/调低等,并且仅在应用程序具有焦点时捕获。

有人知道我该怎样做吗?

我曾想过只为输入做两个不同的代码路径,一个用于无头,其中它们仅使用 stdin 来提取事件(但据我所知这不会捕获 Shift 键),另一个路径使用 X11,但如果可能的话,我只想维护一个键盘输入系统。

答案1

我能找到的最佳解决方案是创建一个单独的守护进程,作为服务运行,监视/dev/input/..事件并让其他用户工具连接到自身并监听输入事件。

考虑一些可以替代 XEvent 的东西。(将这些输入事件带入用户空间)

相关内容