为什么在X11会话中运行时,KMS drmModeSetCrtc()失败,并且权限被拒绝?

时间:2018-10-21 15:56:29

标签: c++ linux xorg video-card modesetting

标题已经暗示了这个问题,因此在此仓库https://github.com/dvdhrm/docs/tree/master/drm-howto

中是什么阻止了示例程序的执行

这是一个显示KMS运行情况的简单程序,因此我下载了该文件,对其进行编译并进行了运行。这是输出:

michael@lord:~/Downloads/docs/drm-howto$ sudo ./modeset
[sudo] password for michael: 
using card '/dev/dri/card0'
mode for connector 59 is 1920x1080
ignoring unused connector 68
ignoring unused connector 71
ignoring unused connector 75
cannot set CRTC for connector 59 (13): Permission denied
exiting

还要注意,我的机器上正在运行X11会话。 似乎X已经在使用设备/dev/dri/card0并将其阻止用于所有其他程序。

这是我的视频卡:

michael@lord:~/Downloads/docs/drm-howto$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)

我还向i915.modeset=1中添加了/etc/initramfs-tools/modules并用sudo update-initramfs -u进行了重建,因此它从内核内部而不是从xorg一侧加载驱动程序。

我的驱动程序还可能不支持KMS,但是lspci已经表明我只安装了内部英特尔图形卡。因此,我坚持使用默认从xserver-xorg-core安装的xorg核心显示驱动程序软件包。

这些更改均未生效。 我可以执行这些示例的唯一方法是杀死xorg会话,并使其在tty中运行。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

它按预期工作。仅允许DRM-Master进行模式设置,并且只能有一个DRM-Master。 X已经是主人。

您可以使用drmSetMaster()成为主节点,也可以在没有当前主节点时打开主设备节点来隐式地成为主节点。 (示例代码隐式变为DRM-Master。)

另请参阅drm-kms(7) man page