Нужны Linux, Rust 1.85 или новее, Cargo и date.
Для оконного режима также нужны C-компилятор и X11/XWayland;
для DRM — доступный DRM/KMS. Локальный IPC использует tmpfs.
Cargo получает imanlib из Git-репозитория; точный коммит закреплён в
Cargo.toml и Cargo.lock.
При первой сборке требуется доступ к GitHub и реестру зависимостей.
После их загрузки возможна офлайн-сборка.
Из каталога igui соберите оконный вариант:
cargo build --locked --releaseРезультат — target/release/igui. Эта команда не собирает iman или эмуляторы
и не подготавливает игровой каталог.
Сборка для RK3032 и запуск через DRM.
Поместите бинарник и ресурсы в один каталог:
mkdir -p out/system/igui
cp target/release/igui out/system/igui/
cp -R locales controls out/system/igui/
./out/system/igui/igui --games /absolute/path/to/games--games указывает каталог с готовым catalogue.json.
IGUI не импортирует ROM и не сканирует игры вместо индекса.
Формат каталога и настроек.
locales/ и controls/ читаются рядом с исполняемым файлом.
При обновлении не смешивайте прежние и новые копии одного профиля в controls/:
дубли отключают соответствующий способ ввода.
Русский интерфейс выбирается полем "lang": "ru" в prefs.json;
без настроек используется английский.
Справка по параметрам:
./out/system/igui/igui --helpДля запуска игр подготовьте комплект с iman:
ROOT/
├── system/
│ ├── iman/{iman,iman.json,emulation.json}
│ ├── igui/{igui,locales/,controls/}
│ └── retroarch/{retroarch,cores/,padconf/}
├── games/{catalogue.json,images/,thumbs/,states/,saves/}
└── prefs.json
Запускайте system/iman/iman: менеджер откроет IGUI и вернёт меню после игры.
Настройка эмуляторов описана в
документации iman.
Другие режимы запуска.
В самостоятельном режиме IGUI показывает каталог в окне X11 размером 1280×720:
igui --games /absolute/path/to/gamesДля запуска игр используйте iman. Он запускает IGUI, передаёт настройки сеанса и возвращает меню после игры с прежними фильтрами и выбранной строкой. Самостоятельный IGUI показывает диалог запуска, но не запускает эмулятор.
Для ручного подключения к работающему менеджеру:
igui --managed --ipc-socket /absolute/path/to/control.sockВ этом режиме --games не нужен и не допускается: каталог задаёт менеджер.
--headless отключает экран и устройства ввода, требует IPC-сокет и используется
для программного управления. Контракт IPC.
Установите Rust target armv7-unknown-linux-musleabihf и из каталога igui выполните:
cargo build --locked --release \
--target armv7-unknown-linux-musleabihf \
--no-default-features --features drm,rgb565Результат — target/armv7-unknown-linux-musleabihf/release/igui.
Настройки сборки выбирают статический musl и Cortex-A7.
Поместите бинарник, locales/ и controls/ в system/igui/ своего комплекта.
Подготовка комплекта с iman и эмуляторами описана в
README.
Сборка с feature drm позволяет запускать меню без оконной системы:
igui --drm --drm-device /dev/dri/card0 --games /absolute/path/to/gamesНужны права доступа к выбранному DRM-устройству и совместимый режим 1280×720.
--drm-device выбирает устройство; при нескольких подходящих выходах укажите
--drm-connector ID. Автоматического поиска других DRM-устройств нет.
--allow-vendor-einval разрешает специальный вариант обработки ошибки
SET_MASTER EINVAL в vendor-драйвере. Другие проверки доступа и дисплея
остаются включёнными. При запуске через iman это задаётся в его конфигурации.
DRM нельзя сочетать с --headless или --demo-load-ms.
Feature rgb565 выбирает 16-битный формат DRM-буферов.
Для 32-битного XRGB8888 соберите без неё:
cargo build --locked --release --no-default-features --features drm| Действие | Геймпад | Клавиатура ПК |
|---|---|---|
| Перемещение | D-pad | Стрелки |
| Подтверждение | A | Enter или A |
| Запуск выделенной игры | Start | — |
| Избранное | B | B |
| Верхние фильтры | Y | Y |
| Нижние фильтры | X | X |
| Корзина / восстановление | Select | Delete |
В обычном списке Select открывает подтверждение: A — перенести игру в корзину, B — отменить. В корзине Select сразу восстанавливает игру. ROM и превью не удаляются.
Поиск, буква, платформа, избранное/корзина, число игроков и жанр применяются совместно. Y переводит к верхним фильтрам, X — к нижним. В раскрытом нижнем фильтре ↑/↓ выбирают вариант, A применяет его, B отменяет, Y закрывает список и переводит к верхним фильтрам.
A на результате поиска закрывает поиск без запуска; Start запускает игру сразу. Длинное название прокручивается в карточке, описание можно прокручивать отдельно. Esc закрывает обычное окно; выход из шапки завершает сеанс с iman.
Профили читаются при запуске из controls/ рядом с бинарником.
Другой каталог можно выбрать через --controls DIRECTORY.
При запуске из каталога исходников без установки ресурсов используйте
--controls ./controls.
| Файл | Имя в Linux и USB ID | Способ ввода |
|---|---|---|
| 0810-0001-evdev.json | HID 0810:0001, USB 0810:0001 |
evdev, клавиатурные коды кнопок |
| 20bc-5500-evdev.json | ShanWan Twin USB Joystick, USB 20bc:5500 |
evdev, клавиатурные коды кнопок |
| 2563-0555-evdev.json | ShanWan Twin USB Joystick, USB 2563:0555 |
evdev, коды кнопок джойстика |
| 2563-0555-hidraw.json | ShanWan Twin USB Joystick, USB 2563:0555 |
hidraw, два канала одного приёмника |
| 045e-028e-evdev.json | Microsoft X-Box 360 pad, USB 045e:028e |
evdev, крестовина и левый грибок |
| 0079-181c-evdev.json | ShanWan Wireless Gamepad, USB 0079:181c |
evdev, направления левым грибком |
На геймпадах приёмника 0810:0001 есть маркировка DataFrog.
В документации этот комплект обозначен как ShanWan Twin USB Joystick (DataFrog).
Его системное имя — HID 0810:0001; оно сохранено в JSON для распознавания устройства.
У 0079:181c крестовина не назначена: для направлений используйте левый грибок.
Лицевые X/B/Y/A, Back и Start назначены в обоих новых evdev-профилях.
Правый грибок, курки, плечи, нажатия грибков и Guide не выполняют действий IGUI.
Беспроводная форма корпуса Xbox сама по себе не означает identity Microsoft.
Схема имени файла — VID-PID-backend.json. Выбор профиля зависит не от имени
файла или модели платы, а от USB VID/PID, точного имени устройства и backend
в JSON. Оба backend относятся к Linux; коды evdev зависят от представления
устройства драйвером. Не меняйте поле name как декоративную подпись.
Чтобы изменить раскладку, отредактируйте JSON и перезапустите IGUI. Для нового устройства добавьте профиль с его identity и назначениями. Каталог не обходится рекурсивно; допускаются до 64 обычных JSON-файлов, до 32 КиБ каждый и до 512 КиБ суммарно. Повреждённый профиль или пустой каталог останавливает запуск.
Не оставляйте два профиля с одинаковыми identity, именем устройства и backend: они конфликтуют, и этот способ ввода для устройства отключается. При переименовании заменяйте файл, а не добавляйте его копию. Профили разных backend для одного устройства допустимы; автоматически сначала используется hidraw, затем evdev. Меню управляется одним контроллером; после подключения отпустите кнопки, затем нажмите нужную кнопку.
--hid-profile PATH и --evdev-profile PATH заменяют все профили соответствующего
backend одним указанным файлом. Они не сочетаются с --headless, --input-probe
и ручными настройками joydev.
Для ручного joydev-ввода используйте --gamepad /dev/input/jsN.
--gamepad-buttons X,B,Y,A задаёт индексы кнопок, --gamepad-select N — Select.
Этот режим не использует JSON; автоматического переключения на joydev нет.
При включённом в iman тесте контроллеров меню предлагает его после десяти секунд бездействия. Любое действие до приглашения пропускает тест; B в приглашении отменяет его. Сам тест и его отчёт обрабатывает iman.
Для отдельной диагностики сырых событий evdev:
igui --input-probe --frames 600--frames ограничивает число итераций; допустимы значения от 1 до 18000.
Проверка читает устройства, но не меняет их настройки и не сохраняет предпочтения.
Работающий IGUI принимает команды igui.status, igui.input,
igui.screenshot и igui.close через сокет сеанса.
Ввод доступен после загрузки каталога.
Параметры команд.
Снимок без пути хранится в RAM и удаляется при выходе. Для постоянного PNG укажите абсолютный путь к новому файлу в существующем каталоге. Существующие файлы и символические ссылки не заменяются.
Избранное, перенос в корзину и восстановление сохраняют prefs.json.
При запуске игры через iman A/Start также сохраняет выбранную позицию.
Если менеджер запретил запись предпочтений, эти сохранения не выполняются.
Ошибка сохранения позиции не препятствует запуску игры.
Самостоятельный диалог запуска позицию не сохраняет.
Загрузка, навигация, поиск и выход ничего не записывают в предпочтения. Игровые сохранения и диагностические отчёты принадлежат эмулятору и iman. IGUI не меняет режим монтирования SD и не гарантирует сохранность данных при внезапном отключении питания.