16 KiB
PortProton (PortWINE) - Документация для AI агентов
Обзор проекта
PortProton (также известный как PortWINE) — это инструмент для Linux, предназначенный для упрощения запуска Windows-игр и приложений на Linux. Разрабатывается в основном русским сообществом линукс-геймеров (linux-gaming.ru).
Проект предоставляет:
- GUI-обёртку вокруг Wine/Proton для запуска Windows-исполняемых файлов
- Автоустановку в один клик для популярных игровых лаунчеров (Epic Games, Battle.net, Steam и др.)
- Преднастроенные эмуляторы для консольных игр
- Оптимизированные настройки для максимальной игровой производительности
- Интеграцию с MangoHud, vkBasalt, GameScope и dgVoodoo2
Официальный сайт: https://linux-gaming.ru
Лицензия: MIT License (Copyright 2026 Castro-Fidel)
Основной язык документации и комментариев: Русский
Технологический стек
| Компонент | Технология |
|---|---|
| Основной язык | Bash (shell-скрипты) |
| GUI-фреймворк | YAD (Yet Another Dialog) с GTK |
| Windows-совместимость | Wine / Proton (форк Valve) / Proton-GE |
| Контейнер | Steam Linux Runtime (SLR) + Bubblewrap sandbox |
| Графические API | Vulkan, OpenGL, DXVK (DirectX→Vulkan), VKD3D (DirectX 12→Vulkan) |
| Оверлей-инструменты | MangoHud (оверлей производительности), vkBasalt (улучшение графики) |
| Система сборки | Отсутствует (скриптовая, компиляция не требуется) |
Структура проекта
PortWINE/
├── data_from_portwine/ # Основная директория с данными
│ ├── scripts/ # Основные shell-скрипты
│ │ ├── start.sh # Точка входа (~1220 строк)
│ │ ├── functions_helper # Основная функциональность (~8300 строк)
│ │ ├── var # Переменные конфигурации по умолчанию
│ │ ├── setup.sh # Скрипт установки/настройки
│ │ ├── portwine_db # Определения базы данных игр
│ │ ├── pw_autoinstall/ # Скрипты автоустановки игр/лаунчеров
│ │ ├── add_in_steam.sh # Утилиты интеграции со Steam
│ │ ├── clear_db.sh # Утилита очистки базы данных
│ │ └── thanks # Файл благодарностей
│ ├── themes/ # Темы GUI
│ │ ├── default/ # Файлы темы по умолчанию
│ │ ├── default.pptheme # Конфигурация темы по умолчанию
│ │ ├── classic/ # Классическая тема
│ │ ├── classic.pptheme
│ │ ├── compact/ # Компактная тема
│ │ └── compact.pptheme
│ ├── locales/ # Переводы
│ │ ├── ru/LC_MESSAGES/ # Русский перевод
│ │ └── es/LC_MESSAGES/ # Испанский перевод
│ ├── img/ # Иконки и изображения
│ │ ├── gui/ # Иконки GUI (PNG, SVG)
│ │ └── *.png # Иконки приложений
│ ├── changelog_en # Английский changelog
│ ├── changelog_ru # Русский changelog
│ ├── dxvk.conf # Конфигурация DXVK
│ └── vkBasalt.conf # Конфигурация vkBasalt
├── README.md # Английский README
├── README-RU.md # Русский README
└── LICENSE # Лицензия MIT
Ключевые скрипты и их назначение
Основная точка входа
data_from_portwine/scripts/start.sh- Основная точка входа в приложение.- Обрабатывает аргументы CLI и инициализацию GUI
- Подключает
functions_helperиvar - Управляет основным циклом приложения
Основная библиотека
data_from_portwine/scripts/functions_helper- Содержит все основные функции (~8300 строк):- Операции с файлами (try_copy, try_remove и т.д.)
- Управление загрузками с индикаторами прогресса
- Управление префиксами Wine
- GUI-диалоги (yad_info, yad_error, yad_question)
- Интеграция со Steam
- Логика автоустановки
- Управление базой данных
Конфигурация
data_from_portwine/scripts/var- Переменные окружения и настройки по умолчанию:- Версии Wine (PROTON_LG, WINE_LG)
- Версии DXVK/VKD3D
- Настройки переключателей по умолчанию (PW_MANGOHUD, PW_VKBASALT и т.д.)
- Настройки темы GUI по умолчанию
Скрипты автоустановки
Расположены в data_from_portwine/scripts/pw_autoinstall/, каждый скрипт следует формату:
#!/usr/bin/env bash
# type: games|emulators
# name: Отображаемое название
# image: имя_иконки
# info_en: Описание на английском
# info_ru: Описание на русском
Примеры: PW_EPIC, PW_BATTLE_NET, PW_STEAM, PW_PPSSPP, PW_CEMU и др.
Соглашения о коде
Стиль shell-скриптов
- Все скрипты используют
#!/usr/bin/env bash #!/usr/bin/env bashв начале каждого скрипта- Широкое использование
exportдля глобальных переменных - Функции используют именование в стиле snake_case
- Глобальные переменные используют ВЕРХНИЙ_РЕГИСТР с префиксом PW_ для настроек PortProton
Распространённые префиксы переменных
PW_- Настройки PortProton (например, PW_MANGOHUD, PW_VULKAN_USE)PORT_WINE_- Переменные, связанные с путями (например, PORT_WINE_PATH)GUI_- Настройки, связанные с GUIDXVK_/VKD3D_- Версии, связанные с графикой
Шаблон операций с файлами
Кодовая база последовательно использует функции-обёртки для безопасных операций с файлами:
try_copy_file "источник" "назначение"try_remove_file "путь_к_файлу"try_remove_dir "путь_к_директории"create_new_dir "путь_к_директории"try_force_link_file "источник" "ссылка"
Система переводов
Переводы управляются через gettext:
- Файл шаблона:
data_from_portwine/locales/PortProton.pot - Русский перевод:
data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po - Испанский перевод:
data_from_portwine/locales/es/LC_MESSAGES/PortProton.po - В коде:
${translations[ИМЯ_КЛЮЧА]}
Разработка GUI
GUI построен с использованием YAD (Yet Another Dialog):
- Темы определяются в файлах
.pptheme - Стилизация CSS через
style.cssв директориях тем - Кастомный скомпилированный бинарник YAD:
data_from_portwine/themes/gui/yad_gui_pp - Бинарник трей-иконки:
data_from_portwine/themes/tray/tray_gui_pp
Ключевые файлы конфигурации
Файлы тем (.pptheme)
Файлы тем настраивают внешний вид GUI:
THEME_NAME- Идентификатор темыYAD_OPTIONS- Глобальные опции YAD включая путь к CSS- Размеры кнопок:
BUTTON_SIZE_MM,BUTTON_SIZE,TAB_SIZE - Размеры окна:
PW_MAIN_SIZE_W,PW_MAIN_SIZE_H - Настройки раскладки:
MAIN_GUI_COLUMNSи т.д.
Пользовательская конфигурация (user.conf)
Создаётся во время выполнения в директории PortProton:
- Хранит предпочтения пользователя
- Изменяется через
edit_user_conf_from_gui() - Подключается при запуске
База данных игр (.ppdb файлы)
Файлы конфигурации для конкретных игр, хранящиеся рядом с исполняемыми файлами:
- Содержат переменные окружения для конкретной игры
- Переопределяют настройки по умолчанию
- Могут быть загружены с https://ppdb.linux-gaming.ru
CLI интерфейс
PortProton поддерживает работу через командную строку:
# Запуск с GUI
./data_from_portwine/scripts/start.sh
# CLI режим
portproton cli --launch /path/to/game.exe
portproton cli --edit-db /path/to/game.exe PW_MANGOHUD=1
portproton cli --autoinstall PW_EPIC
portproton cli --winecfg WINE_LG DEFAULT
portproton cli --backup-prefix DEFAULT /path/to/backup
portproton cli --restore-prefix /path/to/backup.ppack
Важные зависимости времени выполнения
Требуемые системные пакеты:
bash- Интерпретатор скриптовbubblewrap- Песочницаcurl- Загрузкиyad(кастомная версия включена) - GUI диалогиcabextract,zstd,tar- Работа с архивамиicoutils- Извлечение иконокxdg-utils- Интеграция с рабочим столомjq- Обработка JSONxterm- Fallback терминалаvulkan-driver,vulkan-icd-loader- Поддержка Vulkan
Руководство по разработке
Добавление новых скриптов автоустановки
- Создать файл в
data_from_portwine/scripts/pw_autoinstall/ - Использовать соглашение об именовании:
PW_UPPER_CASE_NAME - Включить заголовочные комментарии с type, name, image, info_en, info_ru
- Установить требуемые переменные (LAUNCH_PARAMETERS, PW_AUTOINSTALL_EXE и т.д.)
- Вызвать
pw_clear_pfx,start_portwine, затемstop_portwine
Добавление новых функций
- Добавить в файл
functions_helper - Использовать
export -f function_nameдля функций, используемых в subshell - Использовать
print_info,print_warning,print_errorдля логирования - Следовать существующим соглашениям об именовании
Изменение переводов
- Редактировать
data_from_portwine/locales/PortProton.potдля шаблона - Обновить
.poфайлы для каждого языка - Использовать функцию
generate_potдля регенерации шаблона
Тестирование и отладка
Режим отладки
Запуск с выводом отладочной информации:
portproton cli --debug
Создаёт файл scripts-debug.log с полным трейсом.
Типичные сценарии тестирования
- Тестирование обоих режимов: GUI и CLI
- Тестирование с разными версиями Wine (WINE_LG, PROTON_LG)
- Тестирование создания и удаления префиксов
- Тестирование скриптов автоустановки в чистом префиксе
Устранение неполадок
- Проверить
PortProton.logв директории PortProton - Использовать флаг
--debugдля подробного вывода - Проверить установку всех зависимостей
- Проверить наличие lock-файлов в
/tmp/PortProton_$USER/
Соображения безопасности
- Проверка root: Скрипты явно отказываются запускаться от root (кроме Batocera)
- Песочница: Используется bubblewrap для контейнеризации
- Загрузки: Проверка SHA256 контрольных сумм для загружаемых файлов
- Интеграция со Steam: Безопасное изменение файла shortcuts.vdf Steam
- Lock-файлы: Предотвращение множественных одновременных запусков
Управление версиями
Номера версий определены в:
data_from_portwine/scripts/var:SCRIPTS_NEXT_VERSIONиSCRIPTS_STABLE_VERSION- Формат: Четыре цифры (например, 2474)
- Обновления загружаются с
url_cloudилиurl_git
Связанные проекты и ресурсы
- Используемые источники Wine:
- WINE-PROTON: https://github.com/ValveSoftware/Proton
- WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom
- База данных настроек: https://ppdb.linux-gaming.ru
- Платформа переводов: https://translate.codeberg.org/projects/portproton/
- Пакет Flathub: ru.linux_gaming.PortProton
Примечания для AI агентов
- Основной язык — русский - Комментарии и часть документации на русском языке
- Нет системы сборки - Это чистый shell-скрипт проект, компиляция не требуется
- Широкое использование глобальных переменных - Функции сильно зависят от экспортированных переменных окружения
- Зависимость от YAD - GUI требует кастомной сборки YAD, включённой в репозиторий
- Интеграция с Wine - Тесная интеграция с внутренностями Wine/Proton
- Совместимость со Steam - Специальная обработка для Steam Deck и интеграции со Steam