forked from CastroFidel/winehelper
Compare commits
38 Commits
504be8ea5b
...
0.5.4.3
Author | SHA1 | Date | |
---|---|---|---|
|
4c39ec3c8e | ||
|
8950d8de2f | ||
|
85bd5fdf5d | ||
|
b98c6e5408 | ||
|
bab49377a3 | ||
|
aa591112ff | ||
|
08090bbb6b | ||
|
759421d725 | ||
|
bf3a30487e | ||
|
13efa924d8 | ||
|
721fd5e76e | ||
|
7f3f330fc4 | ||
|
1e19fa3c56 | ||
|
a57df9a259 | ||
|
3f22b3540e | ||
|
861b6743fd | ||
|
aa267ad9ef | ||
|
3e91bcf241 | ||
|
5571f74125 | ||
|
a15b2621b6 | ||
|
fd00b61c71 | ||
|
74eaf34c00 | ||
|
a69493df73 | ||
|
6b958dd7f1 | ||
|
2483f4c66c | ||
|
ab0e23952e | ||
|
92a682ba8a | ||
|
3381054c21 | ||
|
76b7d4f046 | ||
|
aeae544640 | ||
|
eeb94523b3 | ||
|
a2186b63cb | ||
|
839b480c39 | ||
|
83fe362b37 | ||
|
f7fdfca743 | ||
|
ffc7098aba | ||
|
50de9bdb14 | ||
|
ddea68c11c |
@@ -1,5 +1,14 @@
|
|||||||
История изменений:
|
История изменений:
|
||||||
|
|
||||||
|
0.5.4:
|
||||||
|
* обновлен графический режим Qt5:
|
||||||
|
- добавлена возможность установки системных зависимостей
|
||||||
|
- исправлены/улучшены основные функции
|
||||||
|
- добавлено управление префиксами (в разработке)
|
||||||
|
- добавлена возможность создания ярлыка
|
||||||
|
* добавлено автоматическое создание иконки для ярлыков (desktop файлов)
|
||||||
|
* префикс tflex17 переименован в tflex (т.к. 18-я версия работает в том же префиксе)
|
||||||
|
|
||||||
0.5.3:
|
0.5.3:
|
||||||
* исправлена установка grdcontrol для t-flex-*
|
* исправлена установка grdcontrol для t-flex-*
|
||||||
* обновлен графический режим Qt5
|
* обновлен графический режим Qt5
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
Лицензионные соглашения использования сторонних компонентов:
|
Отказ от ответственности:
|
||||||
|
|
||||||
Некоторые компоненты, установленные в префикс и необходимые для запуска приложений,
|
Некоторые компоненты, устанавливаемые в префикс и необходимые для запуска
|
||||||
могут быть защищены авторским правом или лицензионными соглашениями. Вы обязаны
|
приложений, могут быть защищены авторским правом или лицензионными
|
||||||
самостоятельно убедиться в законности использования этих компонентов в вашей
|
соглашениями. Вы обязаны самостоятельно убедиться в законности использования
|
||||||
юрисдикции.
|
этих компонентов в вашей юрисдикции.
|
||||||
|
|
||||||
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с
|
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с
|
||||||
использованием подготовленного префикса, а так же за программное обеспечение,
|
использованием подготовленного префикса, а также за программное обеспечение,
|
||||||
поставляемое из сторонних источников.
|
полученное из сторонних источников.
|
||||||
|
|
||||||
Подтверждая продолжение установки, вы соглашаетесь, что ознакомились с данным
|
Продолжая установку, вы подтверждаете, что ознакомились с данным отказом от
|
||||||
отказом от ответственности и принимаете все риски, связанные с использованием
|
ответственности и принимаете все риски, связанные с использованием программного
|
||||||
программного обеспечения.
|
обеспечения.
|
||||||
|
@@ -4,7 +4,7 @@ _winehelper_completions() {
|
|||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
opts="--help --version --debug install installed -r -i remove-all --clear-pfx killall remove-prefix backup-prefix restore-prefix create-prefix --changelog changelog"
|
opts="--help --version --debug install installed install-dxvk install-vkd3d -r -i remove-all --clear-pfx killall remove-prefix backup-prefix restore-prefix create-prefix --changelog changelog change-wine"
|
||||||
wine_cmd="winecfg winereg winefile wineconsole winetricks desktop regedit explorer cmd run"
|
wine_cmd="winecfg winereg winefile wineconsole winetricks desktop regedit explorer cmd run"
|
||||||
|
|
||||||
case "${prev}" in
|
case "${prev}" in
|
||||||
@@ -34,6 +34,20 @@ _winehelper_completions() {
|
|||||||
restore-prefix)
|
restore-prefix)
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
install-dxvk|install-vkd3d)
|
||||||
|
local versions=$(winehelper "${prev}" list 2>/dev/null | grep ' - ' | sed 's/ - //')
|
||||||
|
COMPREPLY=( $(compgen -W "${versions} none list" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
change-wine)
|
||||||
|
local wine_versions=$(awk '
|
||||||
|
/^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/ { in_group=1 }
|
||||||
|
/^#+/ { if (! ($0 ~ /^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/)) in_group=0 }
|
||||||
|
/^[a-f0-9]{64}/ && in_group { sub(/\.tar\.xz$/, "", $2); print $2 }
|
||||||
|
' /usr/share/winehelper/sha256sum.list 2>/dev/null)
|
||||||
|
COMPREPLY=( $(compgen -W "system ${wine_versions}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@@ -8,6 +8,8 @@ _winehelper() {
|
|||||||
'--version[Показать информацию о пакете и его версии]'
|
'--version[Показать информацию о пакете и его версии]'
|
||||||
'--debug[Режим отладки]'
|
'--debug[Режим отладки]'
|
||||||
'install[Запустить скрипт установки программы]'
|
'install[Запустить скрипт установки программы]'
|
||||||
|
'install-dxvk[Установить/удалить DXVK]'
|
||||||
|
'install-vkd3d[Установить/удалить VKD3D]'
|
||||||
'installed[Список установленных программ]'
|
'installed[Список установленных программ]'
|
||||||
'-r[Запуск программы (отладка)]'
|
'-r[Запуск программы (отладка)]'
|
||||||
'-i[Запустить скрипт установки программы]'
|
'-i[Запустить скрипт установки программы]'
|
||||||
@@ -18,6 +20,7 @@ _winehelper() {
|
|||||||
'remove-prefix[Удалить префикс и все связанные данные]'
|
'remove-prefix[Удалить префикс и все связанные данные]'
|
||||||
'backup-prefix[Создать резерную копию префикса]'
|
'backup-prefix[Создать резерную копию префикса]'
|
||||||
'restore-prefix[восстановить префикс из резервной копии "путь/до/whpack"]'
|
'restore-prefix[восстановить префикс из резервной копии "путь/до/whpack"]'
|
||||||
|
'change-wine[Изменить версию Wine/Proton для префикса]'
|
||||||
)
|
)
|
||||||
|
|
||||||
wine_cmd=(
|
wine_cmd=(
|
||||||
@@ -61,6 +64,15 @@ _winehelper() {
|
|||||||
restore-prefix)
|
restore-prefix)
|
||||||
_files
|
_files
|
||||||
;;
|
;;
|
||||||
|
install-dxvk)
|
||||||
|
_get_component_versions 'install-dxvk'
|
||||||
|
;;
|
||||||
|
install-vkd3d)
|
||||||
|
_get_component_versions 'install-vkd3d'
|
||||||
|
;;
|
||||||
|
change-wine)
|
||||||
|
_get_wine_versions
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
_values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
|
_values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
|
||||||
;;
|
;;
|
||||||
@@ -69,6 +81,32 @@ _winehelper() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_get_component_versions () {
|
||||||
|
local component_command=$1
|
||||||
|
local -a versions
|
||||||
|
|
||||||
|
versions=( ${(f)"$(winehelper "${component_command}" list 2>/dev/null | grep ' - ' | sed 's/ - //')" } )
|
||||||
|
versions+=(none list)
|
||||||
|
|
||||||
|
_values 'versions' "${versions[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_wine_versions () {
|
||||||
|
local -a versions
|
||||||
|
local sha256_file="/usr/share/winehelper/sha256sum.list"
|
||||||
|
|
||||||
|
if [[ -f "$sha256_file" ]]; then
|
||||||
|
versions=( ${(f)"$(awk '
|
||||||
|
/^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/ { in_group=1 }
|
||||||
|
/^#+/ { if (! ($0 ~ /^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/)) in_group=0 }
|
||||||
|
/^[a-f0-9]{64}/ && in_group { sub(/\.tar\.xz$/, "", $2); print $2 }
|
||||||
|
' "$sha256_file" 2>/dev/null)"} )
|
||||||
|
fi
|
||||||
|
|
||||||
|
versions+=(system)
|
||||||
|
_values 'wine/proton versions' "${versions[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
_get_prefixes () {
|
_get_prefixes () {
|
||||||
prefixes=( ${(f)"$(ls -1 ~/.local/share/winehelper/prefixes 2>/dev/null)"} )
|
prefixes=( ${(f)"$(ls -1 ~/.local/share/winehelper/prefixes 2>/dev/null)"} )
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
|||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
|||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINDOWS_VER="10"
|
|||||||
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINDOWS_VER="10"
|
|||||||
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
|||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
|||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
|||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@ export WH_WINDOWS_VER="10"
|
|||||||
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export PROG_VERSION=""
|
export PROG_VERSION=""
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 vcrun2022 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei"
|
export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 vcrun2022 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei"
|
||||||
|
@@ -7,7 +7,7 @@ export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
|
|||||||
export BASE_PFX="tflex17_pfx_x64_v02"
|
export BASE_PFX="tflex17_pfx_x64_v02"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEPREFIX="tflex17"
|
export WINEPREFIX="tflex"
|
||||||
export WH_XDG_OPEN="log"
|
export WH_XDG_OPEN="log"
|
||||||
export WH_USE_MESA_GL_OVERRIDE="1"
|
export WH_USE_MESA_GL_OVERRIDE="1"
|
||||||
|
|
||||||
|
0
sha256sum.list
Executable file → Normal file
0
sha256sum.list
Executable file → Normal file
415
winehelper
415
winehelper
@@ -7,18 +7,20 @@ if [[ $(id -u) -eq 0 ]] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
##### DEFAULT PATH #####
|
##### DEFAULT PATH #####
|
||||||
export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PATH LICENSE_FILE AGREEMENT
|
export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PATH LICENSE_FILE AGREEMENT THIRD_PARTY_FILE
|
||||||
|
|
||||||
SCRIPT_NAME="$(basename "$0")"
|
SCRIPT_NAME="$(basename "$0")"
|
||||||
if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
|
if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
|
||||||
# переменные для установленного WineHelper в систему
|
# переменные для установленного WineHelper в систему
|
||||||
|
WH_VERSION="$(rpm -q winehelper | awk -F'-' '{print $2}')"
|
||||||
USER_WORK_PATH="$HOME/.local/share/$SCRIPT_NAME"
|
USER_WORK_PATH="$HOME/.local/share/$SCRIPT_NAME"
|
||||||
RUN_SCRIPT="/usr/bin/$SCRIPT_NAME"
|
RUN_SCRIPT="/usr/bin/$SCRIPT_NAME"
|
||||||
DATA_PATH="/usr/share/$SCRIPT_NAME"
|
DATA_PATH="/usr/share/$SCRIPT_NAME"
|
||||||
CHANGELOG_FILE="$(realpath "/usr/share/doc/winehelper"-*/CHANGELOG)"
|
|
||||||
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg"
|
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg"
|
||||||
LICENSE_FILE="$(realpath "/usr/share/doc/winehelper"-*/LICENSE)"
|
CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG"
|
||||||
AGREEMENT="$(realpath "/usr/share/doc/winehelper"-*/LICENSE_AGREEMENT)"
|
LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE"
|
||||||
|
AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT"
|
||||||
|
THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD_PARTY"
|
||||||
else
|
else
|
||||||
# переменные для тестового запуска WineHelper из репозитория
|
# переменные для тестового запуска WineHelper из репозитория
|
||||||
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
|
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
|
||||||
@@ -28,6 +30,7 @@ else
|
|||||||
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper-devel.svg"
|
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper-devel.svg"
|
||||||
LICENSE_FILE="$DATA_PATH/LICENSE"
|
LICENSE_FILE="$DATA_PATH/LICENSE"
|
||||||
AGREEMENT="$DATA_PATH/LICENSE_AGREEMENT"
|
AGREEMENT="$DATA_PATH/LICENSE_AGREEMENT"
|
||||||
|
THIRD_PARTY_FILE="$DATA_PATH/THIRD-PARTY"
|
||||||
|
|
||||||
# минимальная проверка синтаксиса скриптов
|
# минимальная проверка синтаксиса скриптов
|
||||||
for self_check_script in "$RUN_SCRIPT" \
|
for self_check_script in "$RUN_SCRIPT" \
|
||||||
@@ -177,7 +180,7 @@ fi
|
|||||||
|
|
||||||
##### CHECK NOEXEC FOR /HOME #####
|
##### CHECK NOEXEC FOR /HOME #####
|
||||||
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
|
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
|
||||||
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога."
|
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine невозможен из домашнего каталога."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##### ROOT #####
|
##### ROOT #####
|
||||||
@@ -190,7 +193,7 @@ su_run () {
|
|||||||
((i++))
|
((i++))
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
pkexec "$@" && return 0
|
pkexec bash -c "$@" && return 0
|
||||||
fi
|
fi
|
||||||
fatal "Не удалось установить необходимые компоненты!"
|
fatal "Не удалось установить необходимые компоненты!"
|
||||||
}
|
}
|
||||||
@@ -259,13 +262,13 @@ try_copy_dir () {
|
|||||||
|
|
||||||
try_force_link_file () {
|
try_force_link_file () {
|
||||||
if [[ ! -f "$1" ]] ; then
|
if [[ ! -f "$1" ]] ; then
|
||||||
print_warning "нет файла для создания символьной ссылки: $1"
|
print_warning "нет файла для создания символической ссылки: $1"
|
||||||
if [[ -f "$2" ]] ; then
|
if [[ -f "$2" ]] ; then
|
||||||
try_remove_file "$2"
|
try_remove_file "$2"
|
||||||
print_warning "удаляем символьную ссылку: $2"
|
print_warning "удаляем символическую ссылку: $2"
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символьной ссылки на файл $1"
|
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символической ссылки на файл $1"
|
||||||
else
|
else
|
||||||
try_remove_file "$2"
|
try_remove_file "$2"
|
||||||
ln -s -f -r "$1" "$2"
|
ln -s -f -r "$1" "$2"
|
||||||
@@ -275,11 +278,11 @@ try_force_link_file () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try_force_link_dir () {
|
try_force_link_dir () {
|
||||||
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символьной сссылки"
|
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символической сссылки"
|
||||||
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символьной ссылки на каталог $1"
|
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символической ссылки на каталог $1"
|
||||||
else
|
else
|
||||||
ln -s -f -r "$1" "$2"
|
ln -s -f -r "$1" "$2"
|
||||||
[[ "$?" != 0 ]] && print_error "не удалось сделать символьную ссылку на каталог $1 по пути $2" || return 0
|
[[ "$?" != 0 ]] && print_error "не удалось сделать символическую ссылку на каталог $1 по пути $2" || return 0
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
@@ -328,7 +331,7 @@ try_get_page () {
|
|||||||
|| grep -q "Forbidden" "$OUT_PAGE_TMP"
|
|| grep -q "Forbidden" "$OUT_PAGE_TMP"
|
||||||
then
|
then
|
||||||
try_remove_file "$OUT_PAGE_TMP"
|
try_remove_file "$OUT_PAGE_TMP"
|
||||||
fatal "Страница сайта $1 не доступна, или превышено количество запросов к странице."
|
fatal "Страница сайта $1 не доступна или превышено количество запросов к странице."
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -509,63 +512,41 @@ var_ld_library_path_update () {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
extract_icon() {
|
find_prefix () {
|
||||||
check_prefix_var
|
# Автоматическое определение префикса, если он не задан
|
||||||
local exe_file="$1"
|
if [[ -z "$WINEPREFIX" ]] && [[ "$1" == "$WH_PREFIXES_DIR"* ]]; then
|
||||||
local ico_name="$(basename "$exe_file" .exe).ico"
|
local extracted_prefix
|
||||||
local png_name="$(basename "$exe_file" .exe).png"
|
extracted_prefix="$(echo "$1" | grep -o ".*/prefixes/[^/]*")"
|
||||||
local tmp_ico_dir="$WH_TMP_DIR/icons"
|
if [[ -d "$extracted_prefix" ]]; then
|
||||||
local user_icons="$WINEPREFIX/icons"
|
export WINEPREFIX="$extracted_prefix"
|
||||||
|
print_info "Префикс автоматически определен: $(basename "$WINEPREFIX")"
|
||||||
create_new_dir "$tmp_ico_dir"
|
fi
|
||||||
|
|
||||||
if ! wrestool -x -t 14 "$exe_file" -o "$tmp_ico_dir/$ico_name" ; then
|
|
||||||
print_warning "Не удалось извлечь иконку из $exe_file"
|
|
||||||
try_remove_file "$tmp_ico_dir"
|
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! icotool -x -i 1 "$tmp_ico_dir/$ico_name" -o "$tmp_ico_dir/$png_name" ; then
|
|
||||||
print_warning "Не удалось извлечь иконку из $ico_name"
|
|
||||||
try_remove_file "$tmp_ico_dir"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
create_new_dir "$user_icons"
|
|
||||||
|
|
||||||
if ! try_copy_file "$tmp_ico_dir/$png_name" "$user_icons" ; then
|
|
||||||
print_warning "Не удалось копировать иконку в префикс"
|
|
||||||
try_remove_file "$user_icons"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
try_remove_dir "$tmp_ico_dir"
|
|
||||||
print_ok "Иконка сохранена: $user_icons/$png_name"
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
create_desktop () {
|
create_desktop () {
|
||||||
local name_desktop exe_file desktop_filename icon_file desktop_path
|
local name_desktop exe_file desktop_filename icon_file desktop_path icon_arg desktop_filename_arg
|
||||||
name_desktop="$1"
|
name_desktop="$1"
|
||||||
exe_file="$2"
|
exe_file="$2"
|
||||||
if [[ -n $4 ]] && [[ $4 != "nocopy" ]];
|
icon_arg="$3"
|
||||||
then desktop_filename="$4"
|
desktop_filename_arg="$4"
|
||||||
else desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|")"
|
|
||||||
fi
|
# Определяем имя desktop-файла
|
||||||
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] && [[ -f "$3" ]]
|
if [[ -n "$desktop_filename_arg" ]] && [[ "$desktop_filename_arg" != "nocopy" ]]; then
|
||||||
then icon_file="$3"
|
desktop_filename="$desktop_filename_arg"
|
||||||
elif [[ -f "$WH_IMAGE_PATH/$3.png" ]]
|
else
|
||||||
then icon_file="$WH_IMAGE_PATH/$3.png"
|
desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|g")"
|
||||||
else icon_file="wine"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Проверяем обязательные аргументы и наличие exe-файла
|
||||||
if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then
|
if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then
|
||||||
fatal "Used: $SCRIPT_NAME --desktop \"desktop_name\" \"path_to_exe\" \"name_png_from_image\""
|
fatal "Использование: $0 desktop \"Имя ярлыка\" \"/путь/к/файлу.exe\" [иконка|auto] [имя_desktop_файла]"
|
||||||
elif [[ ! -f "$exe_file" ]] ; then
|
elif [[ ! -f "$exe_file" ]] ; then
|
||||||
print_warning "Для создания ярлыка не найден исполняемый файл: $exe_file"
|
print_warning "Для создания ярлыка не найден исполняемый файл: $exe_file"
|
||||||
|
|
||||||
BASENAME_EXE="$(basename "$exe_file")"
|
local BASENAME_EXE="$(basename "$exe_file")"
|
||||||
print_info "Запускаем поиск $BASENAME_EXE"
|
print_info "Запускаем поиск $BASENAME_EXE"
|
||||||
|
local FIND_PATH
|
||||||
if [[ -z "$DRIVE_C" ]] || [[ ! -d "$DRIVE_C" ]]
|
if [[ -z "$DRIVE_C" ]] || [[ ! -d "$DRIVE_C" ]]
|
||||||
then FIND_PATH="$WH_PREFIXES_DIR"
|
then FIND_PATH="$WH_PREFIXES_DIR"
|
||||||
else FIND_PATH="$DRIVE_C"
|
else FIND_PATH="$DRIVE_C"
|
||||||
@@ -575,11 +556,57 @@ create_desktop () {
|
|||||||
-iname "$BASENAME_EXE")"
|
-iname "$BASENAME_EXE")"
|
||||||
if [[ -z "$exe_file" ]] || [[ ! -f "$exe_file" ]]
|
if [[ -z "$exe_file" ]] || [[ ! -f "$exe_file" ]]
|
||||||
then fatal "Для создания ярлыка не найден исполняемый файл: $BASENAME_EXE"
|
then fatal "Для создания ярлыка не найден исполняемый файл: $BASENAME_EXE"
|
||||||
else print_ok "Исполняемый файл $BASENAME_EXE найден по пути $(dirname "$exe_file")/"
|
else print_ok "Исполняемый файл $BASENAME_EXE найден по пути: $(dirname "$exe_file")/"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# создаем .desktop файл
|
find_prefix "$exe_file"
|
||||||
|
|
||||||
|
# --- Логика обработки иконки ---
|
||||||
|
local user_icons_dir="$WINEPREFIX/icons"
|
||||||
|
create_new_dir "$user_icons_dir"
|
||||||
|
|
||||||
|
# Случай 1: Восстановление из бэкапа (передан явный путь)
|
||||||
|
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] && [[ -f "$icon_arg" ]]; then
|
||||||
|
icon_file="$icon_arg"
|
||||||
|
# Случай 2: 'auto' или пустой аргумент - пытаемся извлечь из EXE
|
||||||
|
elif [[ -z "$icon_arg" ]] || [[ "$icon_arg" == "auto" ]]; then
|
||||||
|
print_info "Попытка извлечь иконку из $exe_file..."
|
||||||
|
local png_name="$(basename "$exe_file" .exe).png"
|
||||||
|
local extracted_icon_path="$user_icons_dir/$png_name"
|
||||||
|
|
||||||
|
# Проверяем, существует ли иконка, чтобы избежать повторного извлечения
|
||||||
|
if [[ -f "$extracted_icon_path" ]]; then
|
||||||
|
print_info "Иконка уже существует: $extracted_icon_path"
|
||||||
|
icon_file="$extracted_icon_path"
|
||||||
|
else
|
||||||
|
local tmp_ico_dir="$WH_TMP_DIR/icons_$$" # Используем PID для временного каталога
|
||||||
|
create_new_dir "$tmp_ico_dir"
|
||||||
|
local ico_name="$(basename "$exe_file" .exe).ico"
|
||||||
|
|
||||||
|
if wrestool -x -t 14 "$exe_file" -o "$tmp_ico_dir/$ico_name" &>/dev/null && \
|
||||||
|
icotool -x -i 1 "$tmp_ico_dir/$ico_name" -o "$tmp_ico_dir/$png_name" &>/dev/null && \
|
||||||
|
try_copy_file "$tmp_ico_dir/$png_name" "$user_icons_dir/"; then
|
||||||
|
|
||||||
|
icon_file="$extracted_icon_path"
|
||||||
|
print_ok "Иконка успешно извлечена и сохранена: $icon_file"
|
||||||
|
else
|
||||||
|
print_warning "Не удалось извлечь иконку из $exe_file. Используется иконка по умолчанию."
|
||||||
|
icon_file="wine" # Запасной вариант
|
||||||
|
fi
|
||||||
|
try_remove_dir "$tmp_ico_dir"
|
||||||
|
fi
|
||||||
|
# Случай 3: Передано конкретное имя иконки
|
||||||
|
elif [[ -f "$WH_IMAGE_PATH/$icon_arg.png" ]]; then
|
||||||
|
icon_file="$WH_IMAGE_PATH/$icon_arg.png"
|
||||||
|
# Случай 4: Запасной вариант по умолчанию
|
||||||
|
else
|
||||||
|
print_info "Иконка '$icon_arg' не найдена. Используется иконка по умолчанию."
|
||||||
|
icon_file="wine"
|
||||||
|
fi
|
||||||
|
# --- Конец логики обработки иконки ---
|
||||||
|
|
||||||
|
# Создаем .desktop файл
|
||||||
create_new_dir "$WH_MENU_DIR"
|
create_new_dir "$WH_MENU_DIR"
|
||||||
{
|
{
|
||||||
echo "[Desktop Entry]"
|
echo "[Desktop Entry]"
|
||||||
@@ -596,19 +623,29 @@ create_desktop () {
|
|||||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
|
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
|
||||||
|
|
||||||
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] ; then
|
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] ; then
|
||||||
print_info "Пропускаем обновление desktop.list (режим восстановления из бэкапа)"
|
print_info "Пропускаем обновление desktop.list (режим восстановления)"
|
||||||
else
|
else
|
||||||
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
|
# Добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
|
||||||
if [[ -f "$WINEPREFIX/desktop.list" ]] \
|
if [[ -f "$WINEPREFIX/desktop.list" ]] \
|
||||||
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
|
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
|
||||||
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
|
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
|
||||||
fi
|
fi
|
||||||
create_new_dir "$WINEPREFIX/icons"
|
|
||||||
try_copy_file "$icon_file" "$WINEPREFIX/icons/"
|
# Копируем финальную иконку в директорию иконок префикса, если ее там нет
|
||||||
echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list"
|
local final_icon_name
|
||||||
|
if [[ -f "$icon_file" ]]; then
|
||||||
|
final_icon_name=$(basename "$icon_file")
|
||||||
|
if [[ ! -f "$user_icons_dir/$final_icon_name" ]]; then
|
||||||
|
try_copy_file "$icon_file" "$user_icons_dir/"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
final_icon_name="$icon_file" # например, "wine"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$name_desktop=${exe_file//$WINEPREFIX/}=${final_icon_name}" >> "$WINEPREFIX/desktop.list"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# создаем файл категории для меню
|
# Создаем файл категории для меню
|
||||||
create_new_dir "$HOME/.local/share/desktop-directories"
|
create_new_dir "$HOME/.local/share/desktop-directories"
|
||||||
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
|
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
|
||||||
cat > "$WH_MENU_CATEGORY" <<EOF
|
cat > "$WH_MENU_CATEGORY" <<EOF
|
||||||
@@ -619,7 +656,7 @@ Icon=wine
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Создаем файл меню для всех приложений
|
# Создаем файл меню для всех приложений WineHelper
|
||||||
create_new_dir "$HOME/.config/menus/applications-merged"
|
create_new_dir "$HOME/.config/menus/applications-merged"
|
||||||
if [[ ! -f "$WH_MENU_CONFIG" ]] ; then
|
if [[ ! -f "$WH_MENU_CONFIG" ]] ; then
|
||||||
cat > "$WH_MENU_CONFIG" <<EOF
|
cat > "$WH_MENU_CONFIG" <<EOF
|
||||||
@@ -638,15 +675,15 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Обновляем кэш desktop файлов
|
# Обновляем кэш desktop-файлов
|
||||||
update-desktop-database "$HOME/.local/share/applications"
|
update-desktop-database "$HOME/.local/share/applications"
|
||||||
|
|
||||||
if [[ $4 != "nocopy" ]] ; then
|
if [[ "$desktop_filename_arg" != "nocopy" ]] ; then
|
||||||
desktop_path="$(xdg-user-dir DESKTOP)"
|
desktop_path="$(xdg-user-dir DESKTOP)"
|
||||||
print_info "В меню и на рабочем столе создан $desktop_filename.desktop"
|
print_info "В меню и на рабочем столе создан ярлык: $desktop_filename.desktop"
|
||||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path"
|
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path"
|
||||||
else
|
else
|
||||||
print_info "В меню создан $desktop_filename.desktop"
|
print_info "В меню создан ярлык: $desktop_filename.desktop"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
|
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
|
||||||
@@ -742,9 +779,10 @@ init_wined3d () {
|
|||||||
init_dxvk () {
|
init_dxvk () {
|
||||||
check_variables USE_DXVK_VER "$1"
|
check_variables USE_DXVK_VER "$1"
|
||||||
|
|
||||||
get_dxvk () {
|
get_dxvk() {
|
||||||
DXVK_URL="$1"
|
local DXVK_URL="$1"
|
||||||
DXVK_PACKAGE="${WH_VULKAN_LIBDIR}/dxvk-${DXVK_VAR_VER}.tar.$(echo ${DXVK_URL#*.tar.})"
|
local DXVK_VAR_VER="$2"
|
||||||
|
local DXVK_PACKAGE="${WH_VULKAN_LIBDIR}/${DXVK_VAR_VER}.tar.$(echo "${DXVK_URL#*.tar.}")"
|
||||||
if try_download "$DXVK_URL" "$DXVK_PACKAGE" check256sum \
|
if try_download "$DXVK_URL" "$DXVK_PACKAGE" check256sum \
|
||||||
&& unpack "$DXVK_PACKAGE" "$WH_VULKAN_LIBDIR"
|
&& unpack "$DXVK_PACKAGE" "$WH_VULKAN_LIBDIR"
|
||||||
then
|
then
|
||||||
@@ -755,8 +793,8 @@ init_dxvk () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for DXVK_VAR_VER in "$USE_DXVK_VER" $@ ; do
|
for DXVK_VAR_VER in "$USE_DXVK_VER" $@ ; do
|
||||||
if [[ ! -d "${WH_VULKAN_LIBDIR}/dxvk-$DXVK_VAR_VER" ]] ; then
|
if [[ ! -d "${WH_VULKAN_LIBDIR}/${DXVK_VAR_VER}" ]] ; then
|
||||||
get_dxvk "$CLOUD_URL/dxvk-${DXVK_VAR_VER}.tar.xz"
|
get_dxvk "$CLOUD_URL/${DXVK_VAR_VER}.tar.xz" "$DXVK_VAR_VER"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -769,8 +807,8 @@ init_dxvk () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for dxvkfiles in $DXVK_FILES ; do
|
for dxvkfiles in $DXVK_FILES ; do
|
||||||
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/dxvk-$USE_DXVK_VER/x64/$dxvkfiles.dll"
|
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/${USE_DXVK_VER}/x64/$dxvkfiles.dll"
|
||||||
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/dxvk-$USE_DXVK_VER/x32/$dxvkfiles.dll"
|
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/${USE_DXVK_VER}/x32/$dxvkfiles.dll"
|
||||||
then var_winedlloverride_update "$dxvkfiles=n"
|
then var_winedlloverride_update "$dxvkfiles=n"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -779,9 +817,10 @@ init_dxvk () {
|
|||||||
init_vkd3d () {
|
init_vkd3d () {
|
||||||
check_variables USE_VKD3D_VER "$1"
|
check_variables USE_VKD3D_VER "$1"
|
||||||
|
|
||||||
get_vkd3d () {
|
get_vkd3d() {
|
||||||
VKD3D_URL="$1"
|
local VKD3D_URL="$1"
|
||||||
VKD3D_PACKAGE="${WH_VULKAN_LIBDIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.$(echo ${VKD3D_URL#*.tar.})"
|
local VKD3D_VAR_VER="$2"
|
||||||
|
local VKD3D_PACKAGE="${WH_VULKAN_LIBDIR}/${VKD3D_VAR_VER}.tar.$(echo "${VKD3D_URL#*.tar.}")"
|
||||||
if try_download "$VKD3D_URL" "$VKD3D_PACKAGE" check256sum \
|
if try_download "$VKD3D_URL" "$VKD3D_PACKAGE" check256sum \
|
||||||
&& unpack "$VKD3D_PACKAGE" "$WH_VULKAN_LIBDIR"
|
&& unpack "$VKD3D_PACKAGE" "$WH_VULKAN_LIBDIR"
|
||||||
then
|
then
|
||||||
@@ -792,15 +831,15 @@ init_vkd3d () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for VKD3D_VAR_VER in "$USE_VKD3D_VER" $@ ; do
|
for VKD3D_VAR_VER in "$USE_VKD3D_VER" $@ ; do
|
||||||
if [[ ! -d "${WH_VULKAN_LIBDIR}/vkd3d-proton-$VKD3D_VAR_VER" ]] ; then
|
if [[ ! -d "${WH_VULKAN_LIBDIR}/${VKD3D_VAR_VER}" ]] ; then
|
||||||
get_vkd3d "$CLOUD_URL/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz"
|
get_vkd3d "$CLOUD_URL/${VKD3D_VAR_VER}.tar.xz" "$VKD3D_VAR_VER"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
VKD3D_FILES="d3d12 d3d12core libvkd3d-shader-1 libvkd3d-1" # libvkd3d-proton-utils-3
|
VKD3D_FILES="d3d12 d3d12core libvkd3d-shader-1 libvkd3d-1" # libvkd3d-proton-utils-3
|
||||||
for vkd3dfiles in $VKD3D_FILES ; do
|
for vkd3dfiles in $VKD3D_FILES ; do
|
||||||
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/vkd3d-proton-$USE_VKD3D_VER/x64/$vkd3dfiles.dll"
|
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/${USE_VKD3D_VER}/x64/$vkd3dfiles.dll"
|
||||||
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/vkd3d-proton-$USE_VKD3D_VER/x86/$vkd3dfiles.dll"
|
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/${USE_VKD3D_VER}/x86/$vkd3dfiles.dll"
|
||||||
then var_winedlloverride_update "$vkd3dfiles=n"
|
then var_winedlloverride_update "$vkd3dfiles=n"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -1074,7 +1113,7 @@ init_wineprefix () {
|
|||||||
if [[ ! -f "$WINEPREFIX/.firstboot" ]] ; then
|
if [[ ! -f "$WINEPREFIX/.firstboot" ]] ; then
|
||||||
create_new_dir "$WINEPREFIX"
|
create_new_dir "$WINEPREFIX"
|
||||||
if [[ "$CLEAR_PREFIX" == "1" ]]
|
if [[ "$CLEAR_PREFIX" == "1" ]]
|
||||||
then print_warning "Используется переменная \"CLEAR_PREFIX=1\" что принудительно создает чистый префикс с установкой компонентов с помощью winetricks."
|
then print_warning "Используется переменная \"CLEAR_PREFIX=1\", которая принудительно создает чистый префикс с установкой компонентов с помощью winetricks."
|
||||||
elif [[ "$BASE_PFX" != "none" ]]
|
elif [[ "$BASE_PFX" != "none" ]]
|
||||||
then get_base_pfx "$BASE_PFX"
|
then get_base_pfx "$BASE_PFX"
|
||||||
fi
|
fi
|
||||||
@@ -1165,7 +1204,7 @@ init_wineprefix () {
|
|||||||
for ext in $WH_XDG_OPEN ; do
|
for ext in $WH_XDG_OPEN ; do
|
||||||
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
|
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
|
||||||
done
|
done
|
||||||
print_info "Используется ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
|
print_info "Используются ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
|
||||||
else
|
else
|
||||||
# удаление команды xdg-open из реестра
|
# удаление команды xdg-open из реестра
|
||||||
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
|
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
|
||||||
@@ -1193,7 +1232,7 @@ init_wineprefix () {
|
|||||||
"${cpcsp_proxy_cmd[@]}" | tee "$WINEPREFIX/cpcsp_setup.log"
|
"${cpcsp_proxy_cmd[@]}" | tee "$WINEPREFIX/cpcsp_setup.log"
|
||||||
local CPCSP_EXIT_STATUS="${PIPESTATUS[0]}"
|
local CPCSP_EXIT_STATUS="${PIPESTATUS[0]}"
|
||||||
if grep -q "failed to load /opt/cprocsp/" "$WINEPREFIX/cpcsp_setup.log" ; then
|
if grep -q "failed to load /opt/cprocsp/" "$WINEPREFIX/cpcsp_setup.log" ; then
|
||||||
fatal "Проверьте правильность установки CryptoPro в системе.\n Инструкция: https://www.altlinux.org/CryptoPro"
|
fatal "Проверьте правильность установки КриптоПро в системе.\n Инструкция: https://www.altlinux.org/CryptoPro"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $CPCSP_EXIT_STATUS == "0" ]] ; then
|
if [[ $CPCSP_EXIT_STATUS == "0" ]] ; then
|
||||||
@@ -1535,9 +1574,7 @@ select_wine_version() {
|
|||||||
group_versions+=("$version_name")
|
group_versions+=("$version_name")
|
||||||
fi
|
fi
|
||||||
else # win32
|
else # win32
|
||||||
if [[ "$version_name" =~ i[3-6]86 ]]; then
|
group_versions+=("$version_name")
|
||||||
group_versions+=("$version_name")
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done < "$sha256_file"
|
done < "$sha256_file"
|
||||||
@@ -1618,8 +1655,8 @@ select_wine_version() {
|
|||||||
read -p "Введите номер для выбора wine/proton (0-$max_choice): " user_choice
|
read -p "Введите номер для выбора wine/proton (0-$max_choice): " user_choice
|
||||||
if [[ "$user_choice" =~ ^[0-9]+$ ]] && (( user_choice >= 0 && user_choice <= max_choice )); then
|
if [[ "$user_choice" =~ ^[0-9]+$ ]] && (( user_choice >= 0 && user_choice <= max_choice )); then
|
||||||
if [[ "$user_choice" == "0" ]]; then
|
if [[ "$user_choice" == "0" ]]; then
|
||||||
print_info "Создание префикса отменено."
|
print_info "Операция отменена."
|
||||||
exit 0
|
return 1
|
||||||
fi
|
fi
|
||||||
local selected_opt
|
local selected_opt
|
||||||
selected_opt="${selectable_options[$user_choice]}"
|
selected_opt="${selectable_options[$user_choice]}"
|
||||||
@@ -1633,6 +1670,7 @@ select_wine_version() {
|
|||||||
print_error "Неверный выбор. Введите число от 0 до $max_choice."
|
print_error "Неверный выбор. Введите число от 0 до $max_choice."
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
create_prefix() {
|
create_prefix() {
|
||||||
@@ -1682,7 +1720,7 @@ create_prefix() {
|
|||||||
*) fatal "Неверный выбор. Операция отменена." ;;
|
*) fatal "Неверный выбор. Операция отменена." ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
select_wine_version
|
select_wine_version || exit 0
|
||||||
|
|
||||||
print_info "Выберите тип создаваемого префикса:"
|
print_info "Выберите тип создаваемого префикса:"
|
||||||
echo " 0) Отмена создания префикса"
|
echo " 0) Отмена создания префикса"
|
||||||
@@ -1717,7 +1755,7 @@ remove_winehelper () {
|
|||||||
echo " Это удалит:"
|
echo " Это удалит:"
|
||||||
echo " - Все настройки WineHelper"
|
echo " - Все настройки WineHelper"
|
||||||
echo " - Все приложения/программы, установленные через WineHelper"
|
echo " - Все приложения/программы, установленные через WineHelper"
|
||||||
echo " - Все ярлыки из меню и с рабочего стола созданные с помощью WineHelper"
|
echo " - Все ярлыки из меню и с рабочего стола, созданные с помощью WineHelper"
|
||||||
echo "======================================================"
|
echo "======================================================"
|
||||||
if print_confirmation "Продолжить?" ; then
|
if print_confirmation "Продолжить?" ; then
|
||||||
echo "----------------------------------------------"
|
echo "----------------------------------------------"
|
||||||
@@ -1979,6 +2017,185 @@ restore_prefix() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_last_conf_var() {
|
||||||
|
local var_name="$1"
|
||||||
|
local new_value="$2"
|
||||||
|
local conf_file="$WINEPREFIX/last.conf"
|
||||||
|
|
||||||
|
if [[ ! -f "$conf_file" ]] ; then
|
||||||
|
print_warning "Файл last.conf не найден, не могу обновить переменную $var_name."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -q "export $var_name=" "$conf_file"; then
|
||||||
|
sed -i "s|^export $var_name=.*|export $var_name=\"$new_value\"|" "$conf_file"
|
||||||
|
else
|
||||||
|
echo "export $var_name=\"$new_value\"" >> "$conf_file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
list_component_versions() {
|
||||||
|
local component_group="$1"
|
||||||
|
local sha256_file="$DATA_PATH/sha256sum.list"
|
||||||
|
[[ ! -f "$sha256_file" ]] && fatal "Файл с версиями не найден: $sha256_file"
|
||||||
|
|
||||||
|
print_info "Доступные версии для $component_group:"
|
||||||
|
|
||||||
|
awk -v group="$component_group" '
|
||||||
|
/^#+\s*([^#]+?)\s*#*$/ {
|
||||||
|
current_group = $0
|
||||||
|
gsub(/^#+\s*|\s*#*$/, "", current_group)
|
||||||
|
}
|
||||||
|
/^[a-f0-9]{64}/ {
|
||||||
|
if (current_group == group) {
|
||||||
|
filename = $2
|
||||||
|
sub(/\.tar\.xz$/, "", filename)
|
||||||
|
print " - " filename
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' "$sha256_file" | sort -Vr
|
||||||
|
}
|
||||||
|
|
||||||
|
select_component_version() {
|
||||||
|
local component_group="$1"
|
||||||
|
local sha256_file="$DATA_PATH/sha256sum.list"
|
||||||
|
[[ ! -f "$sha256_file" ]] && fatal "Файл с версиями не найден: $sha256_file"
|
||||||
|
|
||||||
|
local versions=()
|
||||||
|
local current_group=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" =~ ^#+[[:space:]]([^#[:space:]]+)[[:space:]]#* ]] ; then
|
||||||
|
current_group="${BASH_REMATCH[1]}"
|
||||||
|
elif [[ "$current_group" == "$component_group" ]] && [[ "$line" =~ [a-f0-9]{64} ]] ; then
|
||||||
|
local filename
|
||||||
|
filename=$(echo "$line" | awk '{print $2}')
|
||||||
|
local version_name=${filename%.tar.xz}
|
||||||
|
versions+=("$version_name")
|
||||||
|
fi
|
||||||
|
done < "$sha256_file"
|
||||||
|
|
||||||
|
IFS=$'\n' versions=($(sort -Vr <<<"${versions[*]}"))
|
||||||
|
unset IFS
|
||||||
|
|
||||||
|
if [[ ${#versions[@]} -eq 0 ]] ; then
|
||||||
|
print_warning "Не найдено доступных версий для $component_group." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "Выберите версию $component_group для установки:" >&2
|
||||||
|
echo >&2
|
||||||
|
|
||||||
|
local items_to_print=(" 0) Отмена")
|
||||||
|
for i in "${!versions[@]}" ; do
|
||||||
|
items_to_print+=(" $((i+1))) ${versions[$i]}")
|
||||||
|
done
|
||||||
|
|
||||||
|
local num_items=${#items_to_print[@]}
|
||||||
|
local term_width=${COLUMNS:-80}
|
||||||
|
local max_len=0
|
||||||
|
for item in "${items_to_print[@]}" ; do
|
||||||
|
(( ${#item} > max_len )) && max_len=${#item}
|
||||||
|
done
|
||||||
|
|
||||||
|
((max_len+=2))
|
||||||
|
local num_cols=$(( term_width / max_len ))
|
||||||
|
(( num_cols = num_cols > 0 ? num_cols : 1 ))
|
||||||
|
local num_rows=$(( (num_items + num_cols - 1) / num_cols ))
|
||||||
|
|
||||||
|
for ((i=0; i<num_rows; i++)) ; do
|
||||||
|
for ((j=0; j<num_cols; j++)) ; do
|
||||||
|
local index=$(( i + j * num_rows ))
|
||||||
|
(( index < num_items )) && printf "%-*s" "$max_len" "${items_to_print[index]}" >&2
|
||||||
|
done
|
||||||
|
echo >&2
|
||||||
|
done
|
||||||
|
|
||||||
|
local max_choice=${#versions[@]}
|
||||||
|
local user_choice
|
||||||
|
while true; do
|
||||||
|
echo >&2
|
||||||
|
read -p "Введите номер (0-$max_choice): " user_choice
|
||||||
|
if [[ "$user_choice" =~ ^[0-9]+$ ]] && (( user_choice >= 0 && user_choice <= max_choice )) ; then
|
||||||
|
if [[ "$user_choice" == "0" ]] ; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "${versions[$((user_choice-1))]}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
print_error "Неверный выбор. Введите число от 0 до $max_choice." >&2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
run_install_dxvk() {
|
||||||
|
local version="$1"
|
||||||
|
if [[ -z "$version" ]] ; then
|
||||||
|
version=$(select_component_version "DXVK")
|
||||||
|
[[ $? -ne 0 ]] && print_info "Установка DXVK отменена." && return
|
||||||
|
elif [[ "$version" == "list" ]]; then
|
||||||
|
list_component_versions "DXVK"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
check_prefix_var
|
||||||
|
init_database
|
||||||
|
init_wine_ver
|
||||||
|
init_wineprefix
|
||||||
|
if [[ "$version" == "none" ]] ; then
|
||||||
|
print_info "Удаление DXVK..."
|
||||||
|
init_wined3d
|
||||||
|
update_last_conf_var "DXVK_VER" ""
|
||||||
|
else
|
||||||
|
init_dxvk "$version"
|
||||||
|
update_last_conf_var "DXVK_VER" "$USE_DXVK_VER"
|
||||||
|
fi
|
||||||
|
wait_wineserver
|
||||||
|
}
|
||||||
|
|
||||||
|
run_install_vkd3d() {
|
||||||
|
local version="$1"
|
||||||
|
if [[ -z "$version" ]] ; then
|
||||||
|
version=$(select_component_version "VKD3D")
|
||||||
|
[[ $? -ne 0 ]] && print_info "Установка VKD3D отменена." && return
|
||||||
|
elif [[ "$version" == "list" ]] ; then
|
||||||
|
list_component_versions "VKD3D"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
check_prefix_var
|
||||||
|
init_database
|
||||||
|
init_wine_ver
|
||||||
|
init_wineprefix
|
||||||
|
if [[ "$version" == "none" ]] ; then
|
||||||
|
print_info "Удаление VKD3D..."
|
||||||
|
init_wined3d
|
||||||
|
update_last_conf_var "VKD3D_VER" ""
|
||||||
|
else
|
||||||
|
init_vkd3d "$version"
|
||||||
|
update_last_conf_var "VKD3D_VER" "$USE_VKD3D_VER"
|
||||||
|
fi
|
||||||
|
wait_wineserver
|
||||||
|
}
|
||||||
|
|
||||||
|
run_change_wine_version() {
|
||||||
|
local new_version="$1"
|
||||||
|
|
||||||
|
check_prefix_var
|
||||||
|
init_database
|
||||||
|
|
||||||
|
if [[ -z "$new_version" ]]; then
|
||||||
|
select_wine_version || exit 0
|
||||||
|
new_version="$WH_WINE_USE"
|
||||||
|
else
|
||||||
|
export WH_WINE_USE="$new_version"
|
||||||
|
fi
|
||||||
|
|
||||||
|
init_wine_ver
|
||||||
|
|
||||||
|
init_wineprefix
|
||||||
|
|
||||||
|
wait_wineserver
|
||||||
|
print_ok "Версия Wine для префикса $PREFIX_NAME успешно изменена на $WH_WINE_USE."
|
||||||
|
}
|
||||||
|
|
||||||
wh_info () {
|
wh_info () {
|
||||||
echo "Использование: $SCRIPT_NAME [команда]
|
echo "Использование: $SCRIPT_NAME [команда]
|
||||||
|
|
||||||
@@ -1987,6 +2204,10 @@ wh_info () {
|
|||||||
install [скрипт] запустить скрипт установки программы
|
install [скрипт] запустить скрипт установки программы
|
||||||
install [скрипт] --clear-pfx не использовать готовый префикс для установки ПО
|
install [скрипт] --clear-pfx не использовать готовый префикс для установки ПО
|
||||||
|
|
||||||
|
install-dxvk [версия|none|list] установить, удалить или показать версии DXVK
|
||||||
|
install-vkd3d [версия|none|list] установить, удалить или показать версии VKD3D
|
||||||
|
change-wine [версия] изменить версию Wine/Proton для текущего префикса
|
||||||
|
|
||||||
installed список установленных программ
|
installed список установленных программ
|
||||||
run [программа] запуск программы (отладка)
|
run [программа] запуск программы (отладка)
|
||||||
remove-all удалить WineHelper и все связанные данные
|
remove-all удалить WineHelper и все связанные данные
|
||||||
@@ -2034,6 +2255,9 @@ case "$arg1" in
|
|||||||
winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;;
|
winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;;
|
||||||
desktop) create_desktop "$@" ; exit 0 ;;
|
desktop) create_desktop "$@" ; exit 0 ;;
|
||||||
install|-i) run_autoinstall "$@" ;;
|
install|-i) run_autoinstall "$@" ;;
|
||||||
|
install-dxvk) run_install_dxvk "$@" ;;
|
||||||
|
install-vkd3d) run_install_vkd3d "$@" ;;
|
||||||
|
change-wine) run_change_wine_version "$@" ;;
|
||||||
installed) check_installed_programs "$1" ;;
|
installed) check_installed_programs "$1" ;;
|
||||||
run|-r) run_installed_programs "$1" ;;
|
run|-r) run_installed_programs "$1" ;;
|
||||||
backup-prefix) backup_prefix "$@" ;;
|
backup-prefix) backup_prefix "$@" ;;
|
||||||
@@ -2046,7 +2270,8 @@ case "$arg1" in
|
|||||||
*)
|
*)
|
||||||
if [[ -f "$arg1" ]] ; then
|
if [[ -f "$arg1" ]] ; then
|
||||||
WIN_FILE_EXEC="$(readlink -f "$arg1")"
|
WIN_FILE_EXEC="$(readlink -f "$arg1")"
|
||||||
WIN_FILE_NAME="$(basename "$arg1")"
|
WIN_FILE_NAME="$(basename "$WIN_FILE_EXEC")"
|
||||||
|
find_prefix "$WIN_FILE_EXEC"
|
||||||
case "${WIN_FILE_NAME,,}" in
|
case "${WIN_FILE_NAME,,}" in
|
||||||
*.exe) prepair_wine ; wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" ;;
|
*.exe) prepair_wine ; wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" ;;
|
||||||
*.msi) prepair_wine ; wine_run msiexec /i "$WIN_FILE_EXEC" "$@" ;;
|
*.msi) prepair_wine ; wine_run msiexec /i "$WIN_FILE_EXEC" "$@" ;;
|
||||||
|
1256
winehelper_gui.py
1256
winehelper_gui.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user