我设置了一个 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)
,则需要设置以下环境变量中的至少一个:
XDG_RUNTIME_DIR="/run/user/$uid"
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()"