我想知道是否可以通过 upstart 脚本来访问 DBUS 会话总线。
背景是这样的:
我在用户模式下运行一个 upstart 任务,并将Upstart.conf
dbus 配置文件替换为新贵 bzr存储库。
现在它想使用以下方法访问该任务脚本中的 gnome 密钥环钥匙扣,它需要访问用户的 upstart 会话总线。默认情况下,我只获取Gnome keyring not available
。
当我尝试DBUS_SESSION_BUS_ADDRESS=...
在 upstart 脚本中导出时,script/initctl
命令只是挂起,没有任何输出。
这让我相信,由于 upstart 也使用 DBUS,因此使用会话总线是有问题的。有人有办法解决这个问题吗?
答案1
这可能对你有用?...
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
希望能帮助到你 ?
答案2
如果对于所有想要访问会话总线的进程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