248 lines
10 KiB
Markdown
248 lines
10 KiB
Markdown
# 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
|