从 acpid 运行 awesome-client(使用 dbus)

从 acpid 运行 awesome-client(使用 dbus)

我设置了一个 acpid 规则,每当我收到特定的 acpi 消息时就执行以下命令:

awesome-client "activate_tabletmode()"

activate_tabletmode()我想要在我的 awesome 配置中调用的一些函数在哪里。我知道awesome-client使用 dbus 使 Awesome 的 IPC 成为可能。

我收到以下错误消息:

Failed to open connection to "session" message bus: Using X11 for dbus-daemon
autolaunch was disabled at compile time, set your DBUS_SESSION_BUS_ADDRESS instead

有人能帮我理解这是什么意思吗?我尝试以用户身份而不是 root 身份运行该命令sudo -u,但没有帮助。

答案1

这意味着服务和用户会话在完全独立的环境中运行,因此服务不会自动知道如何进入您的桌面会话。每个用户都有自己的 X11 显示地址,D-Bus 也是如此 - AwesomeWM 运行在“会话总线”上,该总线对于每个用户都是独立的,与全局“系统总线”无关。

(可以有超过一个同时登录用户会话,因此拥有固定路径和地址实际上没有任何意义。

我尝试使用 sudo -u 以用户身份而不是 root 身份运行该命令,但没有帮助。

这是一个好的开始——以相同的 UID 运行命令是访问会话总线的必要条件。但是,你仍然需要告诉它在哪里会话总线是。

幸运的是,在最近的系统中,会话总线路径不再是随机选择的,而是仅基于您的 UID。因此,如果您的用户 ID 是uid=$(id -u fred),则需要设置以下环境变量中的至少一个:

  1. XDG_RUNTIME_DIR="/run/user/$uid"
  2. DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$uid/bus"

例如:

sudo -u fred XDG_RUNTIME_DIR="/run/user/$(id -u fred)" awesome-client "activate_tabletmode()"

相关内容