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

Mic*_*ael 5 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
Run Code Online (Sandbox Code Playgroud)

另请注意,我的计算机上正在运行 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)
Run Code Online (Sandbox Code Playgroud)

我还添加i915.modeset=1/etc/initramfs-tools/modules重建了它,sudo update-initramfs -u以便它从我的内核内部而不是从 xorg 端加载驱动程序。

还有一种可能是我的驱动程序不支持 KMS,但lspci显示我只安装了内部英特尔显卡。所以我坚持使用默认安装的 xorg 核心显示驱动程序包xserver-xorg-core

这些更改均未生效。我执行这些示例的唯一方法是终止 xorg 会话并让它在 tty 中运行。

有任何想法吗?

Jan*_*ani 5

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

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

另请参见drm-kms(7) 手册页