为什么 systemd *不*打开`/dev/dri/...`?

为什么 systemd *不*打开`/dev/dri/...`?

现在,当我从 tty6 上的文本控制台切换到 tty3 上的 GNOME 时,我的系统正在执行磁盘 IO。 1.4GB 交换空间正在使用中。

在 tty6 上,我运行了sudo lsof -p 1 | grep dev,以检查是否存在与“类似的问题”我的 6GB 交换空间可以用来做什么?“。根据那里的背景信息,我希望 PID 1 具有 的打开文件描述符/dev/dri/...。但它没有任何!

当我从 tty3 运行命令时也是如此。但输出有所不同,因为它现在包含/dev/input/....

如果我切换回 tty3 并重试等,这些结果是可重复的。

注意:这是我在上游 systemd 中接触过的代码,所以很可能是我的错 :-)。 查看 systemd git commit 消息src/login,我找不到此行为的明显故意更改。

我有一个适用于 Fedora 27 和 Fedora 28 的虚拟机。他们当我启动 Fedora 27 并lsof在串行控制台上运行时,Fedora 27 看起来不错。但是,在 Fedora 28 VM 上,如果我运行chvt 6,则会出现同样的问题。


编辑:如果我将 SELinux 设置为“宽容”(记录了策略违规,但允许),这种明显的回归就会消失。我已将其作为 Fedora 中的问题提交。 SELinux 干扰 systemd-logind 重启代码


在 Fedora 27 VM 上不会发生这种情况

  • systemd-234-10.git5f8984e.fc27.x86_64
  • gnome-shell-3.26.2-5.fc27.x86_64

答案1

我认为 VT 开关导致 gnome-shell 释放输入设备(logind dbus API 中的 ReleaseDevice 方法)。这会导致登录删除设备的 FD。

所以这很可能受到该问题的影响第8344章“session_device_free(sd) 也会删除所有其他该会话的设备 fds”。针对 systemd v239 合并了修复。

我通过测试 systemd 的预发行版本(其中包含修复程序)证实了这一点。

...检查是否与“什么可以使用我的 6GB 交换区?”类似的问题。

很有可能。 v239 也合并了该问题的修复,因此不存在于systemd-238-7.fc28.1.x86_64.

相关内容