嵌入式爱好者

嵌入式爱好者 门户 知识库 查看内容

gdm服务解析

2024-5-31 16:47| 发布者: 金色田野的灿烂| 查看: 274| 评论: 0

类目:  >  知识库     文档编号: 1422

一、systemd Unit服务解析

[Unit]
Description=GNOME Display Manager   #描述这个Unit文件的信息,使用systemctl可以查询到该服务的信息。

# replaces the getty
Conflicts=getty@tty1.service   #描述冲突的模块,如果这个服务在运行则这个服务就不能启动
After=getty@tty1.service #描述的服务启动后这个Unit的服务才能启动,与上面搭配就是替换

# replaces plymouth-quit since it quits plymouth on its own
Conflicts=plymouth-quit.service
After=plymouth-quit.service

# Needs all the dependencies of the services it's replacing
# pulled from getty@.service and plymouth-quit.service
# (except for plymouth-quit-wait.service since it waits until
# plymouth is quit, which we do)
After=rc-local.service plymouth-start.service systemd-user-sessions.service

# GDM takes responsibility for stopping plymouth, so if it fails
# for any reason, make sure plymouth still stops
OnFailure=plymouth-quit.service  #当这个模块启动失败时就会启动描述的模块

[Service] #systemd的.service文件才可以使用这个字段
ExecStartPre=/usr/share/gdm/generate-config  #启动当前服务之前的命令
ExecStart=/usr/sbin/gdm3   #启动当前服务的命令
KillMode=mixed
Restart=always  #定义systemd何种情况会重启当前服务
RestartSec=1s  #自动重启花费的时间
IgnoreSIGPIPE=no
BusName=org.gnome.DisplayManager #D-bus名称
StandardOutput=syslog  
StandardError=inherit
EnvironmentFile=-/etc/default/locale
ExecReload=/usr/share/gdm/generate-config  #systemctl restart服务会执行的命令
ExecReload=/bin/kill -SIGHUP $MAINPID
KeyringMode=shared
ExecStartPre=/usr/lib/gdm3/gdm-wait-for-drm

StandardOutput 指令定义服务的标准输出(stdout)输出位置。可选值有 inheritnulljournalsyslogkmsgjournal+consolesyslog+consolekmsg+console,具体含义如下:

  • inherit:输出到父进程的标准输出(默认)。

  • null:将标准输出重定向到 /dev/null

  • journal:输出到 systemd-journald

  • syslog:输出到系统日志。

  • kmsg:输出到内核消息缓冲区。

  • journal+console:同时输出到 systemd-journald 和控制台。

  • syslog+console:同时输出到系统日志和控制台。

  • kmsg+console:同时输出到内核消息缓冲区和控制台。

EnvironmentFileEnvironmentFile 指令定义从文件中加载环境变量。此文件通常包含一组 key=value 形式的环境变量,每行一个。在服务启动时,这些环境变量将被加载到服务的环境中。

仔细看可以发现该模块没有Insatll段,这一段的内容是描述启动约束的,有三种:

  • WantedBy :systemctl enable时符号链接会放入会放入 /etc/systemd/system 目录下面以 <Target 名> + .wants 后缀构成的子目录中,如 “/etc/systemd/system/multi-user.target.wants/“, RequiredByWantedBy 的作用类似,只不过符号链接会放入 /etc/systemd/system 目录下面以 <Target 名> + .required 后缀构成的子目录中。

  • Also :当前 Unit enable/disable 时,同时 enable/disable 的其他 Unit。

  • Alias :当前 Unit 可用于启动的别名。

从上面可以看出,systemd配置的自启动服务其实就是在/etc/systemd/system/目录及.wanys目录下创建符号链接。

二、调试gdm服务相关命令

gdm服务默认是自启的,一旦关闭,就会出现"卡在logo界面"的现象,实际上如果连接串口会发现系统并未卡死,这时候就可以怀疑是否是gdm没有启动导致登录界面及之后的gnome没有显示在屏幕端。

#关于瑞芯微平台是有一个简单的方法查看gdm服务是否启动的,在进入Ubuntu系统的最后几行打印信息。如果没有启动gdm的话是不会出现的
dma-pl330 fea30000.dma-controller: fill_queue:2184 Bad Desc(3)
#查看服务是否自启动
systemctl list-unit-files [ | grep 服务名]
systemctl is-enabled
#关闭服务自启动
systemctl disable gdm
#启用服务自启动,由于gdm的Unit中没有描述Install字段所以systemd不知道将链接文件放在哪里,所以如果disable删除链接文件后自启肯定是不成功的。
systemctl enable gdm
#启动/关闭/重启服务
systemctl start/stop/restart gdm
#查看服务状态或日志
systemctl status gdm:wq
journalctl -b -u gdm  #journal日志系统可自行查阅是systemd的日志管理部分。


已解决

未解决

只是看看

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2025-7-10 10:01

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部