Files
Autodesk-Fusion-360-for-Linux/files/setup/autodesk_fusion_installer_x86-64.sh
2024-08-05 22:00:30 +02:00

875 lines
57 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
####################################################################################################
# Name: Autodesk Fusion 360 - Setup Wizard (Linux) #
# Description: This file install Autodesk Fusion on your system. #
# Author: Steve Zabka #
# Author URI: https://cryinkfly.com #
# License: MIT #
# Copyright (c) 2020-2024 #
# Time/Date: 22:00/05.08.2024 #
# Version: 2.0.0-Alpha #
####################################################################################################
###############################################################################################################################################################
# THE INITIALIZATION OF DEPENDENCIES STARTS HERE: #
###############################################################################################################################################################
# CONFIGURATION OF THE COLOR SCHEME:
RED=$'\033[0;31m'
YELLOW=$'\033[0;33m'
GREEN=$'\033[0;32m'
NOCOLOR=$'\033[0m'
# GET THE VALUES OF THE PASSED ARGUMENTS AND ASSIGN THEM TO VARIABLES:
SELECTED_OPTION="$1"
SELECTED_DIRECTORY="$2"
SELECTED_EXTENSIONS="$3"
if [ -z "$SELECTED_DIRECTORY" ] || [ "$SELECTED_DIRECTORY" == "--default" ]; then
SELECTED_DIRECTORY="$HOME/.autodesk_fusion"
fi
# if selected_extensions is set to --full, then all extensions will be installed
if [ "$SELECTED_EXTENSIONS" == "--full" ]; then
SELECTED_EXTENSIONS="CzechlocalizationforF360,HP3DPrintersforAutodesk®Fusion®,MarkforgedforAutodesk®Fusion®,OctoPrintforAutodesk®Fusion360™,UltimakerDigitalFactoryforAutodeskFusion360™"
fi
# URL to download translations po. files <-- Still in progress!!!
UPDATER_TRANSLATIONS_URL="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/update-locale.sh"
declare -A TRANSLATION_URLS=(
["cs_CZ"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/cs_CZ/LC_MESSAGES/autodesk_fusion.po"
["de_DE"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/de_DE/LC_MESSAGES/autodesk_fusion.po"
["en_US"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/en_US/LC_MESSAGES/autodesk_fusion.po"
["es_ES"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/es_ES/LC_MESSAGES/autodesk_fusion.po"
["fr_FR"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/fr_FR/LC_MESSAGES/autodesk_fusion.po"
["it_IT"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/it_IT/LC_MESSAGES/autodesk_fusion.po"
["ja_JP"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/ja_JP/LC_MESSAGES/autodesk_fusion.po"
["ko_KR"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/ko_KR/LC_MESSAGES/autodesk_fusion.po"
["pl_PL"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/pl_PL/LC_MESSAGES/autodesk_fusion.po"
["pt_BR"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/pt_BR/LC_MESSAGES/autodesk_fusion.po"
["tr_TR"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/tr_TR/LC_MESSAGES/autodesk_fusion.po"
["zh_CN"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/zh_CN/LC_MESSAGES/autodesk_fusion.po"
["zh_TW"]="https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/locale/zh_TW/LC_MESSAGES/autodesk_fusion.po"
)
# URL to download winetricks
WINETRICKS_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
# URL to download Fusion360Installer.exe files
#AUTODESK_FUSION_INSTALLER_URL="https://dl.appstreaming.autodesk.com/production/installers/Fusion%20360%20Admin%20Install.exe" <-- Old Link!!!
AUTODESK_FUSION_INSTALLER_URL="https://dl.appstreaming.autodesk.com/production/installers/Fusion%20Admin%20Install.exe"
#AUTODESK_FUSION_INSTALLER_URL="https://dl.appstreaming.autodesk.com/production/installers/Fusion%20Client%20Downloader.exe"
# URL to download Microsoft Edge WebView2.Exec
WEBVIEW2_INSTALLER_URL="https://github.com/aedancullen/webview2-evergreen-standalone-installer-archive/releases/download/109.0.1518.78/MicrosoftEdgeWebView2RuntimeInstallerX64.exe"
##############################################################################################################################################################################
# CHECK THE REQUIRED PACKAGES FOR THE INSTALLER: #
##############################################################################################################################################################################
function check_required_packages {
DISTRO=$(grep "^ID=" /etc/*-release | cut -d'=' -f2 | tr -d '"')
VERSION=$(grep "^VERSION_ID=" /etc/*-release | cut -d'=' -f2 | tr -d '"')
DISTRO_VERSION="$DISTRO $VERSION"
REQUIRED_COMMANDS=("curl" "lsb-release" "glxinfo" "pkexec")
COREUTILS_NEEDED=("ls" "cat" "echo") # Example coreutils commands
# Check for individual coreutils commands
for cmd in "${COREUTILS_NEEDED[@]}"; do
if ! command -v "${cmd}" &>/dev/null; then
echo -e "$(gettext "${RED}A required coreutils command (${cmd}) is not installed!")${NOCOLOR}"
install_required_packages
return
fi
done
# Check for other required commands
for cmd in "${REQUIRED_COMMANDS[@]}"; do
echo -e "$(gettext "${YELLOW}Checking for required package: ${cmd} ...")${NOCOLOR}"
if ! command -v "${cmd}" &>/dev/null; then
echo -e "$(gettext "${RED}The required package (${cmd}) is not installed!")${NOCOLOR}"
install_required_packages
return
fi
done
clear
}
##############################################################################################################################################################################
# INSTALLATION OF THE REQUIRED PACKAGES FOR THE INSTALLER: #
##############################################################################################################################################################################
function install_required_packages {
echo -e "$(gettext "${YELLOW}The installer will install the required packages for the installation!")${NOCOLOR}"
echo -e "$(gettext "${RED}Missing package: ${cmd}")${NOCOLOR}"
sleep 2
if [[ $DISTRO_VERSION == *"Arch"*"Linux"* ]] || [[ $DISTRO_VERSION == *"Manjaro"*"Linux"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo pacman -S curl lsb-release coreutils mesa-demos polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"Debian"*"10"* ]] || [[ $DISTRO_VERSION == *"Debian"*"11"* ]] || [[ $DISTRO_VERSION == *"Debian"*"Sid"* ]] || [[ $DISTRO_VERSION == *"Ubuntu"*"18.04"* ]] \
|| [[ $DISTRO_VERSION == *"Linux Mint"*"19"* ]] || [[ $DISTRO_VERSION == *"Ubuntu"*"20.04"* ]] || [[ $DISTRO_VERSION == *"Linux Mint"*"20"* ]] \
|| [[ $DISTRO_VERSION == *"Ubuntu"*"22.04"* ]] || [[ $DISTRO_VERSION == *"Linux Mint"*"21"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo apt-get install -y curl lsb-release coreutils mesa-utils policykit-1
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"Fedora"*"37"* ]] || [[ $DISTRO_VERSION == *"Fedora"*"38"* ]] || [[ $DISTRO_VERSION == *"Fedora"*"Rawhide"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo dnf install -y curl lsb-release coreutils mesa-utils polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"Gentoo"*"Linux"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo emerge -q net-misc/curl sys-apps/lsb-release sys-apps/coreutils x11-apps/mesa-progs sys-auth/polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"nixos"* ]] || [[ $DISTRO_VERSION == *"NixOS"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo nix-env -iA nixos.curl nixos.lsb_release nixos.coreutils nixos.mesa-utils nixos.polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"openSUSE"*"15.5"* ]] || [[ $DISTRO_VERSION == *"openSUSE"*"15.6"* ]] || [[ $DISTRO_VERSION == *"openSUSE"*"Tumbleweed"* ]] || [[ $DISTRO_VERSION == *"opensuse"*"tumbleweed"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo zypper install -y curl lsb-release coreutils Mesa-demo-x polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"Red Hat Enterprise Linux"*"8"* ]] || [[ $DISTRO_VERSION == *"Red Hat Enterprise Linux"*"9"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo dnf install -y curl lsb-release coreutils mesa-utils policykit-1
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"Solus"*"Linux"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo eopkg -y install curl lsb-release coreutils mesa-utils polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
elif [[ $DISTRO_VERSION == *"Void"*"Linux"* ]]; then
echo -e "$(gettext "${YELLOW}All required packages for the installer will be installed!")${NOCOLOR}"
sleep 2
sudo xbps-install -Sy curl lsb-release coreutils mesa-demos polkit
echo -e "$(gettext "${GREEN}All required packages for the installer are installed!")${NOCOLOR}"
sleep 2
else
echo -e "$(gettext "${RED}The installer doesn't support your current Linux distribution $distro_version at this time!")${NOCOLOR}";
echo -e "$(gettext "${RED}The installer has been terminated!")${NOCOLOR}"
sleep 2
exit;
fi
}
##############################################################################################################################################################################
# DOWNLOAD THE TRANSLATIONS FOR THE INSTALLER: #
##############################################################################################################################################################################
# <-- Still in progress!!!
function download_translations {
curl -o "./locale/update-locale.sh" "$UPDATER_TRANSLATIONS_URL"
chmod +x "./locale/update-locale.sh"
# Curl the translations for the installer
for locale in "${!TRANSLATION_URLS[@]}"; do
local TRANSLATION_FILE_URL="${TRANSLATION_URLS[$locale]}"
local TRANSLATION_FILE_DIRECTORY="./locale/$locale/LC_MESSAGES/autodesk_fusion.po"
mkdir -p "$(dirname "$TRANSLATION_FILE_DIRECTORY")"
curl -L "$TRANSLATION_FILE_URL" -o "$TRANSLATION_FILE_DIRECTORY"
done
source "./locale/update-locale.sh"
# SET THE TEXTDOMAIN FOR THE INSTALLER:
TEXTDOMAIN="autodesk_fusion"
TEXTDOMAINDIR="./locale"
# Load translations
export TEXTDOMAIN
export TEXTDOMAINDIR
}
##############################################################################################################################################################################
# CHECK THE OPTIONS FOR THE INSTALLER: #
##############################################################################################################################################################################
function check_option() {
case "$1" in
"--uninstall")
clear
echo "$(gettext "${YELLOW}Starting the uninstallation process ...${NOCOLOR}")"
# Show a list of two options with:
# 1. Are you sure you want to uninstall Autodesk Fusion and all its components?
# 2. Uninstall only a specific Wineprefix of Autodesk Fusion
read -p "$(gettext "${GREEN}Do you really want to uninstall Autodesk Fusion?${NOCOLOR}") [y/n] " yn
case $yn in
[Yy]* ) echo "$(gettext "${YELLOW}1. Uninstall Autodesk Fusion with all Wineprefixes and components${NOCOLOR}")"
echo "$(gettext "${YELLOW}2. Uninstall only a specific Wineprefix of Autodesk Fusion${NOCOLOR}")"
read -p "$(gettext "${GREEN}Please select an option: ${NOCOLOR}")" uninstall_option
case $uninstall_option in
1) echo "$(gettext "${RED}Uninstall Autodesk Fusion with all Wineprefixes and components${NOCOLOR}")"
rm -rf "$SELECTED_DIRECTORY";
rm -rf "$HOME/.local/share/applications/wine/Programs/Autodesk/Autodesk Fusion.desktop";
echo "$(gettext "${GREEN}Autodesk Fusion has been uninstalled successfully!${NOCOLOR}")"
exit;;
2) echo "$(gettext "${GREEN}Listing all Wineprefixes of Autodesk Fusion in the ${SELECTED_DIRECTORY}/wineprefixes/ directory${NOCOLOR}")"
# Initialize counter
COUNTER=1
for wp in "$SELECTED_DIRECTORY/wineprefixes/"*; do
# Display the counter and wineprefix name
echo "$(gettext "${YELLOW}${COUNTER}. $(basename "$wp")${NOCOLOR}")"
# Increment the counter
COUNTER=$((COUNTER + 1))
done
read -p "$(gettext "${RED}Enter the number of the Wineprefix you want to uninstall or type 'exit' to cancel the process: ${NOCOLOR}")" DEL_SELECTED_WINEPREFIX
case $DEL_SELECTED_WINEPREFIX in
exit) echo "$(gettext "${GREEN}The uninstallation process has been canceled!${NOCOLOR}")"
exit;;
*) DEL_SELECTED_WINEPREFIX=$(ls "$SELECTED_DIRECTORY/wineprefixes/" | sed -n "${DEL_SELECTED_WINEPREFIX}p")
echo "$(gettext "${YELLOW}Uninstalling the selected Wineprefix ...${NOCOLOR}")"
rm -rf "$SELECTED_DIRECTORY/wineprefixes/$DEL_SELECTED_WINEPREFIX";
echo "$(gettext "${GREEN}The selected Wineprefix has been uninstalled successfully!${NOCOLOR}")"
exit;;
esac;;
*) echo "$(gettext "${RED}Please select a valid option!${NOCOLOR}")"
exit;;
esac;;
[Nn]* ) echo -e "$(gettext "${GREEN}The uninstallation process has been canceled!")${NOCOLOR}";
exit;;
* ) echo -e "$(gettext "${YELLOW}Please answer with yes or no!${NOCOLOR}")";
exit;;
esac
;;
"--install")
echo -e "$(gettext "${GREEN}Starting the installation process ...${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}Linux distribution: ${YELLOW}$DISTRO_VERSION${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}Selected option: ${YELLOW}$SELECTED_OPTION${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}Selected directory: ${YELLOW}$SELECTED_DIRECTORY${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}Selected extensions: ${YELLOW}$SELECTED_EXTENSIONS${NOCOLOR}")"
sleep 2
deactivate_window_not_responding_dialog
check_ram
check_gpu_driver
check_disk_space
create_data_structure
download_files
check_and_install_wine
wine_autodesk_fusion_install
wine_autodesk_fusion_check_extensions
wine_autodesk_fusion_install_extensions
autodesk_fusion_shortcuts_load
autodesk_fusion_safe_logfile
reset_window_not_responding_dialog
xdg-open "https://cryinkfly.com/sponsoring/"
exit;;
*)
echo -e "$(gettext "${RED}Invalid option! Please use the --install or --uninstall flag!")${NOCOLOR}";
exit;;
esac
}
##############################################################################################################################################################################
# DEACTIVATE THE WINDOW NOT RESPONDING DIALOG: #
##############################################################################################################################################################################
function deactivate_window_not_responding_dialog() {
# Check if desktop environment is GNOME
if [ "$XDG_CURRENT_DESKTOP" = "GNOME" ]; then
# Disable the "Window not responding" Dialog in GNOME for 30 minutes:
echo -e "$(gettext "${YELLOW}The 'Window not responding' Dialog in GNOME will be disabled for 30 minutes!")${NOCOLOR}"
gsettings set org.gnome.mutter check-alive-timeout 1800000
fi
}
##############################################################################################################################################################################
# CHECKING THE MINIMUM RAM (RANDOM ACCESS MEMORY) REQUIREMENT: #
##############################################################################################################################################################################
function check_ram {
GET_RAM_KILOBYTES=$(grep MemTotal /proc/meminfo | awk '{print $2}') # Get total RAM space in kilobytes
CONVERT_RAM_GIGABYTES=$(echo "scale=2; $GET_RAM_KILOBYTES / 1024 / 1024" | bc) # Convert kilobytes to gigabytes
if (( $(echo "$CONVERT_RAM_GIGABYTES > 4" | bc -l) )); then # Check if RAM is greater than 4 GB
echo -e "$(gettext "${GREEN}The total RAM (Random Access Memory) is greater than 4 GByte ($CONVERT_RAM_GIGABYTES GByte) and Autodesk Fusion will run more stable later!${NOCOLOR}")"
else
echo -e "$(gettext "${RED}The total RAM (Random Access Memory) is not greater than 4 GByte ($CONVERT_RAM_GIGABYTES GByte) and Autodesk Fusion may run unstable later with insufficient RAM memory!${NOCOLOR}")"
read -p "$(gettext "${YELLOW}Are you sure you want to continue with the installation? (y/n)${NOCOLOR}")" yn
case $yn in
y ) ...;;
n ) echo -e "$(gettext "${RED}The installer has been terminated!${NOCOLOR}")";
exit;;
* ) echo -e "$(gettext "${RED}The installer was terminated for inexplicable reasons!${NOCOLOR}")";
exit 1;;
esac
fi
}
##############################################################################################################################################################################
# CHECK GPU DRIVER FOR THE INSTALLER: #
##############################################################################################################################################################################
function check_gpu_driver {
echo -e "$(gettext "${YELLOW}Checking the GPU driver for the installer ...${NOCOLOR}")"
if glxinfo | grep -q "OpenGL vendor string: NVIDIA"; then
echo -e "$(gettext "${GREEN}The NVIDIA GPU driver is installed!${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}The DXVK GPU driver will be used for the installation!${NOCOLOR}")"
GPU_DRIVER="DXVK"
sleep 2
check_gpu_vram
elif glxinfo | grep -q "OpenGL vendor string: AMD"; then
echo -e "$(gettext "${GREEN}The AMD GPU driver is installed!${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}The OpenGL GPU driver will be used for the installation!${NOCOLOR}")"
GPU_DRIVER="OpenGL"
sleep 2
check_gpu_vram
elif glxinfo | grep -q "OpenGL vendor string: Intel"; then
echo -e "$(gettext "${GREEN}The Intel GPU driver is installed!${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}The OpenGL GPU driver will be used for the installation!${NOCOLOR}")"
GPU_DRIVER="OpenGL"
sleep 2
check_gpu_vram
else
echo -e "$(gettext "${red}The GPU driver is not installed or not found on your system!${NOCOLOR}")"
sleep 2
echo -e "$(gettext "${GREEN}The OpenGL GPU driver will be used for the installation!${NOCOLOR}")"
GPU_DRIVER="OpenGL"
sleep 2
check_gpu_vram
fi
}
##############################################################################################################################################################################
# CHECKING THE MINIMUM VRAM (VIDEO RAM) REQUIREMENT: #
##############################################################################################################################################################################
function check_gpu_vram {
# Get the total memory of the graphics card
GET_VRAM_MEGABYTES=$(dmesg | grep -o -P -i "(?<=vram:).*(?=M 0x)")
# Check if the total memory is greater than 1 GByte
if [ "$GET_VRAM_MEGABYTES" -gt 1024 ]; then
echo -e "$(gettext "${GREEN}The total VRAM (Video RAM) is greater than 1 GByte ($CONVERT_RAM_GIGABYTES GByte) and Autodesk Fusion will run more stable later!${NOCOLOR}")"
else
echo -e "$(gettext "${RED}The total VRAM (Video RAM) is not greater than 1 GByte ($CONVERT_RAM_GIGABYTES GByte) and Autodesk Fusion may run unstable later with insufficient VRAM memory!${NOCOLOR}")"
read -p "$(gettext "${YELLOW}Are you sure you want to continue with the installation? (y/n)${NOCOLOR}")" yn
case $yn in
y ) ...;;
n ) echo -e "$(gettext "${RED}The installer has been terminated!${NOCOLOR}")";
exit;;
* ) echo -e "$(gettext "${RED}The installer was terminated for inexplicable reasons!${NOCOLOR}")";
exit 1;;
esac
fi
}
##############################################################################################################################################################################
# CHECKING THE MINIMUM DISK SPACE (DEFAULT: HOME-PARTITION) REQUIREMENT: #
##############################################################################################################################################################################
function check_disk_space {
# Get the free disk memory size in GB
GET_DISK_SPACE=$(df -h $SELECTED_DIRECTORY | awk '{print $4}' | tail -1)
echo -e "$(gettext "${GREEN}The free disk memory size is: $GET_DISK_SPACE${NOCOLOR}")"
if [[ $GET_DISK_SPACE > 10G ]]; then # Check if the selected disk memory is greater than 10GB
echo -e "$(gettext "${GREEN}The free disk memory size is greater than 10GB.${NOCOLOR}")"
else
echo -e "$(gettext "${YELLOW}There is not enough disk free memory to continue installing Fusion on your system!${NOCOLOR}")"
echo -e "$(gettext "${YELLOW}Make more space in your selected disk or select a different hard drive.${NOCOLOR}")"
echo -e "$(gettext "${RED}The installer has been terminated!${NOCOLOR}")"
exit;
fi
}
##############################################################################################################################################################################
# CREATE THE DATA STRUCTURE FOR THE INSTALLER: #
##############################################################################################################################################################################
function create_data_structure() {
mkdir -p "$SELECTED_DIRECTORY/bin" \
"$SELECTED_DIRECTORY/config" \
"$SELECTED_DIRECTORY/downloads/extensions" \
"$SELECTED_DIRECTORY/logs" \
"$SELECTED_DIRECTORY/locale" \
"$SELECTED_DIRECTORY/resources/graphics" \
"$SELECTED_DIRECTORY/resources/styles" \
"$SELECTED_DIRECTORY/wineprefixes/default"
}
##############################################################################################################################################################################
# DOWNLOAD THE REQUIRED FILES FOR THE INSTALLER: #
##############################################################################################################################################################################
function download_files() {
echo -e "$(gettext "${GREEN}Downloading the required files for the installation ...${NOCOLOR}")"
sleep 2
# Download the newest winetricks version:
echo -e "$(gettext "${YELLOW}Downloading the newest winetricks version ...${NOCOLOR}")"
curl -o "$SELECTED_DIRECTORY/bin/winetricks" "$WINETRICKS_URL"
chmod +x "$SELECTED_DIRECTORY/bin/winetricks"
# Search for an existing installer of Autodesk Fusion and download it if it doesn't exist or is older than 7 days
AUTODESK_FUSION_INSTALLER="$SELECTED_DIRECTORY/downloads/FusionClientInstaller.exe"
if [ -f "$AUTODESK_FUSION_INSTALLER" ]; then
echo -e "$(gettext "${GREEN}The Autodesk Fusion installer exists!${NOCOLOR}")"
if find "$AUTODESK_FUSION_INSTALLER" -mtime +7 | grep -q .; then
echo -e "$(gettext "${YELLOW}The Autodesk Fusion installer exists but is older than 7 days and will be updated!")${NOCOLOR}"
rm -rf "$AUTODESK_FUSION_INSTALLER"
curl -L "$AUTODESK_FUSION_INSTALLER_URL" -o "$AUTODESK_FUSION_INSTALLER"
fi
else
echo -e "$(gettext "${YELLOW}The Autodesk Fusion installer doesn't exist and will be downloaded for you!${NOCOLOR}")"
curl -L "$AUTODESK_FUSION_INSTALLER_URL" -o "$AUTODESK_FUSION_INSTALLER"
fi
# Search for an existing installer of WEBVIEW2 and download it if it doesn't exist or is older than 7 days
WEBVIEW2_INSTALLER="$SELECTED_DIRECTORY/downloads/WebView2installer.exe"
if [ -f "$WEBVIEW2_INSTALLER" ]; then
echo -e "$(gettext "${GREEN}The WebView2installer installer exists!${NOCOLOR}")"
if find "$WEBVIEW2_INSTALLER" -mtime +7 | grep -q .; then
echo -e "$(gettext "${YELLOW}The WebView2installer installer exists but is older than 7 days and will be updated!")${NOCOLOR}"
rm -rf "$WEBVIEW2_INSTALLER"
curl -L "$WEBVIEW2_INSTALLER_URL" -o "$WEBVIEW2_INSTALLER"
fi
else
echo -e "$(gettext "${YELLOW}The WebView2installer installer doesn't exist and will be downloaded for you!${NOCOLOR}")"
curl -L "$WEBVIEW2_INSTALLER_URL" -o "$WEBVIEW2_INSTALLER"
fi
# Download all tested extensions for Autodesk Fusion 360 on Linux
download_extensions_files
}
# Download an extension if it doesn't exist or is older than 7 days
function download_extensions_files {
echo -e "$(gettext "${YELLOW}Downloading the tested extensions for Autodesk Fusion on Linux ...${NOCOLOR}")"
download_extension "Ceska_lokalizace_pro_Autodesk_Fusion.exe" \
"https://github.com/cryinkfly/Autodesk-Fusion-360-for-Linux/raw/main/files/extensions/Ceska_lokalizace_pro_Autodesk_Fusion.exe"
download_extension "HP_3DPrinters_for_Fusion360-win64.msi" \
"https://github.com/cryinkfly/Autodesk-Fusion-360-for-Linux/raw/main/files/extensions/HP_3DPrinters_for_Fusion360-win64.msi"
download_extension "Markforged_for_Fusion360-win64.msi" \
"https://github.com/cryinkfly/Autodesk-Fusion-360-for-Linux/raw/main/files/extensions/Markforged_for_Fusion360-win64.msi"
download_extension "OctoPrint_for_Fusion360-win64.msi" \
"https://github.com/cryinkfly/Autodesk-Fusion-360-for-Linux/raw/main/files/extensions/OctoPrint_for_Fusion360-win64.msi"
download_extension "Ultimaker_Digital_Factory-win64.msi" \
"https://github.com/cryinkfly/Autodesk-Fusion-360-for-Linux/raw/main/files/extensions/Ultimaker_Digital_Factory-win64.msi"
echo -e "$(gettext "${GREEN}All tested extensions for Autodesk Fusion on Linux are downloaded!${NOCOLOR}")"
}
function download_extension {
local EXTENSION_FILE_NAME="$1"
local EXTENSION_FILE_URL="$2"
local EXTENSION_FILE_DIRECTORY="$SELECTED_DIRECTORY/downloads/extensions/$EXTENSION_FILE_NAME"
if [ -f "$EXTENSION_FILE_DIRECTORY" ]; then
if find "$EXTENSION_FILE_DIRECTORY" -mtime +7 | grep -q .; then
curl -L "$EXTENSION_FILE_URL" -o "$EXTENSION_FILE_DIRECTORY"
fi
else
curl -L "$EXTENSION_FILE_URL" -o "$EXTENSION_FILE_DIRECTORY"
fi
}
##############################################################################################################################################################################
# CHECK AND INSTALL WINE FOR THE INSTALLER: #
##############################################################################################################################################################################
function check_and_install_wine() {
# Check if wine is installed
if [ -x "$(command -v wine)" ]; then
echo "Wine is installed!"
WINE_VERSION="$(wine --version | cut -d ' ' -f1 | sed -e 's/wine-//' -e 's/-rc.*//')"
WINE_VERSION_MAJOR_RELEASE="$(echo $WINE_VERSION | cut -d '.' -f1)"
WINE_VERSION_MINOR_RELEASE="$(echo $WINE_VERSION | cut -d '.' -f2)"
# Check if the installed wine version is at least 9.8 or higher (wine_version_series and wine_version_series_release)
if [ "$WINE_VERSION_MAJOR_RELEASE" -ge 9 ] && [ "$WINE_VERSION_MINOR_RELEASE" -ge 8 ]; then
echo "Wine version $WINE_VERSION is installed!"
WINE_STATUS=1
else
echo "Wine version $WINE_VERSION is installed, but this version is too old and will be updated for you!"
WINE_STATUS=0
fi
else
echo "Wine is not installed on your system and will be installed for you!"
WINE_STATUS=0
fi
# Check wine status 0 and install Wine version
if [ "$WINE_STATUS" -eq 0 ]; then
DISTRO_VERSION=$(lsb_release -ds) # Check which Linux Distro is used! <-- Still in progress!!!
if [[ $DISTRO_VERSION == *"Arch"*"Linux"* ]] || [[ $DISTRO_VERSION == *"Manjaro"*"Linux"* ]] || [[ $DISTRO_VERSION == *"EndeavourOS"* ]]; then
echo "Installing Wine for Arch Linux ..."
if grep -q '^\[multilib\]$' /etc/pacman.conf; then
echo "Multilib is already enabled!"
pkexec pacman -Syu --needed wine wine-mono wine_gecko winetricks p7zip curl cabextract samba ppp
else
echo "Enabling Multilib ..."
pkexec sh -c 'echo -e "[multilib]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf && pacman -Syu --needed wine wine-mono wine_gecko winetricks p7zip curl cabextract samba ppp'
fi
elif [[ $DISTRO_VERSION == *"Debian"*"11"* ]]; then
echo "Installing Wine for Debian 11 ..."
pkexec bash -c 'sudo apt-get --allow-releaseinfo-change update
sudo dpkg --add-architecture i386
sudo apt-add-repository -r "deb https://dl.winehq.org/wine-builds/debian/ bullseye main"
curl -s https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/debian/ bullseye main"
sudo apt-get update
sudo apt-get install -y p7zip p7zip-full p7zip-rar curl winbind cabextract wget
sudo apt-get install -y --install-recommends winehq-staging'
elif [[ $DISTRO_VERSION == *"Debian"*"12"* ]]; then
echo "Installing Wine for Debian 12 ..."
pkexec bash -c 'sudo apt-get --allow-releaseinfo-change update
sudo dpkg --add-architecture i386
sudo apt-add-repository -r "deb https://dl.winehq.org/wine-builds/debian/ bookworm main"
curl -s https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/debian/ bookworm main"
sudo apt-get update
sudo apt-get install -y p7zip p7zip-full p7zip-rar curl winbind cabextract wget
sudo apt-get install -y --install-recommends winehq-staging'
elif [[ $DISTRO_VERSION == *"Debian"*"Testing"* ]] || [[ $DISTRO_VERSION == *"Debian"*"testing"* ]]; then
echo "Installing Wine for Debian testing ..."
pkexec bash -c 'sudo apt-get --allow-releaseinfo-change update
sudo dpkg --add-architecture i386
sudo apt-add-repository -r "deb https://dl.winehq.org/wine-builds/debian/ testing main"
curl -s https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/debian/ testing main"
sudo apt-get update
sudo apt-get install -y p7zip p7zip-full p7zip-rar curl winbind cabextract wget
sudo apt-get install -y --install-recommends winehq-staging'
elif [[ $DISTRO_VERSION == *"Ubuntu"*"20.04"* ]]; then
echo "Installing Wine for Ubuntu 20.04 ..."
pkexec bash -c 'sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ focal main"
sudo apt-get update
sudo apt-get install -y p7zip p7zip-full p7zip-rar curl winbind cabextract wget
sudo apt-get install -y --install-recommends winehq-staging'
elif [[ $DISTRO_VERSION == *"Ubuntu"*"22.04"* ]]; then
echo "Installing Wine for Ubuntu 22.04 ..."
pkexec bash -c 'sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ jammy main"
sudo apt-get update &&
sudo apt-get install -y p7zip p7zip-full p7zip-rar curl winbind cabextract wget
sudo apt-get install -y --install-recommends winehq-staging'
elif [[ $DISTRO_VERSION == *"Ubuntu"*"24.04"* ]]; then
echo "Installing Wine for Ubuntu 24.04 ..."
pkexec bash -c 'sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ impish main"
sudo apt-get update &&
sudo apt-get install -y p7zip p7zip-full p7zip-rar curl winbind cabextract wget
sudo apt-get install -y --install-recommends winehq-staging'
elif [[ $DISTRO_VERSION == *"Fedora"*"40"* ]]; then
echo "Installing Wine for Fedora 40 ..."
# show a password prompt for the user to enter the root password with pkexec
pkexec bash -c "dnf config-manager --add-repo https://dl.winehq.org/wine-builds/fedora/40/winehq.repo && dnf install -y p7zip p7zip-plugins curl wget winehq-staging cabextract"
elif [[ $DISTRO_VERSION == *"Fedora"*"Rawhide"* ]]; then
echo "Installing Wine for Fedora rawhide ..."
pkexec bash -c "dnf config-manager --add-repo https://dl.winehq.org/wine-builds/fedora/rawhide/winehq.repo && dnf install -y p7zip p7zip-plugins curl wget winehq-staging cabextract"
elif [[ $DISTRO_VERSION == *"Gentoo"* ]]; then
echo "Installing Wine for Gentoo ..."
pkexec emerge -av p7zip curl wget wine cabextract
elif [[ $DISTRO_VERSION == *"openSUSE"*"15.6"* ]]; then
echo "Installing Wine for openSUSE 15.6 ..."
pkexec bash -c 'sudo zypper addrepo -cfp 90 "https://download.opensuse.org/repositories/Emulators:/Wine/openSUSE_Leap_15.6/" wine
sudo zypper refresh
sudo zypper install -y p7zip-full curl wine cabextract'
elif [[ $DISTRO_VERSION == *"openSUSE"*"Tumbleweed"* ]]; then
echo "Installing Wine for openSUSE tumbleweed ..."
pkexec bash -c 'sudo zypper addrepo -cfp 90 "https://download.opensuse.org/repositories/Emulators:/Wine/openSUSE_Tumbleweed/" wine
sudo zypper refresh
sudo zypper install -y p7zip-full curl wine cabextract'
elif [[ $DISTRO_VERSION == *"Red Hat Enterprise Linux"*"8"* ]]; then
echo "Installing Wine for RHEL 8 ..."
pkexec bash -c 'sudo subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf upgrade
sudo dnf install -y p7zip p7zip-plugins curl wget winehq-staging cabextract'
elif [[ $DISTRO_VERSION == *"Red Hat Enterprise Linux"*"9"* ]]; then
echo "Installing Wine for RHEL 9 ..."
pkexec bash -c 'sudo subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf upgrade
sudo dnf install -y p7zip p7zip-plugins curl wget winehq-staging cabextract'
elif [[ $DISTRO_VERSION == *"Solus"* ]]; then
echo "Installing Wine for Solus ..."
pkexec eopkg install -y p7zip p7zip-plugins curl wget winehq-staging cabextract
elif [[ $DISTRO_VERSION == *"Void"* ]]; then
echo "Installing Wine for Void Linux ..."
pkexec xbps-install -Syu --yes p7zip p7zip-plugins curl wget wine cabextract
elif [[ $DISTRO_VERSION == *"NixOS"* ]] || [[ $DISTRO_VERSION == *"nixos"* ]]; then
echo "Installing Wine for NixOS ..."
pkexec nix-env -iA nixos.p7zip nixos.curl nixos.wget nixos.wine nixos.cabextract nixos.samba nixos.ppp nixos.winetricks --yes
# Add more distributions and versions here ...
# elif ...
else
echo "Error: Your Linux distribution and version are not supported."
fi
fi
}
##############################################################################################################################################################################
# HELPER FUNCTION FOR THE LOGIN CALLBACKS TO THE IDENTITY MANAGER: #
##############################################################################################################################################################################
# Helper function for the following function. The AdskIdentityManager.exe can be installed
# into a variable alphanumeric folder.
# This function finds that folder alphanumeric folder name.
function determine_variable_folder_name_for_identity_manager {
echo "Searching for the variable location of the Autodesk Fusion identity manager..."
IDENT_MAN_PATH=$(find "$SELECTED_DIRECTORY/wineprefixes/default" -name 'AdskIdentityManager.exe')
# Get the dirname of the identity manager's alphanumeric folder.
# With the full path of the identity manager, go 2 folders up and isolate the folder name.
IDENT_MAN_VARIABLE_DIRECTORY=$(basename "$(dirname "$(dirname "$IDENT_MAN_PATH")")")
}
########################################################################################
# Load the icons and .desktop-files:
function autodesk_fusion_shortcuts_load {
# Create a .desktop file (launcher.sh) for Autodesk Fusion!
wget -Nc -P "$SELECTED_DIRECTORY/graphics" https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/resource/graphics/autodesk_fusion.svg
cat >> "$HOME/.local/share/applications/wine/Programs/Autodesk/Autodesk Fusion.desktop" << EOF
[Desktop Entry]
Name=Autodesk Fusion
GenericName=CAD Application
GenericName[cs]=Aplikace CAD
GenericName[de]=CAD-Anwendung
GenericName[es]=Aplicación CAD
GenericName[fr]=Application CAO
GenericName[it]=Applicazione CAD
GenericName[ja]=CADアプリケーション
GenericName[ko]=CAD 응용
GenericName[zh_CN]=计算机辅助设计应用
Comment=Autodesk Fusion is a cloud-based 3D modeling, CAD, CAM, and PCB software platform for product design and manufacturing.
Comment[cs]=Autodesk Fusion je cloudová platforma pro 3D modelování, CAD, CAM a PCB určená k navrhování a výrobě produktů.
Comment[de]=Autodesk Fusion ist eine cloudbasierte Softwareplattform für Modellierung, CAD, CAM, CAE und Leiterplatten in 3D für Produktdesign und Fertigung.
Comment[es]=Autodesk Fusion es una plataforma de software de modelado 3D, CAD, CAM y PCB basada en la nube destinada al diseño y la fabricación de productos.
Comment[fr]=Autodesk Fusion est une plate-forme logicielle 3D cloud de modélisation, de CAO, de FAO, dIAO et de conception de circuits imprimés destinée à la conception et à la fabrication de produits.
Comment[it]=Autodesk Fusion è una piattaforma software di modellazione 3D, CAD, CAM, CAE e PCB basata sul cloud per la progettazione e la realizzazione di prodotti.
Comment[ja]=Autodesk Fusion、製品の設計と製造のためのクラウドベースの3Dモデリング、CAD、CAM、およびPCBソフトウェアプラットフォームです。
Comment[ko]=Autodesk Fusion 제품 설계 및 제조를 위한 클라우드 기반 3D 모델링, CAD, CAM 및 PCB 소프트웨어 플랫폼입니다.
Comment[zh_CN]=Autodesk Fusion 是一个基于云的 3D 建模、CAD、CAM 和 PCB 软件平台,用于产品设计和制造。
Exec=$SELECTED_DIRECTORY/bin/autodesk_fusion_launcher.sh
Type=Application
Categories=Education;Engineering;
StartupNotify=true
Icon=$SELECTED_DIRECTORY/resources/graphics/autodesk_fusion.svg
Terminal=false
Path=$SELECTED_DIRECTORY/bin
EOF
# Set the permissions for the .desktop file to read-only
chmod 444 "$HOME/.local/share/applications/wine/Programs/Autodesk/Autodesk Fusion.desktop"
# Execute function
determine_variable_folder_name_for_identity_manager
#Create mimetype link to handle web login call backs to the Identity Manager
cat >> $HOME/.local/share/applications/adskidmgr-opener.desktop << EOL
[Desktop Entry]
Type=Application
Name=adskidmgr Scheme Handler
Exec=sh -c 'env WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine "$(find $SELECTED_DIRECTORY/wineprefixes/default/ -name "AdskIdentityManager.exe" | head -1 | xargs -I '{}' echo {})" "%u"'
StartupNotify=false
MimeType=x-scheme-handler/adskidmgr;
EOL
#Set the permissions for the .desktop file to read-only
chmod 444 $HOME/.local/share/applications/adskidmgr-opener.desktop
#Set the mimetype handler for the Identity Manager
xdg-mime default adskidmgr-opener.desktop x-scheme-handler/adskidmgr
#Disable Debug messages on regular runs, we dont have a terminal, so speed up the system by not wasting time prining them into the Void
sed -i 's/=env WINEPREFIX=/=env WINEDEBUG=-all env WINEPREFIX=/g' "$HOME/.local/share/applications/wine/Programs/Autodesk/Autodesk Fusion.desktop"
# Download some script files for Autodesk Fusion 360!
wget -NP "$SELECTED_DIRECTORY/bin" https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/data/autodesk_fusion_launcher.sh
chmod +x "$SELECTED_DIRECTORY/bin/autodesk_fusion_launcher.sh"
}
###############################################################################################################################################################
function dxvk_opengl_1 {
if [[ $GPU_DRIVER = "DXVK" ]]; then
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" sh "$SELECTED_DIRECTORY/bin/winetricks" -q dxvk
curl -o DXVK.reg https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/resource/video_driver/dxvk/DXVK.reg -o "$SELECTED_DIRECTORY/drive_c/users/$USER/Downloads"
# Add the "return"-option. Here you can read more about it -> https://github.com/koalaman/shellcheck/issues/592
cd "$SELECTED_DIRECTORY/drive_c/users/$USER/Downloads" || return
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine regedit.exe DXVK.reg
fi
}
function dxvk_opengl_2 {
if [[ $GPU_DRIVER = "DXVK" ]]; then
curl -o NMachineSpecificOptions.xml https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/resource/video_driver/dxvk/NMachineSpecificOptions.xml
else
curl -o NMachineSpecificOptions.xml https://raw.githubusercontent.com/cryinkfly/Autodesk-Fusion-360-for-Linux/main/files/setup/resource/video_driver/opengl/NMachineSpecificOptions.xml
fi
}
###############################################################################################################################################################
# Execute the installation of Autodesk Fusion
function autodesk_fusion_run_install_client {
cd "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads"
#WINEPREFIX="$selected_directory/wineprefixes/default" timeout -k 5m 1m wine "$selected_directory/wineprefixes/default/drive_c/users/$USER/Downloads/Fusion360Clientinstaller.exe" --quiet
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" timeout -k 10m 9m wine "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads/FusionClientInstaller.exe" --quiet
sleep 5s
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" timeout -k 5m 1m wine "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads/FusionClientInstaller.exe" --quiet
}
###############################################################################################################################################################
# Wine configuration for Autodesk Fusion
function wine_autodesk_fusion_install() {
# Note that the winetricks sandbox verb merely removes the desktop integration and Z: drive symlinks and is not a "true" sandbox.
# It protects against errors rather than malice. It's useful for, e.g., keeping games from saving their settings in random subdirectories of your home directory.
# But it still ensures that wine, for example, no longer has access permissions to Home!
# For this reason, the EXE files must be located directly in the Wineprefix folder!
mkdir -p "$SELECTED_DIRECTORY/wineprefixes/default"
cd "$SELECTED_DIRECTORY/wineprefixes/default" || return
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" sh "$SELECTED_DIRECTORY/bin/winetricks" -q sandbox
sleep 5s
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" sh "$SELECTED_DIRECTORY/bin/winetricks" -q sandbox
sleep 5s
# We must install some packages!
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" sh "$SELECTED_DIRECTORY/bin/winetricks" -q atmlib gdiplus arial corefonts cjkfonts dotnet452 msxml4 msxml6 vcrun2017 fontsmooth=rgb winhttp win10
# We must install cjkfonts again then sometimes it doesn't work in the first time!
sleep 5s
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" sh "$SELECTED_DIRECTORY/bin/winetricks" -q cjkfonts
# We must set to Windows 10 or 11 again because some other winetricks sometimes set it back to Windows XP!
sleep 5s
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" sh "$SELECTED_DIRECTORY/bin/winetricks" -q win11
# Remove tracking metrics/calling home
sleep 5s
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine REG ADD "HKCU\Software\Wine\DllOverrides" /v "adpclientservice.exe" /t REG_SZ /d "" /f
# Navigation bar does not work well with anything other than the wine builtin DX9
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine REG ADD "HKCU\Software\Wine\DllOverrides" /v "AdCefWebBrowser.exe" /t REG_SZ /d builtin /f
# Use Visual Studio Redist that is bundled with the application
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine REG ADD "HKCU\Software\Wine\DllOverrides" /v "msvcp140" /t REG_SZ /d native /f
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine REG ADD "HKCU\Software\Wine\DllOverrides" /v "mfc140u" /t REG_SZ /d native /f
# Fixed the problem with the bcp47langs issue and now the login works again!
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine reg add "HKCU\Software\Wine\DllOverrides" /v "bcp47langs" /t REG_SZ /d "" /f
# Download and install WebView2 to handle Login attempts, required even though we redirect to your default browser
sleep 5s
cp "$SELECTED_DIRECTORY/downloads/WebView2installer.exe" "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads/WebView2installer.exe"
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads/WebView2installer.exe" /silent /install
# Pre-create shortcut directory for latest re-branding Microsoft Edge WebView2
mkdir -p "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/AppData/Roaming/Microsoft/Internet Explorer/Quick Launch/User Pinned/"
dxvk_opengl_1
cp "$SELECTED_DIRECTORY/downloads/FusionClientInstaller.exe" "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads"
autodesk_fusion_run_install_client
mkdir -p "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/AppData/Roaming/Autodesk/Neutron Platform/Options"
cd "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/AppData/Roaming/Autodesk/Neutron Platform/Options" || return
dxvk_opengl_2
mkdir -p "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/AppData/Local/Autodesk/Neutron Platform/Options"
cd "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/AppData/Local/Autodesk/Neutron Platform/Options" || return
dxvk_opengl_2
mkdir -p "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Application Data/Autodesk/Neutron Platform/Options"
cd "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Application Data/Autodesk/Neutron Platform/Options" || return
dxvk_opengl_2
cd "$SELECTED_DIRECTORY/bin" || return
}
###############################################################################################################################################################
# Check and install the selected extensions
function wine_autodesk_fusion_install_extensions() {
if [[ "$SELECTED_EXTENSIONS" == *"CzechlocalizationforF360"* ]]; then
autodesk_fusion_extension_czech_locale
fi
if [[ "$SELECTED_EXTENSIONS" == *"HP3DPrintersforAutodesk®Fusion®"* ]]; then
autodesk_fusion_extension_hp_3dprinter_connector
fi
if [[ "$SELECTED_EXTENSIONS" == *"MarkforgedforAutodesk®Fusion®"* ]]; then
autodesk_fusion_extension_markforged
fi
if [[ "$SELECTED_EXTENSIONS" == *"OctoPrintforAutodesk®Fusion360™"* ]]; then
autodesk_fusion_extension_octoprint
fi
if [[ "$SELECTED_EXTENSIONS" == *"UltimakerDigitalFactoryforAutodeskFusion360™"* ]]; then
autodesk_fusion_extension_ultimaker_digital_factory
fi
}
function autodesk_fusion_extension_czech_locale {
run_install_extension_client "Ceska_lokalizace_pro_Autodesk_Fusion.exe"
}
function autodesk_fusion_extension_hp_3dprinter_connector {
run_install_extension_client "HP_3DPrinters_for_Fusion360-win64.msi"
}
function autodesk_fusion_extension_markforged {
run_install_extension_client "Markforged_for_Fusion360-win64.msi"
}
function autodesk_fusion_extension_octoprint {
run_install_extension_client "OctoPrint_for_Fusion360-win64.msi"
}
function autodesk_fusion_extension_ultimaker_digital_factory {
run_install_extension_client "Ultimaker_Digital_Factory-win64.msi"
}
function run_install_extension_client {
local EXTENSION_FILE="$1"
cp "$SELECTED_DIRECTORY/extensions/$EXTENSION_FILE" "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads"
if [[ "$EXTENSION_FILE" == *.msi ]]; then
cd "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads" || return
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine msiexec /i "$EXTENSION_FILE"
else
cd "$SELECTED_DIRECTORY/wineprefixes/default/drive_c/users/$USER/Downloads" || return
WINEPREFIX="$SELECTED_DIRECTORY/wineprefixes/default" wine "$EXTENSION_FILE"
fi
}
###############################################################################################################################################################
function autodesk_fusion_safe_logfile() {
# Log the Wineprefixes
echo "$GPU_DRIVER" >> "$SELECTED_DIRECTORY/logs/wineprefixes.log"
echo "$SELECTED_DIRECTORY" >> "$SELECTED_DIRECTORY/logs/wineprefixes.log"
echo "$SELECTED_DIRECTORY/wineprefixes/default" >> "$SELECTED_DIRECTORY/logs/wineprefixes.log"
}
##############################################################################################################################################################################
# ACTIVATE THE WINDOW NOT RESPONDING DIALOG: #
##############################################################################################################################################################################
function reset_window_not_responding_dialog() {
# Check if desktop environment is GNOME
if [ "$XDG_CURRENT_DESKTOP" = "GNOME" ]; then
# Reset the "Window not responding" Dialog in GNOME
echo -e "$(gettext "${GREEN}The 'Window not responding' Dialog in GNOME will be reset!")${NOCOLOR}"
gsettings reset org.gnome.mutter check-alive-timeout
fi
}
##############################################################################################################################################################################
check_required_packages
download_translations
check_option "$SELECTED_OPTION"