从新贵脚本访问 dbus 会话总线

Mar*_*cus 5 upstart dbus

我在徘徊是否可以从新贵脚本中访问 DBUS 会话总线。

背景是这样的:
我在用户模式下运行一个 upstart 任务,并用upstart bzr存储库中的Upstart.conf配置文件替换了dbus 配置文件。

现在它想使用gkeyring访问该任务脚本中的 gnome 密钥,这需要访问用户新贵会话总线。默认情况下,我只获取Gnome keyring not available.

当我尝试DBUS_SESSION_BUS_ADDRESS=...在 upstart 脚本中导出时,script/initctl命令只是挂起,在任何地方都没有输出。

这让我相信,因为 upstart 也使用 DBUS,所以使用会话总线是有问题的。有人有解决这个问题的想法吗?

小智 2

这可能对你有用?...

script
    export HOME="/home/puma"
    chdir /home/puma/apps/whatever/bin
    dbus_file=$(ls $HOME/.dbus/session-bus/ -t1 | head -1)
    . "$HOME/.dbus/session-bus/$dbus_file"
    export DBUS_SESSION_BUS_ADDRESS
    exec su -s /bin/sh -c 'export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS;exec /home/puma/apps/whatever/bin/appname' puma 
end script
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 ?


小智 0

如果对于所有想要访问会话总线的进程都DBUS_SESSION_BUS_ADDRESS设置了相同的环境变量,那么您将不会遇到任何问题(请参阅手册)。但是,由于 upstart 任务是在“限制性环境”中运行的,因此您将无法在系统作业中访问该变量(例如 下的变量/etc/init)。但是,如果您将其作为会话作业(例如在 下/usr/share/upstart/sessions),您将可以访问更多的环境变量。此外,此类作业不是以root会话用户身份执行。例如:

start on started dbus
stop on stopping dbus

respawn
respawn limit 10 5

kill timeout 20

exec /PATH/TO/MY/JOB
Run Code Online (Sandbox Code Playgroud)