【问题标题】:Start systemd service after DRM card0 device在 DRM card0 设备之后启动 systemd 服务
【发布时间】:2022-01-03 11:24:28
【问题描述】:

我有运行电子应用程序的信息亭显示器。 此应用需要在开机时启动。

[Unit]
Description=Display Application
After=network.target getty@tty1.service
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/usr/bin/xinit /usr/bin/electron main.js -- :0 -nocursor -nolisten tcp
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

但由于某种原因,该服务启动得很早,xinit 抱怨没有找到任何屏幕。在第一次 systemd 重新启动后,应用程序正在运行。

我搜索了systemd device,这听起来很有希望。但是将dev-dri-card0 用作RequiresAfter 会在启动时产生Missing Dependency

# ls /dev/dri
by-path  card0  renderD128

# dmesg | grep drm
[    3.609070] systemd[1]: Starting Load Kernel Module drm...
[    3.672741] systemd[1]: modprobe@drm.service: Succeeded.
[    3.673192] systemd[1]: Finished Load Kernel Module drm.
[    4.327074] fb0: switching to inteldrmfb from EFI VGA
[    4.332654] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/bxt_dmc_ver1_07.bin (v1.7)
[    4.356201] i915 0000:00:02.0: [drm] Panel advertises DPCD backlight support, but VBT disagrees. If your backlight controls don't work try booting with i915.enable_dpcd_backlight=1. If your machine needs this, please file a _new_ bug report on drm/i915, see https://gitlab.freedesktop.org/drm/intel/-/wikis/How-to-file-i915-bugs for details.
[    4.367399] [drm] Initialized i915 1.6.0 20200917 for 0000:00:02.0 on minor 0
[    4.376167] fbcon: i915drmfb (fb0) is primary device
[    4.402186] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device
# systemctl list-units -a -t device | grep card0
  dev-dri-card0.device          loaded inactive dead    /dev/dri/card0

我没有胶水这里有什么问题。发现一些帖子说 drm 模块加载到较晚(在 systemd 之后)...将 drm 添加到 initramfs ...没有运气。

【问题讨论】:

    标签: systemd


    【解决方案1】:

    好的,找到了解决办法

    [Unit]
    Description=Display Application
    After=network.target systemd-user-sessions.service
    Conflicts=getty@tty1.service
    
    [Service]
    TTYPath=/dev/tty1
    PAMName=systemd-user
    Environment=NODE_ENV=production
    ExecStart=/usr/bin/xinit /usr/bin/electron main.js -- :0 -quiet -nocursor -nolisten tcp
    Restart=on-failure
    RestartSec=5
    
    [Install]
    Alias=display-manager.service
    WantedBy=multi-user.target
    

    这样systemd-logind 会启动一个用户会话,所有drm 的东西都准备好了。

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多