在 Linux 上,如何找出哪个应用程序/进程 ID 正在接收键盘/鼠标输入?



我正在做一个 Linux 项目。我陷入了需要知道哪个应用程序/进程 ID 正在接收键盘/鼠标输入的点。我的意思是绑定必须存储在某个地方。有人可以帮助我吗? 编辑 1:我正在处理键盘/鼠标事件捕获项目。我发现日志键(项目(很有用。我需要找到用户输入的应用程序名称以及按下的键 编辑 2:我正在使用 CentOS 7。XDG_SESSION_DESKTOP = 侏儒经典。GDMSESSION = 侏儒经典。

linux内核负责从物理键盘或鼠标接收事件,而不是任何特定的应用程序。然后将事件传递到活动应用程序。因此,请在内核源代码中查找键盘和鼠标的驱动程序。

我需要知道哪个应用程序/进程ID正在接收键盘/鼠标输入。

实际上,在Linux台式机(或笔记本电脑(上,如果您考虑物理键盘和鼠标,这并不重要(请参阅下面的原因(。

在 Linux 服务器上,您通常没有任何物理键盘。

在某些自然人使用的 Linux 台式机或笔记本电脑上,您通常有一些用于图形桌面环境的显示服务器(例如 Xorg 或 Wayland((除非您使用没有任何 GUI 的虚拟控制台(。该显示服务器正在处理(并从中读取(物理键盘和鼠标,因此(实际上(是从它们读取的唯一进程。检查 lsof(8(。

当然,显示服务器正在处理物理键盘和鼠标事件,并从中发出发送到某个客户端和窗口的更高级别的消息(在某些窗口管理器的帮助下,并管理焦点(。但是这种情况是如何发生的是一个不同的问题(在Xorg和Wayland中是非常不同的(。另请阅读有关合成窗口管理器的信息。顺便说一句,Xorg 客户端可以在远程机器上运行。

一台 Linux 机器可以管理多个席位,即屏幕 + 键盘 + 鼠标的几种组合,每个组合由不同的自然人使用。然后,您可以拥有多个显示服务器。

您可能会花费数月或数年的时间研究 X11 协议和架构。文档很重:数千页(另见ICCCM和EWMH(。如果需要,您还将花费数月时间研究Wayland协议。

您的项目可能需要 多年的工作(甚至一生(。累积的软件层(显示服务器,GUI工具包,窗口管理器等(是巨大的,数千万行源代码。

另请参阅对一个非常相似的问题的回答,以及这个


如果您使用的是gnome-classic您的显示服务器肯定是Xorg。所以ICCCM和EWMH适用。然后,您可能有兴趣_NET_WM_PID,并与常用技术相结合WM_CLIENT_MACHINE以获取 X11 焦点窗口。您可以考虑修补通常的窗口管理器(您可能仍然需要阅读有关 X11 的更多信息才能编写一些健壮的实现(。

不要忘记,许多 X11 客户端应用程序正在打开多个顶级 X11 窗口,并且一些 X11客户端应用程序正在使用多个 X11 显示器,因此有几个 Xorg 显示服务器。

最新更新