如何在没有桌面环境的 CentOS 中使用 dbus

Posted

技术标签:

【中文标题】如何在没有桌面环境的 CentOS 中使用 dbus【英文标题】:How to use dbus in CentOS without Desktop Environment 【发布时间】:2019-08-25 17:42:07 【问题描述】:

我的系统是没有 gui 的 centos。我有一个服务器应用程序“侦听”会话dbus 中的方法调用。它显然工作正常。我有pydbuspython3-gobject 安装得很好,我也有dbus-launch 工作。这是服务器应用程序:

from pydbus import SessionBus
from gi.repository import GLib
import time

# Variables / Constants / Instantiation...
bus = SessionBus()
BUS = "org.mybus.demo.test"
loop = GLib.MainLoop()
message_count = 0

class DBusService_XML():
    """
    DBus Service XML Definition.
    type = "i" for integer, "s" for string, "d" for double, "as" list of string data.
    """
    dbus = """
    <node>
        <interface name="">
            <method name='greeting'>
                <arg type="s" name="input" direction="in">
                </arg>
                <arg type="s" name="output" direction="out">
                </arg>
            </method>
        </interface>
    </node>
    """.format(BUS)

    def greeting(self, clientName):
        "Receive and send arg"
        print(" is asking for name".format(clientName))
        return "Hello , Im Kyle".format(clientName)

if __name__ == "__main__":
    bus.publish(BUS, DBusService_XML())
    loop.run()

现在为了调用该服务器方法,从另一个终端(同一个用户)我尝试使用我的客户端应用程序,但失败了,然后我尝试了 gdbus 应用程序,该应用程序失败,错误如下:

# dbus-launch gdbus call --session --dest org.mybus.demo.test --object-path /org/mybus/demo/test --method org.mybus.demo.test.greeting "Julia"
Error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.mybus.demo.test was not provided by any .service files

从另一台具有桌面环境的机器上一切正常。我四处搜寻,但找不到在那种情况下使用 dbus 的方法。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

除非在您从客户端调用该方法时您的服务已经在运行,否则您需要为其启用服务激活,这包括编写一个org.mybus.demo.test.service 文件并将其放入/usr/share/dbus-1/services。见the specification。它可能看起来像:

[D-BUS Service]
Name=org.mybus.demo.test
Exec=/path/to/your/application.py

【讨论】:

以上是关于如何在没有桌面环境的 CentOS 中使用 dbus的主要内容,如果未能解决你的问题,请参考以下文章

Centos7安装桌面视图环境

CentOS桌面环境如何打开终端以及如何将终端加入右键

如何在centos docker容器中支持sshd

CentOS 中 YUM 安装桌面环境

Linux运维系列一 CentOS 7桌面系统加入到Samba4 AD域环境中

如何在Debian中安装桌面和中文环境