我已经根据我找到的一些指南创建了一个 ubuntu 服务器信息亭,并且我试图在关闭之前停止该信息亭。该信息亭正在自动或通过命令手动启动sudo start kiosk
,并且可以在运行时停止sudo stop kiosk
。
如果浏览器已关闭,信息亭代码将重新打开浏览器。结果是我无法关闭服务器,因为它不断创建新的浏览器会话。
我尝试设置一个简单运行的关闭前脚本sudo stop kiosk
,但它似乎仍然不起作用。
我所做的如下:
- 在目录中创建了一个
stop_kiosk.sh
文件/etc/init.d
。 - 将文件符号链接到
/etc/rc0.d/K00StopKiosk
- 将文件符号链接到
/etc/rc6.d/K00StopKiosk
但是,它会关闭浏览器实例,并立即打开一个新的浏览器实例。所有其他会话都已关闭,我无法继续与服务器交互,只能与浏览器交互。我必须手动关闭电脑(这里使用 virtualbox,所以我只是退出 virtualbox)。
如果我sudo stop kiosk
在关闭之前手动运行,它将正确停止信息亭,关闭浏览器并终止 openbox、xorg 等。然后我可以安全、轻松地关闭,没有任何问题。
kiosk 文件如下:
/opt/kiosk.sh:
#!/bin/bash
xset -dpms
xset s off
openbox-session &
while true; do
rm -rf ~/.{config,cache}/google-chrome/
google-chrome --disable-translate \
--disable infobars \
--disable-suggestions-service \
--disable-save-password-bubble \
--no-first-run 'http://google.com'
done
/etc/init/kiosk.conf:
start on (filesystem and stopped udevtrigger)
stop on runlevel [06]
console output
emits starting-x
respawn
exec sudo -u user startx /etc/X11/Xsession /opt/kiosk.sh --
答案1
您正在使用 的/opt/kiosk.sh
会话文件startx
。因为该脚本中编码了一个无限循环,所以您的脚本每次被终止时都会重新打开浏览器。
与其使用while true
它,不如执行检查以查看该服务是否正在关闭。不幸的是,我对 upstart 不够熟悉,不知道什么测试条件将决定系统何时关闭。像这样的新while
循环可能就足够了(这取代了脚本中的循环kiosk.sh
):
while [[ $(status kiosk) != */stopping* ]]
该循环等待status kiosk
命令返回包含“/stopping”的字符串,并在返回时终止循环。
我希望有更多经验的人upstart
可以纠正我的实施。 :)