Проблемы и оптимизация

KF2 на Proton: .NET 3.5 переустанавливается при каждом запуске

Когда Killing Floor 2 запускается через Steam Play (Proton) на Linux, в некоторых системах окно «Running first-time setup» появляется и ставит Microsoft .NET Framework 3.5 заново при каждом запуске. Это тратит время, а иногда установка падает и не дает игре стартовать. Крошечный reg-файл, опубликованный на GitHub Gist в апреле 2020 года, решает проблему: он сообщает Steam, что .NET 3.5 уже установлен. Общая информация о запуске серии на Linux - в статье Killing Floor на Linux: нативная версия и Proton.

Почему так происходит

Игры в Steam объявляют нужные им компоненты (DirectX, Visual C++, .NET и т. д.). Перед запуском игры Steam выполняет для них скрипт установки и отмечает каждую успешную установку в реестре в ветке HKLM\Software\Wow6432Node\Valve\Steam\Apps\CommonRedist. В следующий раз он читает этот ключ и пропускает то, что уже сделано.

Внутри префикса Proton шаг с .NET 3.5 не оставляет этой отметки, поэтому Steam считает пакет отсутствующим и запускает установщик снова при следующем старте, и при следующем тоже.

Reg-файл

Вся правка - это такой файл .reg (сохраните его как dotnet35.reg):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\CommonRedist\.NET\3.5]
"3.5 SP1"=dword:00000001

Он создает ключ .NET\3.5 в ветке CommonRedist и задает 3.5 SP1 равным 1 - ту же отметку, которую оставила бы успешная установка. Ничего не устанавливается и не удаляется.

Как применить

Файл нужно импортировать в собственный префикс Proton для KF2, а не в произвольный префикс Wine. AppID Killing Floor 2 в Steam - 232090, поэтому префикс находится здесь:

~/.steam/steam/steamapps/compatdata/232090/pfx

(В некоторых системах корень Steam - ~/.local/share/Steam. Если KF2 установлен в другой библиотеке, ищите compatdata/232090 в папке steamapps этой библиотеки.)

Сначала один раз запустите игру через Proton, чтобы префикс создался, и закройте ее. Затем выберите один из способов.

Вариант A: protontricks

protontricks выполняет команды внутри префикса игры Steam с нужной версией Proton:

protontricks -c 'wine regedit /full/path/to/dotnet35.reg' 232090

Вариант B: обычный Wine с WINEPREFIX

WINEPREFIX=~/.steam/steam/steamapps/compatdata/232090/pfx wine regedit /full/path/to/dotnet35.reg

Надежнее использовать wine из той же сборки Proton, но для одного импорта в реестр обычно подходит и системный Wine.

Проверка

Запустите KF2 из Steam. Окно первичной настройки либо не появится, либо пролетит мгновенно без установщика .NET 3.5. Если он все еще запускается, проверьте, что импортировали в compatdata/232090, а не в другой префикс.

Если что-то пошло не так

  • Не тот префикс: повторите импорт с правильным путем; лишний ключ в другом префиксе безвреден.
  • Игра все равно не запускается: возможно, дело не в .NET. Смотрите KF2 не запускается в Steam и долгий запуск KF2.
  • Начать с нуля: удалите compatdata/232090. Steam создаст префикс заново при следующем запуске (и снова выполнит первичную настройку), после чего правку можно применить повторно.

Заметки

  • Правка не трогает файлы игры, поэтому переживает обновления. Пропадает она только при удалении префикса.
  • На Steam Deck правку можно применить в режиме рабочего стола через protontricks (есть в виде Flatpak).
  • Новые версии Proton могут сами корректно обрабатывать этот шаг. Если установщик .NET при запуске не появляется, эта правка вам не нужна.

Вопросы и ответы

Почему KF2 на Linux каждый раз ставит .NET 3.5?
Steam выполняет первичную установку компонентов игры внутри префикса Proton. Установлен ли .NET 3.5, он определяет по ключу реестра в ветке CommonRedist. Если ключа нет, установщик запускается при каждом старте.
Что делает правка реестра?
Она записывает значение "3.5 SP1"=dword:00000001 в HKLM\Software\Wow6432Node\Valve\Steam\Apps\CommonRedist\.NET\3.5. Это помечает .NET 3.5 как уже установленный, и Steam пропускает этот шаг.
Это опасно?
Правка добавляет одно значение в собственный префикс Proton игры. Если что-то сломается, удалите префикс (compatdata/232090), и Steam создаст его заново при следующем запуске.
Касается ли это игроков на Windows?
Нет. Это для Killing Floor 2, запущенного через Steam Play (Proton) на Linux, в том числе на Steam Deck.