如何确定同一X会话中请求剪贴板内容的程序?
当然可以!虽然X11本身没有默认提供这种追踪功能,但我们可以借助一些工具和技巧来精准定位发起剪贴板读取请求的程序,下面是几个实用的方法:
用剪贴板监控工具直接追踪
有专门的小工具比如xclipwatch(部分发行版可以直接通过包管理器安装,也能自己写简单脚本实现类似功能),它会实时监控剪贴板的访问事件,每次有程序读取剪贴板时,会输出对应的进程ID(PID)。拿到PID后,只需要运行ps -p <PID>就能直接看到对应的程序名称和路径。我之前排查一个偷偷读取剪贴板的小程序时,就是靠这个工具快速定位的。通过X11协议分析工具抓包
如果你想深入了解X会话里的交互细节,可以用xtrace或者xev这类工具。xtrace能拦截并打印所有X客户端与服务器之间的通信内容,你只需要过滤和剪贴板相关的SELECTION_REQUEST事件——这类事件里会包含发起请求的客户端ID,再用xlsclients命令把客户端ID映射到对应的进程信息。不过这个方法需要对X11协议有一点基础认知,输出的日志会比较繁杂,得耐心筛选有效内容。系统级进程审计兜底
如果上面的方法都没搞定,还可以用strace或者auditd这类系统级工具。比如用strace -p <可疑PID> -e trace=recvmsg监控目标进程和X服务器的通信,看它是否触发了剪贴板读取的请求;或者配置auditd的规则,追踪所有访问剪贴板相关X资源的进程,这个方法虽然配置稍复杂,但适合排查更隐蔽的访问行为。
需要注意的是:桌面环境自带的剪贴板管理器(比如GNOME的gnome-shell、KDE的klipper)会定期访问剪贴板来同步内容,这些属于正常的系统进程,排查时要注意区分第三方程序和系统服务。
内容的提问来源于stack exchange,提问作者Boll19

