Сборка Wine[X] для игровых задач.
by Serge Ryabchun <sr at energy dot uch dot net>Поскольку смотрю, что вопрос подымается довольно часто, решил вставить свои пару центов.
Какой linux ставить?
Здесь я не советчик. Я предпочитаю RedHat + часть пакетов с ALTlinux.
Сервер.
Нужен ли сервер или можно обойтись одноранговой сеткой? Ну если у вас так много денег, что вы в состоянии нанять человека, который будет строить линух на 8-20 тачек, то зачем вам линух? Купите себе win98 и закройте тему. Вобщем вопрос не нужен ли сервер, а какой он нужен.
В задачи сервера входит:
- раздать /home и /usr (NFS)
- вы же не хотите администрить каждую геймерскую машину отдельно
- раздать /mnt/floppy и /mnt/cdrom (samba)
- сомневаюсь, что каждая геймерская машина имеет вытягаемые дивайсы;
- почему samba? а я не знаю нормального способа размонтировать cdrom, смонтированный по NFS под linux
- раздать /где-там-стоят-вин-геймы (samba)
- почему samba, а не NFS? да потому, что так лучше, к тому же samba мы уже прикрутили floppy и cdrom шарить.
- почему они вообще на сети?
во-первых, см.п.1 ;-)
во-вторых, вы деньги экономите или где? Поставить SeriousSam или Half-Life на каждую машину, значит купить лицензию на каждую машину. вы когда-нибудь видели, что-бы в SeriousSam играла вся игротека? - а как wine отнесется к тому, что игра проставлена на сети? а кто ж ему скажет, что это network? "Type" = "hd", "Filesystem" = "win95" ;-)
- а тормозить не будет? нет, больше чем wine сейчас тормозит, его способна затормозить только сеть на коаксиле.
- раздать /где-там-стоят-геймы (NFS)
- а почему здесь NFS, а не samba?
эти игры ожидают иметь дело с правильной файлсистем, а не с тем, что им самба изображает. могут быть накладки.
- а почему здесь NFS, а не samba?
- запустить всякие разные геймерские выделенные сервера
- если вы инетом торгуете, то имеет смысл поставить squid
- ну и, если вы сподвигнетесь ещё и на X-терминалы для инет/офис юзеров, то сервер вам понадобится для KDE/Gnome/OpenOffice/чего-ещё пускать
- (-20) фонтсервер, печать, etc.
Думайте, считайте. Для 1-4 за глаза хватит PII300/64M, а вот уже 5-7 потребует чего-то большего. Особенно память.
Геймерские машины.
К сожалению, на сегодня для линукса есть ровно одна фирма делающая видеокарточки с нормальным opengl и называется nNvidia. С радионом8500 я поигрался два часа, но хоть какого-то 3D там не обнаружил. (прим. ред.: пока или максимум 7200, или взять R-DDR и все -- 7500 сотоварищи должны быть в XF86 4.2) Память, ну CounterStrike отъедает 96M+, так что 128M минимум. Процессор, вообще-то wine/winex в 2D редкий тормоз*, но как ни странно, часть глюков на Duron800+ исчезают, хотя не странно, если проследить чего там вызывается.
*поправка - я еще не проверил, но судя по коду в последних winex сильно поднята скорость в 2D.
HDD от 1Gb, больше не нужно, можете продать свои 20-40Gb, накупить на металлоломе 4Gb, разницы как раз на сервер хватит ;-)
Получаем D800+/GF2MX+/128M+/1Gb+
Wine/WineX
Как _ЭТО_ собрать ручками?
autoconf CFLAGS="-mcpu=i386 -march=i686 -O2" LDFLAGS="-s" \ ./configure \ --prefix=/usr \ --with-x \ --enable-dll \ --disable-debug \ --disable-trace \ --enable-opengl \ --enable-mesaos make (make -k programs) make install
Заметьте, что c gcc2.96 -mcpu и -march необходимы. Без них на четырёх _одинаковых_ машинах сделанных через dump/restore я получил совершенно разные результаты:
- coredump gcc на сборке dlls/ntdll
- coredump wine при первой закачке шрифтов
- неправильная работа мыши в некоторых играх
- правильная, imho, сборка
gcc2.95 собирает правильно, gcc3 бросает кору с простынёй кода, на котором сдох. gcc2.96-81 из RH71 нормально собирает с -O3, gcc2.96-98 из RH72 с -O3 собирает, но wine бросает кору на старте, с -O2 всё нормально. Короче, 2.96 - та ещё песня.
Потом ещё нужно сделать programs/regapi/regapi setValue < windefault.reg для получения правильного регистри. Кстати, если у вас свежепроставленный wine вывалится с матом на запускать нужно с опцией -desktop, то либо он не находит правильной регистри, либо winedefault.reg поменялся, те необходимо regapi запустить снова.
Всё, можете пробовать.
CounterStrike тормозит безбожно.
Ну с меню пока ничего не поделать. Хорошо ещё, что в cvs глюк с запуском сервера поправлен, правда за счет ещё хужей отрисовки меню, чёрт с ней, с отрисовкой, зато консоль работает, как надо. А opengl сейчас поправим. Всё, что нам понадобится, описано в первых 30 строках dlls/opengl32/make_opengl . Если у вас winex уже слит, то вам припёрло ;-) Если нет, то лучше слейте, всё равно вам понадобятся несколько файликов и легче залить winex целиком, чем кликать мышом по oss.sgi.com несколько раз на один файл. В winex всё это лежит в dlls/opengl32/specs. В wine ложим туда же. Прикладываем следующий патч, можно и ручками
--- wine/dlls/opengl32/make_opengl Wed Aug 29 22:37:07 2001 +++ wine-ogl/dlls/opengl32/make_opengl Thu Nov 8 12:54:47 2001 @@ -43,11 +43,11 @@ $ext_file = "opengl_ext.c"; # Set to 0 for removing the ENTER / LEAVE GL calls -$gen_thread_safe = 1; +$gen_thread_safe = 0; # Prefix used for the local variables -$ext_prefix = "func_"; +$ext_prefix = ""; # If set to 1, generate TRACEs for each OpenGL function -$gen_traces = 1; +$gen_traces = 0;и
(cd dlls/opengl32; ./make_opengl specs 1.2) make install
О, теперь мы поехали быстрее. На нынешних билдах отставание от нейтива ~20%, а на билдах конца августа-начала сентября около 10%. Можете проверить с wine-20010824. Там windows.c еще лежит в x11drv, теперь перехала в wineserver. Вот и получили дополнительный тормоз. В высоких разрешениях отставание уходит в ноль, здесь уже карта тормозит.
Если судить по тому, что build, который раздается transgaming.com сабскрайберам бегает шибко быстрее, чем тот, что получается с cvs через configure;make, то билдят они его именно таким образом.
Стало лучше, но всё равно тормозит безбожно.
Мнээ, а выгрузите-ка саундовые модули и зпретите звук. Полегчало? Значит вам припёрло. Вам предстоят поиски правильного саундового модуля. В нескольких случаях мне помогла ALSA 0.9, в одном замена звуковой карты.
SeriousSam не едет.
И не поедет, пока не приложите следующий патчик, kgm, с августа никак не замылю его в wine-devel, руки не доходят.
--- wine/graphics/x11drv/opengl.c Wed Aug 29 22:37:08 2001 +++ wine-ogl/graphics/x11drv/opengl.c Thu Nov 8 12:56:15 2001 @@ -200,7 +200,7 @@ ppfd->nVersion = 1; /* These flags are always the same... */ - ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED; + ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_SWAP_COPY; /* Now the flags extraced from the Visual */ ENTER_GL();
Это с winex, в wine на две строки выше.
Что ставить wine или winex.
Ну, во-первых, winex две ветки. Одна доступна в cvs, другая доступна только в собранном виде. Пока разница между ними по словам Transgaming.com только в наличии/отсутствии SafeDisc и SecuRom, но если судить по вялой активности в доступном cvs, то разницы там больше, хотя может и ошибаюсь *.
*поправка - это они в другое здание переезжали.
Какого-нибудь кошерного снапшота не было, нет и не будет. Это даже не бета, это вечная альфа. Что-то правится, что-то ламается. Если сейчас поправили консоль в CounterStrike, то заламали ONI. Поправят ONI, перестанет ездить FAKK2 или что-то другое. Это вечная песня. Хотите, что бы оно у вас хоть как-то работало держите их все, вернее, все под которыми что-то работает лучше. Те ставить куда-нибудь в
/usr/local/wine${DATE} и /usr/local/winex${DATE}а запускать через /usr/local/bin/wine${DATE} и /usr/local/bin/winex${DATE} Надеюсь, что такое PATH и LD_LIBRARY_PATH известно
Вообщем-то я соответствующие wine.spec и winex.spec сочинил. Может завтра до ума доведу.
Как пускать геймы.
Ессесно, на другом сервере. Причин несколько.
- драйвера от nvidia + wine - сладкая парочка. Лично у меня такого ни разу не получалось (докаркался :), уже получилось), но видел неоднократно, при том что в клубах я появляюсь крайне редко. Вобщем wine сносит X или X сносит wine, клавиатура и мыша блокируются. Остается или зайти по сетке и сделать ребут или нажать на ресет. Причём надзиратель говорит, что есть избранные кадры - стоит такому избранному сесть погамить "и всё у нас пойдет через жопу" (c) ДМБ, дикий прапор. Так и вспомнишь про стелянный глаз. Но если запущено на другом сервере, то после сноса обычно таки возвращается на первый X. Кстати, поэтому самое первое, что должно быть поставлено на геймерскую машину - acpid. Да и ресет отстегнуть от мамы желательно ;-)
- wm может делать с мышом|кибордом что-то совершенно непотребное. Не удивляйтесь, если у вас Q3 перестала на клавиши реагировать. очень может быть, что под Q3 всплыло меню или еще чего. Пойдут вопросы типа http://www.transgaming.com/showthread.php?msg=1869&forum=7&thread=1869
- у вас двухкнопочные мыши и включена эмуляция третьей кнопки, не удивляйтесь, что рокетджамп на мыше не выходит.
- StarCraft и иже с ним знает только 640x480. А хочется в фулскрине и не в
ублюдочном, когда физическое и виртуальное разрешение не совпадает, а нормально.
Поэтому пускаем:
xinit /usr/local/bin/STARCRAFT -- :1 -layout gamer640x16
Правильные layout-ы напишете сами.
А что нужно написать в /usr/local/bin/STARTCRAFT
#!/bin/bash export WINEPREFIX=/var/wine/apps/starcraft cd /var/wine/disks/g/starcraft wine20010824 game
Как ставить геймы.
Самый оптимальный путь - ставить под windows с diff regbefore regafter. Можно и из под wine, но здесь как получится. Игры требуют cdrom. Во-первых, не крекайте игру. У нас и так куча проблем, а тут ещё и непонятно wine глючит или крякалка так крякнула. Во-вторых, неизвестно как посмотрит на крякнутую игру "Общество защиты Билла Гейтса от голодной смерти". Так что поделим геймы на три группы:
- не требуют вообще - с этими нет никаких проблем
- требуют наличие файлика на cdrom - тоже понятно, "Path" = "/куда-надо"
- требуют наличие cdrom - для wine /dev/loop выглядит также как и /dev/cdrom так, что снимаете образ, маунтите его и "Device" = "/dev/loop" Если гейма может частично ставиться, то для экономии места так её и ставить. Для некоторых достаточно снять первые несколько мегабайт образа.
Какой WM пользовать.
А какой угодно. Но у нашего юзера gamer прописано icewm.
HTMLизация и публикация на совести Михаила Шигорина <mike at altlinux dot ru>.
Спасибо, Сергей!