locked() {
print_queue
- no_fork=
- #flock -h 2>&1 | grep -q -e "--no-fork" && no_fork=--no-fork
- exec flock $no_fork "$RUN_DIR" "$@"
+ exec flock --no-fork "$RUN_DIR" "$@"
}
unlocked() {
. "${NOVABOOT_SHELL_CONFIG:-$HOME/.novaboot-shell}"
}
+power() {
+ local cmd
+ case "$1" in
+ "on") cmd="${on_cmd:?}";;
+ "off") cmd="${off_cmd:?}";;
+ *) die "Unexpected power parameter";;
+ esac
+
+ if [ "$PPID" -ne 1 ] && systemctl --user is-enabled --quiet novaboot-delayed-power-off.service; then
+ sudo novaboot-power "$1"
+ else
+ eval "$cmd"
+ fi
+}
+
# run_subcommand should be called only after permission checks and/or locking
run_subcommand() {
read_config
echo $NOVABOOT_PPID > $RUN_DIR/ppid
echo 'novaboot-shell: Connected'
# TODO: $reset_begin_cmd
+ [ -n "${on_cmd}" ] && power on
eval exec "${console_cmd:?}";;
"reset")
eval exec "${reset_cmd:?}";;
cd "$HOME/tftproot"
exec "$@";;
"on")
- eval exec "${on_cmd:?}";;
+ power on
+ exit;;
"off")
- eval exec "${off_cmd:?}";;
+ power off
+ exit;;
+ *)
+ die "Unknown command: $*";;
esac
}
NB_ADMIN=
if [ "$1" = "user" ]; then
# Get user name encoded in ~/.ssh/authorized_keys
- NB_USER="$2";
+ export NB_USER="$2";
[ "$3" = "admin" ] && NB_ADMIN=1
set -- $SSH_ORIGINAL_COMMAND
fi
esac
}
-RUN_DIR="$HOME"
+if [ -d "$HOME" ]; then
+ RUN_DIR="$HOME"
+else
+ RUN_DIR="/tmp/novaboot-shell@$USER"
+ mkdir -p "$RUN_DIR"
+fi
-if [ -z "$NOVABOOT_ID" ]; then
+if [ -z "$NOVABOOT_ID" ] && [ "$PPID" -ne 1 ]; then
main "$@"
else
run_subcommand "$@"