#!/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 ""; 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