0

0

如何让 systemd 守护进程运行 DBus 服务

DDD

DDD

发布时间:2025-07-30 18:24:21

|

609人浏览过

|

来源于php中文网

原创

如何让 systemd 守护进程运行 dbus 服务

本文旨在解决 systemd 管理的守护进程无法提供 DBus 服务的问题。通过分析错误信息、理解 session bus 和 system bus 的区别,以及提供详细的配置步骤和示例代码,帮助读者正确配置 systemd 服务,使其能够成功注册并提供 DBus 服务,实现进程间的有效通信。

当使用 systemd 管理的守护进程尝试提供 DBus 服务时,可能会遇到 "Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.example.dirswatcher was not provided by any .service files" 这样的错误。这个错误通常表明 DBus 无法找到与指定服务名对应的进程。解决此问题的关键在于理解 DBus 的工作原理,区分 session bus 和 system bus,并正确配置 systemd 服务和 DBus 配置文件。

理解 Session Bus 和 System Bus

DBus 提供了两种类型的消息总线:session bus 和 system bus。

  • Session Bus: 每个用户会话都有一个 session bus 实例。它主要用于用户级别的应用程序之间的通信,例如 GUI 程序之间的交互。
  • System Bus: 系统只有一个 system bus 实例,它主要用于系统级别的服务之间的通信,例如硬件管理、网络配置等。

配置 Systemd 服务

如果你的守护进程需要与用户会话中的应用程序通信,则应该使用 session bus。如果你的守护进程是系统级别的服务,则应该使用 system bus。

以下是针对 session bus 和 system bus 的配置步骤:

Session Bus 配置

  1. 移除不必要的系统配置: 删除 /etc/dbus-1/system.d/org.example.dirswatcher.conf 文件。Session bus 默认没有 bus-name 限制,因此不需要此配置文件。

  2. 转换 Systemd Unit 为 User Unit: 将 /etc/systemd/system/dirswatcher.service 文件移动到 /etc/systemd/user 或 ~/.config/systemd/user/ 目录下。

  3. 修改 User Unit 文件: 编辑 User Unit 文件,进行以下修改:

    • 删除 User= 参数,因为 user unit 默认以当前用户身份运行。
    • 将 WantedBy=multi-user.target 修改为 WantedBy=default.target。

    示例:

    [Unit]
    Description=Dirs watcher
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/python3 /home/user/file-manager/daemon/dirswatcherd.py
    Restart=always
    
    [Install]
    WantedBy=default.target
  4. 使用 systemctl --user 管理服务: 使用 systemctl --user start dirswatcher.service 启动服务,使用 systemctl --user enable dirswatcher.service 设置开机自启。使用 systemctl --user status dirswatcher.service 查看服务状态。

    Voicepods
    Voicepods

    Voicepods是一个在线文本转语音平台,允许用户在30秒内将任何书面文本转换为音频文件。

    下载
  5. 检查代码中的服务名拼写: 确保代码中注册的 DBus 服务名与配置文件中的服务名一致。例如,将 org.exmaple.dirswatcher 修改为 org.example.dirswatcher。

System Bus 配置

如果你的守护进程需要作为系统服务运行,则需要使用 system bus。

  1. 创建 DBus 配置文件: 在 /etc/dbus-1/system.d/ 目录下创建一个名为 org.example.dirswatcher.conf 的文件,内容如下:

    
      
        
        
        
      
    
  2. 创建 Systemd Unit 文件: 在 /etc/systemd/system/ 目录下创建一个名为 dirswatcher.service 的文件,内容如下:

    [Unit]
    Description=Dirs watcher
    After=network.target
    
    [Service]
    User=omen  # 替换为实际运行服务的用户
    ExecStart=/usr/bin/python3 /home/user/file-manager/daemon/dirswatcherd.py
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  3. 启动并启用服务: 使用 systemctl start dirswatcher.service 启动服务,使用 systemctl enable dirswatcher.service 设置开机自启。使用 systemctl status dirswatcher.service 查看服务状态。

可选:配置 DBus On-Demand Activation

如果希望 DBus 在需要时自动启动服务,可以创建一个 .service 文件,将其放置在以下目录之一:

  • /usr/[local/]share/dbus-1/services/ (系统服务)
  • ~/.local/share/dbus-1/services/ (用户服务)

示例:

~/.local/share/dbus-1/services/org.example.dirswatcher.service
[D-BUS Service]
Name=org.example.dirswatcher
# For direct (non-systemd) start; required but may be /bin/false to require systemd
Exec=/home/user/file-manager/daemon/dirswatcherd.py
# For indirect (systemd) start; optional
SystemdService=dirswatcherd.service

注意事项

  • 确保 systemd 服务文件中的 ExecStart 指向正确的 Python 脚本路径。
  • 使用 journalctl -b -u dirswatcher 命令查看 systemd 日志,以便诊断服务启动失败的原因。
  • 确保 Python 脚本具有执行权限。
  • 根据实际需求选择 session bus 或 system bus。

总结

成功配置 systemd 守护进程以提供 DBus 服务需要理解 session bus 和 system bus 的区别,并正确配置 systemd 服务文件和 DBus 配置文件。通过遵循上述步骤,可以解决 "Error org.freedesktop.DBus.Error.ServiceUnknown" 错误,并实现进程间的有效通信。记住检查日志,确保服务正确启动,并仔细检查配置中的拼写错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

316

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

752

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

93

2025.08.19

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2023.10.25

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

223

2023.12.07

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

0

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号