Files
obsidian-vault/family/how-to/switch-emulation-rom-infra.md
T

248 lines
10 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.
# Switch Эмуляция и ROM-инфраструктура — Research
> Исследование: май 2026. Цель: запустить DKC Tropical Freeze / Returns на HTPC, настроить автоматический поиск и скачку через Кракена/Eagle.
---
## 1. Switch Эмулятор — Текущий Landscape (2026)
### Ситуация
Nintendo подала в суд: **оригинальный Ryujinx закрылся** (октябрь 2024), **Yuzu закрылся** раньше. Оба форка живы:
| Эмулятор | Основа | Статус | Для чего |
|----------|--------|--------|----------|
| **Ryujinx (GreemDev)** | Ryujinx | ✅ Активно, GitHub | Десктоп (Win/Linux/macOS) |
| **Eden** | Yuzu | ✅ Активно, eden-emu.dev | Android + десктоп |
| Citron | Yuzu | Активно | Альтернатива |
| Suyu/Sudachi | Yuzu | Менее активны | Эксперименты |
**Для HTPC (Bazzite/Linux десктоп): рекомендован Ryujinx (GreemDev fork).**
Eden больше ориентирован на Android, хотя DKC Tropical Freeze на нём тоже работает.
### EmuDeck — правильный способ установки
EmuDeck автоматически ставит Ryujinx, настраивает пути, добавляет в Steam ROM Manager.
```bash
# В KDE Desktop Mode (не gamescope):
curl -L https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/install.sh | bash
```
Ryujinx после установки через EmuDeck:
- Бинарь: `/home/bazzite/Applications/publish/Ryujinx`
- Конфиг: `~/.config/Ryujinx/`
- **Keys: `~/Emulation/bios/ryujinx/keys/`** (не `~/.config/Ryujinx/system/`)
- ROMs: `~/Emulation/roms/switch/`
- Saves: `~/Emulation/saves/ryujinx/saves/`
---
## 2. prod.keys — Где взять
`prod.keys` — ключи шифрования Nintendo Switch. Технически: дамп из реального Switch через Hekate/Lockpick_RCM.
### Практика (common knowledge)
Ключи широко распространены в community-источниках:
- **Rutracker**: поиск "Nintendo Switch prod.keys" или "switch firmware keys"
- **4PDA**: раздел эмуляторов Switch
- **Archive.org**: публичные архивы с firmware дампами
- Telegram-каналы по Switch эмуляции
### Версионность
`prod.keys` должны соответствовать или быть новее firmware. Рекомендуется брать свежую связку keys + firmware одной версии (17.0.0+).
### Установка
```
~/Emulation/bios/ryujinx/keys/prod.keys
~/Emulation/bios/ryujinx/keys/title.keys # опционально, нужны для некоторых игр
```
Firmware ставится через GUI: Ryujinx → `Tools → Install Firmware → Install from XCI or ZIP`
---
## 3. DKC Tropical Freeze — Совместимость
**Статус:** ✅ Работает
| Железо | Эмулятор | Результат |
|--------|----------|-----------|
| i5-6500 + GTX 1050 Ti | Eden | Perfect |
| M1 Pro | Ryujinx 1.1.0 | Отлично (video на Reddit) |
Наше железо (i7-6800K + RX 570) сопоставимо с i5-6500 + GTX 1050 Ti. RX 570 поддерживает Vulkan — основной backend для Linux. **Ожидается: Playable до Perfect.**
**DKC Returns HD** (2025, Switch): новая ремастер-версия, более требовательная. Начинать с Tropical Freeze (2018 порт) — он оптимальнее на эмуляторе.
### ROMs форматы
- `.nsp` — предпочтительный (NSP = Nintendo Submission Package)
- `.xci` — картридж-дамп, тоже работает
---
## 4. qBittorrent на HTPC
### Установка (Flatpak, без rpm-ostree)
```bash
ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86 \
"flatpak install -y flathub com.qbittorrent.qBittorrent"
```
### Настройка Web UI
В GUI: Tools → Options → Web UI:
- Enable Web UI: ✅
- Port: **8080**
- Authentication: задать логин/пароль
- IP: 0.0.0.0 (все интерфейсы)
Или через SSH после запуска — конфиг в `~/.var/app/com.qbittorrent.qBittorrent/config/qBittorrent/qBittorrent.conf`.
После настройки: `http://192.168.1.86:8080`
### API — как Eagle/Кракен добавляет торрент
```bash
# 1. Логин — получаем SID cookie
SID=$(curl -s -i \
--header 'Referer: http://192.168.1.86:8080' \
--data 'username=admin&password=PASSWORD' \
http://192.168.1.86:8080/api/v2/auth/login \
| grep -i 'set-cookie' | grep -o 'SID=[^;]*')
# 2. Добавить магнет-ссылку
curl -s \
--cookie "$SID" \
--data-urlencode "urls=magnet:?xt=urn:btih:HASH&dn=..." \
--data "savepath=/home/bazzite/Emulation/roms/switch/" \
http://192.168.1.86:8080/api/v2/torrents/add
# 3. Проверить статус
curl -s --cookie "$SID" \
"http://192.168.1.86:8080/api/v2/torrents/info?filter=all" | jq '.[].name'
```
Полный API: cookie-based, `/api/v2/torrents/add` принимает:
- `urls` — магнет или URL торрент-файла
- `savepath` — куда сохранить
- `category` — категория
---
## 5. Jackett на Кракене — Поиск по трекерам
### Что это
Jackett — proxy-сервер который транслирует поисковые запросы в tracker-специфичные HTTP запросы. Поддерживает **RuTracker.org** (semi-private, нужна учётка).
### Установка на Кракене (Docker)
```yaml
# /srv/.../docker/jackett/docker-compose.yml
services:
jackett:
image: lscr.io/linuxserver/jackett:latest
container_name: jackett
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Bishkek
volumes:
- ./config:/config
- ./downloads:/downloads
ports:
- 9117:9117
restart: unless-stopped
```
```bash
ssh kraken-ssh "cd /srv/.../docker/jackett && docker compose up -d"
```
Web UI: `http://192.168.1.14:9117`
### Настройка RuTracker
1. Открыть Jackett Web UI → Add Indexer → поиск "rutracker"
2. Ввести логин/пароль от RuTracker.org
3. Test indexer — должен вернуть результаты
### API — как Eagle ищет игру
```bash
# Поиск через Jackett Torznab API
curl "http://192.168.1.14:9117/api/v2.0/indexers/rutracker/results/torznab/?apikey=JACKETT_KEY&t=search&q=Donkey+Kong+Tropical+Freeze+Switch&cat=8000"
# Возвращает XML/JSON с magnet-ссылками и метаданными
```
Jackett также поддерживает JSON: добавить `&format=json` или использовать `results/torznab` endpoint.
---
## 6. Целевая Архитектура: Полный Flow
```
Eagle/Кракен (агент)
├── 1. Запрос: "найди DKC Tropical Freeze NSP"
├── 2. Поиск: Jackett API (Кракен :9117)
│ └── rutracker → список торрентов с магнетами
├── 3. Выбор лучшего результата (seeders, размер, формат)
├── 4. Добавление в qBittorrent (HTPC :8080)
│ └── magnet URL + savepath=/home/bazzite/Emulation/roms/switch/
└── 5. Уведомление: "скачивается X GB, ~Y мин"
```
---
## 7. План действий (приоритет)
### Шаг 1: EmuDeck + Ryujinx (разовая установка, нужен Desktop Mode)
```bash
# Переключиться в Desktop Mode на HTPC, затем:
ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86 \
"curl -L https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/install.sh -o /tmp/emudeck.sh && bash /tmp/emudeck.sh"
# Либо запустить интерактивно из браузера на HTPC
```
⚠️ EmuDeck требует GUI для первоначальной настройки (создаёт директории, настраивает Steam ROM Manager).
### Шаг 2: prod.keys + firmware
- Найти на Rutracker или 4PDA свежую пару keys + firmware (17.0.x)
- Положить в `~/Emulation/bios/ryujinx/keys/`
- Установить firmware через Ryujinx GUI
### Шаг 3: qBittorrent на HTPC
```bash
ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86 \
"flatpak install -y flathub com.qbittorrent.qBittorrent"
```
Настроить Web UI через GUI (один раз).
### Шаг 4: Jackett на Кракене
```bash
ssh kraken-ssh "mkdir -p /srv/.../docker/jackett && cd /srv/.../docker/jackett"
# Создать docker-compose.yml (выше), добавить RuTracker учётку
```
### Шаг 5: ROM
- Через Jackett: найти NSP/XCI для DKC Tropical Freeze
- Закачать через qBittorrent в `~/Emulation/roms/switch/`
- Запустить через Steam ROM Manager → появится в Gaming Mode
---
## 8. Open Questions
- [ ] EmuDeck требует десктопного сессии на HTPC — нужно физически или через VNC? Через SSH не пойдёт (нужен GUI установщик)
- [ ] RuTracker учётка — есть? Надо создать если нет
- [ ] Jackett: добавить на Кракен как постоянный сервис рядом с Transmission
- [ ] Совместная игра: DKC Tropical Freeze поддерживает кооп (2 игрока) — идеально папа + Лиза
---
## Ссылки
- EmuDeck Wiki Ryujinx: https://emudeck.github.io/emulators/steamos/ryujinx/
- Ryujinx (GreemDev fork): https://github.com/GreemDev/Ryujinx
- Eden: https://eden-emu.dev
- Jackett: https://github.com/Jackett/Jackett
- qBittorrent API: https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation