我正在使用 init.d 脚本在 xubuntu 驱动的机器上启动类似 kiosk 的应用程序。脚本如下所示:
#!/bin/sh
### BEGIN INIT INFO
# Provides: myapp
# Required-Start: $syslog $local_fs $remote_fs $named $xdm $lightdm $dbus
# Required-Stop: $syslog $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start myapp
# Description:
#
### END INIT INFO
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME=myapp
export XAUTHORITY=/home/myuser/.Xauthority
export DISPLAY=:0
case "${1}" in
start)
xfce4-power-manager
sudo /sbin/runuser myuser -s /bin/bash -c /usr/local/bin/myscript.sh
;;
stop)
echo -n "Stopping myapp..."
killall myscript.sh
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
该myscript.sh
文件启动一个 NodeJS 应用程序,并以非 root 用户身份启动全屏浏览器。但是,有时我需要最终用户能够重新启动机器。我reboot
从 NodeJs 调用本机命令,当我从标准 shell(执行myscript.sh
)启动应用程序时,此命令有效,但当我将其作为 init.d 服务执行时,此命令无效。它似乎缺少一些权限。这是我在中得到的错误syslog
:
Failed to open /dev/initctl: Permission denied
任何想法?