我有一个简单的应用程序,它可以启动并使用EGL/OpenGL ES绘制彩色全屏。我使用的是DRM和GBM。如果我切换到帧缓冲控制台并从那里启动,它会运行得很好。但是,如果我试图在X服务器处于活动状态时运行它,DRM权限阻止我这样做。我假设这是因为X服务器已经对DRM拥有“主”控制权。有没有办法覆盖这个,让一个DRM应用程序接管屏幕,然后在完成后将控制权返回给X服务器?这比先用ctrl+alt+FX切换到控制台要好。我运行的是Ubuntu 22。
梅萨在xf86drm.h中包含一个“drmSetMaster”函数:https://github.com/freedesktop/mesa-drm/blob/master/xf86drm.h
然而,我只是得到同样的“权限被拒绝”错误。当我以root身份运行时,我得到一个“设备或资源忙碌”错误。
1条答案
按热度按时间6g8kf2rb1#
您要做的是使用KMS API创建一个新的“DRM平面”(aidokyandiaa.“覆盖”)并在那里显示您的内容。DRM API没有“接管屏幕”的机制,它提供给你的是一种创建新平面并在这些平面上显示内容的方法。2然后显示控制器将负责将这些平面合成在一起并显示结果。每个显示控制器都有自己处理平面的方式,但通常最复杂的显示控制器会给予您最大程度地控制平面的组成方式。开始这方面工作的最佳方式是查看内核中DRM驱动程序的源代码。例如,英特尔DRM驱动程序包含一个功能齐全的KMS API实现。这是一个庞大而复杂的驱动程序,但它应该能给予您对KMS API的功能有一个很好的了解。