有没有办法使一个键盘记录器在linux没有根?



我想做什么

我通过读取事件文件制作了一个键盘记录器,但它需要root权限才能工作。我想做一个键盘记录器,可以在没有root权限的情况下工作。

我的设备
  • ubuntu16.04 using X11
  • ubuntu21.04 using Wayland

我的想法我了解它在windows上是可行的,也可以在一些linux上使用X11通过Xlib实现。

但是我的项目需要在X11和Wayland上运行,所以显然不可能使用Xlib。

问题有没有其他的方法,我可以得到密钥记录没有根权限?

这是可能的,但是任何非根解决方案都将依赖于键盘虚拟化工具。让我们看看(现代)操作系统是如何工作的:

  • 硬件处于内核及其驱动程序的独占控制之下。在这个级别上实现一个键盘记录程序是可能的,它只依赖于内核,但它需要管理员权限。
  • 如果你有一个多窗口功能的系统(X11, XWindow),操作系统将低级事件传递给窗口管理器,然后将它们传递给客户端程序。在Windows中,由于历史原因,该部分包含在内核中。这里也可以实现一个(仍然是低级的)键盘记录器,但是如果窗口管理器是以root身份启动的,那么作为一个整体与它交互仍然需要管理员权限。至少X11服务器可以作为非管理用户进程启动,并且在该用例中,键盘记录器也可以在同一用户下运行。
  • 最后,窗口管理器将事件传递给客户端应用程序。在一些(窗口)系统上,可以实现钩子,但它们将被限制在相同的进程或进程组中,或者至少是相同的用户。无论是否可能,如果可能的话实现它的方式将取决于窗口管理器

这意味着有可能实现用户级键盘记录程序,但它将取决于窗口系统,而不仅仅是内核。换句话说,你必须搜索Wayland特定的方式如果您想同时支持它们,可以使用X11特定的方式。