#!/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 user action
# Carries out the specified action, ignoring any errors.
run_and_ignore_error() {
user="$1"
action="$2"
set +e
sudo -u "$user" "$HOST_PATH" "$action"
}
do_start() {
log_begin_msg "Starting Chrome Remote Desktop host for $1..."
run_and_ignore_error $1 --start
log_end_msg $?
}
do_stop() {
log_begin_msg "Stopping Chrome Remote Desktop host for $1..."
run_with_timeout run_and_ignore_error $1 --stop
log_end_msg $?
}
do_reload() {
log_begin_msg "Reloading Chrome Remote Desktop host configuration for $1..."
run_and_ignore_error $1 --reload
log_end_msg $?
}
do_restart() {
log_begin_msg "Restarting Chrome Remote Desktop host for $1..."
run_and_ignore_error $1 --stop
run_and_ignore_error $1 --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