最近要做的项目是要求不用第三方库的情况下使用原生C实现linux上的截图,本人利用framebuffer做出了一个截图工具,但是fb里的内容截图出来的是字符界面,并不是Linux上的GUI界面。
读了读一些开源工具,比如flameshot或是gnome,他们也都是用的QT或是GTK,没法参考。
大神们有什么好主意吗,谢谢谢!!!
Linux原生不存在GUI,从一开始,它的核心就是CLI。因此,想从Linux核心库找图形功能是不可能做到的,因为Linux核心功能压根不包含图形功能。你所看到的图形界面是Gnome等桌面管理器封装的,底层是X11或Wayland等协议的实现,例如xorg,严格而言这些都是第三方库,不属于Linux核心。当然,如果你们的需求认为X11也属于核心库,那也可以做到。
以Ubuntu为例,其过去的发行版中,图形界面用的是X11协议,我记得默认用的X11服务器应该是xorg,以后可能要改wayland。再次强调,任何Linux的图形界面都是通过X11或Wayland这样的第三方协议实现的,所以需要服务器,它们不是Linux内核的核心部分。我个人没有做过Wayland的截屏,而对于X11,StackOverflow上可以找到具体的教程,比如这个:https://stackoverflow.com/questions/24988164/c-fast-screenshots-in-linux-for-use-with-opencv
(这是检索Linux截屏得到的结果,但实际上,尽管很多人默认Linux使用X11协议,但并非所有桌面管理器都真的使用X11协议。)