如何在没有X11或/ dev / fb0的Linux下拍摄屏幕截图?

时间:2014-02-09 12:42:33

标签: c++ linux qt embedded directfb

我正在开发基于Linux的嵌入式系统。它使用Qt进行窗口化,没有Xserver。我的目标是拍摄屏幕截图。

我尝试过使用FBgrab。它失败了,因为我没有/dev/fb0,因为内核中没有启用帧缓冲区。我们正在运行基于Qt的应用程序以在屏幕上显示UI(HDMI)。我也在QT网站上尝试了使用QPixmap和抓取窗口的屏幕截图应用程序。这也是一个失败,因为我无法在系统中运行两个QAppliction,因为它会影响显示。

还有其他方法可以获得屏幕截图吗?

2 个答案:

答案 0 :(得分:1)

您可以根据某些事件或命令使应用程序截取自己的屏幕截图。您可以通过将小部件抓取到像素图,然后将此像素图保存到某处来实现此目的。例如:

QWidget *widget = QApplication::activeWindow();
QPixmap pixmap = QPixmap::grabWidget(widget);
pixmap.save(QString("/path/to/screenshot/screenshot.png"));

答案 1 :(得分:0)

假设您的视频软件堆栈不是完全自定义的,那么您的Linux视频驱动程序应该是FBDEV驱动程序或DRI驱动程序。为了检查这一点,我会告诉你在你的实时盒中搜索/ dev / fb0文件或/ dev / dri /文件夹,但在嵌入式设备中,它们可以很容易地重命名为任何东西,所以唯一的方法就是知道检查视频设备驱动程序源(你会发现它们是驱动程序/视频/如果它们是FBDEV,或者如果它们是DRI则发送到/ drivers / gpu / drm)。

如果它们是FBDEV,那么/ dev / fb0应该可能有不同的名称。如果它们是DRI,您仍然可以在构建Linux内核时启用DRM_FBDEV_EMULATION选项,并拥有FBgrab所依赖的FBDEV设备节点。