mirror of
https://github.com/winapps-org/winapps.git
synced 2025-06-02 13:17:19 +02:00
Merge pull request #144 from KernelGhost/main
Fixed #141, #143 and #145
This commit is contained in:
commit
3a46548224
@ -121,6 +121,7 @@ RDP_USER="MyWindowsUser"
|
||||
RDP_PASS="MyWindowsPassword"
|
||||
#RDP_DOMAIN="MYDOMAIN"
|
||||
#RDP_IP="192.168.123.111"
|
||||
#WAFLAVOR="docker"
|
||||
#RDP_SCALE=100
|
||||
#RDP_FLAGS=""
|
||||
#MULTIMON="true"
|
||||
@ -128,7 +129,11 @@ RDP_PASS="MyWindowsPassword"
|
||||
#FREERDP_COMMAND="xfreerdp"
|
||||
```
|
||||
|
||||
`RDP_USER` and `RDP_PASS` must correspond to a complete Windows user account and password, such as those created during Windows setup or for a domain user. User/PIN combinations are not valid for RDP access.
|
||||
> [!NOTE]
|
||||
> `RDP_USER` and `RDP_PASS` must correspond to a complete Windows user account and password, such as those created during Windows setup or for a domain user. User/PIN combinations are not valid for RDP access.
|
||||
|
||||
> [!NOTE]
|
||||
> If you wish to use the older (deprecated) `virt-manager` method, uncomment and change `WAFLAVOR="docker"` to `WAFLAVOR="libvirt"`.
|
||||
|
||||
#### Configuration Options Explained
|
||||
- When using a pre-existing non-KVM RDP server, you must use `RDP_IP` to specify the location of the Windows server.
|
||||
|
87
bin/winapps
87
bin/winapps
@ -13,6 +13,7 @@ readonly EC_VM_NOT_RUNNING=4
|
||||
readonly EC_VM_NO_IP=5
|
||||
readonly EC_VM_BAD_PORT=6
|
||||
readonly EC_UNSUPPORTED_APP=7
|
||||
readonly EC_INVALID_FLAVOR=8
|
||||
|
||||
# PATHS
|
||||
readonly APPDATA_PATH="${HOME}/.local/share/winapps"
|
||||
@ -26,6 +27,7 @@ readonly SCRIPT_DIR_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && p
|
||||
# OTHER
|
||||
readonly VM_NAME="RDPWindows"
|
||||
readonly RDP_PORT=3389
|
||||
readonly DOCKER_IP="127.0.0.1"
|
||||
# shellcheck disable=SC2155 # Silence warnings regarding masking return values through simultaneous declaration and assignment.
|
||||
readonly RUN="$(date)-${RANDOM}"
|
||||
|
||||
@ -35,6 +37,7 @@ RDP_USER=""
|
||||
RDP_PASS=""
|
||||
RDP_DOMAIN=""
|
||||
RDP_IP=""
|
||||
WAFLAVOR="docker"
|
||||
RDP_FLAGS=""
|
||||
FREERDP_COMMAND=""
|
||||
RDP_SCALE=100
|
||||
@ -71,23 +74,28 @@ function waThrowExit() {
|
||||
"$EC_VM_NOT_RUNNING")
|
||||
dprint "ERROR: VM NOT RUNNING. EXITING."
|
||||
echo -e "${ERROR_TEXT}ERROR: VM NOT RUNNING.${CLEAR_TEXT}"
|
||||
echo "Please ensure the Windows VM is powered on."
|
||||
echo "Please ensure the Windows container/virtual machine is running."
|
||||
;;
|
||||
"$EC_VM_NO_IP")
|
||||
dprint "ERROR: VM UNREACHABLE. EXITING."
|
||||
echo -e "${ERROR_TEXT}ERROR: VM UNREACHABLE.${CLEAR_TEXT}"
|
||||
echo "Please ensure the Windows VM is assigned an IP address."
|
||||
echo "Please ensure the Windows virtual machine is assigned an IP address."
|
||||
;;
|
||||
"$EC_VM_BAD_PORT")
|
||||
dprint "ERROR: RDP PORT CLOSED. EXITING."
|
||||
echo -e "${ERROR_TEXT}ERROR: RDP PORT CLOSED.${CLEAR_TEXT}"
|
||||
echo "Please ensure Remote Desktop is correctly configured on the Windows VM."
|
||||
echo "Please ensure Remote Desktop is correctly configured on the Windows virtual machine."
|
||||
;;
|
||||
"$EC_UNSUPPORTED_APP")
|
||||
dprint "ERROR: APPLICATION NOT FOUND. EXITING."
|
||||
echo -e "${ERROR_TEXT}ERROR: APPLICATION NOT FOUND.${CLEAR_TEXT}"
|
||||
echo "Please ensure the program is correctly configured as an officially supported application."
|
||||
;;
|
||||
"$EC_INVALID_FLAVOR")
|
||||
dprint "ERROR: INVALID FLAVOR. EXITING."
|
||||
echo -e "${ERROR_TEXT}ERROR: INVALID FLAVOR.${CLEAR_TEXT}"
|
||||
echo "Please ensure either 'docker' or 'libvirt' are specified as the flavor in the WinApps configuration file."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Provide generic advice.
|
||||
@ -104,6 +112,34 @@ function dprint() {
|
||||
[ "$DEBUG" = "true" ] && echo "[$RUN] $1" >>"$LOG_PATH"
|
||||
}
|
||||
|
||||
# Name: 'waFixScale'
|
||||
# Role: Since FreeRDP only supports '/scale' values of 100, 140 or 180, find the closest supported argument to the user's configuration.
|
||||
function waFixScale() {
|
||||
# Define variables.
|
||||
local USER_CONFIG_SCALE="$1"
|
||||
local CLOSEST_SCALE=100
|
||||
local VALID_SCALE_1=100
|
||||
local VALID_SCALE_2=140
|
||||
local VALID_SCALE_3=180
|
||||
|
||||
# Calculate the absolute differences.
|
||||
local DIFF_1=$(( USER_CONFIG_SCALE > VALID_SCALE_1 ? USER_CONFIG_SCALE - VALID_SCALE_1 : VALID_SCALE_1 - USER_CONFIG_SCALE ))
|
||||
local DIFF_2=$(( USER_CONFIG_SCALE > VALID_SCALE_2 ? USER_CONFIG_SCALE - VALID_SCALE_2 : VALID_SCALE_2 - USER_CONFIG_SCALE ))
|
||||
local DIFF_3=$(( USER_CONFIG_SCALE > VALID_SCALE_3 ? USER_CONFIG_SCALE - VALID_SCALE_3 : VALID_SCALE_3 - USER_CONFIG_SCALE ))
|
||||
|
||||
# Set the final scale to the valid scale value with the smallest absolute difference.
|
||||
if (( DIFF_1 <= DIFF_2 && DIFF_1 <= DIFF_3 )); then
|
||||
CLOSEST_SCALE="$VALID_SCALE_1"
|
||||
elif (( DIFF_2 <= DIFF_1 && DIFF_2 <= DIFF_3 )); then
|
||||
CLOSEST_SCALE="$VALID_SCALE_2"
|
||||
else
|
||||
CLOSEST_SCALE="$VALID_SCALE_3"
|
||||
fi
|
||||
|
||||
# Return the final scale value.
|
||||
echo "$CLOSEST_SCALE"
|
||||
}
|
||||
|
||||
# Name: 'waLoadConfig'
|
||||
# Role: Load the variables within the WinApps configuration file.
|
||||
function waLoadConfig() {
|
||||
@ -118,6 +154,9 @@ function waLoadConfig() {
|
||||
# Update 'MULTI_FLAG' based on 'MULTIMON'.
|
||||
MULTI_FLAG=$([[ $MULTIMON == "true" ]] && echo "/multimon" || echo "+span")
|
||||
|
||||
# Update $RDP_SCALE.
|
||||
RDP_SCALE=$(waFixScale "$RDP_SCALE")
|
||||
|
||||
# Append additional flags or parameters to FreeRDP.
|
||||
[[ -n $RDP_FLAGS ]] && FREERDP_COMMAND="${FREERDP_COMMAND} ${RDP_FLAGS}"
|
||||
}
|
||||
@ -141,20 +180,25 @@ function waLastRun() {
|
||||
dprint "THIS_RUN: ${CURR_RUN_UNIX_TIME}"
|
||||
}
|
||||
|
||||
# Name: 'waGetFreeRDPCommand'
|
||||
# Role: Determine the correct FreeRDP command to use.
|
||||
function waGetFreeRDPCommand() {
|
||||
# Declare variables.
|
||||
local FREERDP_MAJOR_VERSION="" # Stores the major version of the installed copy of FreeRDP.
|
||||
|
||||
# Attempt to set a FreeRDP command if the command variable is empty.
|
||||
if [ -z "$FREERDP_COMMAND" ]; then
|
||||
# Check for 'xfreerdp'.
|
||||
if command -v xfreerdp &>/dev/null; then
|
||||
# Check FreeRDP major version is 3 or greater.
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | cut -d'.' -f1)
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | head -n 1 | cut -d'.' -f1)
|
||||
if [[ $FREERDP_MAJOR_VERSION =~ ^[0-9]+$ ]] && ((FREERDP_MAJOR_VERSION >= 3)); then
|
||||
FREERDP_COMMAND="xfreerdp"
|
||||
fi
|
||||
# Check for 'xfreerdp3'.
|
||||
elif command -v xfreerdp3 &>/dev/null; then
|
||||
# Check FreeRDP major version is 3 or greater.
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp3 --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | cut -d'.' -f1)
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp3 --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | head -n 1 | cut -d'.' -f1)
|
||||
if [[ $FREERDP_MAJOR_VERSION =~ ^[0-9]+$ ]] && ((FREERDP_MAJOR_VERSION >= 3)); then
|
||||
FREERDP_COMMAND="xfreerdp3"
|
||||
fi
|
||||
@ -199,6 +243,21 @@ function waCheckVMRunning() {
|
||||
! virsh list --state-running --name | grep -q "^${VM_NAME}$" && waThrowExit "$EC_VM_NOT_RUNNING"
|
||||
}
|
||||
|
||||
# Name: 'waCheckContainerRunning'
|
||||
# Role: Throw an error if the Docker container is not running.
|
||||
function waCheckContainerRunning() {
|
||||
# Declare variables.
|
||||
local CONTAINER_STATE=""
|
||||
|
||||
# Determine container state.
|
||||
CONTAINER_STATE=$(docker ps --filter name="windows" --format '{{.Status}}')
|
||||
CONTAINER_STATE=${CONTAINER_STATE,,} # Convert the string to lowercase.
|
||||
CONTAINER_STATE=${CONTAINER_STATE%% *} # Extract the first word.
|
||||
|
||||
# Check container state.
|
||||
[[ "$CONTAINER_STATE" != "up" ]] && waThrowExit "$EC_VM_NOT_RUNNING"
|
||||
}
|
||||
|
||||
# Name: 'waCheckVMContactable'
|
||||
# Role: Assesses whether the Windows VM can be contacted.
|
||||
function waCheckVMContactable() {
|
||||
@ -216,6 +275,8 @@ function waCheckVMContactable() {
|
||||
timeout 5 nc -z "$RDP_IP" "$RDP_PORT" &>/dev/null || waThrowExit "$EC_VM_BAD_PORT"
|
||||
}
|
||||
|
||||
# Name: 'waRunCommand'
|
||||
# Role: Run the requested WinApps command.
|
||||
function waRunCommand() {
|
||||
# Declare variables.
|
||||
local ICON=""
|
||||
@ -322,8 +383,18 @@ mkdir -p "$APPDATA_PATH"
|
||||
waLastRun
|
||||
waLoadConfig
|
||||
waGetFreeRDPCommand
|
||||
waCheckGroupMembership
|
||||
waCheckVMRunning
|
||||
waCheckVMContactable
|
||||
|
||||
if [ "$WAFLAVOR" = "docker" ]; then
|
||||
RDP_IP="$DOCKER_IP"
|
||||
waCheckContainerRunning
|
||||
elif [ "$WAFLAVOR" = "libvirt" ]; then
|
||||
waCheckGroupMembership
|
||||
waCheckVMRunning
|
||||
waCheckVMContactable
|
||||
else
|
||||
waThrowExit "$EC_INVALID_FLAVOR"
|
||||
fi
|
||||
|
||||
waRunCommand "$@"
|
||||
|
||||
dprint "END"
|
||||
|
185
installer.sh
185
installer.sh
@ -24,10 +24,11 @@ readonly EC_NOT_IN_GROUP="7" # Current user not in group 'libvirt' and/or 'k
|
||||
readonly EC_VM_OFF="8" # Windows VM powered off.
|
||||
readonly EC_VM_PAUSED="9" # Windows VM paused.
|
||||
readonly EC_VM_ABSENT="10" # Windows VM does not exist.
|
||||
readonly EC_VM_NO_IP="11" # Windows VM does not have an IP address.
|
||||
readonly EC_VM_BAD_PORT="12" # Windows VM is unreachable via RDP_PORT.
|
||||
readonly EC_RDP_FAIL="13" # FreeRDP failed to establish a connection with the Windows VM.
|
||||
readonly EC_APPQUERY_FAIL="14" # Failed to query the Windows VM for installed applications.
|
||||
readonly EC_CONTAINER_OFF="11" # Docker container is not running.
|
||||
readonly EC_VM_NO_IP="12" # Windows VM does not have an IP address.
|
||||
readonly EC_VM_BAD_PORT="13" # Windows VM is unreachable via RDP_PORT.
|
||||
readonly EC_RDP_FAIL="14" # FreeRDP failed to establish a connection with the Windows VM.
|
||||
readonly EC_APPQUERY_FAIL="15" # Failed to query the Windows VM for installed applications.
|
||||
|
||||
# PATHS
|
||||
# 'BIN'
|
||||
@ -66,12 +67,14 @@ readonly CONFIG_PATH="${HOME}/.config/winapps/winapps.conf" # UNIX path to the W
|
||||
readonly INQUIRER_PATH="./install/inquirer.sh" # UNIX path to the 'inquirer' script, which is used to produce selection menus.
|
||||
|
||||
# REMOTE DESKTOP CONFIGURATION
|
||||
readonly VM_NAME="RDPWindows" # Name of the Windows VM.
|
||||
readonly RDP_PORT=3389 # Port used for RDP on the Windows VM.
|
||||
readonly VM_NAME="RDPWindows" # Name of the Windows VM.
|
||||
readonly RDP_PORT=3389 # Port used for RDP on the Windows VM.
|
||||
readonly DOCKER_IP="127.0.0.1" # Localhost.
|
||||
readonly WINAPPS_CONFIG='RDP_USER="MyWindowsUser"
|
||||
RDP_PASS="MyWindowsPassword"
|
||||
#RDP_DOMAIN="MYDOMAIN"
|
||||
#RDP_IP="192.168.123.111"
|
||||
#WAFLAVOR="docker"
|
||||
#RDP_SCALE=100
|
||||
#RDP_FLAGS=""
|
||||
#MULTIMON="true"
|
||||
@ -90,6 +93,7 @@ RDP_USER="" # Imported variable.
|
||||
RDP_PASS="" # Imported variable.
|
||||
RDP_DOMAIN="" # Imported variable.
|
||||
RDP_IP="" # Imported variable.
|
||||
WAFLAVOR="docker" # Imported variable.
|
||||
RDP_SCALE=100 # Imported variable.
|
||||
RDP_FLAGS="" # Imported variable.
|
||||
MULTIMON="false" # Imported variable.
|
||||
@ -384,6 +388,34 @@ function waCheckExistingInstall() {
|
||||
echo -e "${DONE_TEXT}Done!${CLEAR_TEXT}"
|
||||
}
|
||||
|
||||
# Name: 'waFixScale'
|
||||
# Role: Since FreeRDP only supports '/scale' values of 100, 140 or 180, find the closest supported argument to the user's configuration.
|
||||
function waFixScale() {
|
||||
# Define variables.
|
||||
local USER_CONFIG_SCALE="$1"
|
||||
local CLOSEST_SCALE=100
|
||||
local VALID_SCALE_1=100
|
||||
local VALID_SCALE_2=140
|
||||
local VALID_SCALE_3=180
|
||||
|
||||
# Calculate the absolute differences.
|
||||
local DIFF_1=$(( USER_CONFIG_SCALE > VALID_SCALE_1 ? USER_CONFIG_SCALE - VALID_SCALE_1 : VALID_SCALE_1 - USER_CONFIG_SCALE ))
|
||||
local DIFF_2=$(( USER_CONFIG_SCALE > VALID_SCALE_2 ? USER_CONFIG_SCALE - VALID_SCALE_2 : VALID_SCALE_2 - USER_CONFIG_SCALE ))
|
||||
local DIFF_3=$(( USER_CONFIG_SCALE > VALID_SCALE_3 ? USER_CONFIG_SCALE - VALID_SCALE_3 : VALID_SCALE_3 - USER_CONFIG_SCALE ))
|
||||
|
||||
# Set the final scale to the valid scale value with the smallest absolute difference.
|
||||
if (( DIFF_1 <= DIFF_2 && DIFF_1 <= DIFF_3 )); then
|
||||
CLOSEST_SCALE="$VALID_SCALE_1"
|
||||
elif (( DIFF_2 <= DIFF_1 && DIFF_2 <= DIFF_3 )); then
|
||||
CLOSEST_SCALE="$VALID_SCALE_2"
|
||||
else
|
||||
CLOSEST_SCALE="$VALID_SCALE_3"
|
||||
fi
|
||||
|
||||
# Return the final scale value.
|
||||
echo "$CLOSEST_SCALE"
|
||||
}
|
||||
|
||||
# Name: 'waLoadConfig'
|
||||
# Role: Loads settings specified within the WinApps configuration file.
|
||||
function waLoadConfig() {
|
||||
@ -463,13 +495,13 @@ function waCheckDependencies() {
|
||||
# Check common commands used to launch FreeRDP.
|
||||
if command -v xfreerdp &>/dev/null; then
|
||||
# Check FreeRDP major version is 3 or greater.
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | cut -d'.' -f1)
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | head -n 1 | cut -d'.' -f1)
|
||||
if [[ $FREERDP_MAJOR_VERSION =~ ^[0-9]+$ ]] && ((FREERDP_MAJOR_VERSION >= 3)); then
|
||||
FREERDP_COMMAND="xfreerdp"
|
||||
fi
|
||||
elif command -v xfreerdp3 &>/dev/null; then
|
||||
# Check FreeRDP major version is 3 or greater.
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp3 --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | cut -d'.' -f1)
|
||||
FREERDP_MAJOR_VERSION=$(xfreerdp3 --version | head -n 1 | grep -o -m 1 '\b[0-9]\S*' | head -n 1 | cut -d'.' -f1)
|
||||
if [[ $FREERDP_MAJOR_VERSION =~ ^[0-9]+$ ]] && ((FREERDP_MAJOR_VERSION >= 3)); then
|
||||
FREERDP_COMMAND="xfreerdp3"
|
||||
fi
|
||||
@ -521,30 +553,51 @@ function waCheckDependencies() {
|
||||
fi
|
||||
|
||||
# 'libvirt' / 'virt-manager'.
|
||||
if ! command -v virsh &>/dev/null; then
|
||||
# Complete the previous line.
|
||||
echo -e "${FAIL_TEXT}Failed!${CLEAR_TEXT}\n"
|
||||
if [ "$WAFLAVOR" = "libvirt" ]; then
|
||||
if ! command -v virsh &>/dev/null; then
|
||||
# Complete the previous line.
|
||||
echo -e "${FAIL_TEXT}Failed!${CLEAR_TEXT}\n"
|
||||
|
||||
# Display the error type.
|
||||
echo -e "${ERROR_TEXT}ERROR:${CLEAR_TEXT} ${BOLD_TEXT}MISSING DEPENDENCIES.${CLEAR_TEXT}"
|
||||
# Display the error type.
|
||||
echo -e "${ERROR_TEXT}ERROR:${CLEAR_TEXT} ${BOLD_TEXT}MISSING DEPENDENCIES.${CLEAR_TEXT}"
|
||||
|
||||
# Display the error details.
|
||||
echo -e "${INFO_TEXT}Please install 'Virtual Machine Manager' to proceed.${CLEAR_TEXT}"
|
||||
# Display the error details.
|
||||
echo -e "${INFO_TEXT}Please install 'Virtual Machine Manager' to proceed.${CLEAR_TEXT}"
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo "Debian/Ubuntu-based systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo apt install virt-manager${CLEAR_TEXT}"
|
||||
echo "Red Hat/Fedora-based systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo dnf install virt-manager${CLEAR_TEXT}"
|
||||
echo "Arch Linux systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo pacman -S virt-manager${CLEAR_TEXT}"
|
||||
echo "Gentoo Linux systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo emerge --ask app-emulation/virt-manager${CLEAR_TEXT}"
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo "Debian/Ubuntu-based systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo apt install virt-manager${CLEAR_TEXT}"
|
||||
echo "Red Hat/Fedora-based systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo dnf install virt-manager${CLEAR_TEXT}"
|
||||
echo "Arch Linux systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo pacman -S virt-manager${CLEAR_TEXT}"
|
||||
echo "Gentoo Linux systems:"
|
||||
echo -e " ${COMMAND_TEXT}sudo emerge --ask app-emulation/virt-manager${CLEAR_TEXT}"
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
return "$EC_MISSING_DEPS"
|
||||
# Terminate the script.
|
||||
return "$EC_MISSING_DEPS"
|
||||
fi
|
||||
elif [ "$WAFLAVOR" = "docker" ]; then
|
||||
if ! command -v docker &>/dev/null; then
|
||||
# Complete the previous line.
|
||||
echo -e "${FAIL_TEXT}Failed!${CLEAR_TEXT}\n"
|
||||
|
||||
# Display the error type.
|
||||
echo -e "${ERROR_TEXT}ERROR:${CLEAR_TEXT} ${BOLD_TEXT}MISSING DEPENDENCIES.${CLEAR_TEXT}"
|
||||
|
||||
# Display the error details.
|
||||
echo -e "${INFO_TEXT}Please install 'Docker Desktop on Linux' to proceed.${CLEAR_TEXT}"
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo "Please visit https://docs.docker.com/desktop/install/linux-install/ for more information."
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
return "$EC_MISSING_DEPS"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Print feedback.
|
||||
@ -659,6 +712,45 @@ function waCheckVMRunning() {
|
||||
echo -e "${DONE_TEXT}Done!${CLEAR_TEXT}"
|
||||
}
|
||||
|
||||
# Name: 'waCheckContainerRunning'
|
||||
# Role: Throw an error if the Docker container is not running.
|
||||
function waCheckContainerRunning() {
|
||||
# Print feedback.
|
||||
echo -n "Checking the status of the Windows Docker container/virtual machine... "
|
||||
|
||||
# Declare variables.
|
||||
local CONTAINER_STATE=""
|
||||
|
||||
# Determine container state.
|
||||
CONTAINER_STATE=$(docker ps --filter name="windows" --format '{{.Status}}')
|
||||
CONTAINER_STATE=${CONTAINER_STATE,,} # Convert the string to lowercase.
|
||||
CONTAINER_STATE=${CONTAINER_STATE%% *} # Extract the first word.
|
||||
|
||||
# Check container state.
|
||||
if [[ "$CONTAINER_STATE" != "up" ]]; then
|
||||
# Complete the previous line.
|
||||
echo -e "${FAIL_TEXT}Failed!${CLEAR_TEXT}\n"
|
||||
|
||||
# Display the error type.
|
||||
echo -e "${ERROR_TEXT}ERROR:${CLEAR_TEXT} ${BOLD_TEXT}DOCKER VM NOT RUNNING.${CLEAR_TEXT}"
|
||||
|
||||
# Display the error details.
|
||||
echo -e "${INFO_TEXT}The Windows Docker container/virtual machine is not running.${CLEAR_TEXT}"
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo "Please ensure the Windows Docker container/virtual machine is powered on:"
|
||||
echo -e "${COMMAND_TEXT}docker compose start${CLEAR_TEXT}"
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
return "$EC_CONTAINER_OFF"
|
||||
fi
|
||||
|
||||
# Print feedback.
|
||||
echo -e "${DONE_TEXT}Done!${CLEAR_TEXT}"
|
||||
}
|
||||
|
||||
# Name: 'waCheckVMContactable'
|
||||
# Role: Assesses whether the Windows VM can be contacted (prior to attempting a remote desktop connection).
|
||||
function waCheckVMContactable() {
|
||||
@ -721,7 +813,7 @@ function waCheckVMContactable() {
|
||||
# Role: Tests if the Windows VM is accessible via remote desktop.
|
||||
function waCheckRDPAccess() {
|
||||
# Print feedback.
|
||||
echo -n "Establishing a Remote Desktop connection with the Windows VM... "
|
||||
echo -n "Attempting to establish a Remote Desktop connection with the Windows VM... "
|
||||
|
||||
# Declare variables.
|
||||
local FREERDP_LOG="" # Stores the path of the FreeRDP log file.
|
||||
@ -788,7 +880,7 @@ function waCheckRDPAccess() {
|
||||
echo -e "${ERROR_TEXT}ERROR:${CLEAR_TEXT} ${BOLD_TEXT}REMOTE DESKTOP PROTOCOL FAILURE.${CLEAR_TEXT}"
|
||||
|
||||
# Display the error details.
|
||||
echo -e "${INFO_TEXT}FreeRDP failed to establish a connection with the Windows VM '${VM_NAME}'.${CLEAR_TEXT}"
|
||||
echo -e "${INFO_TEXT}FreeRDP failed to establish a connection with the Windows VM.${CLEAR_TEXT}"
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
@ -796,10 +888,10 @@ function waCheckRDPAccess() {
|
||||
echo "Troubleshooting Tips:"
|
||||
echo " - Ensure the user is logged out of the Windows VM prior to initiating the WinApps installation."
|
||||
echo " - Ensure the credentials within the WinApps configuration file are correct."
|
||||
echo " - Ensure the Windows VM is correctly named as specified within the README."
|
||||
echo " - Ensure 'Remote Desktop' is enabled within the Windows VM."
|
||||
echo " - Ensure you have merged 'RDPApps.reg' into the Windows VM's registry."
|
||||
echo -e " - Utilise a new certificate by removing relevant certificate(s) in ${COMMAND_TEXT}${HOME}/.config/freerdp/server${CLEAR_TEXT}."
|
||||
echo " - If using 'libvirt', ensure the Windows VM is correctly named as specified within the README."
|
||||
echo " - If using 'libvirt', ensure 'Remote Desktop' is enabled within the Windows VM."
|
||||
echo " - If using 'libvirt', ensure you have merged 'RDPApps.reg' into the Windows VM's registry."
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
@ -916,7 +1008,7 @@ function waFindInstalled() {
|
||||
echo -e "${ERROR_TEXT}ERROR:${CLEAR_TEXT} ${BOLD_TEXT}APPLICATION QUERY FAILURE.${CLEAR_TEXT}"
|
||||
|
||||
# Display the error details.
|
||||
echo -e "${INFO_TEXT}Failed to query Windows VM '${VM_NAME}' for installed applications.${CLEAR_TEXT}"
|
||||
echo -e "${INFO_TEXT}Failed to query Windows VM for installed applications.${CLEAR_TEXT}"
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
@ -1268,19 +1360,32 @@ function waInstall() {
|
||||
MULTI_FLAG="+span"
|
||||
fi
|
||||
|
||||
# Update $RDP_SCALE.
|
||||
RDP_SCALE=$(waFixScale "$RDP_SCALE")
|
||||
|
||||
# Append additional FreeRDP flags if required.
|
||||
if [[ -n $RDP_FLAGS ]]; then
|
||||
FREERDP_COMMAND="${FREERDP_COMMAND} ${RDP_FLAGS}"
|
||||
fi
|
||||
|
||||
# Check the group membership of the current user.
|
||||
waCheckGroupMembership
|
||||
if [ "$WAFLAVOR" = "docker" ]; then
|
||||
# Set RDP_IP to localhost.
|
||||
RDP_IP="$DOCKER_IP"
|
||||
|
||||
# Check if the Windows VM is powered on.
|
||||
waCheckVMRunning
|
||||
# Check if the Windows Docker container/virtual machine is powered on.
|
||||
waCheckContainerRunning
|
||||
elif [ "$WAFLAVOR" = "libvirt" ]; then
|
||||
# Check the group membership of the current user.
|
||||
waCheckGroupMembership
|
||||
|
||||
# Check if the Windows VM is contactable.
|
||||
waCheckVMContactable
|
||||
# Check if the Windows VM is powered on.
|
||||
waCheckVMRunning
|
||||
|
||||
# Check if the Windows VM is contactable.
|
||||
waCheckVMContactable
|
||||
else
|
||||
waThrowExit "$EC_INVALID_FLAVOR"
|
||||
fi
|
||||
|
||||
# Test RDP access to the Windows VM.
|
||||
waCheckRDPAccess
|
||||
|
Loading…
x
Reference in New Issue
Block a user