标签: d-bus

可用的 D-Bus 服务列表

是否有可用 D-Bus 服务列表之类的东西?我偶然发现了一些,比如 NetworkManager、Rhythmbox、Skype、HAL 提供的那些。

我想知道是否可以找到一个相当完整的提供服务/接口的列表。

linux d-bus ipc

82
推荐指数
5
解决办法
7万
查看次数

D-Bus 有什么实际用途?

dbus 应该提供“一种应用程序相互通信的简单方法”。

但我仍然不确定它实际上有什么用处。我从未见过dbus有用的情况,我只看到某些dbus组件遇到错误的警告,例如当我从命令行启动终止符时(以便我可以看到错误):

Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
Run Code Online (Sandbox Code Playgroud)

我通过添加NO_AT_BRIDGE=1/etc/environment. 我不知道那有什么作用。

几乎所有 gui 应用程序似乎都与dbus. 有些允许在没有 的情况下启动dbus,即:

terminator --no-dbus
Run Code Online (Sandbox Code Playgroud)

我看不出行为有什么不同。什么应该停止工作,什么时候terminator开始没有dbus

另外,我尝试禁用各种 dbus 组件以查看停止工作的内容:

我删除了/etc/X11/Xsession.d/95dbus_update-activation-env只是为了看看会发生什么。它包含以下代码:

if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] && [ -x "/usr/bin/dbus-update-activation-environment" ]; then
  # subshell so we can unset environment variables
  (
    # unset login-session-specifics
    unset XDG_SEAT
    unset XDG_SESSION_ID
    unset XDG_VTNR …
Run Code Online (Sandbox Code Playgroud)

openbox gui desktop-environment d-bus

51
推荐指数
4
解决办法
9684
查看次数

X、Xorg 和 D-Bus:有什么区别?

在学习 GUI 编程中的某些事情(例如,为应用程序在屏幕上保留空间)的过程中,我必须更多地了解窗口管理器,通常是 Linux 上的 X11(我不确定是否甚至有发行版的,它使用 X11 以外的任何东西,尽管我听说过Wayland,但尚未在任何地方实现。)

我对编程很陌生,而且不耐烦;所以我只是潜入它。现在我正在阅读ICCCM,希望能学到更多。然而,这份文件针对的是比我更了解(方式)的公众。所以我遇到了一些信息,我很想得到一些澄清。

ICCCM第 2 节引用:

请注意,所有者和请求者之间传输的所有数据通常必须通过 X 版本 11 环境中的服务器。一个客户端不能假设另一个客户端可以打开相同的文件甚至直接通信。另一个客户端可能通过完全不同的网络机制与服务器通信(例如,一个客户端可能是 DECnet 而另一个是 TCP/IP)。因此,只有在两个客户端明确同意的情况下,才允许传递对数据的间接引用(例如文件名、主机名和端口号等)。

据我了解,X Window Manager 是建立在 Top of X Server 之上的(感谢维基百科)。在上面的引用中:它说客户端可以使用 DECnet 或 TCP/IP 与服务器通信。到目前为止,我认为“服务器”是一个比喻,现在我怀疑:X 服务器是否和“网络服务器”一样是服务器?我应该如何理解它的功能/定义?

然后,经常会提到 X11、Xorg、X Server 和/或 X Window Manager。它让人困惑:X11 是一个包含 Xorg 和 X Window Manager 的包吗?如果是这样,此 X11 捆绑包中还有其他内容吗?

X 还需要鼠标或键盘或任何其他类型的输入:这也是 X Server 功能的一部分吗?X Window Manager 是否只严格管理显示?

最后,上面的引用还提到了客户端相互通信或不通信:这让我想起了 D-Bus,我曾使用过一些用于学习目的。使用 D-Bus,您还可以触发窗口事件。这让我对程序应该如何相互通信感到有些困惑: *使用 X Server 或使用 D-Bus 进行交互的程序之间有什么区别?*

遗憾的是,这些信息在某种程度上仍然晦涩难懂,它使学习变得更加困难,但希望您能对此有所了解:) 谢谢。

window-manager xorg d-bus x11

45
推荐指数
1
解决办法
2万
查看次数

更改 /etc/machine-id 可以吗?

我克隆了一个磁盘(SSD)并将克隆的磁盘放入另一台机器。现在两个系统在/etc/machine-id. 简单地编辑/etc/machine-id以更改值有什么问题吗?我可以在系统运行时执行此操作吗(或者我是否需要从 Live USB 启动)?

systemd-machine-id-setup更好的选择吗?

天真的使用systemd-machine-id-setup不起作用。我尝试了以下步骤:

nano /etc/machine-id (to remove the existing value)
systemd-machine-id-setup
> Initializing machine ID from D-Bus machine ID.
cat /etc/machine-id
Run Code Online (Sandbox Code Playgroud)

新值与旧值相同。

d-bus systemd

43
推荐指数
2
解决办法
4万
查看次数

dbus:[系统] 无法激活服务“org.freedesktop.login1”:超时

我在其中一台服务器的系统日志中不断收到以下错误消息:

# tail /var/log/syslog
Oct 29 13:48:40 myserver dbus[19617]: [system] Failed to activate service 'org.freedesktop.login1': timed out
Oct 29 13:48:40 myserver dbus[19617]: [system] Activating via systemd: service name='org.freedesktop.login1' unit='dbus-org.freedesktop.login1.service'
Oct 29 13:49:05 myserver dbus[19617]: [system] Failed to activate service 'org.freedesktop.login1': timed out
Oct 29 13:49:05 myserver dbus[19617]: [system] Activating via systemd: service name='org.freedesktop.login1' unit='dbus-org.freedesktop.login1.service'
Run Code Online (Sandbox Code Playgroud)

