Revision as of 13:13, 5 April 2009 by Hualiang.miao (talk | contribs)(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff) Contents 1 Development/Tutorials/D-Bus/Autostart Services 2 摘要 3 基本机制 4 创建服务文件 5 安装服务文件 Development/Tutorials/D-Bus/Autostart Services Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文 D-Bus自动启动服务 Tutorial Series D-Bus Previous [[../Introduction|D-Bus介绍]][[../Creating Interfaces|创建D-Bus接口]] What's Next n/a Further Reading n/a 摘要 The D-Bus systems provides a mechanism to autostart applications if they aren't already running when a D-Bus call is made to a service provided by that program. This tutorial demonstrates how to create a D-Bus autostart service and integrate it into your CMake build. 基本机制 Whenever a D-Bus message arrives for the D-Bus server to deliver, it looks for the corresponding service that the message is addressed to on the bus it was sent on. If no such service is currently registered, it then falls back to looking through files kept in the services directory in the D-Bus data path, e.g. /usr/share/dbus-1/services. It looks through each *.service file one by one for a matching service name. It then uses this file to determine what application to launch, waits for the application to finish launching and then (if all goes well) delivers the message. All of this happens transparently to the application the message originated with. 创建服务文件 The service files are simple ".ini style" configuration files, much like standard .desktop file. A valid service file: ends with the suffix .service has a [D-BUS Service] group has a Name and Exec key The contents of an example service file for an application called MyApp might look like this: [D-BUS Service] Name=org.kde.myapp Exec=/usr/bin/myapp The Name and Exec keys will be familiar to anyone who has worked with .desktop files before. Unlike .desktop files, though, the Exec line must contain the full path to the application that is to be started. In the above example, if a message was sent to the org.kde.myapp service but such a service had not yet been registered on the bus, then /usr/bin/myapp will be launched. It is then up to myapp to register the proper service on the bus. 安装服务文件 Once you have created a service file for your application, place it somewhere in the source tree and add a suffix, such as .in to it. This will allow us to process the file during the build to customize the Exec entry without the risk of overwriting the source file. We will be using a simple CMake directive to perform the customization and installation. Since the install prefix is not known until build time, we need to adjust our service file slightly. Using the myapp example again, we might create a file called org.kde.myapp.service that contains the following content: [D-BUS Service] Name=org.kde.myapp [email protected][email protected]/bin/myapp 在CMakeLists.txt文件中加两行： include(DBusMacros) dbus_add_activation_service(org.kde.myapp.service.in) As of CMake 2.6.1, this macro does not exist. However, you can put [[../Accessing_Interfaces/PkgConfigGetVar.cmake|this CMake module file]] in the cmake/ directory of your application. When make install is run, a properly formed service file will be generated and installed to the correct location on disk. Your application is now set to be automatically activated when needed. Retrieved from "https://techbase.kde.org/index.php?title=Archive:Development/Tutorials/D-Bus/Autostart_Services_(zh_CN)&oldid=40450" Category: Tutorial Content is available under Creative Commons License SA 4.0 unless otherwise noted.