文章目录
/usr/lib/systemd/user/ 这个目录下怎么还有 service
在 Ubuntu 和其他使用 systemd 的 Linux 发行版中,/usr/lib/systemd/user/ 目录用于存放用户级别的 systemd 服务单元文件。这些服务单元文件由 systemd 的用户实例管理,而不是由系统实例管理。用户级别的 systemd 实例允许每个用户启动和管理自己的服务,而不需要系统级别的权限。
用户级别 systemd 服务的用途
用户级别的 systemd 服务主要用于管理用户会话相关的服务和守护进程,例如:
- 图形界面应用程序的后台服务。
- 用户特定的守护进程(如 obexd、音频服务等)。
- 用户会话登录时自动启动的应用程序。
目录结构
- /usr/lib/systemd/user/:存放由系统包提供的用户级别的服务单元文件。这些文件通常由软件包管理器安装和更新。
- ~/.config/systemd/user/:用户自定义的服务单元文件,可以覆盖系统提供的服务单元文件。
自定义和修改用户级别的 systemd 服务
步骤 1: 复制服务单元文件
要自定义服务单元文件,可以将其从 /usr/lib/systemd/user/ 复制到 ~/.config/systemd/user/:
mkdir -p ~/.config/systemd/user
cp /usr/lib/systemd/user/obex.service ~/.config/systemd/user/
步骤 2: 编辑服务单元文件
使用文本编辑器编辑复制后的服务单元文件:
nano ~/.config/systemd/user/obex.service
在文件中修改 ExecStart 行或其他配置项。例如:
[Service]
ExecStart=/usr/bin/obexd -n -r /path/to/share
步骤 3: 重新加载用户级别的 systemd 配置并重启服务
systemctl --user daemon-reload
systemctl --user restart obex.service
步骤 4: 检查服务状态
systemctl --user status obex.service
什么是用户实例,什么是系统实例?
在 systemd 的架构中,存在两种不同的实例管理系统:系统实例(system instance)和用户实例(user instance)。它们分别用于管理系统级别和用户级别的服务和守护进程。
系统实例 (System Instance)
系统实例是系统启动时由 init 进程启动的 systemd 实例,负责管理整个系统的服务和守护进程。这些服务通常涉及系统的核心功能,如网络、文件系统、设备管理等。系统实例的服务文件存放在 /lib/systemd/system/ 和 /etc/systemd/system/ 目录中。
- 服务文件路径: /lib/systemd/system/, /etc/systemd/system/
- 作用: 管理系统范围内的服务,如网络服务、硬件驱动、系统守护进程等。
- 启动命令: systemctl start
- 服务示例: network.service, cron.service, sshd.service
用户实例 (User Instance)
用户实例是为每个用户会话启动的 systemd 实例,负责管理与该用户会话相关的服务和守护进程。用户实例的服务文件存放在 /usr/lib/systemd/user/ 和 ~/.config/systemd/user/ 目录中。
- 服务文件路径: /usr/lib/systemd/user/, ~/.config/systemd/user/
- 作用: 管理用户会话范围内的服务,如桌面环境服务、用户级别的守护进程等。
- 启动命令: systemctl --user start
- 服务示例: obex.service, pulseaudio.service, gvfs.service
启动用户实例
系统实例会在用户登录时自动启动用户实例。用户实例的 systemd 服务管理命令与系统实例类似,但需要加上 --user 选项:
# 启动用户级服务
systemctl --user start <service>
# 停止用户级服务
systemctl --user stop <service>
# 重启用户级服务
systemctl --user restart <service>
# 查看用户级服务状态
systemctl --user status <service>
# 重新加载用户级服务单元文件
systemctl --user daemon-reload
实例
nvidia@nvidia-desktop:~$ ps -ef | grep systemd
gdm 7518 1 0 20:37 ? 00:00:00 /lib/systemd/systemd --user
nvidia 10343 1 0 20:47 ? 00:00:01 /lib/systemd/systemd --user
总结
/usr/lib/systemd/user/ 目录用于存放系统范围内的用户级别服务单元文件,允许每个用户在其会话中启动和管理服务。通过复制和编辑这些文件到用户的配置目录,可以进行自定义配置以满足特定需求。