簡體   English   中英

在 DRM card0 設備之后啟動 systemd 服務

[英]Start systemd service after DRM card0 device

我有運行 electron 應用程序的信息亭顯示器。 此應用程序需要在啟動時啟動。

[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 設備 但是使用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......沒有運氣。

好的找到了解決方案

[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會啟動一個用戶 session 並且所有的drm東西都准備好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM