15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/bin/bash 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)### BEGIN INIT INFO 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Provides: chrome-remote-desktop 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Required-Start: $remote_fs $syslog 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Required-Stop: $remote_fs $syslog 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Default-Start: 2 3 4 5 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Default-Stop: 0 1 6 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Short-Description: Chrome Remote Desktop service 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)### END INIT INFO 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# /etc/init.d/chrome-remote-desktop: Start and stop Chrome Remote Desktop host daemon. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HOST_PATH=/opt/google/chrome-remote-desktop/chrome-remote-desktop 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Group of users for which Chrome Remote Desktop is enabled. Users are added 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# to that group when they start the host for the first time. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CHROME_REMOTING_GROUP=chrome-remote-desktop 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test -x $HOST_PATH || exit 0 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles). /lib/lsb/init-functions 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)if [ "$(whoami)" = "root" ]; then 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Extract list of users in the chrome-remoting group. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USERS=$(getent group $CHROME_REMOTING_GROUP | 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) awk -F ':' '{ gsub(",", " ", $4); print $4 }') 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USERS=$(whoami) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Tries to wait for 10 seconds until specified command exits and then kills it. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)run_with_timeout() { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "$@" & 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pid=$! 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local time_left=10 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while [ $time_left -gt 0 ]; do 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (kill -0 $pid 2>/dev/null) || return `wait $pid` 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sleep 1 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) time_left=$((time_left - 1)) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (kill -0 $pid 2>/dev/null) || return `wait $pid` 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo command \"$@\" has timed out >&2 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kill $pid 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)# Usage: run_and_ignore_error [--login] user program [args...] 505e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)# --login: 515e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)# Run program in a clean login shell. This requires backgrounding, since 525e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)# the user's .profile or .login script might be run, which might contain 535e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)# blocking commands. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)run_and_ignore_error() { 555e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) login_options="" 565e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) if [ "$1" = "--login" ]; then 575e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) login_options="-b -i" 585e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) shift 595e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) fi 605e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user=$1 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set +e 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if [ "$(whoami)" = "$user" ]; then 665e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "$@" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 685e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) sudo -u "$user" $login_options "$@" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_start() { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_begin_msg "Starting Chrome Remote Desktop host for $1..." 745e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) run_and_ignore_error --login $1 "$HOST_PATH" --start 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_end_msg $? 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_stop() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_begin_msg "Stopping Chrome Remote Desktop host for $1..." 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) run_with_timeout run_and_ignore_error $1 "$HOST_PATH" --stop 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_end_msg $? 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_reload() { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_begin_msg "Reloading Chrome Remote Desktop host configuration for $1..." 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) run_and_ignore_error $1 "$HOST_PATH" --reload 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_end_msg $? 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_restart() { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_begin_msg "Restarting Chrome Remote Desktop host for $1..." 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) run_and_ignore_error $1 "$HOST_PATH" --stop 935e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) run_and_ignore_error --login $1 "$HOST_PATH" --start 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_end_msg $? 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)for_each_user() { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for user in $USERS; do 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $1 $user 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)case "$1" in 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_each_user do_start 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stop) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_each_user do_stop 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reload|force-reload) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_each_user do_reload 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restart) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_each_user do_restart 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_success_msg "Usage: /etc/init.d/chrome-remote-desktop" \ 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{start|stop|reload|force-reload|restart}" 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)esac 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)exit 0 127