Wine. Решение проблемы «Bad serial given in setup» в Arma на Linux.
С основами по использованию Wine можно ознакомиться здесь: https://noostyche.ru/blog/2020/04/30/ispolzovanie-wine-dlya-zapuska-windows-programm-v-linux/
На Wine и Proton проблема характерна для Arma: Cold War Assault (Operation Flashpoint), Arma 1 и 2, кроме Arma 2: Operation Arrowhead (с ней всё в порядке). Она заключается в том, что установочный скрипт (xxxxx_install.vdf) не может сгенерировать специальный код в шестнадцатеричной системе счисления из ключа (серийного номера) игры и подставить его в реестр Windows, то есть в файл реестра в префиксе. Решение заключается в генерации кода из лицензионного ключа и добавлении его в реестр вручную.
Генератор кода из ключа можно подсмотреть здесь: https://github.com/ValveSoftware/Proton/issues/767#issuecomment-508957522
Альтернативный вариант решения проблемы: https://github.com/ValveSoftware/Proton/issues/1308
Генератор кода представлен скриптом на языке perl:
echo 1234-56789-ABCDE-FGHIJ-KLMNO | perl -ne 's/-//g; tr/IO/10/; for $i (0..2) { $res = 0; for $j (0..7) { $res += index("0123456789ABCDEFGHJKLMNPRSTVWXYZ", substr($_, $i * 8 + $j, 1)) << (5 * $j); }; printf("%010x", $res); }; print("\n");'
Примечание: Интерпретатор perl всё ещё присутствует во многих дистрибутивах Linux, поэтому команду можно выполнить в терминале и сразу получить результат. Альтернативным вариантом является возможность воспользоваться онлайн-сервисом.
В первом фрагменте команды можно увидеть буквенно-цифровую строку из 24 символов — здесь должен быть ваш лицензионный ключ игры, который можно посмотреть в Steam: ПКМ на игре в «Библиотеке» / Управление / Цифровые ключи.
После выполнения команды в выводе терминала окажется код подобный этому: 41cc520c4183dcd62d4905ab49c831
Это 15 пар символов в шестнадцатеричной системе счисления. Именно этот код необходимо добавить в реестр префикса игры.
Чтобы префикс был создан, нужно запустить игру один раз, полюбоваться на ошибку и закрыть её.
Для Arma: Cold War Assault префикс и файл реестра по умолчанию располагаются здесь:
/home/$USER/.local/share/Steam/steamapps/compatdata/65790/pfx/system.reg
Для обычной Arma 2:
/home/$USER/.local/share/Steam/steamapps/compatdata/33910/pfx/system.reg
Примечание: Номером префикса является ID игры в Steam.
Отредактировать файл реестра можно двумя способами: через графическую Wine-программу regedit и через редактирование обычным текстовым редактором (nano, gedit, kate и подобными).
Примечание по Arma 2.
С этой игрой есть довольно неприятная особенность. Установочно-конфигурационный скрипт 33910_install.vdf, который находится в корневом каталоге игры, при запуске игры каждый раз стирает(!) запись ключа (шестнадцатеричное значение) из реестра, что приводит к той самой «Bad serial given in setup». Чтобы он не осуществлял эту диверсию, необходимо лишить пользователя прав его выполнять и читать. Пример:
sudo chmod 000 "/home/$USER/.local/share/Steam/steamapps/common/Arma 2/33910_install.vdf"
Или через графический интерфейс:
Всё, диверсионная деятельность скрипта пресечена. Теперь можно приступить к редактированию реестра.
Wine. Редактирование файла реестра с помощью regedit.
Начнём с Arma 2.
WINEPREFIX="/home/$USER/.local/share/Steam/steamapps/compatdata/33910/pfx" wine regedit
Примечание: Если будет предложено установить в префикс Mono и Gecko — отказываемся, для префикса игры это ни к чему.
- Перейти в HKEY_LOCAL_MACHINE\Software\Wow6432Node\bohemia interactive studio\arma 2
- Выбрать строку key.
- ПКМ / Изменить…
- В появившемся окне в текстовое поле переписать сгенерированный код. В данном примере это 41cc520c4183dcd62d4905ab49c831.
- Подтвердить изменения.
- Закрыть окно «Редактора реестра».
Теперь можно запустить игру и ошибки «Bad serial given in setup» более не будет.
Для Arma: Cold War Assault алгоритм действий тот же. Разница только в пути до префикса и до записи в реестре.
WINEPREFIX="/home/$USER/.local/share/Steam/steamapps/compatdata/65790/pfx" wine regedit
Путь до записи в реестре: HKEY_LOCAL_MACHINE\Software\Wow6432Node\bohemia interactive studio\coldwarassault
Редактирование реестра текстовым редактором.
Для Arma 2.
Открываем файл реестра, как текстовый документ:
/home/$USER/.local/share/Steam/steamapps/compatdata/33910/pfx/system.reg
[Software\\Wow6432Node\\bohemia interactive studio\\arma 2]
Ниже будет строка:
«key»=hex:
Это то самое место, куда нужно скопировать сгенерированный код. Пример записи:
«key»=hex:41,cc,52,0c,41,83,dc,d6,2d,49,05,ab,49,c8,31
Важно обратить внимание, что код разбит на пары символов, которые отделены запятой без пробела.
Сохранить изменения в файле.
Теперь проблема с «Bad serial given in setup» решена.
Для Arma: Cold War Assault.
/home/$USER/.local/share/Steam/steamapps/compatdata/65790/pfx/system.reg
[Software\\Wow6432Node\\bohemia interactive studio\\coldwarassault]
В строку «KEY»=hex: прописать сгенерированный код:
«KEY»=hex:41,cc,52,0c,41,83,dc,d6,2d,49,05,ab,49,c8,31
Сохранить изменения в файле.
Готово.
Теперь можно без проблем наслаждаться играми серии Arma на Linux.
Есть код для этого решения на Java, если что.
Можно самому написать на чём угодно, задача на 10 минут работы.