diff --git a/bin/headlessvnc b/bin/headlessvnc index 5cd1514..e3cffe9 100755 --- a/bin/headlessvnc +++ b/bin/headlessvnc @@ -1,107 +1,59 @@ -#!/bin/bash - -# cd to the local VNC directory, exit if it fails -cd "${HOME}/.vnc" || exit 5 - -# Variable -verbs="start status stop restart help" - -# echo bold text -echobf() { - printf '\033[1m%s\033[0m\n' "$*" +#!/usr/bin/env sh +perror() { + >&2 printf '\033[1;31mERROR:\033[0m \033[1m%s\033[0m\n' "$*" } -# Print an error message -print_error() { - ( - printf '\033[1;31m%s\033[0m ' "ERROR:" - echobf "$*" - ) > /dev/stderr +error_usage() { + perror "invalid usage" + >&2 usage + + exit 1 } -# Print an error and exit -error() { - print_error "$1" - shift - exit "$1" -} - -# Check if the VNC server is running is_running() { - vncserver -list | grep -q '^:1' + vncserver -list | grep -q '^:1' } -# Show a help message -public_help() { - local name - name="$(basename "$0")" - cat << EOF -${name} - Start a VNC server +start() { + if ! is_running; then + set -- vncserver \ + -localhost -alwaysshared \ + -securitytypes none + [ -x ~/.vnc/xstartup ] && set -- "$@" -xstartup ~/.vnc/xstartup -Usage: - ${name} ${verbs// /|} -EOF + "$@" + else + perror "server already started" + exit 2 + fi } -# Show the same help with an error -error_help() { - print_error "Invalid usage" - >&2 public_help - return 1 +stop() { + if is_running; then + vncserver -kill :1 + else + perror "server is not running" + exit 2 + fi } -# Start the VNC server -public_start() { - if ! is_running; then - set -e - vncserver \ - -xstartup ./xstartup \ - -localhost \ - -alwaysshared \ - -securitytypes none \ - -nocursor \ - -geometry 1600x900 - else - error "The VNC server is already running!" 4 - fi +status() { + if is_running; then + printf '\033[1;32m*\033[0m \033[1m%s\n' "the server is running" + else + printf '\033[1;31m*\033[0m \033[1m%s\n' "the server is not running" + fi } -# Check if the server is running -public_status() { - if is_running; then - echobf "The VNC server is running." - tail "./$(cat /proc/sys/kernel/hostname):1.log" | sed 's/^/\t/g' - else - echobf "The VNC server is not running." - fi -} - -# Stop the VNC server -public_stop() { - if is_running; then - vncserver -kill :1 - else - error "The VNC server is not running!" 3 - fi -} - -# Restart the VNC server -public_restart() { - public_stop - public_start -} - -# Parse argument -if [ -n "$1" ]; then - arg="$1" -else - arg=status -fi - -# Main switch -if echo "$verbs" | tr ' ' '\n' | grep -q "$arg"; then - "public_${arg}" -else - error_help -fi - +case "$1" in + ""|status) status ;; + start) start ;; + stop) stop ;; + restart) + stop + start + ;; + *) + error_usage + ;; +esac