Fully rewrited. Not final version yet

This commit is contained in:
shvedes 2024-10-11 01:24:09 +02:00
parent 6deed53022
commit f6e7d6111d
5 changed files with 242 additions and 116 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
uninstall.sh
*.tar.xz

View File

@ -24,9 +24,17 @@ By providing this software, I do not give any guarantees of its work. This scrip
### Known issues ### Known issues
- When hovering on toolbar item to see its instructions, black bars may appear around - When hovering on toolbar item to see its instructions, black bars may appear around
- Wine's experimental wayland driver is completely broken
## Installation
```bash
git clone https://github.com/shvedes/photoshop-linux
cd photoshop-linux
./install.sh <installation path>
```
## To Do ## To Do
- [ ] Uninstall script - [x] Uninstall script
- [ ] More checks in the install script - [ ] More checks in the install script
- [ ] Ability for the user to select a default installation folder - [x] Ability for the user to select a default installation folder

View File

@ -1,18 +0,0 @@
#!/usr/bin/env bash
# Adapted script from LinSoftWin/Photoshop-CC2022-Linux
export WINEPREFIX="$HOME/Photoshop"
export DESKTOP_ENTRY_PATH="$HOME/.local/share/applications"
[[ ! -d "$DESKTOP_ENTRY_PATH" ]] && mkdir "$DESKTOP_ENTRY_PATH"
echo "[Desktop Entry]" > "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "Name=Adobe Photoshop CC 2021" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo 'Exec=bash -c "'$WINEPREFIX'/drive_c/launcher.sh %F"' >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "Type=Application" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "Comment=The industry-standard photo editing software (Wine)" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "Categories=Graphics;Photography;" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "Icon=$HOME/.local/share/icons/photoshop.png" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "MimeType=image/psd;image/x-psd;image/png;image/jpg;image/jpeg;image/webp;image/heif;image/raw" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"
echo "StartupWMClass=photoshop.exe" >> "${DESKTOP_ENTRY_PATH}/photoshop.desktop"

View File

