forked from CastroFidel/winehelper
Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
b29e586137 | |||
ace00616ca | |||
5b6a05a09e | |||
3be6b8c4a1 | |||
b684afe1ad | |||
bda5a31205 | |||
e55bc209c1 | |||
33f12d5287 | |||
bb0ec33202 | |||
a4998d2f26 | |||
ca9e1d7f75 | |||
b4d36b15e8 | |||
717e6c0e7d | |||
3ea9462025 | |||
8774a8b34d | |||
052a07a42b | |||
112933c7b1 | |||
de34f84e04 | |||
4310fe1e8c | |||
cd619bb9cc | |||
b319f4146c | |||
70b577dce5 | |||
997612c98d | |||
8892f29a33 | |||
5c0a62ff02 | |||
20f2f6d112 | |||
0d4faa3224 | |||
388293e929 |
24
CHANGELOG
24
CHANGELOG
@ -1,5 +1,29 @@
|
||||
История изменений:
|
||||
|
||||
0.3.9:
|
||||
* обновлен скрипт установки scadoffice
|
||||
* добавлена автоустановка:
|
||||
winehelper easymnemo - "Easymnemo"
|
||||
* winetricks поставляется с пакетом WineHelper, а не скачивается из GitHub
|
||||
* добавлена возможность удаления префикса
|
||||
|
||||
0.3.8:
|
||||
* добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux приложении
|
||||
* добавлен выбор префикса, если переменная WINEPREFIX не объявлена
|
||||
* добавлено сохранение последней конфигурации использования префикса
|
||||
* добавлено сохранение скписка создаваемых ярлыков для приложений
|
||||
|
||||
0.3.7:
|
||||
* обновлены функции создания desktop файлов (ярлыков) и категория WineHelper в меню
|
||||
* обновлен скрипт установки scadoffice
|
||||
* добавлена автоустановка:
|
||||
winehelper install zulugis - ZuluGIS 2021 Инженерные расчёты
|
||||
* добавлена функция полного удаления WineHelper
|
||||
* обновлена проверка на наличие noexec для /home (ALT bug: 54095)
|
||||
|
||||
0.3.6:
|
||||
* добавлена категория WineHelper для desktop файлов (ярлыков) в меню
|
||||
|
||||
0.3.5:
|
||||
* обновлены скрипты установок daobit
|
||||
* добавлен вывод списка программ с возможностью установки из существующего дистрибутива
|
||||
|
27
autoinstall/easymnemo
Normal file
27
autoinstall/easymnemo
Normal file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Удобная программа для создания двухмерных схем и чертежей. Основной акцент сделан на проектировании систем тепло-, водо- и газоснабжения, водоочистки, автоматизированных систем управления технологическими процессами (АСУТП), а также планов эвакуации при пожаре и авариях.
|
||||
########################################################################
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_i586"
|
||||
export WINEPREFIX="easymnemo"
|
||||
export PROG_NAME="Easymnemo"
|
||||
export PROG_ICON="easymnemo"
|
||||
export BASE_PFX="none"
|
||||
export WH_WINDOWS_VER="10"
|
||||
export WINEARCH="win32"
|
||||
export INSTALL_DLL="dotnet35 mdac28 jet40"
|
||||
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/Easymnemo.zip"
|
||||
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/Easymnemo"
|
||||
AUTOINSTALL_SETUP="${WH_TMP_DIR}/Easymnemo/EasyMnemo.msi"
|
||||
|
||||
prepair_wine
|
||||
if try_download "https://s.siteapi.org/c6e311629e736a8.ru/docs/j3pdl4vxv5wkg0sg0ksks40k8ss0sc" "${AUTOINSTALL_EXE}" ; then
|
||||
7z x -y "${AUTOINSTALL_EXE}" -o"${AUTOINSTALL_UNPACK}"
|
||||
try_remove_file "$AUTOINSTALL_EXE"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_SETUP}" /q
|
||||
try_remove_dir "$AUTOINSTALL_UNPACK"
|
||||
|
||||
WIN_FILE_EXEC="$DRIVE_C/Program Files/Easymnemo/Easymnemo.exe"
|
||||
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
|
||||
fi
|
@ -3,27 +3,66 @@
|
||||
########################################################################
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="scadoffice"
|
||||
export BASE_PFX="none"
|
||||
export BASE_PFX="scadaoffice_pfx_x64_v03"
|
||||
export WH_WINDOWS_VER="10"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL="dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
|
||||
|
||||
ADDONS_PACK="${WH_TMP_DIR}/scadoffice_addons_v01.tar.xz"
|
||||
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
|
||||
OFFICE_EXE="${ADDONS_PATH}/OpenOffice.exe"
|
||||
OFFICE_PACK="${ADDONS_PATH}/OpenOffice"
|
||||
AUTOINSTALL_SETUP="${ADDONS_PATH}/OpenOffice/setup.exe"
|
||||
ADDONS_PATH_REG="${ADDONS_PATH}/REG"
|
||||
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
|
||||
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_11.exe"
|
||||
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
|
||||
export INSTALL_DLL="dotnet20 dotnet472 dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
|
||||
export WH_XDG_OPEN="rtf"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
|
||||
SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz"
|
||||
|
||||
prepair_wine
|
||||
|
||||
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
|
||||
|
||||
if [[ -n $2 ]] ; then
|
||||
if [[ ! -d "$DRIVE_C_SCADOFFICE" ]] ; then
|
||||
fatal "Перезапустите скрипт без дополнительных аргументов для установки SCAD Office:
|
||||
winehelper install scadoffice"
|
||||
elif [[ ! -f "$2" ]] ; then
|
||||
fatal "Перезапустите скрипт с правильным путем до файла лицензии SCAD Office:
|
||||
winehelper install scadoffice \"/путь/до/файла.exe\""
|
||||
else
|
||||
print_info "Устанавливаем файл лицензии $2"
|
||||
wine_run "$2"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $BASE_PFX == "none" ]] ; then
|
||||
print_info "Установка дополнительных компонентов..."
|
||||
|
||||
ADDONS_PACK="${WH_TMP_DIR}/$(basename "$SCADOFFICE_ADDONS_URL")"
|
||||
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
|
||||
|
||||
ADDONS_PATH_REG="${ADDONS_PATH}/REG"
|
||||
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
|
||||
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
|
||||
|
||||
if try_download "$SCADOFFICE_ADDONS_URL" "${ADDONS_PACK}" ; then
|
||||
create_new_dir "${ADDONS_PATH}"
|
||||
unpack "${ADDONS_PACK}" "${ADDONS_PATH}"
|
||||
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
|
||||
|
||||
# Установка ODBC
|
||||
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}/System" "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}"/*.* "$DRIVE_C/windows/system32/"
|
||||
wine_run regedit "${ADDONS_PATH_MDAC}"/*.reg
|
||||
|
||||
# Установка SSH
|
||||
cp -r "${ADDONS_PATH_OPENSSH}" "$DRIVE_C/windows/system32/"
|
||||
|
||||
try_remove_dir "$ADDONS_PATH"
|
||||
try_remove_file "$ADDONS_PACK"
|
||||
fi
|
||||
fi
|
||||
|
||||
if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; then
|
||||
create_new_dir "$DRIVE_C/SDATA"
|
||||
create_new_dir "$DRIVE_C/SWORK"
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /auto /hide
|
||||
try_remove_file "$AUTOINSTALL_EXE"
|
||||
|
||||
# Определение всех программ, значков и исполняемых файлов
|
||||
declare -a PROG_NAME=("Арбат" "Вест" "Глобальные настройки" "Декор" "Дискретная арматура" "Запрос" "Камин" "КоКон" "Комета" "Конструктор сечений" "Консул" "Конфигуратор лицензий" "Кристалл" "Кросс" "Куст" "Магнум" "Монолит" "Откос" "Пастернак" "Преобразование ед. измерений" "Cортамент металлопроката" "Расчет по формуле" "Редактор акселерограмм" "Редактор динамичности" "Редактор материалов" "Тонус" "Эквивалентное сечение" "SCAD++")
|
||||
@ -32,37 +71,8 @@ if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; t
|
||||
|
||||
declare -a WIN_FILE_EXEC=("${DRIVE_C_SCADOFFICE}/Arbat.exe" "${DRIVE_C_SCADOFFICE}/West.exe" "${DRIVE_C_SCADOFFICE}/GlobalSettings.exe" "${DRIVE_C_SCADOFFICE}/Decor.exe" "${DRIVE_C_SCADOFFICE}/ReBar.exe" "${DRIVE_C_SCADOFFICE}/UnderGround.exe" "${DRIVE_C_SCADOFFICE}/ComeIn.exe" "${DRIVE_C_SCADOFFICE}/CoCon.exe" "${DRIVE_C_SCADOFFICE}/Comet2.exe" "${DRIVE_C_SCADOFFICE}/Section.exe" "${DRIVE_C_SCADOFFICE}/Consul.exe" "${DRIVE_C_SCADOFFICE}/ConfigProtection.exe" "${DRIVE_C_SCADOFFICE}/Kristall.exe" "${DRIVE_C_SCADOFFICE}/Cross.exe" "${DRIVE_C_SCADOFFICE}/Kust2.exe" "${DRIVE_C_SCADOFFICE}/Magnum.exe" "${DRIVE_C_SCADOFFICE}/Monolit.exe" "${DRIVE_C_SCADOFFICE}/Slope.exe" "${DRIVE_C_SCADOFFICE}/Pasternak.exe" "${DRIVE_C_SCADOFFICE}/UCalc.exe" "${DRIVE_C_SCADOFFICE}/ViewProf.exe" "${DRIVE_C_SCADOFFICE}/SCalc.exe" "${DRIVE_C_SCADOFFICE}/AccelEdit.exe" "${DRIVE_C_SCADOFFICE}/BetaEdit.exe" "${DRIVE_C_SCADOFFICE}/MaterialsEdit.exe" "${DRIVE_C_SCADOFFICE}/Tonus.exe" "${DRIVE_C_SCADOFFICE}/Sezam.exe" "${DRIVE_C_SCADOFFICE}/SCADX.exe")
|
||||
|
||||
# Цикл для создания десктопных файлов
|
||||
# Цикл создания десктоп файлов для scad office
|
||||
for i in "${!PROG_NAME[@]}"; do
|
||||
create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}"
|
||||
create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}" "nocopy"
|
||||
done
|
||||
fi
|
||||
|
||||
print_info "Установка дополнительных компонентов..."
|
||||
|
||||
if try_download "https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v01.tar.xz" "${ADDONS_PACK}" ; then
|
||||
create_new_dir "${ADDONS_PATH}"
|
||||
unpack "${ADDONS_PACK}" "${ADDONS_PATH}"
|
||||
7z x -y "${OFFICE_EXE}" -o"${OFFICE_PACK}"
|
||||
wine_run_install "${AUTOINSTALL_SETUP}" /qn
|
||||
|
||||
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
|
||||
|
||||
# Установка ODBC
|
||||
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}/System" "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}"/*.* "$DRIVE_C/windows/system32/"
|
||||
wine_run regedit "${ADDONS_PATH_MDAC}"/*.reg
|
||||
|
||||
# Установка SSH
|
||||
cp -r "${ADDONS_PATH_OPENSSH}" "$DRIVE_C/windows/system32/"
|
||||
|
||||
export PROG_NAME1="OpenOffice"
|
||||
export PROG_ICON1="openoffice"
|
||||
|
||||
WIN_FILE_EXEC1="$DRIVE_C/Program Files (x86)/OpenOffice 4/program/soffice.exe"
|
||||
create_desktop "$PROG_NAME1" "$WIN_FILE_EXEC1" "$PROG_ICON1"
|
||||
try_remove_dir "$ADDONS_PATH"
|
||||
try_remove_file "$ADDONS_PACK"
|
||||
try_remove_file "$AUTOINSTALL_EXE"
|
||||
fi
|
||||
|
21
autoinstall/zulugis
Normal file
21
autoinstall/zulugis
Normal file
@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: ZuluGIS 2021 Инженерные расчёты (Полный) 64-бит. Включает ZuluGIS, пакеты расчетов ZuluThermo, ZuluHydro, ZuluDrain, ZuluGaz, ZuluSteam, библиотеки ZuluXTools и ZuluNetTools. Дополнительно в состав пакета входит Microsoft SQL Server Express LocalDB 2012.
|
||||
########################################################################
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export PROG_NAME="ZuluGIS 2021"
|
||||
export WINEPREFIX="zulugis"
|
||||
export PROG_ICON="zulugis"
|
||||
export WH_WINDOWS_VER="10"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
# export INSTALL_DLL="gdiplus"
|
||||
export AUTOINSTALL_EXE="${WH_TMP_DIR}/Zulu2021_x64_ru.exe"
|
||||
|
||||
prepair_wine
|
||||
if try_download "https://www.politerm.com/download/zulu/Zulu2021_x64_ru.exe" "${AUTOINSTALL_EXE}" ; then
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /quiet /norestart
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
WIN_FILE_EXEC="$DRIVE_C/Program Files/ZuluGIS/Zulu.exe"
|
||||
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
|
||||
fi
|
BIN
image/easymnemo.png
Normal file
BIN
image/easymnemo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.1 KiB |
BIN
image/zulugis.png
Normal file
BIN
image/zulugis.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
@ -63,3 +63,9 @@ dfb44ce5e5af7dba1686932c63d6b05e5dd6919a21c78130a7d1d0271b93958e audiorecstatio
|
||||
00516ef51079d68ad0f9621c8270e0f86318539b63ebf1085d0faba36896e4ac daobit_pfx_x86_v01.tar.xz
|
||||
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
||||
# winetricks arial dotnet7 dotnetdesktop7 renderer=gdi
|
||||
|
||||
25e277c7afa4a9afc5f013cb05f872c12a7f381c4f0503a423dcacccca9a14c6 scadaoffice_pfx_x64_v03.tar.xz
|
||||
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
||||
# winetricks dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6 dotnet20
|
||||
# + addons with ODBC, SSH, *.reg
|
||||
0f4ef434df07bc338ae308af44330590eaa1d9c94b64850514e55b960642d0eb scadoffice_addons_v02.tar.xz
|
||||
|
384
winehelper
384
winehelper
@ -29,6 +29,9 @@ else
|
||||
check_variables DEBUG "0"
|
||||
fi
|
||||
|
||||
##### WINETRICKS VERSION #####
|
||||
WINETRICKS_VERSION="20250102"
|
||||
|
||||
##### DEFAULT VARIABLES #####
|
||||
SCRIPT_NAME="$(basename "$0")"
|
||||
if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
|
||||
@ -50,6 +53,11 @@ WH_IMAGE_PATH="$DATA_PATH/image"
|
||||
WH_DB_DIR="$DATA_PATH/database"
|
||||
WH_AUTOINSTALL_DIR="$DATA_PATH/autoinstall"
|
||||
WH_MANUALINSTALL_DIR="$DATA_PATH/manualinstall"
|
||||
WH_WINETRICKS="$DATA_PATH/winetricks_$WINETRICKS_VERSION"
|
||||
|
||||
WH_MENU_DIR="$HOME/.local/share/applications/WineHelper"
|
||||
WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory"
|
||||
WH_MENU_CONFIG="$HOME/.config/menus/applications-merged/WineHelper.menu"
|
||||
|
||||
# export WINEDLLOVERRIDES=mshtml,mscoree="
|
||||
|
||||
@ -89,7 +97,7 @@ check_variables VKD3D_VER "1.1-2602"
|
||||
export CLOUD_URL="https://cloud.linux-gaming.ru/portproton"
|
||||
|
||||
##### CHECK NOEXEC FOR /HOME #####
|
||||
if grep "/home" /etc/fstab | grep -q "noexec" ; then
|
||||
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
|
||||
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога."
|
||||
fi
|
||||
|
||||
@ -357,6 +365,7 @@ var_ld_library_path_update () {
|
||||
create_desktop () {
|
||||
local name_desktop="$1"
|
||||
local exe_file="$2"
|
||||
local desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|")"
|
||||
local icon_file="$WH_IMAGE_PATH/$3.png"
|
||||
|
||||
if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then
|
||||
@ -379,24 +388,81 @@ create_desktop () {
|
||||
fi
|
||||
fi
|
||||
|
||||
create_new_dir "$WH_MENU_DIR"
|
||||
|
||||
[[ ! -f "$icon_file" ]] && icon_file=wine
|
||||
|
||||
# создаем .desktop файл
|
||||
{
|
||||
echo "[Desktop Entry]"
|
||||
echo "Name=$name_desktop"
|
||||
echo "Exec=env \"$RUN_SCRIPT\" \"$exe_file\" %F"
|
||||
echo "Type=Application"
|
||||
echo "Categories=Other;"
|
||||
echo "Categories=WineHelper;"
|
||||
echo "StartupNotify=true"
|
||||
echo "Path=$DATA_PATH"
|
||||
echo "Icon=$icon_file"
|
||||
} > "$USER_WORK_PATH/$name_desktop.desktop"
|
||||
chmod +x "$USER_WORK_PATH/$name_desktop.desktop"
|
||||
} > "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||
chmod +x "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||
|
||||
create_new_dir "$HOME/.local/share/applications/"
|
||||
# cp -f "$USER_WORK_PATH/$name_desktop.desktop" "$HOME/.local/share/applications/"
|
||||
cp -f "$USER_WORK_PATH/$name_desktop.desktop" "$(xdg-user-dir DESKTOP)"
|
||||
print_info "На рабочем столе создан $name_desktop.desktop"
|
||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
|
||||
|
||||
|
||||
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
|
||||
if [[ -f "$WINEPREFIX/desktop.list" ]] \
|
||||
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
|
||||
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
|
||||
fi
|
||||
echo "$name_desktop=${exe_file//$WINEPREFIX/}" >> "$WINEPREFIX/desktop.list"
|
||||
|
||||
# создаем файл категории для меню
|
||||
create_new_dir "$HOME/.local/share/desktop-directories"
|
||||
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
|
||||
cat > "$WH_MENU_CATEGORY" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Directory
|
||||
Name=WineHelper
|
||||
Icon=wine
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Создаем файл меню для всех приложений
|
||||
create_new_dir "$HOME/.config/menus/applications-merged"
|
||||
if [[ ! -f "$WH_MENU_CONFIG" ]] ; then
|
||||
cat > "$WH_MENU_CONFIG" <<EOF
|
||||
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
|
||||
<Menu>
|
||||
<Name>Applications</Name>
|
||||
<Menu>
|
||||
<Name>WineHelper</Name>
|
||||
<Directory>WineHelper.directory</Directory>
|
||||
<Include>
|
||||
<Category>WineHelper</Category>
|
||||
</Include>
|
||||
</Menu>
|
||||
</Menu>
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Обновляем кэш desktop файлов
|
||||
if check_command update-desktop-database ; then
|
||||
update-desktop-database "$HOME/.local/share/applications"
|
||||
fi
|
||||
|
||||
if [[ $4 != "nocopy" ]] ; then
|
||||
if [[ -n $4 ]] ; then
|
||||
local desktop_path="$(xdg-user-dir DESKTOP)/$4"
|
||||
create_new_dir "$desktop_path"
|
||||
print_info "В меню создан $desktop_filename.desktop и скопирован на рабочий стол в каталог $4"
|
||||
else
|
||||
local desktop_path="$(xdg-user-dir DESKTOP)"
|
||||
print_info "В меню и на рабочем столе создан $desktop_filename.desktop"
|
||||
fi
|
||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path"
|
||||
else
|
||||
print_info "В меню создан $desktop_filename.desktop"
|
||||
fi
|
||||
|
||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
|
||||
&& [[ -f "$exe_file" ]]
|
||||
@ -416,9 +482,22 @@ create_desktop () {
|
||||
remove_desktop () {
|
||||
if [[ -n "$1" ]] ; then
|
||||
try_remove_file "$USER_WORK_PATH/$1.desktop"
|
||||
try_remove_file "$WH_MENU_DIR/$1.desktop"
|
||||
try_remove_file "$HOME/.local/share/applications/$1.desktop"
|
||||
try_remove_file "$(xdg-user-dir DESKTOP)/$1.desktop"
|
||||
fi
|
||||
|
||||
# Удаляем категорию если она пуста
|
||||
if [[ -d "$WH_MENU_DIR" ]] && [[ -z "$(ls -A "$WH_MENU_DIR")" ]]; then
|
||||
try_remove_dir "$WH_MENU_DIR"
|
||||
try_remove_file "$WH_MENU_CATEGORY"
|
||||
try_remove_file "$WH_MENU_CONFIG"
|
||||
fi
|
||||
|
||||
# Обновляем кэш desktop файлов
|
||||
if check_command update-desktop-database ; then
|
||||
update-desktop-database "$HOME/.local/share/applications"
|
||||
fi
|
||||
}
|
||||
|
||||
##### INSTALLED PROGRAMS #####
|
||||
@ -670,14 +749,23 @@ get_and_set_reg_file () {
|
||||
|
||||
case $name_type_reg in
|
||||
REG_DWORD)
|
||||
name_for_find="\"$name_for_find\"=dword:"
|
||||
if [[ $name_for_find != '@=' ]]
|
||||
then name_for_find="\"$name_for_find\"=dword:"
|
||||
else name_for_find="@=dword:"
|
||||
fi
|
||||
name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;;
|
||||
REG_SZ)
|
||||
name_for_find="\"$name_for_find\"="
|
||||
if [[ $name_for_find != '@=' ]]
|
||||
then name_for_find="\"$name_for_find\"="
|
||||
else name_for_find="@="
|
||||
fi
|
||||
name_for_set="\"$name_for_set\"" ;;
|
||||
*)
|
||||
if [[ $name_add_or_del == --delete ]] ; then
|
||||
name_for_find="\"$name_for_find\""
|
||||
if [[ $name_for_find != '@=' ]]
|
||||
then name_for_find="\"$name_for_find\""
|
||||
else name_for_find="@="
|
||||
fi
|
||||
else
|
||||
print_error "не задан тип ветки реестра: $name_fatal"
|
||||
return 1
|
||||
@ -725,15 +813,15 @@ get_and_set_reg_file () {
|
||||
fi
|
||||
fi
|
||||
if [[ $find_check_file == 1 ]] ; then
|
||||
print_info "Меняем $name_for_find_old в файле реестра"
|
||||
print_info "Меняем $name_for_find_old в ветке реестра: $name_block"
|
||||
sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file"
|
||||
else
|
||||
print_info "Добавляем $name_for_find_old в файл реестра"
|
||||
print_info "Добавляем $name_for_find_old в ветку реестра: $name_block"
|
||||
sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file"
|
||||
fi
|
||||
elif [[ $name_add_or_del == --delete ]] ; then
|
||||
[[ $find_check_file != 1 ]] && return 0
|
||||
print_info "Удаляем $name_for_find_old из файла реестра"
|
||||
print_info "Удаляем $name_for_find_old из ветки реестра: $name_block"
|
||||
sed -i "${find_number_line}d" "$find_file"
|
||||
fi
|
||||
}
|
||||
@ -766,19 +854,47 @@ get_base_pfx () {
|
||||
fi
|
||||
}
|
||||
|
||||
init_wineprefix () {
|
||||
check_prefix_var () {
|
||||
if [[ -z "$WINEPREFIX" ]] ; then
|
||||
print_warning "Префикс не выбран, используйте пееременную: WINEPREFIX=имя_префикса"
|
||||
print_info "Список существующих префиксов:"
|
||||
ls -1 "$WH_PREFIXES_DIR"
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
if echo "$WINEPREFIX" | grep -v '/' ; then
|
||||
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
|
||||
print_warning "Префикс не выбран."
|
||||
|
||||
local prefixes=()
|
||||
local count=1
|
||||
print_info "Доступные префиксы WineHelper:"
|
||||
for prefix in "$WH_PREFIXES_DIR"/*; do
|
||||
if [[ -d "$prefix" ]]; then
|
||||
prefixes+=("$prefix")
|
||||
echo "$count. $(basename "$prefix")"
|
||||
((count++))
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#prefixes[@]} -eq 0 ]]; then
|
||||
fatal "Не найдено ни одного префикса!"
|
||||
fi
|
||||
|
||||
local max_choice=${#prefixes[@]}
|
||||
read -p "Выберите префикс (1-$max_choice): " choice
|
||||
|
||||
if [[ "$choice" -ge 1 && "$choice" -le "$max_choice" ]]; then
|
||||
export WINEPREFIX="${prefixes[$choice-1]}"
|
||||
else
|
||||
fatal "Неверный выбор."
|
||||
fi
|
||||
|
||||
print_info "Выбран префикс: $WINEPREFIX"
|
||||
fi
|
||||
|
||||
if echo "$WINEPREFIX" | grep -v '/' ; then
|
||||
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
init_wineprefix () {
|
||||
check_prefix_var
|
||||
|
||||
if [[ "$WINEARCH" == "win32" ]]
|
||||
then check_variables BASE_PFX "defpfx_x86_v01"
|
||||
else check_variables BASE_PFX "defpfx_x64_v01"
|
||||
@ -835,6 +951,51 @@ init_wineprefix () {
|
||||
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXRandR'
|
||||
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode'
|
||||
fi
|
||||
|
||||
# добавление ассоциаций файлов для запуска нативного приложения из wine
|
||||
# пример переменной: WH_XDG_OPEN="txt doc pdf"
|
||||
check_variables WH_XDG_OPEN "0"
|
||||
local WRAPPER="${WH_TMP_DIR}/wh-xdg-open.sh"
|
||||
local XDG_OPEN_REG="Software\Classes\xdg-open\shell\open\command"
|
||||
if [[ $WH_XDG_OPEN != "0" ]] ; then
|
||||
# проверяем на наличие запрещённых расширений
|
||||
local forbidden_extensions="cpl dll exe lnk msi"
|
||||
for ext in $WH_XDG_OPEN; do
|
||||
if [[ "$forbidden_extensions" =~ $ext ]] ; then
|
||||
fatal "Расширение .$ext запрещено для добавления!"
|
||||
fi
|
||||
done
|
||||
|
||||
# создаем скрипт-обёртку
|
||||
{
|
||||
echo "#!/usr/bin/env bash"
|
||||
echo "unix_path=\$(\"$WINELOADER\" winepath -u \"\$*\")"
|
||||
echo "xdg-open \"\$unix_path\""
|
||||
} > "$WRAPPER"
|
||||
chmod +x "$WRAPPER"
|
||||
|
||||
# добавляем новую команду xdg-open в реестр
|
||||
get_and_set_reg_file --add "$XDG_OPEN_REG" '@=' 'REG_SZ' "$WRAPPER %1" "system"
|
||||
|
||||
# добавляем ассоциации файлов для запуска с помощью xdg-open
|
||||
for ext in $WH_XDG_OPEN ; do
|
||||
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
|
||||
done
|
||||
print_info "Используется ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
|
||||
else
|
||||
# удаление команды xdg-open из реестра
|
||||
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
|
||||
# удаяем скрипт-обёртку
|
||||
try_remove_file "$WRAPPER"
|
||||
fi
|
||||
|
||||
echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf"
|
||||
for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \
|
||||
STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \
|
||||
WINE_CPU_TOPOLOGY USE_RENDERER DXVK_VER VKD3D_VER
|
||||
do
|
||||
echo "export $var=\"${!var}\"" >> "$WINEPREFIX/last.conf"
|
||||
done
|
||||
}
|
||||
|
||||
##### KILL AUTOSTART AFTER INSTALLING #####
|
||||
@ -854,25 +1015,6 @@ kill_autostart () {
|
||||
done
|
||||
}
|
||||
|
||||
update_winetricks () {
|
||||
W_TRX_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
|
||||
W_TRX_EXT_VER="$(curl -s --list-only "$W_TRX_URL" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
|
||||
print_info "Актуальная версия winetricks: $W_TRX_EXT_VER"
|
||||
if [[ -f "$WH_TMP_DIR/winetricks" ]] ; then
|
||||
W_TRX_INT_VER="$(cat "$WH_TMP_DIR/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
|
||||
print_info "Установленная портативная версия winetricks: $W_TRX_INT_VER"
|
||||
fi
|
||||
if [[ -n "$W_TRX_EXT_VER" ]] && [[ "$W_TRX_INT_VER" != "$W_TRX_EXT_VER" ]] ; then
|
||||
if try_download "$W_TRX_URL" "$WH_TMP_DIR/winetricks_new" ; then
|
||||
mv -f "$WH_TMP_DIR/winetricks_new" "$WH_TMP_DIR/winetricks"
|
||||
W_TRX_INT_VER="$(cat "$WH_TMP_DIR/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/_VERSION=//')"
|
||||
print_info "Портативная версия winetricks обновлена до (${W_TRX_INT_VER})"
|
||||
chmod u+x "$WH_TMP_DIR/winetricks"
|
||||
fi
|
||||
fi
|
||||
export WINETRICKS="$WH_TMP_DIR/winetricks"
|
||||
}
|
||||
|
||||
use_winetricks () {
|
||||
if [[ -n "$INSTALL_DLL" ]] ; then
|
||||
WH_DLL_INSTALL="$(echo "$INSTALL_DLL $WH_DLL_INSTALL" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' )"
|
||||
@ -895,13 +1037,11 @@ use_winetricks () {
|
||||
fi
|
||||
done
|
||||
if [[ "$USE_WT_FROM_DB" == "1" ]] ; then
|
||||
if update_winetricks ; then
|
||||
print_info "Пробуем установить библиотеки: ${WH_DLL_NEED_INSTALL}"
|
||||
print_info "Запускаем WINETRICKS..."
|
||||
export WINETRICKS_DOWNLOADER="curl"
|
||||
env WINEDLLOVERRIDES="winegstreamer=" "$WH_TMP_DIR/winetricks" -q ${WH_DLL_NEED_INSTALL}
|
||||
wait_wineserver
|
||||
fi
|
||||
print_info "Пробуем установить компоненты: ${WH_DLL_NEED_INSTALL}"
|
||||
print_info "Запускаем WINETRICKS..."
|
||||
export WINETRICKS_DOWNLOADER="curl"
|
||||
env WINEDLLOVERRIDES="winegstreamer=" "$WH_WINETRICKS" -q ${WH_DLL_NEED_INSTALL}
|
||||
wait_wineserver
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@ -917,6 +1057,7 @@ kill_wine () {
|
||||
}
|
||||
|
||||
init_database () {
|
||||
WHDB_FILE="0"
|
||||
if [[ -f "$WIN_FILE_EXEC" ]] ; then
|
||||
WHDB="$(basename "$WIN_FILE_EXEC" .exe)"
|
||||
if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then
|
||||
@ -925,20 +1066,23 @@ init_database () {
|
||||
orig_IFS="$IFS"
|
||||
IFS=$'\n'
|
||||
WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )"
|
||||
if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -gt 1 ]] ; then
|
||||
print_error "Найдено более одного файла настроек: $WHDB.exe"
|
||||
WHDB_FILE="$(echo "$WH_FIND_DB_FILE" | head -n1)"
|
||||
else
|
||||
if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -eq 1 ]] ; then
|
||||
WHDB_FILE="$WH_FIND_DB_FILE"
|
||||
fi
|
||||
IFS="$orig_IFS"
|
||||
fi
|
||||
if [[ "$WHDB_FILE" ]] ; then
|
||||
print_info "Используется файл настроек: $WHDB_FILE"
|
||||
. "$WHDB_FILE"
|
||||
else
|
||||
print_warning "Файл настроек не найден. Пропускаем."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$WHDB_FILE" != "0" ]] ; then
|
||||
print_info "Используется файл настроек: $WHDB_FILE"
|
||||
. "$WHDB_FILE"
|
||||
elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then
|
||||
print_info "Найдены настройки из предыдущего использования префикса."
|
||||
echo "$WINEPREFIX/last.conf"
|
||||
cat "$WINEPREFIX/last.conf"
|
||||
. "$WINEPREFIX/last.conf"
|
||||
else
|
||||
print_warning "Файл настроек не найден. Пропускаем."
|
||||
fi
|
||||
}
|
||||
|
||||
@ -964,7 +1108,10 @@ prepair_wine () {
|
||||
|
||||
var_winedlloverride_update "winemenubuilder.exe=d"
|
||||
|
||||
init_database
|
||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]]
|
||||
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
|
||||
else init_database
|
||||
fi
|
||||
init_wine_ver
|
||||
init_wineprefix
|
||||
use_winetricks
|
||||
@ -1052,6 +1199,117 @@ run_autoinstall () {
|
||||
echo
|
||||
}
|
||||
|
||||
##### REMOVE PREFIX #####
|
||||
remove_prefix() {
|
||||
local prefix_name="$1"
|
||||
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
|
||||
|
||||
if [[ -z "$prefix_name" ]]; then
|
||||
print_error "Не указано имя префикса для удаления."
|
||||
echo "Использование: $SCRIPT_NAME remove-prefix [имя_префикса]"
|
||||
echo "Доступные префиксы:"
|
||||
ls -1 "$WH_PREFIXES_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -d "$prefix_path" ]]; then
|
||||
print_error "Префикс "$prefix_name" не найден."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! $2 =~ --force|-y ]] ; then
|
||||
echo "======================================================"
|
||||
print_warning "Вы собираетесь удалить префикс "$prefix_name"."
|
||||
echo "Это приведёт к:"
|
||||
echo " - Полному удалению всех данных префикса"
|
||||
echo " - Удалению всех программ, установленных в этом префиксе"
|
||||
echo " - Удалению связанных ярлыков из меню и рабочего стола"
|
||||
echo "======================================================"
|
||||
read -p "Продолжить удаление? (y/N): " answer
|
||||
|
||||
if [[ ! "$answer" =~ ^[YyДд]$ ]]; then
|
||||
print_info "Удаление префикса отменено."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
try_remove_dir "$prefix_path"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
print_ok "Префикс "$prefix_name" успешно удален."
|
||||
|
||||
for desktop_file in "$WH_MENU_DIR"/*.desktop; do
|
||||
if grep -q "$prefix_path" "$desktop_file"; then
|
||||
desktop_name=$(basename "$desktop_file")
|
||||
remove_desktop "${desktop_name%.*}"
|
||||
fi
|
||||
done
|
||||
|
||||
return 0
|
||||
else
|
||||
print_error "Не удалось удалить префикс "$prefix_name"."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
##### REMOVE WINEHELPER #####
|
||||
remove_winehelper () {
|
||||
local answer
|
||||
if [[ $1 =~ --force|-y ]] ; then
|
||||
answer="y"
|
||||
else
|
||||
echo "======================================================"
|
||||
print_warning "Вы собираетесь удалить WineHelper и все связанные с ним данные."
|
||||
echo " Это удалит:"
|
||||
echo " - Все настройки WineHelper"
|
||||
echo " - Все приложения/программы, установленные через WineHelper"
|
||||
echo " - Все ярлыки из меню и с рабочего стола созданные с помощью WineHelper"
|
||||
echo "======================================================"
|
||||
echo "Продолжить? (y/N)"
|
||||
read -r answer
|
||||
|
||||
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
|
||||
# Второе подтверждение
|
||||
echo "----------------------------------------------"
|
||||
print_warning " ВЫ ТОЧНО УВЕРЕНЫ?"
|
||||
echo "----------------------------------------------"
|
||||
echo "Продолжить? (y/N)"
|
||||
read -r answer
|
||||
else
|
||||
print_info "Удаление отменено."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
|
||||
# Удаление рабочих каталогов
|
||||
try_remove_dir "$USER_WORK_PATH"
|
||||
|
||||
# Удаление файлов меню
|
||||
try_remove_dir "$WH_MENU_DIR"
|
||||
try_remove_file "$WH_MENU_CATEGORY"
|
||||
try_remove_file "$WH_MENU_CONFIG"
|
||||
|
||||
# Удаление desktop-файлов
|
||||
for desktop_file in "$(xdg-user-dir DESKTOP)"/*.desktop; do
|
||||
if grep -q "Exec=env \"$RUN_SCRIPT\"" "$desktop_file"; then
|
||||
try_remove_file "$desktop_file"
|
||||
fi
|
||||
done
|
||||
|
||||
# Обновление кэша desktop-файлов
|
||||
if check_command update-desktop-database; then
|
||||
update-desktop-database "$HOME/.local/share/applications"
|
||||
fi
|
||||
|
||||
# Удаление символических ссылок
|
||||
try_remove_file "$HOME/.winehelper"
|
||||
|
||||
print_info "WineHelper и все связанные данные успешно удалены."
|
||||
else
|
||||
print_info "Удаление отменено."
|
||||
fi
|
||||
}
|
||||
|
||||
wh_info () {
|
||||
echo "Использование: $SCRIPT_NAME [команда]
|
||||
|
||||
@ -1062,6 +1320,8 @@ wh_info () {
|
||||
|
||||
installed список установленных программ
|
||||
run [программа.exe] запуск программы (отладка)
|
||||
remove-all удалить WineHelper и все связанные данные
|
||||
remove-prefix [имя_префикса] удалить префикс и все связанные данные
|
||||
|
||||
Параметры:
|
||||
--help показать эту справку и выйти
|
||||
@ -1090,11 +1350,13 @@ case "${1,,}" in
|
||||
winereg|regedit) prepair_wine ; wine_run "regedit" ;;
|
||||
winefile|explorer) prepair_wine ; wine_run "winefile" ;;
|
||||
wineconsole|cmd) prepair_wine ; wine_run "wineconsole" ;;
|
||||
winetricks) shift ; update_winetricks ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
|
||||
winetricks) shift ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
|
||||
desktop) shift ; create_desktop "$@" ; exit 0 ;;
|
||||
install|-i) shift ; run_autoinstall "$@" ;;
|
||||
installed) shift ; check_installed_programs "$1" ;;
|
||||
run|-r) shift ; run_installed_programs "$1" ;;
|
||||
remove-all) shift ; remove_winehelper "$@ ";;
|
||||
remove-prefix) shift ; remove_prefix "$@" ;;
|
||||
*)
|
||||
if [[ -f "$1" ]] ; then
|
||||
WIN_FILE_EXEC="$(readlink -f "$1")"
|
||||
|
19204
winetricks_20250102
Executable file
19204
winetricks_20250102
Executable file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user