`/etc/network/if-up.d` 脚本运行,但不启动 GUI 应用程序(例如 firefox-esr)

`/etc/network/if-up.d` 脚本运行,但不启动 GUI 应用程序(例如 firefox-esr)

我需要firefox-esr在网络可用后开始。

这是我所得到的:

sudo tee "/etc/network/if-up.d/upif" > /dev/null << EOFBOOT
#!/bin/bash
DISPLAY=":0"
if [[ "\$IFACE" = "eth0" || "\$IFACE" = "wlan0" ]]; then
    echo "\$(date) \$IFACE" >> /var/log/upif
    firefox-esr &
fi
EOFBOOT
sudo chmod +x "/etc/network/if-up.d/upif"

我在日志文件中获取日期和接口名称,这意味着脚本运行但未firefox-esr启动。

我尝试过的:

  • 添加DISPLAY=":0"
  • grep -inR "firefox" /var/log
  • 使用可执行文件的完整路径,即/usr/bin/firefox-esr
  • 使用sudo firefox-esr &
  • 删除尾随&

没有任何帮助。但是,如果我将其放在IFACE="eth0"shebang 下方,然后sudo /etc/network/if-up.d/upif手动运行,那么您在上面看到的确切脚本就会完成这项工作并启动 Firefox。

我不确定那里出了什么问题。

2018-06-27-raspbian-stretch-lite运行的是 Debian 9.4。

PS 另外,我最初在尝试启动 Firefox 之前逻辑检查它是否已经运行,但是当我意识到 Firefox 根本没有启动时,我将其删除了

更新发现类似的问题:在 NetworkManager if-up.d 脚本中启动 GUI

答案1

网络事件脚本以 root 用户身份运行,但您的桌面环境可能(希望)不是。

一般来说,这似乎是一种有问题的方法。缺少一些东西:

  • Firefox 应以您的登录用户身份运行,而不是 root 用户。
  • Firefox 需要能够对 X 服务器进行身份验证才能连接到它(请参阅~/.Xauthorityman xauth)。
  • 需要设置 Firefox 的环境才能在桌面会话中正常工作(HOMEXDG_RUNTIME_DIR

我建议尝试一种不同的方法,例如让网络脚本将网络状态(通过管道/临时文件/DBus)传递给用户会话中已经运行的东西(例如从启动~/.xinitrc),然后根据需要启动GUI应用程序。

答案2

感谢法达比·纳维,这就是答案:

su pi -c "DISPLAY=:0.0 /usr/bin/firefox-esr &"

关键点:

相关内容