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>
This commit is contained in:
133
scripts/games/gog/launch-galaxy.sh
Executable file
133
scripts/games/gog/launch-galaxy.sh
Executable file
@@ -0,0 +1,133 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user