Draaien van SVGA- en GL-spellen vanuit X 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 (). Het origineel is
te vinden bij
.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".Als eerste, heb je het open(1) package door Jon Tombs
nodig. Dit is een set met twee zeer kleine programma's die je toestaan
tussen virtuele consoles te schakelen en er programma's in te starten.
Download open vanaf . Je hoeft niet
veel meer te doen dan een 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
Sla de volgende code op in een bestand met de naam 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, &ero;vt) < 0) {
perror("can't get VTstate\n");
close(fd);
return(4);
}
printf("%d\n",vt.v_active);
}
/* End of getvc.c */
Compileer en installeer het ergens in je $PATH:
gcc getvc.c -o getvc
strip getvc
mv getvc /usr/local/bin
Maak nu een script aan met de naam 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`"
Maak het uitvoerbaar en plaats het ergens in je $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!
Update: Joey Hess schreef:
"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.
# "