一、systemd Unit服务解析[Unit] Description=GNOME Display Manager
Conflicts=getty@tty1.service After=getty@tty1.service
Conflicts=plymouth-quit.service After=plymouth-quit.service
After=rc-local.service plymouth-start.service systemd-user-sessions.service
OnFailure=plymouth-quit.service [Service] ExecStartPre=/usr/share/gdm/generate-config ExecStart=/usr/sbin/gdm3 KillMode=mixed Restart=always RestartSec=1s IgnoreSIGPIPE=no BusName=org.gnome.DisplayManager StandardOutput=syslog StandardError=inherit EnvironmentFile=-/etc/default/locale ExecReload=/usr/share/gdm/generate-config ExecReload=/bin/kill -SIGHUP $MAINPID KeyringMode=shared ExecStartPre=/usr/lib/gdm3/gdm-wait-for-drm StandardOutput 指令定义服务的标准输出(stdout)输出位置。可选值有 inherit 、null 、journal 、syslog 、kmsg 、journal+console 、syslog+console 和 kmsg+console ,具体含义如下:
inherit :输出到父进程的标准输出(默认)。
null :将标准输出重定向到 /dev/null 。
journal :输出到 systemd-journald 。
syslog :输出到系统日志。
kmsg :输出到内核消息缓冲区。
journal+console :同时输出到 systemd-journald 和控制台。
syslog+console :同时输出到系统日志和控制台。
kmsg+console :同时输出到内核消息缓冲区和控制台。
EnvironmentFile :EnvironmentFile 指令定义从文件中加载环境变量。此文件通常包含一组 key=value 形式的环境变量,每行一个。在服务启动时,这些环境变量将被加载到服务的环境中。
仔细看可以发现该模块没有Insatll 段,这一段的内容是描述启动约束的,有三种: WantedBy :systemctl enable时符号链接会放入会放入 /etc/systemd/system 目录下面以 <Target 名> + .wants 后缀构成的子目录中,如 “/etc/systemd/system/multi-user.target.wants/“, RequiredBy 与WantedBy 的作用类似,只不过符号链接会放入 /etc/systemd/system 目录下面以 <Target 名> + .required 后缀构成的子目录中。
Also :当前 Unit enable/disable 时,同时 enable/disable 的其他 Unit。
Alias :当前 Unit 可用于启动的别名。
从上面可以看出,systemd配置的自启动服务其实就是在/etc/systemd/system/目录及.wanys目录下创建符号链接。 二、调试gdm服务相关命令gdm服务默认是自启的,一旦关闭,就会出现"卡在logo界面"的现象,实际上如果连接串口会发现系统并未卡死,这时候就可以怀疑是否是gdm没有启动导致登录界面及之后的gnome没有显示在屏幕端。 dma-pl330 fea30000.dma-controller: fill_queue:2184 Bad Desc(3)
systemctl list-unit-files [ | grep 服务名] systemctl is-enabled
systemctl disable gdm
systemctl enable gdm
systemctl start/stop/restart gdm
systemctl status gdm:wq journalctl -b -u gdm
|