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>
53 KiB
HoMM Olden Era — troubleshooting (Whisky / Wine)
- Запуск приложений: WINE_APPS_LAUNCH_RUNBOOK.md
- Подготовка Wine/GOG: WINE_MAC_RUNBOOK.md
- GOG web-stub (отдельный bottle):
../../scripts/games/gog/README.md - JA3 (GOG): JA3_RUNBOOK.md
- Мышь / Unity: UNITY_POINTER_MOUSE_FIX.md
- Скрипты:
../../scripts/games
Bottle HoMM/Steam: 38412122-AAE1-4831-9F2E-6A0EB364B3F9 · Steam App ID: 3105440
GOG web-stub: bottle GOG-Install (scripts/games/gog/bottle.env) — не HoMM UUID.
Быстрая таблица
| Симптом | Первый шаг | Раздел |
|---|---|---|
| Пустой UI Steam (кнопки без текста) | fix-steam-ui → reset → steam-ui |
§ Кривой UI Steam |
| Окно Steam не появляется | diagnose-steam-ui → kill Mac Steam → reset → steam-ui |
§ Нет окна Steam |
| Игра есть, сейвы пустые | diagnose-saves → login → play |
§ Сейвы |
play висит, exe не стартует |
reset → steam-ui → login → play |
§ Нет прогресса |
| Игра не стартует / D3D11 crash | не Play в Steam → play |
§ Запуск игры |
| DirectX 11 | dxvk → play |
§ Графика |
| ЛКМ не работает | diagnose |
UNITY_POINTER_MOUSE_FIX.md |
| Connection Problem в Steam | osascript quit Steam → reset → steam-ui → Retry / Offline |
§ Connection Problem |
| Steam завис / нет места | disk → reset |
§ Steam зависает |
Пустой текст / FontFamily / winFont |
см. профиль: Steam → dwrite; GOG stub → gdiplus |
§ Шрифты — антипаттерны |
GOG stub: пустые кнопки / FontFamily |
gog/install-gdiplus + gog/install-corefonts в GOG-bottle |
§ GOG web-stub |
| GOG Galaxy: окна нет, скрипт OK | offline installer JA3; Galaxy — best effort | § GOG Galaxy — окно · GOG_GALAXY_7H_RCA.md |
| GOG Galaxy → swap, Mac «встал» | gog/emergency-stop.sh → перезагрузка |
GOG_GALAXY_7H_RCA.md § Swap |
| GOG stub: «запустил, окна нет» | Cmd+Tab → GOG_Galaxy_*.exe / wine64 |
§ GOG — проверка успеха |
| JA3: Failed to initialize graphics subsystem | CrossOver D3DMetal, не Whisky | JA3_RUNBOOK.md §2–4 |
| JA3: курсор не ниже середины / смещение клика | профиль мыши legacy vs retina | JA3_RUNBOOK.md §9 |
| JA3 без Galaxy | install → Whisky; запуск → CrossOver | JA3_RUNBOOK.md |
| Установить через web-stub | только GalaxySetup (ломается в Wine) | § GOG web-stub |
fork failed, Mac «встал», swap 20+ GB |
winedbg / Steam assert loop → § Swap |
§ Swap и winedbg |
| «20 GB съело» после GOG | обычно не stub — swap + дампы Steam | § Swap · § GOG |
Антипаттерны (не делать)
| ❌ Антипаттерн | Почему ломается | ✅ Вместо этого |
|---|---|---|
| Play у Olden Era в окне Steam UI | applaunch без export_wine_env_game → D3D11 / «Bad EXE format» в Player.log |
Steam Logged On → start.sh play (Terminal) |
start.sh game / exe без Steam в bottle |
SteamApi_Init failed · слоты пустые |
Whisky → Steam → Logged On → play |
start.sh play при Logged Off |
нет Steam API → пустые сейвы / отказ | diagnose-saves → login / Offline → play |
-applaunch 3105440 до login |
триггер CEF message_window.cc · UI мёртв |
сначала Logged On, потом play |
HOMM_STEAM_VDESKTOP=1 |
CEF хуже · Failed to set primary display settings |
steam-ui / Whisky Run (не VDESKTOP) |
Terminal steam-ui + Whisky Run параллельно |
двойной Wine · зомби | один контур: Whisky или Terminal |
reset без .exe-зомби |
pkill не ловит C:\…\SteamService.exe |
reset (2026-05-27) или nuclear recovery |
Запуск с -silent (старые скрипты / ручной Steam.exe -silent) |
forcing desktopui via -silent → VGUI + winFont → пустой диалог |
steam-ui или play без -silent |
Только скопировать шрифты в Fonts/ без fix-steam-ui |
winFont остаётся — DWrite не отключён |
bash start.sh fix-steam-ui (реестр + шрифты + dwrite override) |
| Игра «открылась» = сейвы работают | FileManager может видеть папку Steam_<ID>/saves, но Store не инициализирован без Steam |
Проверять Player.log и diagnose-saves |
| Закрыть пустой диалог Steam крестиком | Steam остаётся Logged Off; следующий запуск снова без сейвов | Правая кнопка внизу или Tab → Enter |
| Нативный Mac Steam + bottle | Connection Problem · steamid=0 |
killall steam_osx ipcserver → только Wine-Steam |
osascript quit Steam при отмене (-128) |
Mac Steam жив | Cmd+Q / killall steam_osx |
| Импорт bottle isaacmarovitz, Whisky franke пустой | другой контейнер | migrate-bottle-to-franke-whisky.sh |
| Whisky «Launched steam.exe» = UI OK | нужен steamwebhelper (CEF) | diagnose-steam-ui · cef_log |
HOMM_GAME_FORCE=1 каждый день |
пустые слоты | только отладка графики |
Смотреть только cache/*.tsv |
не диагностика bottle | Steam/logs/*.txt, Player.log, diagnose-* |
| GOG web-stub в bottle HoMM-OldenEra | общий префикс со Steam → winedbg, дампы Steam/dumps/, шрифты из Steam/resource/fonts, export_wine_env_steam ломает .NET |
scripts/games/gog/ + новый bottle → gog/use-bottle.sh |
setup-wine-bottle.sh для GOG JA3 |
скрипт для Steam/HoMM, не для GOG stub | gog/setup-bottle.sh |
start.sh reset после GOG в том же bottle |
убивает Steam и игру; не лечит GOG-шрифты | gog/reset.sh в GOG-bottle; HoMM: отдельная сессия |
export_wine_env_steam / dwrite=n,b для GOG .NET installer |
FontFamilyNotFound / пустой WinForms |
gog/install-gdiplus.sh + gog/run-web-installer.sh (gdiplus=n,b) |
GOG stub без winetricks gdiplus |
GenericSansSerif / unimplemented GDI+ |
bash …/gog/install-gdiplus.sh в GOG-bottle |
Диагностика GOG через Steam/dumps |
ложный след; stub не пишет туда | /tmp/gog-web-installer-*.log, gog/diagnose-session.sh |
| Думать, что stub скачал 20 GB | stub ~500 KB; при FontFamily падает до загрузки игры |
df -h; искать swap / setup_galaxy.exe×2 / Steam/dumps |
wineboot -k «на всякий случай» при каждом GOG |
трогает весь префикс (Steam, CEF-кэш) | GOG-bottle: gog/setup-bottle.sh --fonts-only; HoMM: reset только когда нужен Steam |
Параллельно isaac + franke Whisky / старый wineserver |
второй wineserver, сотни winedbg, swap под 100% |
pkill -9 winedbg; pkill wineserver; один контейнер Whisky |
pkill -f GOG в HoMM-bottle при живом Steam |
не связано со stub; мешает отладке | разнести bottle; GOG: gog/reset.sh |
Только install-corefonts без install-gdiplus |
шрифты в Fonts/ есть, но .NET падает на GenericSansSerif (Wine GDI+ stub) |
gog/install-gdiplus.sh → WINEDLLOVERRIDES=gdiplus=n,b |
Debian URL для arial32.exe (404) |
corefonts неполные | зеркало SourceForge в gog/install-corefonts.sh |
| Whisky → Fonts / winetricks corefonts | зеркала Microsoft 404 (Whisky #515) | macOS → Fonts/ + наши скрипты; GOG: gog/install-corefonts.sh |
WINEDLLOVERRIDES=gdiplus=b для GOG web-stub |
builtin gdiplus не даёт GenericSansSerif для .NET | gdiplus=n,b (export_wine_env_gog) |
--profile steam / dwrite=n,b для GOG .NET |
другой стек, не GDI+ | run-wine-exe.sh --profile gog или gog/run-web-installer.sh |
Только winetricks liberation без macOS Fonts + реестр |
частично; Steam/GOG UI всё ещё пустые | setup-wine-bottle.sh / gog/setup-bottle.sh + fix-steam-ui (Steam) |
Скопировать .ttf без reg add …\Fonts |
GDI не видит файлы | fix-steam-ui, gog/wine-fonts.sh (--fonts-only) |
install-corefonts без cabextract |
.exe MS fonts не распакуются |
brew install cabextract |
install-gdiplus до setup-bottle |
нет базовых шрифтов/реестра в bottle | порядок: setup-bottle → install-gdiplus → install-corefonts |
| «26 файлов в Fonts» = stub OK | без native gdiplus .NET всё равно падает | маркер .gog_gdiplus_installed + нет FontFamily в логе |
| Пустой GalaxySetup (красный X, gdi32) | не нехватка Arial — Inno/botva2 + gdi32 | gog/install-galaxy-extract.sh + launch-galaxy.sh; см. § Setup gdi32 |
Полная сводка по шрифтам и WINEDLLOVERRIDES: § Шрифты — антипаттерны.
Шрифты: антипаттерны (сводка)
Три разных механизма — не смешивать лечение:
| Контур | API / лог | Профиль DLL | Скрипты |
|---|---|---|---|
| Steam VGUI (login, опросы) | winFont в console_log.txt |
dwrite=n,b + DWriteEnable=0 |
fix-steam-ui, setup-wine-bottle.sh, steam-ui |
| GOG web-stub (.NET WinForms) | FontFamilyNotFound, GenericSansSerif, GdipGetGenericFontFamilySansSerif |
gdiplus=n,b (native gdiplus) |
gog/install-gdiplus.sh, gog/install-corefonts.sh, gog/setup-bottle.sh |
| GOG Galaxy (CEF, login) | обычно не FontFamily; сеть/auth |
gdiplus=n,b при запуске клиента |
gog/launch-galaxy.sh |
Inno + botva2 (GalaxySetup.exe) |
gdi32.dll AV, пустой MsgBox |
gdiplus=b не спасает |
не Wine-Inno → innoextract / клиент Galaxy |
Антипаттерны (шрифты и overrides)
| ❌ | Почему | ✅ |
|---|---|---|
Копировать шрифты в C:\windows\Fonts без реестра …\CurrentVersion\Fonts |
Wine/GDI не подхватывает файлы | fix-steam-ui / gog/setup-bottle.sh / setup-wine-bottle.sh --fonts-only |
Только файлы в Fonts/, без DWriteEnable=0 (Steam) |
DWrite-заглушка, пустой VGUI | start.sh fix-steam-ui |
Steam без WINEDLLOVERRIDES=dwrite=n,b при запуске |
подгружается сломанный dwrite.dll |
export_wine_env_steam в config.sh → steam-ui / play |
| GOG stub без winetricks gdiplus | Wine GDI+ stub → GenericSansSerif | gog/install-gdiplus.sh (~900 MB) |
GOG stub с gdiplus=b (только builtin) |
нет native GenericSansSerif | gdiplus=n,b |
GOG stub с dwrite=n,b (профиль Steam) |
не тот стек для .NET WinForms | export_wine_env_gog |
Только install-corefonts, без gdiplus |
.ttf есть, лог всё равно FontFamilyNotFound |
оба скрипта + порядок ниже |
setup-wine-bottle.sh для GOG web-stub |
DWrite/Steam-реестр, нет gdiplus | gog/setup-bottle.sh |
setup-gog-bottle.sh (HoMM) для JA3 |
устаревшая обёртка | gog/setup-bottle.sh |
| winetricks corefonts из Whisky GUI | 404 на CDN Microsoft | SourceForge в gog/install-corefonts.sh; macOS Fonts |
Debian-only URL msttcorefonts |
404 | primary: downloads.sourceforge.net/corefonts/… |
winetricks liberation как единственный шаг |
мало гарантий для VGUI/.NET | macOS + corefonts + профиль DLL |
WINE_SETUP_WINETRICKS=1 вместо наших скриптов |
долго, зеркала падают | setup-wine-bottle.sh (macOS Fonts); GOG: gog/* |
wineboot -k «обновить шрифты» в HoMM-bottle |
сбрасывает Steam/CEF | GOG: gog/setup-bottle.sh --fonts-only; HoMM: --fonts-only без -k |
| GOG в HoMM-bottle «шрифты уже есть от Steam» | export_wine_env_steam, чужие Steam/resource/fonts |
отдельный bottle GOG-Install |
| Считать GalaxySetup пустым окном проблемой шрифтов | это gdi32 + botva2, не Arial | § Setup gdi32 |
run-wine-exe.sh --profile plain для .NET installer |
нет overrides | --profile gog или steam по таблице выше |
| Запуск stub без проверки лога | «OK» в shell, процесс уже умер | grep -i FontFamily /tmp/gog-web-installer-*.log |
launch-galaxy.sh OK, окна нет |
Second client / lock | gog/reset.sh → снова launch; § GOG Galaxy — окно |
Повторный launch без reset.sh |
Second client instance → exit |
reset убивает процессы и lock-files/*.lock |
Порядок (GOG-bottle, web-stub)
bash …/gog/setup-bottle.sh # macOS Fonts + реестр + сеть
bash …/gog/install-gdiplus.sh # native gdiplus, gdiplus=n,b
brew install cabextract # для corefonts
bash …/gog/install-corefonts.sh # arial32 / times32 / andale32
bash …/gog/run-web-installer.sh …/GOG_Galaxy_*.exe
Маркеры: .gog_gdiplus_installed, .gog_corefonts_installed, .gog_setup_v1.
Порядок (HoMM-bottle, Steam VGUI)
bash …/setup-wine-bottle.sh # один раз
bash …/start.sh fix-steam-ui # DWriteEnable=0 + шрифты
bash …/start.sh reset && steam-ui # перезапуск с dwrite=n,b
Проверка
# Steam
grep winFont …/Steam/logs/console_log.txt | tail -5
# GOG stub
grep -i FontFamily /tmp/gog-web-installer-GOG-Install.log || echo "OK: нет FontFamily"
# Сколько файлов в Fonts (не доказательство gdiplus!)
ls …/drive_c/windows/Fonts | wc -l
test -f …/Bottles/<GOG-UUID>/.gog_gdiplus_installed && echo "gdiplus marker OK"
Детали: § Кривой UI Steam · § GOG web-stub · WINE_MAC_RUNBOOK.md §2.
Канонический контур (GOG web-stub / JA3)
Проверено 2026-05-28: stub GOG_Galaxy_Jagged_Alliance_3.exe в bottle GOG-Install — окно с подписями, скачивание GalaxySetup.exe (~99 MB).
# один раз (создаёт bottle, gdiplus ~900 MB, шрифты, запускает stub):
bash ~/code/local_machine/scripts/games/gog/install-all.sh \
~/path/to/GOG_Galaxy_Jagged_Alliance_3.exe
# или по шагам — см. scripts/games/gog/README.md
После stub: Cmd+Tab → установщик → дождаться JA3 (≥20 GB на диске).
Канонический контур (HoMM / Steam)
killall steam_osx ipcserver(если был Mac Steam)- Whisky → HoMM-OldenEra → Run → Logged On (или Offline)
bash ~/code/local_machine/scripts/games/start.sh play- В игре: Загрузить → skirmish → 1 / 2 / 3
Recovery CEF/UI:
osascript -e 'quit app "Whisky"' 2>/dev/null; sleep 2
pkill -9 -f 'SteamService.exe|steamwebhelper|38412122|Steam.exe' 2>/dev/null
bash ~/code/local_machine/scripts/games/start.sh reset
open -a Whisky
# Run Steam только из Whisky — не steam-ui параллельно
Кривой UI Steam (пустой VGUI)
Кратко: Steam в Wine рисует кнопки/radio, но без текста → login/applaunch зависают. Лечится один раз fix-steam-ui, затем всегда запуск через steam-ui (не -silent).
Симптомы
- Тёмное окно: 5 radio слева, 2 кнопки внизу, подписей нет.
- Иногда после частичного фикса: Connection Problem / login с текстом — это уже другой слой (сеть), VGUI-фикс сработал.
- Это Steam VGUI, не Heroes Olden Era.
Лог …/Steam/logs/console_log.txt:
src\vgui2\src\surface_gdiwin32.cpp (1336) : winFont
(много строк подряд = шрифты/DWrite всё ещё ломают отрисовку)
Причина
| Слой | Что ломается |
|---|---|
| DirectWrite | Steam на Windows ждёт DWrite; в WhiskyWine заглушка → GDI не рисует глифы |
| GDI / winFont | VGUI-диалоги (опрос, interstitial, часть login) остаются «пустыми» |
-silent |
Форсит desktopui/VGUI — усугубляет проблему |
Только копировать шрифты в Fonts/ без DWriteEnable=0 и без dwrite=n,b — недостаточно → § Шрифты — антипаттерны.
Решение (канон, один раз + перезапуск)
osascript -e 'quit app "Steam"' 2>/dev/null || true
bash ~/code/local_machine/scripts/games/start.sh fix-steam-ui
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
Шаг A — fix-steam-ui (скрипт fix-homm-steam-ui.sh)
| # | Действие | Зачем |
|---|---|---|
| 1 | HKCU\Software\Valve\Steam → DWriteEnable = 0 |
Steam не использует сломанный DWrite в Wine |
| 2 | Копия Arial, Tahoma, Verdana, Times, Courier, Marlett, GoNoto → drive_c/windows/Fonts/ |
GDI находит базовые шрифты |
| 3 | При каждом steam-ui / play: WINEDLLOVERRIDES=dwrite=n,b (config.sh → export_wine_env_steam) |
Wine не подгружает native dwrite.dll |
Повторять fix-steam-ui нужно только после нового bottle или если вручную сбросили реестр Wine.
Шаг B — reset
Обязателен после фикса: старый Steam.exe стартовал без новых overrides и с кэшем VGUI.
Шаг C — steam-ui
| ✅ Правильно | ❌ Неправильно |
|---|---|
bash ~/code/local_machine/scripts/games/start.sh steam-ui |
Steam.exe -silent |
Whisky → Run Steam → start.sh play |
Play у Olden Era в Steam UI (нет DXVK env) |
start.sh play при Logged On |
play / game при Logged Off |
start.sh game (= то же что play при login) |
HOMM_GAME_FORCE=1 для сейвов |
Проверка, что UI починился
- Визуально: login / Connection Problem / библиотека — есть читаемый текст (не пустые прямоугольники).
- Лог: после нового запуска в
console_log.txtнет новой пачкиwinFontпри открытии того же диалога. - Login: в
connection_log.txteventuallyLogged Onили осмысленный Retry / Offline Mode (см. § Connection Problem).
tail -20 ~/Library/Containers/com.franke.Whisky/Bottles/38412122-*/drive_c/Program\ Files\ \(x86\)/Steam/logs/console_log.txt | grep winFont || echo "winFont нет — хорошо"
(Если bottle ещё в com.isaacmarovitz.Whisky — замените префикс контейнера.)
Если текст всё ещё пустой (обход до перезапуска)
Диалог вслепую (опрос GPU / interstitial до login):
- Верхний radio — оставить (дефолт).
- Правая кнопка внизу → OK / Continue / Launch.
- Или:
Tabнесколько раз →Enter.
Затем снова reset + fix-steam-ui + steam-ui — часто VGUI остаётся пустым, пока висит процесс от старой сессии.
После починки UI → сейвы
Пустой UI и Connection Problem — разные проблемы. Когда текст появился, но сейвы пустые → § Сейвы.
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
Не путать окна
| Окно | Признак |
|---|---|
| Steam VGUI (кривой) | Серый flat UI, 5 radio, 2 кнопки без текста |
| Steam CEF (норм) | Login, Connection Problem, библиотека — с текстом |
| Heroes Olden Era | 3D, Unfrozen, меню игры |
Нет окна Steam UI
Whisky пустой / UI не появляется из Terminal
Bottle мог быть в старом контейнере isaacmarovitz — Whisky 3 (franke) его не видит → окна нет.
Один раз:
bash ~/code/local_machine/scripts/games/migrate-bottle-to-franke-whisky.sh
Затем:
- Открыть Whisky.app — в списке должен быть HoMM-OldenEra.
- В bottle: Run →
C:\Program Files (x86)\Steam\Steam.exe(или закреплённый Steam). - Либо Terminal (если окно появилось):
killall steam_osx ipcserver 2>/dev/null
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
Диагностика:
bash ~/code/local_machine/scripts/games/start.sh diagnose-steam-ui
Симптом
bash …/start.sh steam-ui — в Terminal пара строк и нет окна; или окно не найти.
Диагностика
bash ~/code/local_machine/scripts/games/start.sh diagnose-steam-ui
| Строка | Плохо | Что делать |
|---|---|---|
| Mac Steam | ❌ steam_osx | killall steam_osx ipcserver (см. § Connection Problem) |
| Steam.exe | ❌ | reset → steam-ui снова |
| steamwebhelper | ❌ | CEF не поднялся — см. ниже |
| winFont | ⚠️ | fix-steam-ui |
Запуск (копипаст по порядку)
killall steam_osx ipcserver 2>/dev/null
bash ~/code/local_machine/scripts/games/start.sh fix-steam-ui
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
- Terminal зависнет на
steam-ui— так и должно быть, Steam работает. - Окно искать: Cmd+Tab (wine64), Mission Control — не в Whisky.
- Если
diagnose-steam-uiпоказывает ❌ steamwebhelper — CEF не поднялся (см. § CEF / steamwebhelper):
osascript -e 'quit app "Whisky"' 2>/dev/null; sleep 2
pkill -9 -f 'SteamService.exe|steamwebhelper|38412122|Steam.exe' 2>/dev/null
bash ~/code/local_machine/scripts/games/start.sh reset
open -a Whisky
# HoMM-OldenEra → Run Steam (не Terminal steam-ui параллельно)
❌ Не использовать HOMM_STEAM_VDESKTOP=1 — ухудшает CEF (Failed to set primary display settings).
- Тёмное окно без текста — § Кривой UI Steam: Tab → Enter или правая кнопка.
CEF / steamwebhelper (пустой UI после update)
Симптомы
- Whisky пишет «Launched: steam.exe», но нет библиотеки / login (чёрное окно или только VGUI).
diagnose-steam-ui: ❌ steamwebhelper.cef_log.txt:
message_window.cc: Failed to create a message-only window: Class does not exist
→ crash loop steamwebhelper → нет CEF UI.
Типичные триггеры (антипаттерны)
Steam.exe -applaunch 3105440при Logged Off (первый applaunch без UI).- Параллельный запуск Terminal + Whisky.
- Зомби
SteamService.exe/steamwebhelperпослеresetсо старымиpkill-паттернами. - Авто-update Steam client (утренний build ~242 MB) + грязная сессия.
Recovery (единственный надёжный порядок)
killall steam_osx ipcserver 2>/dev/null
osascript -e 'quit app "Whisky"' 2>/dev/null; sleep 2
pkill -9 -f 'SteamService.exe|steamwebhelper|38412122|Steam.exe' 2>/dev/null
bash ~/code/local_machine/scripts/games/start.sh reset
pgrep -lf Steam || echo "OK: процессов Steam нет"
open -a Whisky
В Whisky: HoMM-OldenEra → Run на Steam.exe — не steam-ui из Terminal одновременно.
Если после чистой сессии CEF всё ещё мёртв:
- Заблокировать авто-update:
steam.cfgсBootStrapperInhibitAll=1в папке Steam. - Откат Steam client на предыдущий build (операторский скрипт
downgrade-steam-client.sh— по запросу).
Проверка login:
tail -3 ~/Library/Containers/com.franke.Whisky/Bottles/38412122-*/drive_c/Program\ Files\ \(x86\)/Steam/logs/connection_log.txt
Нужна строка Logged On, не Logged Off.
Игра запустилась — сейвы не подтянулись
- Окно Heroes открывается, меню Загрузить пустое.
- На Mac файлы есть:
1.saveskirmish,2.saveskirmish,3.saveskirmish. - В
Player.log:
SteamApi_Init failed with FailedGeneric - error: ConnectToGlobalUser failed.
Store state changed to Failed
Причина (корень)
Сейвы лежат в users/Steam_<ID>/saves/singleplayer/, но слоты в UI требуют живый Steam-клиент в том же bottle (Logged On). Прямой exe обходит Steam → Store не инициализируется.
Диагностика одной командой
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
| Проверка | OK | Плохо |
|---|---|---|
Файлы *.saveskirmish |
3 файла в singleplayer | папка пустая |
connection_log.txt |
[Logged On, …] |
[Logged Off, 0, 0] |
Player.log |
нет SteamApi_Init failed |
ConnectToGlobalUser failed |
Рабочий цикл (сейвы 1 / 2 / 3)
- Steam в bottle: Logged On (Whisky → Run или
steam-ui). - Не жмите Play в Steam UI.
bash ~/code/local_machine/scripts/games/start.sh play
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
В игре: Загрузить → skirmish / одиночная (не кампания) → слоты 1, 2, 3.
Путь к файлам:
bash ~/code/local_machine/scripts/games/start.sh saves
Запуск игры (канон)
| Шаг | Действие |
|---|---|
| 1 | Mac Steam выключен (pgrep -x Steam → пусто) |
| 2 | Wine-Steam Logged On (Whisky → Run или steam-ui → Retry / Offline) |
| 3 | bash ~/code/local_machine/scripts/games/start.sh play — не кнопка Play в Steam |
play при Logged On вызывает game (DXVK-macOS + Unity windowed). Это тот же контур, что работал «утром».
Если игра падает на D3D11
Player.log: GfxDevice: creating device client / d3d11.dll — вы запустили через Steam UI Play, не через play.
bash ~/code/local_machine/scripts/games/start.sh diagnose
bash ~/code/local_machine/scripts/games/start.sh play
Альтернатива (явный exe, Steam не закрывать):
bash ~/code/local_machine/scripts/games/start.sh game
Нет прогресса: play не доходит до игры
Чеклист по логам
| Проверка | Где | Плохо | Хорошо |
|---|---|---|---|
| Steam login | connection_log.txt |
Logged Off, steamid=0 |
Logged On |
| applaunch | console_log.txt |
нет GameAction / Game process added |
AppID 3105440 … HeroesOldenEra.exe |
| Steam API | Player.log |
SteamApi_Init failed |
нет ошибки Store |
Рабочий цикл
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh fix-steam-ui
bash ~/code/local_machine/scripts/games/start.sh steam-ui
# login / Offline Mode → затем play (не Play в Steam UI)
bash ~/code/local_machine/scripts/games/start.sh play
Захламление swap и утечка winedbg
Симптомы
| Признак | Что это |
|---|---|
Terminal: fork failed: resource temporarily unavailable |
ядро не создаёт процессы — часто swap исчерпан |
sysctl vm.swapusage → used ≈ total (например 22/23 GB) |
macOS вынесла память в swap; система «тяжёлая» |
pgrep winedbg | wc -l → сотни / тысячи |
отладчики Wine после assert/crash Steam (не от GOG stub) |
wineserver из com.isaacmarovitz.Whisky при bottle во franke |
legacy-процесс, лишний CPU |
| Диск 98%, «пропало 20 GB» | чаще не одна операция, а swap + дубликаты файлов (см. ниже) |
GOG web-stub сам по себе почти не ест RAM: при FontFamilyNotFound процесс сразу выходит; загрузка JA3 не начинается.
Типичная цепочка (антипаттерн)
- Bottle HoMM-OldenEra (Steam + HoMM + эксперименты с GOG в том же префиксе).
- Steam CEF / VGUI в цикле →
Steam/dumps/assert_steam.exe_*.dmp(сотни MB). - На каждый assert Wine поднимает
winedbg --auto→ сотни процессов → swap. - Параллельно Cursor, Zoom, GOG Galaxy CEF → усиление.
- Любой
bash/brew→fork failed.
Это не «JA3 скачал 20 GB», а давление памяти + мусор на диске.
Что реально занимает диск (проверка)
# swap
sysctl vm.swapusage
# утечка процессов
pgrep winedbg | wc -l
pgrep -lf wineserver
# HoMM-bottle (если GOG гоняли там — будет мусор)
BOTTLE=~/Library/Containers/com.franke.Whisky/Bottles/38412122-AAE1-4831-9F2E-6A0EB364B3F9
du -sh "$BOTTLE/drive_c/Program Files (x86)/Steam/dumps" 2>/dev/null
du -sh "$BOTTLE/drive_c/setup_galaxy.exe" 2>/dev/null # дубликат ~277M — можно rm
du -sh ~/code/local_machine/scripts/games/cache/setup_galaxy.exe 2>/dev/null
| Путь | Ориентир | Действие |
|---|---|---|
Steam/dumps/*.dmp |
до ~400 MB | удалить старые .dmp (Steam пересоздаст при новом crash) |
drive_c/setup_galaxy.exe |
~277 MB | rm если есть копия в scripts/games/cache/ |
cache/setup_galaxy.exe |
~277 MB | оставить один экземпляр |
| Swap used | десятки GB | см. экстренный сброс ниже |
Экстренный сброс (копипаст)
# 1) Убить зомби-отладчики (безопасно для данных bottle)
pkill -9 winedbg 2>/dev/null
pkill -9 wineserver 2>/dev/null
# 2) HoMM/Steam bottle — только если не нужен сейчас живой Steam
bash ~/code/local_machine/scripts/games/start.sh reset
# 3) Дампы Steam (опционально, освобождает сотни MB)
rm -f ~/Library/Containers/com.franke.Whisky/Bottles/38412122-*/drive_c/Program\ Files\ \(x86\)/Steam/dumps/*.dmp
# 4) Дубликат установщика GOG в drive_c (если копировали в HoMM-bottle)
rm -f ~/Library/Containers/com.franke.Whisky/Bottles/38412122-*/drive_c/setup_galaxy.exe
После этого: перезагрузка Mac — самый надёжный способ освободить swap (macOS не отдаёт swap мгновенно только kill процессов).
Профилактика:
- Не гонять GOG web-stub в HoMM-bottle → § GOG web-stub.
- После серии падений Steam:
reset+ очисткаSteam/dumps. - Держать ≥15–20 GB свободно на Data перед установкой игр (не путать с «занятым swap»).
GOG web-stub (отдельный bottle)
Файл GOG_Galaxy_*.exe (~500 KB) — загрузчик полного установщика с gog.com, не игра. Скачивает GalaxySetup.exe и ставит игру через GOG installer в Wine.
Не путать с: GOG Galaxy 2.0 (лаунчер в HoMM-bottle, start.sh gog, логин через CEF) — к web-stub не относится.
Что сработало (RCA 2026-05-28, JA3)
| Попытка | Результат |
|---|---|
HoMM-bottle + setup-wine-bottle.sh + stub |
FontFamilyNotFound / пустые кнопки; в логе FATAL GenericSansSerif |
| Тот же bottle + 26 шрифтов (macOS + corefonts) без gdiplus | снова FontFamilyNotFound — файлы есть, Wine не отдаёт generic font family |
Bottle GOG-Install + install-gdiplus.sh + install-corefonts.sh + stub |
OK: процесс жив, подписи в UI, в Temp/GalaxyInstaller_*/GalaxySetup.exe ~99 MB |
Корневая причина: .NET WinForms вызывает GdipGetGenericFontFamilySansSerif → без native gdiplus.dll (winetricks) Wine отвечает FontFamilyNotFound, даже при полном windows/Fonts.
Обязательный порядок в GOG-bottle:
gog/create-bottle.shилиgog/use-bottle.sh <UUID>→bottle.envgog/setup-bottle.sh— шрифты macOS + реестр + сеть Winegog/install-gdiplus.sh— winetricks, ~900 MB скачивание,gdiplus=n,bgog/install-corefonts.sh— SourceForgearial32/times32/andale32gog/run-web-installer.shпуть кGOG_Galaxy_*.exe
Одной командой: bash …/gog/install-all.sh /path/GOG_Galaxy_*.exe
Проверка успеха (после запуска stub)
# процесс
pgrep -fl 'GOG_Galaxy_Jagged'
# лог без FontFamily (имя bottle в пути)
grep -i FontFamily /tmp/gog-web-installer-GOG-Install.log || echo "OK: нет FontFamily"
# скачан полный setup (путь меняется: GalaxyInstaller_<random>)
find ~/Library/Containers/com.franke.Whisky/Bottles -path '*/GalaxyInstaller_*/GalaxySetup.exe' -ls 2>/dev/null
| Признак | Значение |
|---|---|
| Лог | /tmp/gog-web-installer-GOG-Install.log — нет FontFamily could not be found |
| Temp | …/users/eternal/AppData/Local/Temp/GalaxyInstaller_*/GalaxySetup.exe растёт (~100 MB+) |
| Окно | Cmd+Tab → GOG_Galaxy_Jagged_Alliance_3.exe (не в окне Whisky) |
| Bottle | только gog/bottle.env — не смотреть Steam/dumps в HoMM-bottle |
Антипаттерны (кратко)
Полный список по шрифтам: § Шрифты — антипаттерны.
| ❌ | ✅ |
|---|---|
HoMM-bottle + setup-wine-bottle.sh + stub |
gog/install-all.sh или gog/README.md |
| Только corefonts, без gdiplus | setup-bottle → install-gdiplus → install-corefonts |
dwrite=n,b или gdiplus=b для stub |
gdiplus=n,b (export_wine_env_gog) |
| GalaxySetup пустой X = «добавить шрифты» | gdi32/Inno → install-galaxy-extract + launch-galaxy |
Смотреть Steam/dumps |
/tmp/gog-web-installer-*.log, gog/diagnose-session.sh |
start.sh reset для GOG |
bash …/gog/reset.sh |
20 GB «съел stub» при FontFamily в логе |
падение до загрузки игры — § Swap |
Симптомы и фикс
| Симптом | Причина | Действие |
|---|---|---|
| Пустые radio/кнопки, окно есть | нет corefonts или нет gdiplus | install-gdiplus.sh и install-corefonts.sh |
FontFamilyNotFound / GenericSansSerif |
нет native gdiplus (типично) | bash …/gog/install-gdiplus.sh → снова stub |
| Скрипт пишет OK, окна нет | см. § GOG Galaxy — окно | reset.sh → launch-galaxy.sh |
| «Installer Already Running» | второй stub | gog/reset.sh |
Нет bottle.env |
GOG-bottle не создан | gog/create-bottle.sh или gog/use-bottle.sh <UUID> |
| Stub завис на загрузке | мало места на Data | df -h → ≥20 GB свободно |
GOG Galaxy: окно не открывается
RCA за 7 часов (2026-05-28): GOG_GALAXY_7H_RCA.md — хронология запусков, что подтверждено в логах (процесс + login form), и что не подтверждено (видимое окно на macOS).
Собрать логи: bash …/gog/collect-gog-logs-7h.sh → temp/gog-logs-7h-*.
launch-galaxy.sh пишет OK, а окна нет — чаще всего не «нет приложения», а CEF/HWND в Wine или второй экземпляр убил новое окно.
Лог (GalaxyInitialization.log) |
Что значит |
|---|---|
Second client instance detected → The client will exit |
висел старый GalaxyClient / lock; новое окно не создаётся |
will continue + в ps есть GalaxyClient.exe |
клиент жив — Cmd+Tab → GalaxyClient / wine64 |
Failed to locate Galaxy Client window |
restore не нашёл окно (часто после «Second client») |
DeelevateStrategy / Privilege de-elevation / exit -31 |
нет /deelevated или сервис 1053 |
Канон (2026-05-28):
# 1) Whisky GUI (лучше для окна на Mac):
bash ~/code/local_machine/scripts/games/gog/launch-galaxy-whisky.sh
# → pin «gog-galaxy» → Run
# 2) Терминал (процесс; окно может не появиться):
bash ~/code/local_machine/scripts/games/gog/reset.sh
bash ~/code/local_machine/scripts/games/gog/launch-galaxy.sh
# 3) Если окна нет — foreground + vdesktop:
bash ~/code/local_machine/scripts/games/gog/launch-galaxy-ui.sh
В GalaxyClient.log бывает Successfully brought window to the foreground, а на Mac пусто — CEF в cef.log: Received message from source not matching parent window (HWND родителя в Wine). Виртуальный desktop (explorer /desktop=GOGGalaxy,1280x800) даёт отдельное окно Wine; foreground (launch-galaxy-ui.sh) привязывает его к Terminal.
RCA: bash …/gog/diagnose-galaxy-window.sh
Один раз: bash …/gog/pin-galaxy-whisky.sh → Whisky → bottle GOG-Install → pin gog-galaxy → Run.
A/B CEF: GOG_CEF_PROFILE=steam bash …/launch-galaxy-ui.sh (добавляет -cef-in-process-gpu, как Steam).
| ❌ Антипаттерн | ✅ |
|---|---|
reset.sh старый (не убивал GalaxyClient.exe) |
обновлённый gog/reset.sh + gog-process.sh |
Повторный launch-galaxy без reset |
всегда reset → launch |
| Смотреть только Whisky, не Cmd+Tab | окно Wine вне главного окна Whisky |
Запуск из ~/code/local_machine без cd drive_c |
launch-galaxy.sh сам ставит cwd в drive_c |
JA3 на Mac: установка — offline backup + install-ja3-innoextract.sh (Whisky GOG-Install). Запуск — CrossOver D3DMetal: setup-ja3-crossover.sh + run-ja3-crossover.sh. Whisky run-ja3.sh не даёт рабочую D3D12. Runbook: JA3_RUNBOOK.md.
Setup: красный X, пустое окно, gdi32 (RCA 2026-05-28)
После успешного web-stub (скачан GalaxySetup.exe ~290 MB) второй этап — Inno Setup + botva2.dll. В Wine типично:
Лог Inno (Setup Log … #00N.txt) |
Значение |
|---|---|
Found GalaxyClientExePath + Showing Galaxy already running dialog |
рядом висит GalaxyInstaller.exe или в реестре уже есть путь к Galaxy |
GalaxyClient registry found, but executable returned an empty version |
Wine не отдаёт FileVersion для GalaxyClient.exe |
Access violation … gdi32.dll Read of address 00000068 |
отрисовка MsgBox (текст пустой — тот же класс багов, что и пустой UI) |
Рабочий обход (проверено):
- GOG Galaxy —
innoextract+ VC++ redist изsetup_galaxy.exe, неGalaxySetup.exeв Wine:bash ~/code/local_machine/scripts/games/gog/install-galaxy-extract.sh - Jagged Alliance 3 — из клиента Galaxy после входа (CEF, не botva2):
Или одной цепочкой:
bash ~/code/local_machine/scripts/games/gog/launch-galaxy.sh # → Cmd+Tab → GalaxyClient → Install JA3bash …/gog/finish-ja3-install.sh
Web-stub + GalaxySetup /VERYSILENT на этом Wine не доводят установку до конца (gdi32 на любом bottle).
Снять логи: bash …/gog/collect-setup-rca.sh → temp/gog-setup-rca-*
Повторный запуск stub
bash ~/code/local_machine/scripts/games/gog/reset.sh
# Предпочтительно без stub:
bash ~/code/local_machine/scripts/games/gog/finish-ja3-install.sh
# Или принудительно stub (часто упирается в gdi32 на GalaxySetup):
GOG_USE_WEB_STUB=1 bash ~/code/local_machine/scripts/games/gog/install-all.sh \
~/code/hunabapp-dev/temp/GOG_Galaxy_Jagged_Alliance_3.exe
Диагностика:
bash ~/code/local_machine/scripts/games/gog/diagnose-session.sh
bash ~/code/local_machine/scripts/games/gog/collect-setup-rca.sh
См. также: scripts/games/gog/README.md, WINE_MAC_RUNBOOK.md §3.3.
Steam зависает / мало места
Симптомы
Failed creating file mapping, CSteamEngine::BMainLoop stalled, wineserver crashed, winedbg размножается → см. § Swap.
Действия
bash ~/code/local_machine/scripts/games/start.sh disk # ≥10 GB
pkill -9 winedbg 2>/dev/null
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
Очистка: Steam/dumps/*.dmp, scripts/games/cache/*.dmg, Libraries.tar.gz (после установки Wine), Корзина.
Графика DirectX 11 / Failed to initialize
bash ~/code/local_machine/scripts/games/start.sh dxvk
bash ~/code/local_machine/scripts/games/start.sh play
Только Gcenx DXVK-macOS, не vanilla DXVK 2.5. Запуск — play (DXVK env), не Play в Steam UI.
Мышь: курсор двигается, ЛКМ нет
bash ~/code/local_machine/scripts/games/start.sh diagnose
Whisky «Zero KB»
bash ~/code/local_machine/scripts/games/install-whiskywine-manual.sh
Connection Problem: Steam не подключается к серверам
Симптомы
Диалог Connection Problem — There was a problem communicating with Steam. Кнопки Retry и Enter Offline Mode.
Интернет на Mac есть, но Wine-Steam не логинится → сейвы в игре пустые.
Что видно в логах
Steam/logs/connection_log.txt:
| Этап | OK | Плохо |
|---|---|---|
| HTTP probe | Connectivity test … OK! |
timeout |
| CM / WebSocket | ConnectionCompleted → Logged On |
ConnectionDisconnected('Disconnected By Remote Host') |
| console_log | — | LogonFailure No Connection |
Утром (04:08–04:10) было 2 обрыва WebSocket, на 3-й попытке (CM cmp2-lhr1.steamserver.net:443) — Logged On. Днём сессии часто не доходят до CM, если параллельно открыт Mac Steam.
Причины (по частоте)
- Запущен нативный Steam.app на Mac (сейчас типичный случай) — конфликт с bottle.
- WebSocket к Steam CM нестабилен в Wine — нужны повторные Retry (как в 04:08–04:10).
- VPN / смена сети — CM отваливается (
Disconnected By Remote Host). - IPv6 в Wine падает (не критично, если WebSocket:443 жив).
Что делать (по порядку)
Команды ниже — копировать в Terminal целиком по шагам (путь абсолютный, переменная G не нужна).
1. Полностью закрыть Mac Steam
Удаление Steam.app из /Applications не убирает клиент: он часто остаётся в
~/Library/Application Support/Steam/Steam.AppBundle/ и процессах steam_osx / ipcserver.
killall steam_osx 2>/dev/null
killall ipcserver 2>/dev/null
pkill -f 'Steam.AppBundle/Steam/Contents/MacOS' 2>/dev/null
pgrep -f 'Steam.AppBundle/Steam/Contents/MacOS/steam_osx' >/dev/null && echo "⚠️ Mac Steam ещё жив" || echo "OK: Mac Steam остановлен"
(Если был установлен: osascript -e 'quit app "Steam"' — при ошибке -128 используйте killall выше.)
2. Перезапуск bottle
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
3. В диалоге Connection Problem (окно Wine-Steam)
- Retry — 2–3 раза, пауза 15–30 с между попытками.
- Если не коннектится — Enter Offline Mode.
Offline Mode для Heroes нормален: сейвы локальные (1/2/3.saveskirmish уже на диске), облако Steam не обязательно.
После Logged On или Offline Mode:
bash ~/code/local_machine/scripts/games/start.sh play
❌ Не нажимать Play у Olden Era в библиотеке Steam — applaunch без game-env → D3D11 crash.
4. Проверка
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
Нужно не Logged Off, а Logged On или Steam в offline с поднятым Steam.exe.
Всё одним блоком (шаг 3 — вручную в окне Steam):
osascript -e 'quit app "Steam"'
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
# → Retry 2–3× или Enter Offline Mode → затем:
bash ~/code/local_machine/scripts/games/start.sh play
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
Антипаттерн
❌ Жать Retry при открытом Mac Steam — почти всегда снова Connection Problem.
Steam offline (ручной режим)
- Whisky → Kill All Bottles
- Закрыть Steam.app на Mac
bash ~/code/local_machine/scripts/games/start.sh steam-ui
Полезные команды
HoMM / Steam (bottle HoMM-OldenEra):
bash ~/code/local_machine/scripts/games/start.sh fix-steam-ui
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
bash ~/code/local_machine/scripts/games/start.sh reset
bash ~/code/local_machine/scripts/games/start.sh steam-ui
bash ~/code/local_machine/scripts/games/start.sh play
bash ~/code/local_machine/scripts/games/start.sh saves
GOG web-stub (отдельный bottle):
bash ~/code/local_machine/scripts/games/gog/install-all.sh /path/GOG_Galaxy_*.exe
bash ~/code/local_machine/scripts/games/gog/install-gdiplus.sh
bash ~/code/local_machine/scripts/games/gog/install-corefonts.sh
bash ~/code/local_machine/scripts/games/gog/run-web-installer.sh /path/GOG_Galaxy_*.exe
bash ~/code/local_machine/scripts/games/gog/diagnose-session.sh
bash ~/code/local_machine/scripts/games/gog/reset.sh
Память / swap:
sysctl vm.swapusage
pgrep winedbg | wc -l
pkill -9 winedbg; pkill -9 wineserver
Логи:
# Steam / HoMM
~/Library/Containers/…/Bottles/38412122-…/drive_c/Program Files (x86)/Steam/logs/
~/Library/Containers/…/…/AppData/LocalLow/Unfrozen/HeroesOldenEra/Player.log
# GOG web-stub (имя bottle в имени файла)
/tmp/gog-web-installer-GOG-Install.log
Последняя сверка: 2026-05-28 (§ шрифты: сводка антипаттернов Steam dwrite / GOG gdiplus; GOG-Install stub OK; GalaxySetup → gdi32) · Whisky 3 · WhiskyWine 11