Files
local_machine/scripts/games/gog/launch-galaxy.sh
ahauimix 1938b7c743 Expand local_machine docs and automation for connectivity, games, and ops.
Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs;
document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game
scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 08:12:19 +03:00

134 lines
4.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# GOG Galaxy в GOG-bottle (CEF). По умолчанию — виртуальный desktop Wine (окно видно на Mac).
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"
# shellcheck source=gog-process.sh
source "${GOG_DIR}/gog-process.sh"
LOG="/tmp/gog-galaxy-client-${BOTTLE_NAME}.log"
GALAXY_LOG="${BOTTLE_DIR}/drive_c/ProgramData/GOG.com/Galaxy/logs/GalaxyClient.log"
INIT_LOG="${BOTTLE_DIR}/drive_c/ProgramData/GOG.com/Galaxy/logs/GalaxyInitialization.log"
CEF_LOG="${BOTTLE_DIR}/drive_c/ProgramData/GOG.com/Galaxy/logs/cef.log"
gog_launch_wine() {
local win='C:\Program Files (x86)\GOG Galaxy\GalaxyClient.exe'
local -a args=()
mapfile -t args < <(gog_galaxy_cef_args_array)
cd "${BOTTLE_DIR}/drive_c"
if [[ "${GOG_USE_WINEVDESKTOP:-1}" == "1" ]]; then
local w h
IFS='x' read -r w h <<< "${GOG_VDESKTOP:-1280x800}"
echo "Режим: explorer /desktop=GOGGalaxy,${w}x${h}"
if [[ "${GOG_LAUNCH_FG:-0}" == "1" ]]; then
exec "${WINE64}" explorer "/desktop=GOGGalaxy,${w}x${h}" "${win}" "${args[@]}"
fi
nohup "${WINE64}" explorer "/desktop=GOGGalaxy,${w}x${h}" "${win}" "${args[@]}" >>"${LOG}" 2>&1 &
else
echo "Режим: прямой GalaxyClient (GOG_USE_WINEVDESKTOP=0)"
if [[ "${GOG_LAUNCH_FG:-0}" == "1" ]]; then
exec "${WINE64}" "${win}" "${args[@]}"
fi
nohup "${WINE64}" "${win}" "${args[@]}" >>"${LOG}" 2>&1 &
fi
}
main() {
gog_wine_check
gog_swap_guard "${GOG_SWAP_MAX_MB:-400}" || exit 1
gog_disk_guard 8 || exit 1
if [[ ! -f "${BOTTLE_DIR}/.gog_galaxy_extract_installed" ]]; then
echo "Сначала: bash ${GOG_DIR}/install-galaxy-extract.sh"
exit 1
fi
if ! find "${BOTTLE_DIR}/drive_c/Program Files"* -name 'GalaxyClient.exe' -print -quit 2>/dev/null | grep -q .; then
bash "${GOG_DIR}/install-galaxy-extract.sh"
fi
echo "Останавливаем старые процессы GOG Galaxy…"
gog_kill_all
pkill -f 'explorer.exe /desktop=GOGGalaxy' 2>/dev/null || true
if gog_galaxy_running; then
echo "❌ Galaxy всё ещё в процессах — повторите: bash ${GOG_DIR}/reset.sh"
pgrep -fl 'Galaxy' 2>/dev/null || true
exit 1
fi
export_wine_env_gog
echo "Bottle: ${BOTTLE_NAME}"
echo "Лог: ${LOG}"
: >"${LOG}"
if [[ "${GOG_LAUNCH_FG:-0}" == "1" ]]; then
echo ""
echo "Foreground: окно Wine привязано к этому терминалу. Закройте Galaxy — Ctrl+C."
echo "Ищите окно «GOGGalaxy» или полосу заголовка Wine desktop."
echo ""
gog_launch_wine
exit 0
fi
gog_launch_wine
echo "Запуск wine64…"
local ok=0 i
for i in $(seq 1 30); do
sleep 1
if grep -q 'Second client instance detected' "${INIT_LOG}" 2>/dev/null; then
if tail -5 "${INIT_LOG}" 2>/dev/null | grep -q 'The client will exit'; then
echo "❌ Второй экземпляр: bash ${GOG_DIR}/reset.sh && bash $0"
tail -8 "${INIT_LOG}"
exit 1
fi
fi
if [[ -f "${GALAXY_LOG}" ]] && grep -qE 'Showing login form|No refresh token found|will continue' "${GALAXY_LOG}" 2>/dev/null; then
ok=1
break
fi
if [[ -f "${INIT_LOG}" ]] && grep -q 'will continue' "${INIT_LOG}" 2>/dev/null; then
ok=1
break
fi
if ! gog_galaxy_running; then
sleep 2
if ! gog_galaxy_running; then
break
fi
fi
done
if ! gog_galaxy_running; then
echo "❌ GalaxyClient не остался в процессах:"
tail -25 "${LOG}"
[[ -f "${INIT_LOG}" ]] && tail -15 "${INIT_LOG}"
exit 1
fi
sleep 2
gog_mac_activate_wine || true
echo ""
echo "OK: GOG Galaxy запущен (процесс + login в логе — окно на Mac не гарантировано)."
echo " • Окно: bash ${GOG_DIR}/launch-galaxy-whisky.sh → Whisky → pin gog-galaxy → Run"
echo " • RCA/логи 7ч: docs/games/GOG_GALAXY_7H_RCA.md | collect-gog-logs-7h.sh"
if [[ "${GOG_USE_WINEVDESKTOP:-1}" == "1" ]]; then
echo " • Cmd+Tab → «wine64» / «GOGGalaxy» — отдельное окно виртуального стола Wine"
else
echo " • Cmd+Tab → «GalaxyClient» или «wine64»"
fi
echo "Не видно окна? bash ${GOG_DIR}/launch-galaxy-ui.sh (vdesktop + foreground)"
echo " • Whisky → «${BOTTLE_NAME}» → pin gog-galaxy → Run"
echo " • Лог: ${GALAXY_LOG}"
if [[ "${ok}" -eq 1 ]]; then
echo " • В логе login UI — войдите → Jagged Alliance 3 → Install"
if [[ -f "${CEF_LOG}" ]] && grep -q 'parent window' "${CEF_LOG}" 2>/dev/null; then
echo " • cef.log: «parent window» — типично для Wine; vdesktop/Whisky Run часто лечит"
fi
fi
}
main "$@"