Als je alleen de X- en GL-versies van Quake, QuakeWorld of Quake II draait,
hoef je ze niet met root permissies te draaien. SVGA is de enige mode
die als root moet worden opgestart. De X-versies hebben slechts toegang
tot /dev/dsp
nodig, het geluidsdevice.
De GL-versies hebben toegang tot de
3Dfx kaart nodig als ook tot /dev/dsp
.
/dev/dsp
moet voor Quake leesbaar en schrijfbaar zijn. De meeste
distributies kennen er standaard 662 (rw-rw--w-
) permissies aan toe.
De eenvoudigste oplossing is om het commando chmod 666 /dev/dsp
uit
te voeren. Op de meeste systemen zal de mogelijkheid
om het geluidsdevice te kunnen lezen geen veelbetekenende
bedreiging voor de beveiliging vormen. Als deze benadering voor je systeem
onacceptabel is, maak dan een groep aan die eigenaar is van
/dev/dsp
en maak je Quake-spelers leden van die groep.
Je hebt de /dev/3dfx
driver nodig van Daryll Strauss' glide page
(
http://glide.xxedgexx.com/3DfxRPMS.html) om glide-applicaties
(zoals GLQuake) niet-root te kunnen draaien.
Download het Device3Dfx.xxx.rpm
package en installeer het overeenkomstig de instructies op de webpagina.
Nadat je de driver hebt geïnstalleerd,
zorg ervoor dat aan het bestand /dev/3dfx
de permissies 666
(chmod 666 /dev/3dfx
) zijn toegekend.
Als /dev/dsp
en /dev/3dfx
juist zijn ingesteld, kun je
het setuid bit van je Quake/QW/Q2 uitvoerbare bestanden verwijderen. Doe
gewoon (als root) chmod 0755 XXXXX
, waar XXXXX
staat voor
glquake
, quake.x11
, of quake2
.
Als je voordat je deze wijzigingen aanmaakte als root speelde, kan het zijn dat veel van de Quake bestanden (zoals savegames) als eigenaar root hebben en niet toegankelijk zijn voor een gewone gebruiker, dus denk eraan de eigenaar van de bestanden te wijzigen voordat je een poging doet om het spel als niet-root te spelen.
De GLX Quakeworld en Quake II clients zijn ingebouwde X-applicaties,
maar aangezien ze Mesa eerder zullen gebruiken dan de 3Dfx
mini-driver, zijn ze langzamer dan de lib3dfxgl.so
versies. Om deze reden, kan het zijn dat je nog steeds de voorkeur geeft
om op deze manier je spellen vanuit X op te starten boven het gebruik van
de GLX-client.
Dit is gebaseerd op een Linux Gazette 2 Cent Tip door Joey Hess ( joey@kite.ml.org). Het origineel is te vinden bij http://www.ssc.com/lg/issue20/lg_tips20.html#squake.
Ja, het is mogelijk om de Quake spellen vanuit X te draaien als je root bent, maar dergelijk gedrag is ondeugend, en je loopt nog steeds het risico dat Quake crasht en de console in een zodanige staat achterlaat dat het niet meer reageert. Met een klein beetje werk kun je het voor een gewone gebruiker mogelijk maken om SVGA en GL Quake vanuit X te draaien EN om automatisch naar X terug te keren als het programma is beëndigd, ongeacht of het wel of niet normaal is afgesloten.
Opmerking: als ik het in de tekst hieronder over "Quake" heb, bedoel ik eigenlijk "quake, glquake squake, qwcl, glqwcl, qwcl.x11 of quake2".
make;make install
om het te
compileren en het te installeren.
Zodra het is geïnstalleerd, moet je de uitvoerbare bestanden
open
en switchto
als setuid root instellen. Dus doe dit:
cd /usr/local/bin
chown root open switchto
chmod 4755 open switchto
getvc.c
:
/* getvc.c * Drukt het nummer van de huidige VC af naar stdout. De meeste code * hiervan werd uit het open programma gehaald, en deze code valt onder GPL. * * * Joey Hess, Fri Apr 4 14:58:50 EST 1997 */ #include <sys/vt.h> #include <fcntl.h> main () { int fd = 0; struct vt_stat vt; if ((fd = open("/dev/console",O_WRONLY,0)) < 0) { perror("Failed to open /dev/console\n"); return(2); } if (ioctl(fd, VT_GETSTATE, &vt) < 0) { perror("can't get VTstate\n"); close(fd); return(4); } printf("%d\n",vt.v_active); } /* End of getvc.c */
$PATH
:
gcc getvc.c -o getvc
strip getvc
mv getvc /usr/local/bin
runvc
:
je $PATH
:
#!/bin/sh # Start iets op een VC op, vanuit X, en schakel terug naar X als je klaar bent. # GPL Joey Hess, Thu, 10 Jul 1997 23:27:08 -0400 exec open -s -- sh -c "$* ; chvt `getvc`"
$PATH
:
chmod 755 runvc
mv runvc /usr/local/bin
Nu kun je het commando runvc
gebruiken om Quake op te starten.
Ga verder met de commando-regel die je normaal gesproken gebruikt om je spel
op te starten, maar plaats runvc
aan het begin:
runvc ./quake2 +set vid_ref gl +connect quake.foo.com
Je zult automatisch naar een VC overschakelen,
Quake draaien en dan terugschakelen naar X als je klaar bent!
Ik wil er graag op wijzen dat een aantal mensen kunnen bemerken dat dit niet werkt. Als de /dev/ttyxx devices standaard niet toelaten dat je ernaar toe kunt schrijven (een goed idee), dan zal het open commando er niet naartoe kunnen schakelen. In dat geval, is het nodig dat je het commando chown toepast op de volgende vrije tty nadat je X hebt opgestart. Ik doe dit als volgt in het Xtartup_0 script van xdm:
# Stel tty8 in als een console die schrijfbaar is door de huidige gebruiker, # dus dat open -s commando's kunnen worden gebruikt om zaken daar uit te voeren. # Tty8 wordt gebruikt omdat het de volgende vrije tty na 7 is waar X draait, # en dus probeert open het te gebruiken. chmod 640 /dev/tty8 chown $USER.root /dev/tty8 # Dit opent een heel klein beveilingslek: # gebruiker_a logt in met xdm, en logt dan uit. # gebruiker_b logt in op de console. # gebruiker_a kan gebruiker_b nu via het open commando naar tty9 # omleiden en in een bepaald programma terecht laten komen dat # hem er misschien toe brengt om een wachtwoord in te voeren. #
Het kan zijn dat je eens hebt gezien of manieren hebt horen noemen om Quake's OpenGL performance "beter af te stellen" door het instellen van diverse omgevingsvariabelen. Deze variabelen zijn ook geldig onder Linux. Je moet ze alleen iets anders instellen. Als een Windows/DOS "fijnafstemmings" leidraad je aangeeft:
SET SST_GRXCLK=59
Doe het dan, onder Linux, als volgt:
export SST_GRXCLK=59
Joe S. ( jszabo@eden.rutgers.edu) stelt voor:
een truuk die ik gebruik met qstat:
Ik maak een bestand met mijn favoriete servers en doe vervolgens
qstat -f /C/quake2/file.txt | less
druk op control z voor een tijdelijke onderbreking, en kopieer vervolgens het ip-adres of de hostnaam die ik met gpm wil met een commando-regel als:
./quake2 +connect expert.eqclans.com
Vervolgens kan ik fg gebruiken om later naar de lijst terug te keren...
Je kunt de 3Dfx mini-driver (lib3dfxgl.so
) van
Quakeworld of Quake II ook met glquake
gebruiken. Kopieer
de glqwcl.3dfxgl
of quake2.3dfxgl
scripts gewoon naar een nieuw bestand, laten we zeggen
glquake.3dfxgl
. Wijzig vervolgens het
glquake.3dfxgl
script zodat het glquake
uitvoert
in plaats van glqwcl
.
Dezelfde beperkingen gelden ook hier met betrekking tot het uitvoeren als root,
als ook de verschillen tussen het draaien onder glibc en libc5.
Zie de secties
Quakeworld of
Quake II voor meer informatie over
lib3dfxgl.so
.
Als je er genoeg van hebt om iedere keer dat onbruikbare bericht te zien
als je in GLQuake op de spatiebalk drukt,
voer dan het volgende commando vanuit je quake directory uit en je
zult er nooit meer last van hebben.
Dit kleine stukje Perl code vervangt gewoon het eerste teken van de
melding door een null teken, wat in C programma's het einde
van een string aangeeft.
Als GLQuake nu denkt dat het ons een mogelijke scancode fout moet
laten weten, geeft het in plaats daarvan als uitvoer een lege string!
Oh, en van het originele binaire bestand glquake
wordt ook
nog eens een automatische
backup gemaakt met de naam glquake.bak
.
perl -i.bak -0777pe 's/P(ossible unknown scancode)/\0$1/g' glquake
Met dank aan Andrew Chase ( fixy@fixy.org) hiervoor.