哪个服务创建 /dev/fb0 节点?

哪个服务创建 /dev/fb0 节点?

我想更新console-setup.service以使用检测屏幕分辨率fbset -s并相应地调整控制台字体大小。对于fbset,我需要/dev/fb0在场,但我不知道应该创建对哪个服务的依赖。/dev/fb0启动时如何创建?

答案1

/dev/fb0一旦第一个帧缓冲区显示驱动程序检测到并初始化相应的显示控制器硬件,内核就会创建它。

如果该驱动程序内置于内核中,那么当用户空间进程开始运行时,它实际上可能已经存在。

如果您添加 udev 规则,例如:

SUBSYSTEM=="graphics", KERNEL=="fb0", TAG+="systemd"

您应该*.device为其获取一个单元,然后可以将其用于依赖项。

如果您添加ENV{SYSTEMD_WANTS}+="your.service"到 udev 规则,udev 将告诉 systemd 在该设备出现后立即启动您的服务,因此fbset如果适合您的计划,您可以作为单独的服务运行。

至少Debian 12已经console-setup.service运行了After=console-screen.service kbd.service local-fs.target,但console-screen.service似乎没有定义。因此,您可以定义自己的console-screen.service运行字体操作fbset和控制台字体操作,并让 udev 触发它

SUBSYSTEM=="graphics", KERNEL=="fb0", ENV{SYSTEMD_WANTS}+="console-screen.service"

一旦设备可用。

那么操作的顺序将是:/dev/fb0出现 -> 您的自定义console-screen.service运行 ->console-setup.service运行。

然后,您可以配置标准console-setup.service以保留控制台字体,并将其设置在您的自定义console-screen.service.

相关内容