LINUX.ORG.RU

Беда с CS/Steam в Linux, не хочу обратно на Винду :(

 , ,


0

4

Вводные данные

Много лет я был виндузятником. Пользовался 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.


Да что так страдать и мучиться то? Дуалбут, винда 7 для CS, линукс для всего остального. Делов то.

Заводить игры и стимы на нвидии времен постройки Стоунхенджа смысла большого нет, время терять, которое можно потратить на что-то полезное.

James_Holden ★★★★★
()

А пробовал какой-нибудь старый Wine — допротоновских времён, который точно не имеет никаких привязок к более новым OpenGL? Например, у Wine 1.4-rc2 платиновый статус на WineHQ. Вероятно, будет лучше совместим с твоей системой. Только насчёт версии игры не могу ничего сказать. Ты упомянул некий «протокол 48». Понятия не имею, что это такое. Может, с Wine 1.4-rc2 старые сборки только будут работать нормально.

posixbit ★★
()
Последнее исправление: posixbit (всего исправлений: 3)

используется неявное поведение мыши, зависящее от MouseWarpOverride и оконного режима. Игра через Wine работает в borderless windowed с захватом мыши, а это очень нестабильный режим.

В ПортПротоне можно ESYNC отключить в настройках префикса, но сомневаюсь, что это тебе поможет.

posixbit ★★
()

Ох, как много чтива

Мой ПК: Core 2 Duo E4500, GeForce 7200 GS (OpenGL 2.1).

Наверное сноси блоб если он есть и ставь нуво драйвер. Я в нвидиях абсолютно не разбираюсь, но на старых буках старые зелёные карточки тянули csgo на нуво (причём давно лет 7 назад, больше не трогал), без каких либо проблем, не говоря про 1.6 в саму 1.6 я не играю, минимум source максимум cs:go (не cs2)

Сразу отпишусь по csgo

Оно тоже нерабочее сходу, но вот так можно. Но это так к слову.

С каким из этих двух вариантов NoSteam

Я тут к сожалению ничего не смогу сказать. В CS1.6 как сказал, я не играю.

NoSteam

А где его сорцы, может там просто. Дай ссылку. Вдруг прокатить проковырять по быстрому.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

помимо установки драйвера нуво, можно ещё накатить playonlinux и попробовать запускать cs1.6 на разных (желательно наверное старых) версиях wine часто, старые игры работают лучше на старых wine, если у тебя есть версия игры в стиме то просто попробуй вписатьв параметры запуска PROTON_USE_WINED3D=1 %command% это практически обязательная мера для старого железа иначе будут дичайшие лаги (если опустить подробности)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

NoSteam

А где его сорцы

Эмулятора Steam под линукс? Вот же: https://github.com/Detanup01/gbe_fork

Или ты про оригинальный libsteam_api? ТС там ссылку какую-то оставил.

Или про саму игру? Разве Valve открыла исходники CS 1.6?

posixbit ★★
()
Ответ на: комментарий от xDShot

Причём работают новейшие версии. У меня есть такая встройка.

Проблема в патченном драйвере Nvidia 304 версии линуксовом. Ну или в целом в 304 версии драйвера в Линуксе сегодня, работу которого сломали по причине «не поддерживается больше».

posixbit ★★
()
Ответ на: комментарий от posixbit

Я про конкретный запуск конкретной игры и что у неё в зависимостях конкретно отваливается =)

Так-то да тут всё широко. Конкретно тут как я понимаю просто нужна библиотека которая линкуется с программой динамически и говорит программе что ты запущена в стиме всё ок. Вот и всё.

Ладно, тут надо комплексно смотреть, и с железом проблемы, и с софтом и игры сторонних сборок.

Первое что бы я сделал

  • накатывал нуво, накатывал блобы
    • сравнивал производительность (в чём то) и как только понял что с ускорением всё ок
  • Брал игру и тестировал
    • ключи запуска для стима для нативки
    • ключи запуска для стима + версии proton для не нативки (иногда имеет смысл)
    • варианты wine в playonlinux (просто удобнее жонглировать )

И так последовательно, шаг за шагом у меня бы оставалось всё меньше и меньше вариантов для телодвижений. А сходу сразу всё взять и сделать как надо, это надо сразу всё знать. =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Я тут к сожалению ничего не смогу сказать. В CS1.6 как сказал, я не играю.

Вот нативная сборка игры от Kron4ek: https://disk.yandex.ru/d/ELXTsGiE5Y8Meg (ну или на Рутреккере можно найти)

А где его сорцы, может там просто

https://github.com/oxiKKK/goldsrc-reversed-steam_api

Вдруг прокатить проковырять по быстрому.

Буду очень благодарен 🙏

Stub
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Там по той моей ссылке на игру от Kron4ek (с Яндекс.Диска) libsteam_api.so уже стоит от эмулятора Goldberg

А ссылку на код отреверсенной libsteam_api.dll я дал. Если нужна оригинальная в скомпилированном виде (как so), могу попытаться скачать через SteamCMD (это утилита, через которую сервер CS 1.6 можно скачать), там же есть и файл libsteam_api.so оригинальный

Stub
() автор топика

Установлена Debian 12 с драйвером Nvidia 304 (с патчами от сообещства для работы на актуальных дистрибутивах GNU/Linux

Ачто для такого раритета блоб дает хоть что-то кроме гемора по сравнению с нуво?

ya-betmen ★★★★★
()

Попробуй более старый дебиан поставить, где 304 есть нативно, ну и 32-битный а то ещё есть вариант что 64 vs 32 костыли плохо работают. Если заработает, но ты не хочешь его основной системой - то попробуй его сделать chroot-ом к дебиану 12 (но тестируй не chroot а норм установку перед этим).

firkax ★★★★★
()
Ответ на: комментарий от Stub

Ты не разгоняйся =) Я просто гляну. Не факт что вообще что-то буду делать, яж просто любитель. Опять же есть в сборках уже всё включено, значит у других работает. Если крончек выложил, значит он сам поиграл, а если поиграл. Короче не знаю… Может вообще дело не в этой библиотеке.
Ты на меня не надейся. Смогу что-то, отпишусь, не смогу, не отпишусь.

Может сейчас крончек поймёт почему его нативная сборка не стартует у тебя.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от xDShot

Да вопрос не в работоспособности хромов, а работоспособности без них. Я просто выключил обновление в бутстрапере в 2022 году и использую старый vgui2 интерфейс. А на другом компе на эту же версию накатан opensteamclient. Пока запуск без хрома не поправят - не вижу смысла что-либо обновлять

mittorn ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Понимаю. Я просто максимально информацию предоставил, чтобы сориентировать, где что смотреть

в сборках уже всё включено, значит у других работает

В том-то и дело, что не работает. На Рутреккере под раздачей Крончека много жалоб о том, что не работает браузер игровых серверов в игре и нельзя зайти ни на один мультиплеерный сервер из-за того, что файлы скачиваются со скоростью 7KB/s. Приходится ждать по полчаса, а пока скачаешь, карта уже сменится на другую и придётся по новой качать. Потому что причина в этом:

в этой сборке игры (игровом клиенте с этим эмулятором 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. Звучит не так сложно, но я хорошо понимаю, что это наверняка лишь «звучит» для меня как обывателя, а не программиста.

Stub
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Я не уверен, что нуво будет лучше работать. Думаю, лучшим решением будет всиавить туда какую-ниюудь gcn'овую рыксу и пользоваться всеми преимуществами radv

mittorn ★★★★★
()

А вообще, попробуй собрать xash3d и cs16client. С недавних пор он работает с оригинальным протоколом. Но многие сервера конечно не будут пускать из-за дополнительной защиты со стороны сервера

mittorn ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Может сейчас крончек поймёт почему его нативная сборка не стартует у тебя

Вряд ли. Его задача была в том, чтобы просто собрать сборку игры, установив на неё готовую патченную libsteam_api.so (эмулятор Goldberg). Он с ней справился. А уж остальным он не занимался. Т. е. запустил игру, она заработала. Этого достаточно для запуска и минимальной работы, но не достаточно для нормальной игры на не собственном сервере, а на всех остальных. В теме на Рутреккере он подобные жалобы на Goldberg (libsteam_api.so) не комментирует

Кстати, он уже ответил здесь

его нативная сборка не стартует у тебя.

Она стартует и работает с нормальным FPS. Проблема в другом: в том, что нельзя зайти на игровые серверы. То есть сервер я нахожу не в самой игре, а ищу через Гугл «мониторингами игровых серверов CS 1.6», открываю игровую консоль, пишу «connect IP:PORT» и начинается бесконечная загрузка этих звуков, моделей, карт и прочего. Это в лучшем случае. В худшем просто – «Error! You can’t connect to the server without файл.расширение» (если в конфиге сервера отключили старую «небезопасную» медленную загрузку по протоколу UDP

Stub
() автор топика
Ответ на: комментарий от mittorn

А вообще, попробуй собрать xash3d и cs16client

А в нём есть быстрая загрузка файлов по протоколу HTTP? Вижу, что есть готовые бинарники на Гитхабе. Но почему-то для Linux xash сразу как сервер стартует. А вывод «help» не показывает среди опций запуск его как игровой клиент. Как ни пытаюсь – запускается как сервер. Хотя виндовая версия, судя по всему, должна работать (не пробовал), т. к. содержит вывод опции запуска как клиент. Ради интереса открыл видео на Ютубе по виндовой версии, там режим клиента xash.exe выводит и игра без проблем стартует: https://www.youtube.com/watch?v=R5i5hxfe-eo

Но многие сервера конечно не будут пускать из-за дополнительной защиты со стороны сервера

Я могу попросить администриторов разрешить на сервере в настройках Reunion (модуль для ReHLDS, пускающий NoSteam-игроков) любые клиенты на 48 протоколе. Этого будет достаточно? Или на стороне Xash3D FGWS + CS16Client надо что-то ещё делать?

@a1ba

Stub
() автор топика

GeForce 7200 GS

«So Nvidia, f**k you»

Установлена Debian 12 с драйвером Nvidia 304 (с патчами от сообещства

Костыли

Много, много, много буковок.

Быстрее было зайти в любой б/у магазинчик и купить что-то красное за <1000 руб. Если так хочется старого.

AlexVR ★★★★★
()

А ты не закрывай ошибку, сам интерфейс стима не нужен для drm, нужен только запущенный процесс steam. Но авторизацию нужно сделать, стим запускается без ускорения графики, я его как-то запускал в xvfb чтобы сервер игры работал, такое вот дрм.

ext4
()

Core 2 Duo E4500, GeForce 7200

Устаревшее железо, а виноват Гейб и Майксрософт, ага.

имея аж дважды купленную игру Counter-Strike 1.6 (один раз на диске с ключом, а второй раз – уже в игровом магазине Steam)

А ведь можно было просто зарегестрировать имеющийся ключ. Ну да ладно, у многих здесь вообще куплены полные пакеты валвовских игр (у меня в тоим числе, во времена, когда за уже имеющиеся игры из пака скидок не было, т.е. тоже с дублями, и ничего, живем).

Можно было бы попробовать что-то вроде steam steam://install/10, а затем аналогичную для запуска. Но раз с интерфейсом клиента траблы даже с отключенным аппаратным ускорением, наверное не прокатит.

Вообще, если углубиться в сам топик и его проблематику, то самое очевидное решение просто поменять видеокарту на более актуальную затычку (она же вроде уже pcie, не agp). Просто как-то даже грустно, отлично оформленный оп-пост, разметочка, многобукв и такая некрофилия.

sehellion ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Докину что нарыл, и там прикольный коммит в хуках, по поводу сломанного fastdl и как его чинит человек, чинит через костыль.

Запустил я, ну сервера не обвешанные миллиардом модов, грузятся шустро и всё хорошо. Не такая уж и проблема. Играть можно.

Специально прерывал загрузку отваливаются вызовы из hw.so библиотеки, там сеть. Туда или от туда копать.

Есть ещё сервера которые просто ооочень медленно отдают, и не игра тут виновата, что вносит свои ложные срабатывания мыслей о проблеме. А так, низкая скорость отдачи


На этом пока всё, копать дальше нет уже времени, а так, если сервер реально может отдать быстрее, но это клиент качает медленно, я бы начал с написания хука на самую низкоуровневую херню что есть в игре для работы с сетью, и сделал через LD_PRELOAD хук, типа прокси, как и выше было сказано, перехватывать куда идёт, и начинать качать в буфер самому, по заполнению буфера отдавать обратно и так до победного, только вот вопрос, почему скорость такая мелкая на приём, если там её логика рубит то решать надо вообще по иному, если это межкоммункациорнные договорённости клиент<->сервер о скорости передачи данных, то тоже иное. Короче, я понятия не имею где первопричина, есть целая кучка мест, перебирать всё, может быть и поперебирал, если бы играл ))) А так, повезёт, за день найдёшь, не повезёт будешь год ковырять.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

У него тупо медленно грузятся ресурсы с серверов

В валвовских играх за быструю загрузку сам Steam отвечает. Так что ТС тут не ошибся. Это проблема на уровне клиента решается.

posixbit ★★
()
Ответ на: комментарий от sehellion

Устаревшее железо, а виноват Гейб и Майксрософт, ага.

на момент выхода игры такое железо было бы достаточным, так что не аргумент. valve действительно окончательно «попутали берега» со своим steamwebhelper'ом. steam должен уметь минимальный функционал (логин и запуск игр) без какого-либо хромиума. То же самое касается депрекейта поддержки старых windows т.к люди покупали игру, которая работает на windows 98/2000/xp и должны иметь возможность в них играть не удаляя DRM из игры. Я не думаю, что сделать минимальную версию стима без браузера так сложно, opensteamclient же справился

mittorn ★★★★★
()

Поставить свободный драйвер nouveau вместо пропиетарного nvidia 304, и настроить частоты не вариант?

https://nouveau.freedesktop.org/

Твоя видеокарта NV40

Настрой частоты, обороты fan

linuxuser112
()
Последнее исправление: linuxuser112 (всего исправлений: 2)