它们似乎与 ProFTPd 守护程序上的 FTP 登录相关:

# tail /var/log/proftpd/proftpd.log
2015-10-29 13:48:40,433 myserver proftpd[17872] myserver.example.com (remote.example.com[192.168.22.33]): USER switch: Login successful.
2015-10-29 13:48:40,460 myserver proftpd[17872] myserver.example.com (remote.example.com[192.168.22.33]): FTP session …
Run Code Online (Sandbox Code Playgroud)

linux debian d-bus proftpd

40
推荐指数
2
解决办法
12万
查看次数

如何列出 dbus 服务下的所有对象路径?

这是A list of available DBus services的后续问题。

以下 python 代码将列出所有可用的 DBus 服务。

import dbus
for service in dbus.SystemBus().list_names():
    print(service)
Run Code Online (Sandbox Code Playgroud)

我们如何在python中列出服务下的对象路径?如果答案不涉及 python 也没关系,尽管它是首选。

我正在使用 Ubuntu 14.04

d-bus python ipc

21
推荐指数
2
解决办法
2万
查看次数

跨登录会话重用 D-Bus 会话

我通过多个登录会话访问一台机器。会话的生命周期可能重叠也可能不重叠。就我而言,这些登录会话目前始终通过 SSH,但我也更愿意处理本地会话。

我有时需要在这些会话中使用 D-Bus,并且我想在这些登录会话中共享相同的 D-Bus 会话,以便使用 GVFS

推荐的方法是什么?我不想破坏我可能不知道的 D-Bus 的任何使用。我考虑过使用

export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))
Run Code Online (Sandbox Code Playgroud)

但是(从 Ubuntu 12.04 开始)这似乎不对:

  • 这需要一个 X 会话,但我的 SSH 会话可能会或可能不会转发 X 显示,甚至那些没有相同的$DISPLAY
  • 如果没有可用的 X 显示,则dbus-launch抱怨“自动启动错误:X11 初始化失败”。并且不启动守护进程;
  • dbus-launch那个“男人页面状态--autolaunch的选项被认为是一个内部实现细节(...)。无论如何,没有真正的理由在 libdbus 实现之外使用它。”

dbus-launchD-Bus 套件中的其他工具是否支持自动检测运行dbus-daemon并连接到它?~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}如果 D-Bus 是通过 X 连接启动的,则必要的信息在其中,但如果没有可用的 X 连接,则似乎不会存储在任何地方。

我应该拼凑自己的 D-Bus 会话文件吗?如果我这样做,我应该使用目录中的~/.dbus/session-bus文件吗?路径是否/var/lib/dbus/machine-id可靠且可移植?

d-bus session

20
推荐指数
1
解决办法
5984
查看次数

文档:Linux Session 的架构

我正在寻找一个很好的概述文档,描述现代 Linux 会话中涉及的守护进程和服务堆栈。尽管阅读了有关dbus, 和 的各种文档systemd,但我仍然没有了解大局。

特别是,我正在寻找这些问题的答案(不要回答问题,他们应该只说明我在寻找什么样的文档):

  • 登录后,哪个进程是用户会话的root?

  • 应该启动哪些进程,为什么?我正在寻找一个与桌面无关的答案,无论是启动 Gnome、KDE、FVWM 还是简单的 shell。

  • 所有这些守护进程都扮演什么角色?哪些会单独运行,哪些会依赖其他人?哪一个应该由谁开始,为什么,以及多长时间?谁应该维护那个动物园?

我在问,因为我发现启动后我有一个完整的守护进程动物园:systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. 但还不够:除了这些,运行超轻量级PDF查看器zathura 进一步填充我的会话dbus-launchdbus-daemonat-spi2-registryd,和at-spi-bus-launcher,后者启动另一个dbus-daemon。他们以前都没有去过那里,也没有人被邀请过,但他们会留在房子里,给我一种令人毛骨悚然的感觉,直到我退出。我确定我在这里遗漏了一些东西......

另一个例子:登录后,我systemd使用我的用户 UID 运行,但我不知道它应该做什么(从 206 版开始,我认为我不应该将其用作会话管理器,对吗?)。它有一个子进程(sd-pam),我没有找到关于它的文档。

他们在做什么?这个设置背后的想法是什么?

澄清我的观点:在“过去”,知道这login会启动我的登录 shell(bash, 执行~/.profile)就足够了 ,从那时起,我可以继续构建会话,具体取决于情况,可能是启动screen, 或startx.

documentation d-bus systemd session

20
推荐指数
2
解决办法
1940
查看次数

为什么我需要 dbus?

我最近从我的系统中删除了 dbus(连同 consolekit 和 polkit)。我没有注意到任何变化(我从 .xinitrc 作为系统守护程序和每个用户运行它)。但是,很多人声称只需要 dbus,大多数 linux 应用程序都在使用它等等。我的问题是,我为什么需要它?我想我不明白它到底做了什么。我知道这是一个“消息总线系统”,进程通过它等进行通信。而且?我仍然不知道使用它有什么好处。有人可以向我解释一下,最好是“来自现实生活”的例子吗?

linux process d-bus

19
推荐指数
1
解决办法
4843
查看次数

在 crontab 中运行一个 dbus 程序,如何知道 SESSION id?

我需要在 crontab 中运行一些程序,但该程序如何知道 dbus 会话 ID?它仅适用于会话管理器启动的程序。

kde d-bus

17
推荐指数
1
解决办法
1万
查看次数