]> rtime.felk.cvut.cz Git - novaboot.git/blobdiff - server/novaboot-shell
server: Call "systemctl is-enabled" with --quiet
[novaboot.git] / server / novaboot-shell
index 69fd78a319ca4f833f1141eedcee1650f0facf80..a807cf8a1704b981b7803b60fede90e7604a8a46 100755 (executable)
@@ -78,9 +78,7 @@ print_queue() {
 
 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() {
@@ -91,6 +89,21 @@ read_config() {
     . "${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
@@ -100,6 +113,7 @@ run_subcommand() {
            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:?}";;
@@ -111,9 +125,13 @@ run_subcommand() {
            cd "$HOME/tftproot"
            exec "$@";;
        "on")
-           eval exec "${on_cmd:?}";;
+           power on
+           exit;;
        "off")
-           eval exec "${off_cmd:?}";;
+           power off
+           exit;;
+       *)
+           die "Unknown command: $*";;
     esac
 }
 
@@ -127,7 +145,7 @@ main() {
     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
@@ -168,9 +186,14 @@ main() {
     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 "$@"