summarylogtreecommitdiffstats
path: root/crd
blob: e4c5d386e3c972c5caa510a70a185cb14781aa8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/bin/bash

function print_red() {
  printf "$(tput setaf 1)$1$(tput sgr0)"
}

function print_green() {
  printf "$(tput setaf 2)$1$(tput sgr0)"
}

function print_blue() {
  printf "$(tput setaf 4)$1$(tput sgr0)"
}

function status() {
  crd_status=$(/opt/google/chrome-remote-desktop/chrome-remote-desktop --get-status)
  print_blue "CRD status: "; print_green "${crd_status}"; printf "\n"
}

function reload() {
  /opt/google/chrome-remote-desktop/chrome-remote-desktop --reload
}

function stop() {
  /opt/google/chrome-remote-desktop/chrome-remote-desktop --stop
  rm -rf ${HOME}/.config/chrome-remote-desktop/pulseaudio*
}

function start() {
  if [ ! -f ${HOME}/.chrome-remote-desktop-session ]
  then
    print_red "Seems like you haven't set this up yet. Try running: "; print_green "crd --setup"; print_red "."; printf "\n"
    exit
  fi

  if [ ! -f ${HOME}/.config/chrome-remote-desktop/host#*.json ]
  then
    print_red "Seems like you haven't activated CRD in your browser. Please do that before trying to run the server."; printf "\n"
    exit
  fi

  rm -rf ${HOME}/.config/chrome-remote-desktop/pulseaudio*
  crd_size=$(cat ${HOME}/.config/chrome-remote-desktop/Size)
  if [ -z "${crd_size}" ]
  then
    /opt/google/chrome-remote-desktop/chrome-remote-desktop --start
  else
    /opt/google/chrome-remote-desktop/chrome-remote-desktop --size="${crd_size}" --start
  fi
}

function restart() {
  stop
  sleep 1
  start
}

function setup() {
  sudo gpasswd -a ${USER} chrome-remote-desktop
  print_blue "Checking that working directory and session file are present"; printf "\n"
  print_blue "That would be "; print_green "${HOME}/.config/chrome-remote-desktop"; print_blue " and"; printf "\n"
  print_green "${HOME}/.chrome-remote-desktop-session"; printf "\n\n"
  [ -d "${HOME}/.config/chrome-remote-desktop" ] || mkdir "${HOME}/.config/chrome-remote-desktop"
  touch ${HOME}/.chrome-remote-desktop-session
  touch ${HOME}/.config/chrome-remote-desktop/Size

  EDITOR="${VISUAL:-${EDITOR:-nano}}"
  if ! which "${EDITOR}" > /dev/null 2>&1
  then
    print_red "Editor "; print_green "${EDITOR}"; print_red " not found, please call setup defining an editor first by"; printf "\n"
    print_red "either exporting "; print_green "EDITOR"; print_red " variable or calling command with "; print_green "EDITOR"; print_red " variable"; printf "\n"
    print_red "(e.g. "; print_green "EDITOR="; print_blue "<editor_of_your_choice>"; print_green " crd --setup"; print_red ")"; printf "\n"
    exit
  fi

  crd_session="${HOME}/.chrome-remote-desktop-session"
  if [[ -z $(cat "${crd_session}") ]]
  then
    echo "# You will have to uncomment one of the following lines for CRD to work" >> "${crd_session}"
    echo "# Remove the # and save the file." >> "${crd_session}"
    echo "# " >> "${crd_session}"
    echo "export \$(dbus-launch)" >> "${crd_session}"
    grep -R "^Exec=" "/usr/share/xsessions/" | sed "s|/usr/.*=|#exec |" >> "${crd_session}"
  fi
  print_blue "Now entering the editor to make the appropriate changes to your session file."; printf "\n"
  read -rsp $"Press any key to continue..." -n1 key; printf "\n\n"
  "${EDITOR}" "${crd_session}"

  crd_size="${HOME}/.config/chrome-remote-desktop/Size"
  print_blue "If you want to set a default size for all clients, please add a"; printf "\n"
  print_blue "value with format "; print_green "[width]x[height]"; print_blue " (e.g "; print_green "1360x768"; print_blue ") in file"; printf "\n"
  print_green "${crd_size}"; print_blue "."; printf "\n"
  print_blue "Remember that this will affect all clients you use."; printf "\n"
  print_blue "If you dont want a default size please leave it blank."; printf "\n"
  print_blue "Now entering the editor to make the appropriate changes to"; printf "\n"
  print_blue "your Size file. Do not enter any comments to this file."; printf "\n"
  read -rsp $"Press any key to continue..." -n1 key; printf "\n\n"
  "${EDITOR}" "${crd_size}"

  print_blue "This completes the setup."; printf "\n\n"
  print_blue "Please remember that you will need to allow Chrome or Chromium"; printf "\n"
  print_blue "to act as a server for this to work at all."; printf "\n\n"
  print_blue "To do that, open "; print_green "https://remotedesktop.google.com/"; print_blue " in your chrome or chromium browser"; printf "\n"
  print_blue "and follow the instructions. Clicking the computer will open"; printf "\n"
  print_blue "it in the browser window in default resolution."; printf "\n"
  print_blue "For a more pleasant chromoting experience, just issue the command: "; print_green "crd --restart"; printf "\n\n"
  print_blue "Happy chromoting! "; print_green ":)"; printf "\n\n"
}

function help() {
  print_blue "Note: You will have to go into chrome or chromium to enable remote"; printf "\n"
  print_blue "connections to this computer before you can run CRD on this machine."; printf "\n\n"
  print_blue "Usage: "; print_green "crd [option]"; printf "\n\n"
  print_blue "Options:"; printf "\n\n"
  print_green "--status"; printf "\n"
  print_blue "Checks whether CRD is running and returns its status."; printf "\n\n"
  print_green "--start"; printf "\n"
  print_blue "Starts CRD after destroying old pulse files."; printf "\n\n"
  print_green "--stop"; printf "\n"
  print_blue "Stops CRD if running, deletes old pulse files."; printf "\n\n"
  print_green "--restart"; printf "\n"
  print_blue "Stops and starts CRD, destroying non-functioning pulse files."; printf "\n\n"
  print_green "--reload"; printf "\n"
  print_blue "Just reloads CRD."; printf "\n\n"
  print_green "--help, -h"; printf "\n"
  print_blue "This help message."; printf "\n\n"
  print_green "--setup"; printf "\n"
  print_blue "Sets up CRD for your system by adding folders, sessions, users"; printf "\n"
  print_blue "and stuff. You should do this first, after a fresh install."; printf "\n\n"
  print_blue "No sound on client? Try returning the files "; print_green "/etc/pulse/daemon.conf"; printf "\n"
  print_blue "and "; print_green "/etc/pulse/client.conf"; print_blue " to their default values, that is, the"; printf "\n"
  print_blue "values commented out with a ';' – deleting any uncommented settings"; printf "\n"
  print_blue "might do the trick, but use your common sense here."; printf "\n\n"
  print_blue "Need another resolution and your Display function on the client"; printf "\n"
  print_blue "throws an error? You can change the client resolution in the host by"; printf "\n"
  print_blue "editing the file: "; print_green "${HOME}/.config/chrome-remote-desktop/Size"; printf "\n"
  print_blue "and adjusting it to whatever resolution you need."; printf "\n"
  print_blue "This will affect all clients though."; printf "\n\n"
}

if [[ $(whoami) = "root" ]]
then
  print_red "Please run this as a normal user!"; printf "\n"
  exit
fi

case $1 in

--status)
  status
  ;;

--restart)
  restart
  ;;

--reload)
  reload
  ;;

--stop)
  stop
  ;;

--start)
  start
  ;;

--setup)
  setup
  ;;

--help|-h)
  help
  ;;

*)
  help
  ;;

esac