Вводные данные
Много лет я был виндузятником. Пользовался Windows 98 SE, Windows XP и Windows 7. Но политика Micrsoft и окончательное прекращение поддержки Windows 7 актуальными программами вынудили меня перейти на Linux.
Мой ПК: Core 2 Duo E4500, GeForce 7200 GS (OpenGL 2.1).
Установлена Debian 12 с драйвером Nvidia 304 (с патчами от сообещства для работы на актуальных дистрибутивах GNU/Linux; в гайде по установке было указано, что нет поддержки современного WebGL, поэтому новые версии Firefox и Chrome не работают – только Firefox 90-х версий) и X.Org 1.19 (старая версия иксов, чтобы работал драйвер Nvidia 304).
Проблема
Установил Steam (само собой, включая все зависимости – 32-битные тоже) для того, чтобы установить CS 1.6. Вот только Steam не запускается. Он выкачивает обновления, обновляется, потом секунд 30-50 всё пропадает, а затем появляется окно Steam (понятно по интервейсу) с сообщением, что Steam крашнулся, и предлагает варианты на выбор как перезапустить: без аппаратного ускорения и прочее (перепробовал всё, но безрезультатно). Запускал и через терминал, но в выоде в консоли почему-то Steam никакие ошибки не выводит. Предполагаю, что Steam под Linux со старым драйвером не работает нормально из-за того, что в старом патченном драйвере не работает WebGL. Steam ведь на базе Chromium работает.
Вот так вот. Из-за дурацкого DRM-приложения со встроенным Chromium, имея аж дважды купленную игру Counter-Strike 1.6 (один раз на диске с ключом, а второй раз – уже в игровом магазине Steam), я больше не могу в неё играть на железе, которое во много раз мощнее необходимого по рекомендуемым системным требованиям. На котором игра всегда работала безупречно со стабильными 100 FPS и максимальными настройками графики.
Попытка закрыть проблему с помощью Wine
Что ж, право играть в купленную игру у меня есть (я лицензионно её приобрел два раза). Поэтому имею не только моральное право запустить игру воспользовшись неофициальными отвязанными от DRM сборками (в народе – NoSteam).
Я скачал и установил различные виндовые сборки NoSteam CS 1.6 через Wine (Wine 9.2). Но все они работают отвратительно: 2-10 FPS при движениях мышью (даже в меню игры). При том, что на Windows 7 я пару лет назад проверял работу одной из этих сборок, когда настраивал свой игровой сервер CS 1.6 в режиме «пускать игроков, у которых не удалось выполнить проверку на Steam». Работало безупречно, как и steam-версия.
ChatGPT нагенерировал мне следующую информацию (не уверен в том, насколько это действительно относится к моему случаю, но как возможный вариант):
"В Counter-Strike 1.6 — во всех актуальных существующих билдах, 2008-2023 годов выпуска, с которых можно подключиться к нынешним серверам на 48 игровом протоколе — используется неявное поведение мыши, зависящее от MouseWarpOverride и оконного режима. Игра через Wine работает в borderless windowed с захватом мыши, а это очень нестабильный режим.
На современном мощном железе это может быть не так критично и даже почти незаметно, но не в вашем случае.
Wine через XWarpPointer вызывает асинхронный запрос к X-серверу — и тогда вы получаете лаг (просадку FPS) на каждый пиксель движения мыши. Каждый такой ивент вызывает glSwapBuffers + SetCursorPos, что может легко “утопить” весь event loop. Каждый warp вызывает задержку, ведь OpenGL X дожидается завершения X11 операции перед следующим SwapBuffers".
Запуск нативной NoSteam CS 1.6
В сборке нативной для Linux версии Counter-Strike 1.6, которую опубликовал Kron4ek (версия 2013 года, билд 6153) с эмулятором Goldberg (эмулятор Steam в режиме оффлайн/LAN), можно лишь из консоли игры подключаться через connect IP:PORT к половине нынешних игровых серверов на протоколе 48. Т. е. к тем серверам, у которых в конфиге сервера разрешено подключение с любых актуальных (на 48 протоколе) NoSteam CS 1.6 игровых клиентов, а не только лишь с виндовым эмулятором Steam „revEmu“.
В этой сборке не работает встроенный в игру браузер серверов: невомзожно ни добавлять серверы во вкладку игры «Избранное», ни просмотривать посещённые серверы во кладке «История» (посещённые серверы просто не запоминаются и не выводятся там, а написано, что их нет), ни получать список нынешних работающих публичных серверов во вкладке «Интернет». Но да ладно, это не так критично (всё же эмулятор больше для LAN предназначен).
А самое критичное здесь – то, что в этой сборке игры (игровом клиенте с этим эмулятором Steam „Goldberg“) не работает быстрая загрузка файлов по протоколу HTTP (т. е. в нём не реализованы перехват http-обращений к Steam и загрузка через какой-нибудь libcurl). Судя по выводу в игровой консоли, клиент получает от сервера URL-адрес, с которого можно загружать файлы по HTTP, но дальше дело на заходит, клиент терпит неудачу (видимо, перенаправляет эти запросы на загрузку самому Steam, который не запущен; если точно, как я понимаю, за загрузку файлов по HTTP в нём отвечает Chromium Embedded Framework). Поэтому клиент при попытке быстрой загрузки моментально откатывается на медленную загрузку по устаревшему протоколу (на базе UDP со коростью 7KB/s).
Эмуляторы Steam (что Goldberg, что revEmu) заменяют оригинальную библиотеку libsteam_api. Так что я полез в Google и нашёл на Github’е код виндовой библиотеки libsteam_api.dll (с нуля написанная путём реверс-инжиниринга)] для GoldSrc (даижка CS 1.6). Но чтобы сделать из неё патченную libsteam_api.so (с встроенной поддержкой бвстрой загрузки по HTTP), нужно иметь хоть какие-то навыки программирования на C или C++. То есть в код придётся вносить изменения: удалять обращения к виндовому реестру и виндовым библиотекам, заменять их на линуксовое и реализовать перехват HTTP-запросов с загрузкой через libcurl. Звучит не так сложно, но я хорошо понимаю, что это наверняка лишь «звучит» для меня как обывателя, а не программиста.
Вопросы
С каким из этих двух вариантов NoSteam в контексте моего ПК должно быть проще разобраться (решить проблему): с версией Wine, либо с нативной NoSteam? Wine-версия выглядит более готовой «из коробки», но более проблемная в работе. Тогда как NoSteam работает технически лучше, но при этом требует патча libsteam_api (навыков этого у меня, увы, нет). Что посоветуете?
Также в тему приглашаются Kron4ek и
LINUX-ORG-RU.