diff --git a/installJRMC b/installJRMC index 6b8428c..9cd8d1a 100755 --- a/installJRMC +++ b/installJRMC @@ -26,7 +26,7 @@ installJRMC() { _createrepo_webroot="/srv/jriver" _createrepo_user="$(whoami)" _user="$(whoami)" - _available_services=("createrepo" "x11vnc" "mediaserver" "mediacenter" "vnc") + _available_services=("createrepo" "x11vnc" "mediaserver" "mediacenter" "vncserver") _printHelpAndExit() { @@ -85,14 +85,14 @@ OPTIONS Create and enable an x11vnc server (requires an existing X server) --vncpass and --display are valid options (see below) - vnc + vncserver Create and enable a new VNC X server --vncpass PASSWORD Set vnc password for x11vnc access. If no password is set, the script will either use existing password stored in ~/.vnc/jrmc_passwd or use no password --display DISPLAY - Start X11VNC on this display (Default: The current display or :0 if current display + Display to start vncserver/x11vnc (Default: The current display or :0 if current display is unaccessible) createrepo @@ -561,7 +561,7 @@ EOF ####################################### # Installs JRiver Media Center from a repository # Returns: - # 0 if JRiver Media Center installed sucessfully, 1 if installation failed + # 0 if JRiver Media Center installed sucessfully ####################################### _installMCFromRepo() { @@ -581,19 +581,30 @@ EOF' local _mcpkg="MediaCenter" elif [[ "$ID" =~ ^(ubuntu|debian)$ ]]; then wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | _ifSudo apt-key add - > /dev/null 2>&1 - _ifSudo wget "http://dist.jriver.com/latest/mediacenter/mediacenter$_mversion.list" -O "/etc/apt/sources.list.d/jriver.list" > /dev/null 2>&1 + _bash_cmd 'cat <<-EOF > /etc/apt/sources.list.d/jriver.list +deb [arch=amd64,i386,armhf] http://dist.jriver.com/latest/mediacenter/ jessie main +EOF' local _mcpkg="mediacenter$_mversion" fi # Update packages and install JRiver MediaCenter - if _pkg_update > /dev/null 2>&1 && _pkg_install "$_mcpkg" > /dev/null 2>&1; then + if [[ -n $_debug ]]; then + _pkg_update && \ + _pkg_install "$_mcpkg" + else + _pkg_update > /dev/null 2>&1 && \ + _pkg_install "$_mcpkg" > /dev/null 2>&1 + fi + + # shellcheck disable=SC2181 + # Rationale: More compact to check this once + if [[ $? -eq 0 ]]; then echo "JRiver Media Center installed successfully!" return 0 else err "JRiver Media Center installation failed!" - return 1 + exit 1 fi - } @@ -917,13 +928,43 @@ EOF" ####################################### - # Create the VNC password file - # Requires: - # _vncpass + # Create the x11vnc password file # Globals: # _novncauth # Returns: - # 0 if ports opened sucessfully, 1 if not + # 0 if password created sucessfully, 1 if not + ####################################### + _setX11VNCPass() { + + _runDebug "${FUNCNAME[0]}" + + _vncpassfile="$HOME/.vnc/jrmc_passwd" + + if [[ -f "$_vncpassfile" ]]; then + if [[ -z $_vncpass ]]; then + err "Refusing to overwrite existing $_vncpassfile with an empty password" + err "Remove existing $_vncpassfile or set --vncpass to use an empty password" + exit 1 + else + rm -f "$_vncpassfile" + fi + fi + + if [[ -n $_vncpass ]]; then + if ! x11vnc -storepasswd "$_vncpass" "$_vncpassfile"; then + err "Could not create VNC password file" + return 1 + fi + else + _novncauth="true" + fi + } + + + ####################################### + # Create the vncserver password file + # Returns: + # 0 if password created sucessfully, 1 if not ####################################### _setVNCPass() { @@ -931,15 +972,21 @@ EOF" _vncpassfile="$HOME/.vnc/jrmc_passwd" - if [[ -n $_vncpass ]]; then - # Remove existing password file if it exists and write a new one - [[ -f "$_vncpassfile" ]] && rm -f "$_vncpassfile" - if ! x11vnc -storepasswd "$_vncpass" "$_vncpassfile"; then - err "Could not create VNC password file" - return 1 + if [[ -f "$_vncpassfile" ]]; then + if [[ -z $_vncpass ]]; then + err "Refusing to overwrite existing $_vncpassfile with an empty password" + err "Remove existing $_vncpassfile or set --vncpass to use an empty password" + exit 1 + else + rm -f "$_vncpassfile" fi - elif [[ ! -f "$_vncpassfile" ]]; then - _novncauth="true" + fi + + [[ -z $_vncpass ]] && _vncpass="" + + if ! echo "$_vncpass" | vncpasswd -f > "$_vncpassfile"; then + err "Could not create VNC password file" + return 1 fi } @@ -964,8 +1011,6 @@ EOF" _timer_name="jriver-${1}@$_user.timer" _user_specifier="User=%I" fi - - [[ -z $_display ]] && _display="${DISPLAY:-":0"}" } @@ -973,6 +1018,8 @@ EOF" _runDebug "${FUNCNAME[0]}" + [[ -z $_display ]] && _display="${DISPLAY:-":0"}" + _bash_cmd "cat <<-EOF > $_service_fname [Unit] Description=JRiver Media Center $_mversion Media Server @@ -1000,6 +1047,8 @@ EOF" _runDebug "${FUNCNAME[0]}" + [[ -z $_display ]] && _display="${DISPLAY:-":0"}" + _bash_cmd "cat <<-EOF > $_service_fname [Unit] Description=JRiver Media Center $_mversion @@ -1027,11 +1076,12 @@ EOF" _runDebug "${FUNCNAME[0]}" - _setVNCPass - _installPackage tigervnc-server + _setVNCPass + if [[ -z $_display ]]; then + # If we are running on existing X server then increment DISPLAY by one if [[ -n $DISPLAY ]]; then _display=$(( ${DISPLAY#:} + 1 )) _display=":$_display" @@ -1040,12 +1090,6 @@ EOF" fi fi - if [[ "$_novncauth" == "true" ]]; then - _exec_start_cmd="/usr/bin/vncserver $_display -geometry 1440x900 -alwaysshared -fg" - else - _exec_start_cmd="/usr/bin/vncserver $_display -geometry 1440x900 -alwaysshared -fg -rfbauth $HOME/.vnc/jrmc_passwd" - fi - _bash_cmd "cat <<-EOF > $_service_fname [Unit] Description=Remote desktop service (VNC) @@ -1055,7 +1099,7 @@ After=syslog.target network.target Type=simple $_user_specifier ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill $_display > /dev/null 2>&1 || :' -ExecStart=$_exec_start_cmd +ExecStart=/usr/bin/vncserver $_display -geometry 1440x900 -alwaysshared -fg -rfbauth $HOME/.vnc/jrmc_passwd ExecStop=/usr/bin/vncserver -kill $_display [Install] @@ -1071,7 +1115,7 @@ EOF" _installPackage x11vnc - _setVNCPass + _setX11VNCPass if [[ "$_novncauth" == "true" ]]; then _exec_start_cmd="/usr/bin/x11vnc -display $_display -noscr -geometry 1920x1080 -auth guess -forever -bg -nopw" @@ -1244,7 +1288,7 @@ EOF" mediacenter) _serviceMediacenter ;; - vnc) + vncserver) _serviceVNC ;; *)