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



标题已经暗示了这个问题,那么是什么阻止了此存储库中示例程序的执行 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显示我只安装了内部英特尔显卡。所以我坚持使用 xorg 核心显示驱动程序包,该包默认从xserver-xorg-core安装。

这些变化都没有产生影响。 我执行这些示例的唯一方法是杀死 xorg 会话并让它在 tty 中运行。

有什么想法吗?

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

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

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

要执行任何模式集应用程序,请先通过以下方式禁用显示服务器

sudo systemctl stop gdm3

sudo systemctl stop lightdm

通过八CTL + ALT + F1CTL + ALT + F2CTL + ALT + F3切换到命令行

并执行 $sudo ./modeset

相关内容

最新更新