Articles of dbus

sd-bus API,sd_bus_request_name返回权限被拒绝

systemd 221中的总线API。当我在系统总线上请求一个对象的名字时,它会输出一个错误,说“权限被拒绝”。 我以root身份运行输出文件。 “sd_bus_request_name(bus,”net.poettering.Calculator,0)“行会引发一个错误:”无法获取服务名称..:权限被拒绝“ 我认为root应该有权限获取对象的名称。 有谁知道如何解决这个问题? 先谢谢你。 以下是http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html中的示例代码: int main(int argc, char *argv[]) { sd_bus_slot *slot = NULL; sd_bus *bus = NULL; int r; r = sd_bus_default_system(&bus); if (r < 0) { fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r)); goto finish; } /* Install the object */ r = sd_bus_add_object_vtable(bus, &slot, "/net/poettering/Calculator", "net.poettering.Calculator", […]

systemd的sd-bus的详细文档

我有一些使用libdbus的项目。 目标是使用systemd的sd-bus而不是libdbus。 有SD – 巴士( 这里 , 这里等)的文件,但该文件不包括D-BUS规范实施的所有方面。 我花了很多时间寻找sd-bus的实现的详细解释,但没有find任何能够帮助我将libdbus的进程工作stream映射到sd-bus上的东西。 任何人都可以帮助我? 一些非官方的文档,序列,任何东西…

在Linux中检测CDROM介质移除/插入的最简单方法是什么?

在Linux中检测CDROM介质移除和插入的最简单方法是什么? 我想写一些简单的代码来处理这个。 例如,只需绑定媒体插入事件并实现处理程序。 谢谢!

什么是dbus守护进程,以及为什么vlc需要它

我已经交叉编译VLC(版本2.1.2)媒体播放器使用buildroot的胳膊板。 我已经使用串行电缆将电路板连接到了我的Linux PC上。 当我尝试在minicom中使用“vlc”命令运行播放器时,它位于根文件系统的/ usr / bin中。 我得到以下错误: 禁止接口错误:无法连接到D-Bus会话守护进程:/ usr / bin / dbus-launchexception终止,出现以下错误:Autolaunch错误:X11初始化失败。 任何人都可以澄清这个错误意味着什么,也可以告诉我什么是dbus,为什么它是我的VLC播放器所必需的。 谢谢你的帮助。

什么是sd-bus(C语言)中的“插槽”

systemd的sd-bus.h文件中有几个API可以select一个slot参数。 这里有一些例子: int sd_bus_call_async(sd_bus *bus, sd_bus_slot **slot, sd_bus_message *m, sd_bus_message_handler_t callback, void *userdata, uint64_t usec); int sd_bus_add_filter(sd_bus *bus, sd_bus_slot **slot, sd_bus_message_handler_t callback, void *userdata); int sd_bus_add_fallback(sd_bus *bus, sd_bus_slot **slot, const char *prefix, sd_bus_message_handler_t callback, void *userdata); 如果调用代码指定了NULL那么它就变成了一个“浮动槽”,我想这意味着调用代码不需要担心它。 我看到的大部分示例源代码就像这个示例项目一样: https : //github.com/tasleson/dbus-signals/blob/6d0e43d02d24ed51a17ce7df15a3a0a64ec0170d/spamsignals.c#L160 它需要一个插槽,然后有一段时间它不重视插槽。 但是它实际上并没有做任何事情。

使用dbus-sendclosuresLinux

我正在编写一个Java应用程序来远程closures我的Linux机器。 桌面应用程序坐在并等待命令发送给它。 我曾尝试使用“shutdown -h”,但这需要sudo权限,不是一个选项。 然后,我find了一种方法来closures没有sudo使用下面的dbus发送解决scheme: dbus-send –print-reply –system –dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown 这工作正常,但我想弄清楚,使用dbus发送,如果有可能做一个类似于“关机3600”,这将在1小时closures计算机的定时关机? 干杯 EEF

有什么好办法让D-Bus这样的东西可以通过防火墙在多台Linux机器上工作?

D-Bus规范说 D-Bus是应用程序彼此交谈的简单方法…目前,通信应用程序在一台计算机上… 我想要D-Bus之类的东西,但是可以在多台Linux机器上工作,并且可能会涉及到防火墙。 例如,如果我的邮件服务器决定接收到一个重要的信息,我希望它将一个事件发送到我家里的电脑可以看到的公共汽车,并可能启动一个linpopup窗口。 我感兴趣的事件比较less见,所以低性能技术是可以的。 但我宁愿不重新发明任何车轮。 我还希望尽可能多的用shell脚本或者其他高级语言编写,而且尽可能less用C语言编写(但是如果需要的话,我愿意调用C API)。 我解释官方的D-Bus网页的方式,他们说可以让D-Bus与多台计算机通话,但是这样做是行不通的 。 编辑 :我对D-Bus的吸引力是发布和订阅的模式: 观察有趣事件的机器将该事件发布到“系统”。 一个对特定事件感兴趣的机器只赞同这些事件。 当事件发生时,“系统”让机器知道。 在D-Bus中,“系统”是一台机器。 我想为多台机器类似的东西。 这就排除了像机器之间的TCP或SMTP通信这样的直接解决scheme。 但我很高兴有一个中央服务器接收所有发布和订阅请求。 我开始认为构build我自己比理解高级消息队列协议(AMQCP)更容易,这对我来说太过于高级了。 性能不是对象。 简单是一个对象。 再一次:我应该看什么软件?

有没有办法获得unix套接字连接的另一端的uid

有没有一种方法让UNIX域套接字侦听器只接受来自某个用户的连接( chmod / chown不能用于抽象套接字afaik),换句话说,就是获取传入连接的uid(在Linux上)? 在Linux上使用抽象的unix套接字的Dbus有一个函数GetConnectionUnixUser ,它被polkit用来确定调用者。 所以我想dbus-daemon必须有办法做到这一点。 有谁知道这是如何工作的?

LEAdvertisingManager1从DBus.ObjectManager.GetManagedObjects中丢失

我正在使用运行Ubuntu和Python 2.7的家庭计算机运行testing,希望Raspberry Pi 3能够使用具有自定义服务和特性的BLE进行广告宣传。 我已经在两个设备上安装了蓝牙版本5.42(使用推荐的方法)以及dbus-python。 我的电脑和Raspberry Pi都能够使用hci0 lescan 0命令做广告,但是我想用bluez示例脚本做广告,例如example-gatt-client.py和example-advertisement.py,这是我想要的使用我自己的自定义特征。 家用电脑 – 内核版本4.4.0-31通用 我能够创build自定义特征和广告运行example-gatt-server.py和example-advertise.py在我的家用电脑上没有问题。 我遇到的一个问题是我需要启用Bluez实验模式, –experimental是在位于/lib/systemd/system/bluetooth.service的bluetooth.service文件中添加/lib/systemd/system/bluetooth.service 。 另外安装dbus-python库也有点麻烦,因为我必须自己为Python2构build和安装它。 advertise.py脚本查找名为“org.bluez.LEAdvertisingManager1”的特定广告界面。 gatt-server.py脚本查找“org.bluez.GattManager1”。 我可以通过运行以下命令来检查该接口是否存在: dbus-send –system –dest=org.bluez –print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects 这些接口被发现,并在我的家用电脑上正常工作。 脚本运行没有问题。 树莓派 – 内核版本4.4.38-V7 + 使用相同的bluez版本和启用的实验性function,运行advertise.py时遇到此错误: LEAdvertisingManager1界面未find。 而当我执行命令“systemctl status bluetooth”时,显示启用了实验标志,但运行时没有看到LEAdvertistingManager1。 dbus-send –system –dest=org.bluez –print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects 然而,我可以运行gatt-server.py脚本而不发出问题,这意味着“org.bluez.GattManager1”被发现并正常工作。 我在这里错过了什么? 我已经search了这个问题,但唯一的build议是启用实验function,并确保我的内核是> = 4.1。

寻找关于如何为Gnome / Ubuntu开发小程序的build议

我是一个linux(主要是ubuntu)用户,对系统的工作原理有一个合理的理解(尽pipe我当然不是 linux的大师!)。 在过去,我用python / GTK开发了小型的跨平台桌面应用程序,我把它们作为独立的文件树交给客户端,所以唯一的依赖关系是Python本身和GTK。 现在我想开发一个ubuntu的小程序 ,我想在GPL 2或者3下发布。 特别是这些是我知道为了实现我的目标而必须学习的新步骤(尽pipe我还没有意识到这一点,但还是有很多可能的 ): 与gnome集成:我希望我的应用程序可以在任务栏中作为applet使用。 使用D-bus:特别是我希望我的小程序为Ubuntu使用新的osd-notification框架,但是与其他applet的通信也是第二次迭代的可能特性。 包装:一旦应用程序达到alpha阶段,我想设置一个公共PPA,但是我也想在官方仓库中使用现有软件包的依赖关系,而不是将这些库再次包含在我自己的包中。 当然,官方文件是我的第一个知识来源,但是根据我在这里收到的关于另一个主题的非常有用的答案的判断 – 我决定转向SO社区收集更多的build议,例如: 是否有额外的步骤,我以前概述,我必须学习,以便能够实施我的项目? 根据您自己的经验,您是否会build议我提前学习这些步骤(因为这些知识将会影响我编写核心function的方式),还是考虑将gnome / d-bus与封装集成为“更高的封装级别“之后可以添加到核心function之上(注意:D-bus将首先用于推送数据,input数据将通过web服务进行检索)? 您是否build议我将应用程序分成两个包(后端和前端)或将它们保存在一个包中? 你知道任何有用的资源,你build议我看看,学习任何我必须的东西吗? 你是否知道我应该知道的任何常见的“初学者的错误”? 但是,这些问题并不是穷尽的,如果你觉得我错过了一些总体情况,那么欢迎你们指点一下正确的方向! 预先感谢您的时间! PS:如果我没有解释我的最终目标,请看看项目仓鼠 :我想要达到的是用户界面(意思是:小程序应该显示状态,点击它应该打开应用程序本身,从中你可以configurationapplet并执行各种操作)。