【问题标题】:How can I do "export $(dbus-launch) in booting如何在启动时执行“export $(dbus-launch)”
【发布时间】:2017-12-07 12:50:32
【问题描述】:

我正在使用 GDbus 并进行 dbus 通信。 它使用会话总线。

问题是 dbus-launch。

我在 Yocto 中使用 c++11 运行 dbus。 而且,我必须导出 $(dbus-launch)。

但是,我想在启动时导出 $(dbus-launch) 或相同的东西。 因为 dbus 是由 systemd 启动的。

【问题讨论】:

    标签: yocto dbus gdbus


    【解决方案1】:

    一种解决方案是有一个添加环境变量的配方:

    SRC_URI +=  "file://dbus-env.sh"
    
    do_install_append() {
        install -d -m 0755 ${D}${sysconfdir}/profile.d
        install -m 0755 ${WORKDIR}/dbus-env.sh ${D}${sysconfdir}/profile.d/
    }
    
    FILES_${PN} += "${sysconfdir}/profile.d/dbus-env.sh"
    

    使用 dbus-env.sh

    #!/bin/sh
    
    export $(dbus-launch)
    

    【讨论】:

    • 我试图在 /etc/profile.d 中安装脚本并重新启动。但看起来导出不起作用。
    • 你的脚本有执行权吗? chmod ugo+x /etc/profile.d/yourscript.sh 还有哪些应用需要导出的变量?
    • 我错过了检查模式。我会再试一次。
    • 这是可以制作环境的。但 profile.d 登录后工作。我需要在登录前工作。
    • 如果你使用systemd作为init,你可以添加EnvironmentFile=/tmp/dbus-sessionExecStartPre=/usr/bin/dbus-session-env.shdbus-session-env.shdbus-launch > /tmp/dbus-session然后你可以通过DBUS_SESSION_BUS_ADDRESSDBUS_SESSION_BUS_PIDExecStart
    【解决方案2】:

    /etc/profile$HOME/.profile$HOME/.bashrc 中使用此命令:

    eval \`dbus-launch --auto-syntax`
    

    这将导出具有适当值的"DBUS_SESSION_BUS_ADDRESS""DBUS_SESSION_BUS_PID"

    你也可以使用this script:

    [[ -n $SSH_CLIENT ]] && export $(cat /proc/$(command pgrep -u "$USER"  -f -- "dbus-daemon --session" )/environ| tr '\0' '\n' | command grep "DBUS_SESSION_BUS_ADDRESS=")
    

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2013-12-15
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多