CentOS 7(gnome-classic)下如何识别接收键鼠输入的应用/进程ID
嘿,我之前在CentOS 7的gnome-classic环境下折腾过类似的键鼠事件与目标应用关联的需求,结合你用logkeys的场景,给你几个实用的方案:
方案1:用X11命令行工具快速关联(适合脚本集成)
因为gnome-classic是基于X11的桌面环境,遵循EWMH标准,我们可以通过X11的工具获取当前聚焦窗口的信息,进而关联到对应的进程ID和应用名称。你可以把这段逻辑和logkeys的捕获流程结合起来,每次记录按键时同步记录当前活跃应用。
具体命令示例:
# 1. 获取当前活跃窗口的ID(十六进制) ACTIVE_WINDOW=$(xprop -root _NET_ACTIVE_WINDOW | awk '{print $5}') # 2. 根据窗口ID获取对应的进程ID(PID) WINDOW_PID=$(xprop -id $ACTIVE_WINDOW _NET_WM_PID | awk '{print $3}') # 3. 通过PID获取应用名称 APP_NAME=$(ps -p $WINDOW_PID -o comm=) # 输出结果示例 echo "当前活跃应用:$APP_NAME(PID:$WINDOW_PID)"
你可以把这段脚本封装成一个函数,在logkeys的日志回调或者定时触发(比如每次按键事件后)调用,把应用信息和按键内容写到同一个日志文件里。
方案2:集成X11 API到logkeys代码中(适合自定义开发)
如果你的项目需要更高效的集成(不想频繁调用外部命令),可以直接在logkeys的C代码中加入X11的调用逻辑,实时获取当前聚焦窗口的PID。
以下是一个简化的C函数示例,用来获取当前活跃窗口的PID:
#include <X11/Xlib.h> #include <X11/Xatom.h> #include <stdlib.h> pid_t get_active_app_pid() { // 连接到当前X11显示 Display *display = XOpenDisplay(NULL); if (!display) { return -1; } Window root_win = DefaultRootWindow(display); Window active_win; int revert_mode; // 获取当前聚焦的窗口 XGetInputFocus(display, &active_win, &revert_mode); // 获取_NET_WM_PID这个原子属性(EWMH标准定义的窗口PID属性) Atom net_wm_pid = XInternAtom(display, "_NET_WM_PID", False); Atom prop_type; int prop_format; unsigned long prop_items, prop_bytes; unsigned char *pid_buffer = NULL; // 读取窗口的PID属性 int status = XGetWindowProperty(display, active_win, net_wm_pid, 0, 1, False, XA_CARDINAL, &prop_type, &prop_format, &prop_items, &prop_bytes, &pid_buffer); pid_t pid = -1; if (status == Success && pid_buffer && prop_items > 0) { pid = *((pid_t *)pid_buffer); } // 释放资源 XFree(pid_buffer); XCloseDisplay(display); return pid; }
你可以在logkeys捕获到按键事件的代码位置调用这个函数,拿到PID后再通过proc文件系统(比如/proc/<PID>/comm)读取应用名称,这样就能把按键信息和目标应用直接关联起来。
关键注意事项
- 权限配置:运行logkeys的用户需要加入
input组以读取输入设备:sudo usermod -aG input <你的用户名>;同时确保DISPLAY环境变量正确设置(比如export DISPLAY=:0),否则无法访问X11窗口信息 - 兼容性验证:gnome-classic遵循EWMH标准,
_NET_ACTIVE_WINDOW和_NET_WM_PID属性是原生支持的,无需额外配置 - 后台运行适配:如果程序在后台启动,必须手动指定
DISPLAY变量,否则X11相关工具和API会连接失败
内容的提问来源于stack exchange,提问作者Nikhil Nilawar
相关产品推荐
相关产品推荐

