#!/bin/bash ### BEGIN INIT INFO # Provides: chrome-remote-desktop # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Chrome Remote Desktop service ### END INIT INFO # /etc/init.d/chrome-remote-desktop: Start and stop Chrome Remote Desktop host daemon. HOST_PATH=/opt/google/chrome-remote-desktop/chrome-remote-desktop # Group of users for which Chrome Remote Desktop is enabled. Users are added # to that group when they start the host for the first time. CHROME_REMOTING_GROUP=chrome-remote-desktop test -x $HOST_PATH || exit 0 . /lib/lsb/init-functions if [ "$(whoami)" = "root" ]; then # Extract list of users in the chrome-remoting group. USERS=$(getent group $CHROME_REMOTING_GROUP | awk -F ':' '{ gsub(",", " ", $4); print $4 }') else USERS=$(whoami) fi # Tries to wait for 10 seconds until specified command exits and then kills it. run_with_timeout() { "$@" & pid=$! local time_left=10 while [ $time_left -gt 0 ]; do (kill -0 $pid 2>/dev/null) || return `wait $pid` sleep 1 time_left=$((time_left - 1)) done (kill -0 $pid 2>/dev/null) || return `wait $pid` echo command \"$@\" has timed out >&2 kill $pid return 1 } # Usage: run_and_ignore_error [--login] user program [args...] # --login: # Run program in a clean login shell. This requires backgrounding, since # the user's .profile or .login script might be run, which might contain # blocking commands. run_and_ignore_error() { login_options="" if [ "$1" = "--login" ]; then login_options="-b -i" shift fi user=$1 shift set +e if [ "$(whoami)" = "$user" ]; then "$@" else sudo -u "$user" $login_options "$@" fi } do_start() { log_begin_msg "Starting Chrome Remote Desktop host for $1..." run_and_ignore_error --login $1 "$HOST_PATH" --start log_end_msg $? } do_stop() { log_begin_msg "Stopping Chrome Remote Desktop host for $1..." run_with_timeout run_and_ignore_error $1 "$HOST_PATH" --stop log_end_msg $? } do_reload() { log_begin_msg "Reloading Chrome Remote Desktop host configuration for $1..." run_and_ignore_error $1 "$HOST_PATH" --reload log_end_msg $? } do_restart() { log_begin_msg "Restarting Chrome Remote Desktop host for $1..." run_and_ignore_error $1 "$HOST_PATH" --stop run_and_ignore_error --login $1 "$HOST_PATH" --start log_end_msg $? } for_each_user() { for user in $USERS; do $1 $user done } case "$1" in start) for_each_user do_start ;; stop) for_each_user do_stop ;; reload|force-reload) for_each_user do_reload ;; restart) for_each_user do_restart ;; *) log_success_msg "Usage: /etc/init.d/chrome-remote-desktop" \ "{start|stop|reload|force-reload|restart}" exit 1 esac exit 0