296 lines
12 KiB
Markdown
296 lines
12 KiB
Markdown
# Switch Эмуляция и ROM-инфраструктура — Research
|
||
|
||
> Исследование: май 2026. Цель: запустить DKC Tropical Freeze / Returns на HTPC, настроить автоматический поиск и скачку через Кракена/Eagle.
|
||
|
||
---
|
||
|
||
## 1. Switch Эмулятор — Текущий Landscape (2026)
|
||
|
||
### Ситуация
|
||
Nintendo подала в суд: **оригинальный Ryujinx закрылся** (октябрь 2024), **Yuzu закрылся** раньше. Живые форки:
|
||
|
||
| Эмулятор | Основа | Статус | Для чего |
|
||
|----------|--------|--------|----------|
|
||
| **Ryujinx (Ryubing/GreemDev)** | Ryujinx | ✅ Активно, Flatpak `io.github.ryubing.Ryujinx` | Десктоп (Win/Linux/macOS) |
|
||
| **Eden** | Yuzu | ✅ Активно | Android (в основном) |
|
||
| Citron | Yuzu | Активно | Альтернатива |
|
||
|
||
**Для HTPC: Ryujinx (Ryubing) v1.3.3 через Flatpak.**
|
||
|
||
### ✅ Установлено на HTPC (16.05.2026)
|
||
|
||
```bash
|
||
flatpak install -y --user flathub io.github.ryubing.Ryujinx
|
||
# Версия: 1.3.3 stable
|
||
```
|
||
|
||
**Пути на HTPC:**
|
||
```
|
||
# Keys:
|
||
~/.var/app/io.github.ryubing.Ryujinx/data/Ryujinx/system/prod.keys
|
||
~/.var/app/io.github.ryubing.Ryujinx/data/Ryujinx/system/title.keys
|
||
|
||
# ROMs:
|
||
~/Emulation/roms/switch/ (создать, Steam ROM Manager подхватит)
|
||
|
||
# Saves:
|
||
~/.var/app/io.github.ryubing.Ryujinx/data/Ryujinx/bis/user/save/
|
||
```
|
||
|
||
**Статус:** Ryujinx установлен, директория `system/` создана — нужны только prod.keys + firmware + ROM.
|
||
|
||
### Запуск из Gaming Mode
|
||
После установки keys и ROM запустить Steam ROM Manager (через EmuDeck или вручную) — добавит игры в Steam с обложками. Либо запустить Ryujinx напрямую из Desktop Mode.
|
||
|
||
---
|
||
|
||
## 2. prod.keys — Где взять
|
||
|
||
`prod.keys` — ключи шифрования Nintendo Switch.
|
||
|
||
### Источники
|
||
|
||
**GitHub THZoria/NX_Firmware** ⭐ 4k — самый известный публичный репо с firmware + prod.keys:
|
||
- `prod.keys`: https://github.com/THZoria/NX_Firmware/blob/main/prod.keys
|
||
- Releases (firmware zip): https://github.com/THZoria/NX_Firmware/releases/latest
|
||
- Актуальная версия: **22.1.0** (апр. 2026)
|
||
|
||
**4PDA — тема с ROM'ами (упоминает firmware):**
|
||
- Nintendo Switch Ромы: https://4pda.to/forum/index.php?showtopic=1050842
|
||
- Eden/Yuzu/Citron (там же ссылки на firmware в шапке): https://4pda.to/forum/index.php?showtopic=1070467
|
||
- Шапка темы содержит ссылки на Firmware (THZoria) и prod.keys
|
||
|
||
**Rutracker:** rutracker.org/forum/viewforum.php?f=1605 — раздел Switch игр, в шапке тем часто есть и ключи
|
||
|
||
### Версионность
|
||
prod.keys должны соответствовать или быть новее firmware. Брать связкой одной версии.
|
||
|
||
### Куда класть (Ryujinx Flatpak на HTPC)
|
||
|
||
```
|
||
# Путь для keys (Ryujinx Flatpak):
|
||
~/.var/app/io.github.ryubing.Ryujinx/data/Ryujinx/system/prod.keys
|
||
~/.var/app/io.github.ryubing.Ryujinx/data/Ryujinx/system/title.keys
|
||
|
||
# Firmware ставится через GUI:
|
||
# Ryujinx → Tools → Install Firmware → Install from ZIP
|
||
```
|
||
|
||
Директория уже создана на HTPC, пустая — ждёт файлов.
|
||
|
||
---
|
||
|
||
## 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
|
||
|
||
### Sonarr/Radarr интеграция
|
||
**Да, qBittorrent нативно поддерживается как download client в Sonarr и Radarr.**
|
||
Sonarr/Radarr → Settings → Download Clients → Add → qBittorrent:
|
||
- Host: `192.168.1.86` (или адрес где запущен qBittorrent)
|
||
- Port: `8080`
|
||
- Username/Password
|
||
- Sonarr/Radarr будут автоматически добавлять торренты и отслеживать прогресс
|
||
|
||
Это полноценный медиа-стек: **Prowlarr** (индексеры) → **Sonarr/Radarr** (автозагрузка по критериям) → **qBittorrent** (скачка) → **Jellyfin** (просмотр).
|
||
|
||
Для игр/ROM: проще использовать напрямую через API (Jackett + qBittorrent), т.к. Sonarr/Radarr заточены под сериалы и фильмы.
|
||
|
||
### ✅ Установлено и настроено (16.05.2026)
|
||
|
||
```bash
|
||
flatpak install -y --user flathub org.qbittorrent.qBittorrent
|
||
# Версия: 5.2.0 stable
|
||
```
|
||
|
||
**Пути (Flatpak):**
|
||
```
|
||
Config: ~/.var/app/org.qbittorrent.qBittorrent/config/qBittorrent/qBittorrent.conf
|
||
Данные: ~/.var/app/org.qbittorrent.qBittorrent/data/qBittorrent/BT_backup/
|
||
```
|
||
|
||
**Настройки:**
|
||
- Download dir: `/run/media/bazzite/Data/downloads/complete`
|
||
- Incomplete dir: `/run/media/bazzite/Data/downloads/incomplete`
|
||
- Web UI: http://192.168.1.86:8080 — логин `admin` / пароль `adminadmin` (**сменить при первом входе**)
|
||
- Порт BitTorrent: 6881
|
||
|
||
**Sonarr/Radarr интеграция:**
|
||
Settings → Download Clients → Add → qBittorrent:
|
||
- Host: `192.168.1.86`, Port: `8080`
|
||
- Username: `admin`, Password: (свой)
|
||
|
||
**Бэкап:**
|
||
- Скрипт: `~/.config/scripts/backup-qbittorrent.sh`
|
||
- Запускается: systemd user timer, ежедневно
|
||
- Бэкапит в: `/run/media/bazzite/Data/backups/qbittorrent/`
|
||
- Включает: config (настройки, Web UI) + `BT_backup/` (торрент-файлы, resume)
|
||
|
||
### API — Eagle/Кракен добавляет торрент
|
||
|
||
```bash
|
||
# 1. Логин
|
||
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..." \
|
||
--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" | jq '.[].name'
|
||
```
|
||
|
||
---
|
||
|
||
## 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 "cd /srv/.../docker/jackett && docker compose up -d"
|
||
```
|
||
|
||
Web UI: `http://192.168.1.15: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.15: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 "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
|
||
- Ryujinx .app (macOS native): https://ryujinx.io/download/ (не путать с ryujinx.co — тот отдаёт Windows exe)
|
||
- prod.keys: https://github.com/KLWorld/Ryujinx/blob/main/prod.keys
|
||
- Firmware: https://github.com/THZoria/NX_Firmware/releases
|
||
- Eden: https://eden-emu.dev
|
||
- Jackett: https://github.com/Jackett/Jackett
|
||
- qBittorrent API: https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation
|
||
|
||
---
|
||
|
||
## MacOS / Mac (личный компьютер)
|
||
|
||
➡️ См. [[personal/tech/ryujinx-mac-setup]] — инструкция по установке на Mac (июль 2026).
|