OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 | 2 |
3 ### BEGIN INIT INFO | 3 ### BEGIN INIT INFO |
4 # Provides: chrome-remote-desktop | 4 # Provides: chrome-remote-desktop |
5 # Required-Start: $remote_fs $syslog | 5 # Required-Start: $remote_fs $syslog |
6 # Required-Stop: $remote_fs $syslog | 6 # Required-Stop: $remote_fs $syslog |
7 # Default-Start: 2 3 4 5 | 7 # Default-Start: 2 3 4 5 |
8 # Default-Stop: 0 1 6 | 8 # Default-Stop: 0 1 6 |
9 # Short-Description: Chrome Remote Desktop service | 9 # Short-Description: Chrome Remote Desktop service |
10 ### END INIT INFO | 10 ### END INIT INFO |
(...skipping 28 matching lines...) Expand all Loading... |
39 sleep 1 | 39 sleep 1 |
40 time_left=$((time_left - 1)) | 40 time_left=$((time_left - 1)) |
41 done | 41 done |
42 (kill -0 $pid 2>/dev/null) || return `wait $pid` | 42 (kill -0 $pid 2>/dev/null) || return `wait $pid` |
43 | 43 |
44 echo command \"$@\" has timed out >&2 | 44 echo command \"$@\" has timed out >&2 |
45 kill $pid | 45 kill $pid |
46 return 1 | 46 return 1 |
47 } | 47 } |
48 | 48 |
| 49 # Usage: run_and_ignore_error [--login] user program [args...] |
| 50 # --login: |
| 51 # Run program in a clean login shell. This requires backgrounding, since |
| 52 # the user's .profile or .login script might be run, which might contain |
| 53 # blocking commands. |
49 run_and_ignore_error() { | 54 run_and_ignore_error() { |
| 55 login_options="" |
| 56 if [ "$1" = "--login" ]; then |
| 57 login_options="-b -i" |
| 58 shift |
| 59 fi |
| 60 |
50 user=$1 | 61 user=$1 |
51 shift | 62 shift |
52 exec=$1 | |
53 shift | |
54 | 63 |
55 set +e | 64 set +e |
56 if [ "$(whoami)" = "$user" ]; then | 65 if [ "$(whoami)" = "$user" ]; then |
57 "$exec" "$@" | 66 "$@" |
58 else | 67 else |
59 shell="$(getent passwd "$user" | cut -d: -f7)" | 68 sudo -u "$user" $login_options "$@" |
60 USER="$user" LOGNAME="$user" SHELL="$shell" start-stop-daemon \ | |
61 --chuid "$user" --exec "$exec" --start -- "$@" | |
62 fi | 69 fi |
63 } | 70 } |
64 | 71 |
65 do_start() { | 72 do_start() { |
66 log_begin_msg "Starting Chrome Remote Desktop host for $1..." | 73 log_begin_msg "Starting Chrome Remote Desktop host for $1..." |
67 run_and_ignore_error $1 "$HOST_PATH" --start | 74 run_and_ignore_error --login $1 "$HOST_PATH" --start |
68 log_end_msg $? | 75 log_end_msg $? |
69 } | 76 } |
70 | 77 |
71 do_stop() { | 78 do_stop() { |
72 log_begin_msg "Stopping Chrome Remote Desktop host for $1..." | 79 log_begin_msg "Stopping Chrome Remote Desktop host for $1..." |
73 run_with_timeout run_and_ignore_error $1 "$HOST_PATH" --stop | 80 run_with_timeout run_and_ignore_error $1 "$HOST_PATH" --stop |
74 log_end_msg $? | 81 log_end_msg $? |
75 } | 82 } |
76 | 83 |
77 do_reload() { | 84 do_reload() { |
78 log_begin_msg "Reloading Chrome Remote Desktop host configuration for $1..." | 85 log_begin_msg "Reloading Chrome Remote Desktop host configuration for $1..." |
79 run_and_ignore_error $1 "$HOST_PATH" --reload | 86 run_and_ignore_error $1 "$HOST_PATH" --reload |
80 log_end_msg $? | 87 log_end_msg $? |
81 } | 88 } |
82 | 89 |
83 do_restart() { | 90 do_restart() { |
84 log_begin_msg "Restarting Chrome Remote Desktop host for $1..." | 91 log_begin_msg "Restarting Chrome Remote Desktop host for $1..." |
85 run_and_ignore_error $1 "$HOST_PATH" --stop | 92 run_and_ignore_error $1 "$HOST_PATH" --stop |
86 run_and_ignore_error $1 "$HOST_PATH" --start | 93 run_and_ignore_error --login $1 "$HOST_PATH" --start |
87 log_end_msg $? | 94 log_end_msg $? |
88 } | 95 } |
89 | 96 |
90 for_each_user() { | 97 for_each_user() { |
91 for user in $USERS; do | 98 for user in $USERS; do |
92 $1 $user | 99 $1 $user |
93 done | 100 done |
94 } | 101 } |
95 | 102 |
96 case "$1" in | 103 case "$1" in |
(...skipping 13 matching lines...) Expand all Loading... |
110 for_each_user do_restart | 117 for_each_user do_restart |
111 ;; | 118 ;; |
112 | 119 |
113 *) | 120 *) |
114 log_success_msg "Usage: /etc/init.d/chrome-remote-desktop" \ | 121 log_success_msg "Usage: /etc/init.d/chrome-remote-desktop" \ |
115 "{start|stop|reload|force-reload|restart}" | 122 "{start|stop|reload|force-reload|restart}" |
116 exit 1 | 123 exit 1 |
117 esac | 124 esac |
118 | 125 |
119 exit 0 | 126 exit 0 |
OLD | NEW |