@ -1,8 +1,8 @@
#!/bin/bash #!/usr/bin/env bash
# Adapted script from LinSoftWin/Photoshop-CC2022-Linux # Adapted script from LinSoftWin/Photoshop-CC2022-Linux
export WINEPREFIX="$HOME/Photoshop" export WINEPREFIX="$1"
export XDG_DATA_HOME="$HOME/.local/share" export XDG_DATA_HOME="$HOME/.local/share"
LOG_NORMAL="\e[1;97m" LOG_NORMAL="\e[1;97m"
@ -11,65 +11,92 @@ LOG_SUCCESS="\e[1;32m"
LOG_RESET="\e[0m" LOG_RESET="\e[0m"
TEMP_DIR="$(mktemp -d)" TEMP_DIR="$(mktemp -d)"
ICON_URL="https://cdn3d.iconscout.com/3d/premium/thumb/adobe-photoshop-file-3d-icon-download-in-png-blend-fbx-gltf-formats--logo-format-graphic-design-pack-development-icons-9831950.png?f=webp" FILENAME="Photoshop.tar.xz"
if [[ -d "$WINEPREFIX" ]]; then trap 'on_error ${LINENO} "$BASH_COMMAND"' ERR
echo -e "${LOG_NORMAL}Photoshop path (\$HOME/Photoshop) already exists${LOG_RESET}" trap on_interrupt SIGINT
exit 1
on_interrupt() {
echo -e "\n${LOG_NORMAL}User intrrupt! Cleaning up..${LOG_RESET}"
if [ -f "./$FILENAME" ]; then
rm "$FILENAME"
elif [ -d "./Adobe Photoshop 2021" ]; then
rm -rf "./Adobe Photoshop 2021"
fi fi
[ -d "$WINEPREFIX" ] && rm -rf "$WINEPREFIX"
rm -rf "$TEMP_DIR"
exit 0
}
on_error() {
local lineno="$1"
local command="$2"
echo -e "${LOG_ERROR}[LOG] error in the line ${lineno}${LOG_RESET}: command '$command'"
exit 1
}
check_dependencies() { check_dependencies() {
local dependencies=("curl" "wine" "winetricks" "imagemagick") declare -A packages=(
["curl"]="curl"
["wine"]="wine"
["winetricks"]="winetricks"
["magick"]="imagemagick"
)
local missed_packages=() local missed_packages=()
for i in "${dependencies[@]}"; do for bin in "${!packages[@]}"; do
if ! command -v "$i" > /dev/null; then if ! command -v "$bin" > /dev/null; then
missed_packages+=("$i") missed_packages+=("${packages[$bin]}")
fi fi
done done
if [ ${#missed_packages[@]} -eq 0 ]; then if [ ${#missed_packages[@]} -eq 0 ]; then
echo -e "${LOG_GREEN}All dependencies are installed.${LOG_RESET}" echo -e "${LOG_SUCCESS}[LOG] All dependencies are installed${LOG_RESET}" && sleep 1
else else
echo -e "${LOG_ERROR}Missing dependencies:${LOG_NORMAL} ${missed_packages[@]}${LOG_RESET}" echo -e "${LOG_ERROR}Missing dependencies:${LOG_NORMAL} ${missed_packages[@]}${LOG_RESET}"
exit 1 exit 1
fi fi
} }
mkdir $WINEPREFIX setup_wine() {
mkdir "$WINEPREFIX"
echo -e "${LOG_NORMAL}[LOG] Folder $WINEPREFIX created${LOG_RESET}" echo -e "${LOG_NORMAL}[LOG] Folder $WINEPREFIX created${LOG_RESET}"
# In case if you executed this script before
if [[ -f "./AdobePhotoshop2021.tar.xz" ]]; then
echo -e "${LOG_NORMAL}[LOG] AdobePhotoshop2021.tar.xz already exists. Skipping download${LOG_RESET}"
else
echo -e "${LOG_NORMAL}[LOG] Downloading Photoshop (1.1GB)${LOG_RESET}"
curl -s "https://spyderrock.com/kMnq2220-AdobePhotoshop2021.xz" -o AdobePhotoshop2021.tar.xz
fi
echo -e "${LOG_NORMAL}[LOG] Initializing wine and setting up winetricks.. It may take some time${LOG_RESET}" echo -e "${LOG_NORMAL}[LOG] Initializing wine and setting up winetricks.. It may take some time${LOG_RESET}"
wineboot &> /dev/null wineboot &> /dev/null
winetricks fontsmooth=rgb win10 gdiplus msxml3 msxml6 atmlib corefonts dxvk win10 vkd3d d3d12 vkd3d &> /dev/null winetricks fontsmooth=rgb win10 gdiplus msxml3 msxml6 atmlib corefonts dxvk win10 vkd3d d3d12 vkd3d &> /dev/null
echo -e "${LOG_NORMAL}[LOG] Downloading Visual C++ runtime...${LOG_RESET}" echo -e "${LOG_NORMAL}[LOG] Downloading Visual C++ runtime...${LOG_RESET}"
# 2015-2022 x64 # 2015-2022 x64
curl -s "https://aka.ms/vs/17/release/vc_redist.x64.exe" -o "${TEMP_DIR}/vc_redist_2015_2022_x64.exe" curl -s "https://aka.ms/vs/17/release/vc_redist.x64.exe" -o "${TEMP_DIR}/vc_redist_2015_2022_x64.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2015_2022_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2015_2022_x64.exe${LOG_RESET}"
# 2015-2022 x86 # 2015-2022 x86
curl -s "https://aka.ms/vs/17/release/vc_redist.x86.exe" -o "${TEMP_DIR}/vc_redist_2015_2022_x86.exe" curl -s "https://aka.ms/vs/17/release/vc_redist.x86.exe" -o "${TEMP_DIR}/vc_redist_2015_2022_x86.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2015_2022_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2015_2022_x86.exe${LOG_RESET}"
# 2013 x64 # 2013 x64
curl -sL "https://aka.ms/highdpimfc2013x64enu" -o "${TEMP_DIR}/vc_redist_2013_x64.exe" curl -sL "https://aka.ms/highdpimfc2013x64enu" -o "${TEMP_DIR}/vc_redist_2013_x64.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2013_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2013_x64.exe${LOG_RESET}"
# 2013 x86 # 2013 x86
curl -sL "https://aka.ms/highdpimfc2013x86enu" -o "${TEMP_DIR}/vc_redist_2013_x86.exe" curl -sL "https://aka.ms/highdpimfc2013x86enu" -o "${TEMP_DIR}/vc_redist_2013_x86.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2013_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2013_x86.exe${LOG_RESET}"
# 2012 x64 # 2012 x64
curl -s "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe" -o "${TEMP_DIR}/vc_redist_2012_x64.exe" curl -s "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe" -o "${TEMP_DIR}/vc_redist_2012_x64.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2012_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2012_x64.exe${LOG_RESET}"
# 2012 x86 # 2012 x86
curl -s "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe" -o "${TEMP_DIR}/vc_redist_2012_x86.exe" curl -s "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe" -o "${TEMP_DIR}/vc_redist_2012_x86.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2012_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2012_x86.exe${LOG_RESET}"
# 2010 x64 # 2010 x64
curl -s "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe" -o "${TEMP_DIR}/vc_redist_2010_x64.exe" curl -s "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe" -o "${TEMP_DIR}/vc_redist_2010_x64.exe"
echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2010_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2010_x64.exe${LOG_RESET}"
@ -79,45 +106,162 @@ echo -e " ${LOG_SUCCESS}Downloaded vc_redist_2010_x86.exe${LOG_RESET}"
echo -e "${LOG_NORMAL}[LOG] Installing Visual C++...${LOG_RESET}" echo -e "${LOG_NORMAL}[LOG] Installing Visual C++...${LOG_RESET}"
# 2015-2022 x64
wine "${TEMP_DIR}/vc_redist_2015_2022_x64.exe" /install /quiet /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2015_2022_x64.exe" /install /quiet /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2015_2022_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2015_2022_x64.exe${LOG_RESET}"
# 2015-2022 x86
wine "${TEMP_DIR}/vc_redist_2015_2022_x86.exe" /install /quiet /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2015_2022_x86.exe" /install /quiet /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2015_2022_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2015_2022_x86.exe${LOG_RESET}"
# 2013 x64
wine "${TEMP_DIR}/vc_redist_2013_x64.exe" /install /quiet /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2013_x64.exe" /install /quiet /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2013_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2013_x64.exe${LOG_RESET}"
# 2013 x86
wine "${TEMP_DIR}/vc_redist_2013_x86.exe" /install /quiet /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2013_x86.exe" /install /quiet /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2013_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2013_x86.exe${LOG_RESET}"
# 2012 x64
wine "${TEMP_DIR}/vc_redist_2012_x64.exe" /install /quiet /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2012_x64.exe" /install /quiet /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2012_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2012_x64.exe${LOG_RESET}"
# 2012 x86
wine "${TEMP_DIR}/vc_redist_2012_x86.exe" /install /quiet /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2012_x86.exe" /install /quiet /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2012_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2012_x86.exe${LOG_RESET}"
# 2010 x64
wine "${TEMP_DIR}/vc_redist_2010_x64.exe" /q /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2010_x64.exe" /q /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2010_x64.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2010_x64.exe${LOG_RESET}"
# 2010 x86
wine "${TEMP_DIR}/vc_redist_2010_x86.exe" /q /norestart &> /dev/null wine "${TEMP_DIR}/vc_redist_2010_x86.exe" /q /norestart &> /dev/null
echo -e " ${LOG_SUCCESS}Insalled vc_redist_2010_x86.exe${LOG_RESET}" echo -e " ${LOG_SUCCESS}Installed vc_redist_2010_x86.exe${LOG_RESET}"
winecfg -v win10 &> /dev/null winecfg -v win10 &> /dev/null
}
download_ps() {
local url="https://spyderrock.com/kMnq2220-AdobePhotoshop2021.xz"
# https://github.com/LinSoftWin/Photoshop-CC2022-Linux
local checksum="8321b969161f2d2ad736067320d493c5b6ae579eaab9400cd1fda6871af2c033"
if [ -f "./$FILENAME" ]; then
echo -e "${LOG_NORMAL}[LOG] Found existing archive. Comparing checksums${LOG_RESET}"
local actual_checksum="$(sha256sum $FILENAME | awk '{print $1}')"
if [ "$actual_checksum" != "$checksum" ]; then
echo -e "${LOG_ERROR}[LOG] Corrupted archive!${LOG_NORMAL} Redownloading (1.1G)${LOG_RESET}"
rm "./$FILENAME"
curl -s "$url" -o "$FILENAME"
else
echo -e "${LOG_SUCCESS}[LOG] Done${LOG_SUCCESS}"
fi
else
echo -e "${LOG_NORMAL}[LOG] Downloading Photoshop (1.1G)${LOG_RESET}"
curl -s "$url" -o "$FILENAME"
echo -e "${LOG_SUCCESS}[LOG] Downloaded Photoshop${LOG_RESET}"
actual_checksum="$(sha256sum $FILENAME | awk '{print $1}')"
echo -e "${LOG_NORMAL}[LOG] Verifying checksums${LOG_RESET}"
if [[ "$actual_checksum" != "$checksum" ]]; then
echo -e "${LOG_ERROR}[ERROR] Checksums are not matched!${LOG_NORMAL} Try to remove '$FILENAME' and exec this script again${LOG_RESET}"
exit 1
else
echo -e "${LOG_SUCCESS}[LOG] Done${LOG_RESET}"
fi
fi
}
install_ps() {
echo -e "${LOG_NORMAL}[LOG] Extracting Photoshop${LOG_RESET}" echo -e "${LOG_NORMAL}[LOG] Extracting Photoshop${LOG_RESET}"
tar -xf AdobePhotoshop2021.tar.xz tar -xf "./$FILENAME"
echo -e "${LOG_NORMAL}[LOG] Installing Photoshop${LOG_RESET}" echo -e "${LOG_NORMAL}[LOG] Installing Photoshop${LOG_RESET}"
mv "./Adobe Photoshop 2021" "$WINEPREFIX/drive_c/Program Files/Adobe Photoshop 2021" mv "Adobe Photoshop 2021" "$WINEPREFIX/drive_c/Program Files/Adobe Photoshop 2021"
}
# Copy launcher to the wine prefix install_icon() {
echo -e "${LOG_NORMAL}[LOG] Finishing${LOG_RESET}" if [ -d "/usr/share/icons/Papirus" ]; then
cp ./launcher.sh "$WINEPREFIX/drive_c" DESKTOP_ENTRY_ICON_NAME="photoshop"
elif [ -d "$XDG_DATA_HOME/icons/Papirus" ]; then
DESKTOP_ENTRY_ICON_NAME="photoshop"
else
DESKTOP_ENTRY_ICON_NAME="$XDG_DATA_HOME/icons/photoshop.png"
ICON_URL="https://cdn3d.iconscout.com/3d/premium/thumb/adobe-photoshop-file-3d-icon-download-in-png-blend-fbx-gltf-formats--logo-format-graphic-design-pack-development-icons-9831950.png"
curl -s "$ICON_URL" -o "${TEMP_DIR}/icon.webp"
magick "${TEMP_DIR}/icon.webp" "${TEMP_DIR}/icon.png"
# Download & copy icon for .desktop entry [ ! -d "$XDG_DATA_HOME/icons" ] && mkdir "$XDG_DATA_HOME/icons"
[[ ! -d "$XDG_DATA_HOME/icons" ]] && mkdir "$XDG_DATA_HOME/icons" mv ${TEMP_DIR}/icon.png "$XDG_DATA_HOME/icons/photoshop.png"
curl -s "$ICON_URL" -o ${TEMP_DIR}/icon.webp fi
[[ -f "$XDG_DATA_HOME/icons/photoshop.png" ]] && rm "$XDG_DATA_HOME/icons/photoshop.png" }
magick "${TEMP_DIR}/icon.webp" "${XDG_DATA_HOME}/icons/photoshop.png"
# Generate .desktop entry for Photoshop install_desktop_entry() {
./generate_desktop_entry.sh local path="$XDG_DATA_HOME/applications/photoshop.desktop"
echo -e "${LOG_NORMAL}[LOG] Cleaning up...${LOG_RESET}" echo "[Desktop Entry]" > "$path"
rm ./AdobePhotoshop2021.tar.xz echo "Name=Adobe Photoshop CC 2021" >> "$path"
rm -rf "$TEMP_DIR" echo "Exec=bash -c "$WINEPREFIX/drive_c/launcher.sh %F"" >> "$path"
echo "Type=Application" >> "$path"
echo "Comment=The industry-standard photo editing software (Wine)" >> "$path"
echo "Categories=Graphics" >> "$path"
echo "Icon=$DESKTOP_ENTRY_ICON_NAME" >> "$path"
echo "MimeType=image/psd;image/x-psd;image/png;image/jpg;image/jpeg;image/webp;image/heif;image/raw" >> "$path"
echo "StartupWMClass=photoshop.exe" >> "$path"
}
echo -e "${LOG_SUCCESS}Photoshop was successfully installed!${LOG_RESET}" install_launcher() {
echo -e "${LOG_NORMAL}[LOG] Installing launcher${LOG_RESET}"
local path="$WINEPREFIX/drive_c/launcher.sh"
echo "#!/usr/bin/env bash" > "$path"
echo " " >> "$path"
echo "WINEPREFIX=\"$WINEPREFIX\"" >> "$path"
echo "DXVK_LOG_PATH=\"\$WINEPREFIX/dxvk_cache\"" >> "$path"
echo "DXVK_STATE_CACHE_PATH=\"\$WINEPREFIX/dxvk_cache\"" >> "$path"
echo "PHOTOSHOP=\"\$WINEPREFIX/drive_c/Program Files/Adobe Photoshop 2021/photoshop.exe\"" >> "$path"
echo " " >> "$path"
echo "wine64 \"\$PHOTOSHOP\" \"\$@\" " >> "$path"
chmod +x "$path"
}
checks() {
if [ -z "$1" ]; then
echo -e "${LOG_NORMAL}Usage: ./install.sh <absolute path>${LOG_RESET}"
exit 0
else
if [ -d "$1" ]; then
echo -e "${LOG_ERROR}Install path alrady exists${LOG_RESET}"
read -p "$(tput setaf 3)Do you want to remove it? (y/n) $(tput sgr0)" answer
case "$answer" in
y)
rm -rf "$WINEPREFIX"
;;
n)
exit 1
;;
esac
else
if [[ "$1" != /* ]]; then
echo -e "${LOG_NORMAL}You need to specify absolute path, not relative${LOG_RESET}"
exit 1
fi
fi
fi
}
checks "$1"
check_dependencies
setup_wine
download_ps
install_ps
install_icon
install_desktop_entry
install_launcher
echo -e "${LOG_SUCCESS}[LOG] Photoshop successfully installed${LOG_RESET}"

View File

@ -1,10 +0,0 @@
#!/usr/bin/env bash
export WINEPREFIX="$HOME/Photoshop"
export DXVK_LOG_PATH="$WINEPREFIX/dxvk_cache"
export DXVK_STATE_CACHE_PATH="$WINEPREFIX/dxvk_cache"
export PHOTOSHOP="$WINEPREFIX/drive_c/Program Files/Adobe Photoshop 2021/photoshop.exe"
FILE_PATH=$(winepath -w "$1")
wine64 "$PHOTOSHOP" $FILE_PATH