Files
local_machine/docs/games/TROUBLESHOOTING.md
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

963 lines
53 KiB
Markdown
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.
# HoMM Olden Era — troubleshooting (Whisky / Wine)
- **Запуск приложений:** [WINE_APPS_LAUNCH_RUNBOOK.md](./WINE_APPS_LAUNCH_RUNBOOK.md)
- **Подготовка Wine/GOG:** [WINE_MAC_RUNBOOK.md](./WINE_MAC_RUNBOOK.md)
- **GOG web-stub (отдельный bottle):** [`../../scripts/games/gog/README.md`](../../scripts/games/gog/README.md)
- **JA3 (GOG):** [JA3_RUNBOOK.md](./JA3_RUNBOOK.md)
- **Мышь / Unity:** [UNITY_POINTER_MOUSE_FIX.md](./UNITY_POINTER_MOUSE_FIX.md)
- **Скрипты:** [`../../scripts/games`](../../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](#кривой-ui-steam-пустой-vgui) |
| **Окно Steam не появляется** | `diagnose-steam-ui` → kill Mac Steam → `reset``steam-ui` | [§ Нет окна Steam](#нет-окна-steam-ui) |
| Игра есть, **сейвы пустые** | `diagnose-saves` → login → `play` | [§ Сейвы](#игра-запустилась-сейвы-не-подтянулись) |
| `play` висит, exe не стартует | `reset``steam-ui` → login → `play` | [§ Нет прогресса](#нет-прогресса-play-не-доходит-до-игры) |
| Игра не стартует / D3D11 crash | **не** Play в Steam → `play` | [§ Запуск игры](#запуск-игры-канон) |
| DirectX 11 | `dxvk``play` | [§ Графика](#графика-directx-11--failed-to-initialize) |
| ЛКМ не работает | `diagnose` | [UNITY_POINTER_MOUSE_FIX.md](./UNITY_POINTER_MOUSE_FIX.md) |
| **Connection Problem** в Steam | `osascript` quit Steam → `reset``steam-ui` → Retry / Offline | [§ Connection Problem](#connection-problem-steam-не-подключается-к-серверам) |
| Steam завис / нет места | `disk``reset` | [§ Steam зависает](#steam-зависает--мало-места) |
| Пустой текст / `FontFamily` / `winFont` | см. профиль: Steam → `dwrite`; GOG stub → `gdiplus` | [§ Шрифты — антипаттерны](#шрифты-антипаттерны-сводка) |
| GOG stub: пустые кнопки / `FontFamily` | `gog/install-gdiplus` + `gog/install-corefonts` в **GOG-bottle** | [§ GOG web-stub](#gog-web-stub-отдельный-bottle) |
| **GOG Galaxy: окна нет**, скрипт OK | offline installer JA3; Galaxy — best effort | [§ GOG Galaxy — окно](#gog-galaxy-окно-не-открывается) · [GOG_GALAXY_7H_RCA.md](GOG_GALAXY_7H_RCA.md) |
| GOG Galaxy → **swap**, Mac «встал» | `gog/emergency-stop.sh` → перезагрузка | [GOG_GALAXY_7H_RCA.md](GOG_GALAXY_7H_RCA.md) § Swap |
| GOG stub: «запустил, окна нет» | **Cmd+Tab**`GOG_Galaxy_*.exe` / `wine64` | [§ GOG — проверка успеха](#gog-web-stub-отдельный-bottle) |
| **JA3: Failed to initialize graphics subsystem** | CrossOver D3DMetal, не Whisky | [JA3_RUNBOOK.md](JA3_RUNBOOK.md) §24 |
| **JA3: курсор не ниже середины / смещение клика** | профиль мыши **legacy** vs retina | [JA3_RUNBOOK.md](JA3_RUNBOOK.md) §9 |
| **JA3 без Galaxy** | install → Whisky; **запуск → CrossOver** | [JA3_RUNBOOK.md](JA3_RUNBOOK.md) |
| Установить через web-stub | только GalaxySetup (ломается в Wine) | [§ GOG web-stub](#gog-web-stub-отдельный-bottle) |
| `fork failed`, Mac «встал», swap 20+ GB | `winedbg` / Steam assert loop → § Swap | [§ Swap и winedbg](#захламление-swap-и-утечка-winedbg) |
| «20 GB съело» после GOG | обычно **не** stub — swap + дампы Steam | [§ Swap](#захламление-swap-и-утечка-winedbg) · [§ GOG](#gog-web-stub-отдельный-bottle) |
---
## Антипаттерны (не делать)
| ❌ Антипаттерн | Почему ломается | ✅ Вместо этого |
|----------------|-----------------|-----------------|
| **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](https://github.com/Whisky-App/Whisky/issues/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](#setup-красный-x-пустое-окно-gdi32-rca-2026-05-28) |
Полная сводка по шрифтам и `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](#setup-красный-x-пустое-окно-gdi32-rca-2026-05-28) |
| **`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 — окно](#gog-galaxy-окно-не-открывается) |
| Повторный launch без **`reset.sh`** | `Second client instance` → exit | `reset` убивает процессы и `lock-files/*.lock` |
### Порядок (GOG-bottle, web-stub)
```bash
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
bash …/setup-wine-bottle.sh # один раз
bash …/start.sh fix-steam-ui # DWriteEnable=0 + шрифты
bash …/start.sh reset && steam-ui # перезапуск с dwrite=n,b
```
### Проверка
```bash
# 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](#кривой-ui-steam-пустой-vgui) · [§ GOG web-stub](#gog-web-stub-отдельный-bottle) · [WINE_MAC_RUNBOOK.md §2](./WINE_MAC_RUNBOOK.md).
---
### Канонический контур (GOG web-stub / JA3)
**Проверено 2026-05-28:** stub `GOG_Galaxy_Jagged_Alliance_3.exe` в bottle **`GOG-Install`** — окно с подписями, скачивание `GalaxySetup.exe` (~99 MB).
```bash
# один раз (создаёт 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)
1. **`killall steam_osx ipcserver`** (если был Mac Steam)
2. **Whisky****HoMM-OldenEra****Run****Logged On** (или Offline)
3. **`bash ~/code/local_machine/scripts/games/start.sh play`**
4. В игре: **Загрузить** → skirmish → **1 / 2 / 3**
**Recovery CEF/UI:**
```bash
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`:
```text
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`**недостаточно** → [§ Шрифты — антипаттерны](#шрифты-антипаттерны-сводка).
---
### Решение (канон, один раз + перезапуск)
```bash
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 починился
1. **Визуально:** login / **Connection Problem** / библиотека — **есть читаемый текст** (не пустые прямоугольники).
2. **Лог:** после нового запуска в `console_log.txt` **нет** новой пачки `winFont` при открытии того же диалога.
3. **Login:** в `connection_log.txt` eventually `Logged On` или осмысленный **Retry** / **Offline Mode** (см. [§ Connection Problem](#connection-problem-steam-не-подключается-к-серверам)).
```bash
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):
1. Верхний radio — оставить (дефолт).
2. **Правая** кнопка внизу → OK / Continue / Launch.
3. Или: `Tab` несколько раз → `Enter`.
Затем снова **`reset` + `fix-steam-ui` + `steam-ui`** — часто VGUI остаётся пустым, пока висит процесс от старой сессии.
---
### После починки UI → сейвы
Пустой UI и **Connection Problem** — разные проблемы. Когда текст появился, но сейвы пустые → [§ Сейвы](#игра-запустилась-сейвы-не-подтянулись).
```bash
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
bash ~/code/local_machine/scripts/games/migrate-bottle-to-franke-whisky.sh
```
Затем:
1. **Открыть Whisky.app** — в списке должен быть **HoMM-OldenEra**.
2. В bottle: **Run**`C:\Program Files (x86)\Steam\Steam.exe` (или закреплённый Steam).
3. Либо Terminal (если окно появилось):
```bash
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
bash ~/code/local_machine/scripts/games/start.sh diagnose-steam-ui
```
### Симптом
`bash …/start.sh steam-ui` — в Terminal пара строк и **нет окна**; или окно не найти.
### Диагностика
```bash
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` |
### Запуск (копипаст по порядку)
```bash
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](#cef--steamwebhelper-пустой-ui-после-update)):
```bash
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](#кривой-ui-steam-пустой-vgui): Tab → Enter или правая кнопка.
---
## CEF / steamwebhelper (пустой UI после update)
### Симптомы
- Whisky пишет «Launched: steam.exe», но **нет библиотеки / login** (чёрное окно или только VGUI).
- `diagnose-steam-ui`: ❌ **steamwebhelper**.
- `cef_log.txt`:
```text
message_window.cc: Failed to create a message-only window: Class does not exist
```
**crash loop** steamwebhelper → нет CEF UI.
### Типичные триггеры (антипаттерны)
1. **`Steam.exe -applaunch 3105440`** при **Logged Off** (первый applaunch без UI).
2. Параллельный запуск **Terminal + Whisky**.
3. Зомби **`SteamService.exe` / `steamwebhelper`** после `reset` со старыми `pkill`-паттернами.
4. Авто-update Steam client (утренний build ~242 MB) + грязная сессия.
### Recovery (единственный надёжный порядок)
```bash
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:
```bash
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`:
```text
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
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)
1. Steam в bottle: **Logged On** (Whisky → Run или `steam-ui`).
2. **Не** жмите Play в Steam UI.
```bash
bash ~/code/local_machine/scripts/games/start.sh play
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
```
В игре: **Загрузить****skirmish / одиночная** (не кампания) → слоты **1**, **2**, **3**.
Путь к файлам:
```bash
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
bash ~/code/local_machine/scripts/games/start.sh diagnose
bash ~/code/local_machine/scripts/games/start.sh play
```
Альтернатива (явный exe, Steam не закрывать):
```bash
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
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 **не начинается**.
### Типичная цепочка (антипаттерн)
1. Bottle **HoMM-OldenEra** (Steam + HoMM + эксперименты с GOG в том же префиксе).
2. Steam CEF / VGUI в цикле → `Steam/dumps/assert_steam.exe_*.dmp` (сотни MB).
3. На каждый assert Wine поднимает **`winedbg --auto`** → сотни процессов → **swap**.
4. Параллельно Cursor, Zoom, GOG Galaxy CEF → усиление.
5. Любой `bash` / `brew`**`fork failed`**.
Это **не** «JA3 скачал 20 GB», а **давление памяти + мусор на диске**.
### Что реально занимает диск (проверка)
```bash
# 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 | см. экстренный сброс ниже |
### Экстренный сброс (копипаст)
```bash
# 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](#gog-web-stub-отдельный-bottle).
- После серии падений Steam: `reset` + очистка `Steam/dumps`.
- Держать **≥1520 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:**
1. `gog/create-bottle.sh` или `gog/use-bottle.sh <UUID>``bottle.env`
2. `gog/setup-bottle.sh` — шрифты macOS + реестр + сеть Wine
3. **`gog/install-gdiplus.sh`** — winetricks, ~900 MB скачивание, `gdiplus=n,b`
4. `gog/install-corefonts.sh` — SourceForge `arial32` / `times32` / `andale32`
5. `gog/run-web-installer.sh` путь к `GOG_Galaxy_*.exe`
Одной командой: `bash …/gog/install-all.sh /path/GOG_Galaxy_*.exe`
### Проверка успеха (после запуска stub)
```bash
# процесс
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](#захламление-swap-и-утечка-winedbg) |
### Симптомы и фикс
| Симптом | Причина | Действие |
|---------|---------|----------|
| Пустые radio/кнопки, окно есть | нет corefonts **или** нет gdiplus | `install-gdiplus.sh` **и** `install-corefonts.sh` |
| `FontFamilyNotFound` / `GenericSansSerif` | нет native **gdiplus** (типично) | `bash …/gog/install-gdiplus.sh` → снова stub |
| Скрипт пишет OK, окна нет | см. [§ GOG Galaxy — окно](#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](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 | `launch-galaxy.sh` (уже передаёт `/runWithoutUpdating /deelevated`) |
**Канон (2026-05-28):**
```bash
# 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](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) |
**Рабочий обход (проверено):**
1. **GOG Galaxy**`innoextract` + VC++ redist из `setup_galaxy.exe`, **не** `GalaxySetup.exe` в Wine:
```bash
bash ~/code/local_machine/scripts/games/gog/install-galaxy-extract.sh
```
2. **Jagged Alliance 3** — из клиента Galaxy после входа (CEF, не botva2):
```bash
bash ~/code/local_machine/scripts/games/gog/launch-galaxy.sh
# → Cmd+Tab → GalaxyClient → Install JA3
```
Или одной цепочкой: `bash …/gog/finish-ja3-install.sh`
Web-stub + `GalaxySetup /VERYSILENT` на этом Wine **не доводят** установку до конца (gdi32 на любом bottle).
Снять логи: `bash …/gog/collect-setup-rca.sh` → `temp/gog-setup-rca-*`
### Повторный запуск stub
```bash
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
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`](../../scripts/games/gog/README.md), [WINE_MAC_RUNBOOK.md §3.3](./WINE_MAC_RUNBOOK.md).
---
## Steam зависает / мало места
### Симптомы
`Failed creating file mapping`, `CSteamEngine::BMainLoop stalled`, `wineserver crashed`, **`winedbg`** размножается → см. [§ Swap](#захламление-swap-и-утечка-winedbg).
### Действия
```bash
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
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
bash ~/code/local_machine/scripts/games/start.sh diagnose
```
→ [UNITY_POINTER_MOUSE_FIX.md](./UNITY_POINTER_MOUSE_FIX.md)
---
## Whisky «Zero KB»
```bash
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:0804:10) было **2 обрыва** WebSocket, на **3-й** попытке (CM `cmp2-lhr1.steamserver.net:443`) — `Logged On`. Днём сессии часто **не доходят** до CM, если параллельно открыт Mac Steam.
### Причины (по частоте)
1. **Запущен нативный Steam.app** на Mac (сейчас типичный случай) — конфликт с bottle.
2. **WebSocket к Steam CM** нестабилен в Wine — нужны повторные Retry (как в 04:0804:10).
3. VPN / смена сети — CM отваливается (`Disconnected By Remote Host`).
4. IPv6 в Wine падает (не критично, если WebSocket:443 жив).
### Что делать (по порядку)
Команды ниже — **копировать в Terminal целиком по шагам** (путь абсолютный, переменная `G` не нужна).
**1. Полностью закрыть Mac Steam**
Удаление **Steam.app** из `/Applications` **не убирает** клиент: он часто остаётся в
`~/Library/Application Support/Steam/Steam.AppBundle/` и процессах `steam_osx` / `ipcserver`.
```bash
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
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** — 23 раза, пауза **1530 с** между попытками.
- Если не коннектится — **Enter Offline Mode**.
Offline Mode для Heroes **нормален**: сейвы **локальные** (`1/2/3.saveskirmish` уже на диске), облако Steam не обязательно.
После **Logged On** или **Offline Mode**:
```bash
bash ~/code/local_machine/scripts/games/start.sh play
```
❌ **Не** нажимать **Play** у Olden Era в библиотеке Steam — applaunch без game-env → D3D11 crash.
**4. Проверка**
```bash
bash ~/code/local_machine/scripts/games/start.sh diagnose-saves
```
Нужно **не** `Logged Off`, а **`Logged On`** или Steam в offline с поднятым `Steam.exe`.
**Всё одним блоком** (шаг 3 — вручную в окне Steam):
```bash
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 23× или 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 (ручной режим)
1. Whisky → Kill All Bottles
2. Закрыть **Steam.app** на Mac
3. `bash ~/code/local_machine/scripts/games/start.sh steam-ui`
---
## Полезные команды
**HoMM / Steam (bottle HoMM-OldenEra):**
```bash
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
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:**
```bash
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*