De eerste keer dat ik XFree86 onder OS2 draaide was in 1997. Ik kon er weinig mee. Ik wist op X en UNIX gebied van toeten nog blazen. Met Ctrl-Escape kwam ik weer op de vertrouwde OS/2 Werkplek terecht.

Inmiddels ben ik al weer een tijdje met Linux bekend. Linux en OS/2 werken op mijn thuisnetwerk goed samen. De Linux server op zolder levert de bestand- en internetdiensten en de OS/2 WPS het gerief. Maar het blijkt in de praktijk ook mogelijk X applicaties als WP voor Linux en Applixware via het netwerk onder OS/2 te draaien. En met Ctrl-Escape zit u na zo'n uitstapje naar X weer op de WPS.



XFree86/OS2

>> Xfree86/OS2 Index<<

Het XFree86/OS2 project van Holger Veit en Sebastien Marineau porteerde regelmatig XFree86 servers naar OS/2.

Deze X servers lopen als fullscreen toepassingen onder OS/2. Hiermee is het goed mogelijk om via het TCP/IP netwerk X applicaties voor UNIX en Linux onder OS/2 te gebruiken (screenshot).

Voor degenen die niet zomaar over een TCP/IP netwerk kunnen beschikken (m.n. de OS/2 Warp 3 gebruikers) zijn er OS/2 ports van belangwekkende X applicaties die via de terugloop interface te gebruiken zijn.

Het X Window systeem

>Top<

Een algemene inleiding in het X Window Systeem vindt u in de Linux sectie.

Vensterbeheer

Het X Window systeem is de UNIX manier is om grafische applicaties te draaien. UNIX is een netwerk besturingssysteem en haar grafische interface, het X Window Systeem, is een client-server netwerksysteem. Programma's op een applicatieserver (X clients geheten) beschrijven de vensters op de X servers van terminals en werkstations. Het is wel goed om hier even bij stil te staan.

Technisch gezien zijn ook gewone "venster" GUI's (Windows en OS/2) client server systemen. Grafische applicaties moeten immers met de rest van het systeem samenwerken. Ze moeten fysieke bronnen delen. Er draaien meerdere programma's, maar we hebben slechts een beeldscherm, toetsenbord en muis. Om chaos te voorkomen biedt het besturingssysteem zijn diensten aan: communicatielijnen en bibliotheken voor vensterbeheer, muisaansturing en de besturing van het toetsenbord. De vensterbeheerder (Window Manager) stopt ze in een venster en zorgt ervoor dat er maar een actief is. Via uw muis en toetsenbord kunt u ze besturen. In zoverre is een PM programma een client van PM Shell, de Window Manager (WM) van het besturingssysteem.

Programma's

Window Manager

Besturingssysteem

Hardware

PM, WPS (eigenlijk een groot PM Programma), VIO, X, DOS, Win16.

Presentation Manager

Stuurbestanden, kernel en subsystemen.

Een muis, een toetsenbord en een beeldscherm. Vaste schijf.

X clients

Window Manager

X server, kernel en subsystemen.

Idem. Eventueel op meerdere locaties

Wat is nu het verschil tussen bijv. Windows en het X Window systeem? De kern is dat in het het X Window systeem de gebruikersprogramma's (X Clients), de Window Manager (WM) en het met de hardware verbonden grafische afbeeldingssysteem (X server) strikt van elkaar gescheiden zijn. Hun communicatie (via API aanroepen) verloopt niet via het direct beschrijven van gedeeld geheugen, maar via X protocollaire berichten over TCP/IP. Het is een grafisch client-server nètwerksysteem. Door die opsplitsing in componenten met een goed beschreven interface kunt u niet alleen de programma's, maar ook de Window Manager en X server van uw keus gebruiken. Die bovendien op verschillende computers en besturingssysteem kunnen draaien.

Onder OS/2 en Windows communiceren programma's ook met een vensterbeheerder en zijn onderliggende (sub)systemen, maar deze zijn veel nauwer met elkaar verbonden. Windows werd zelfs een succesvol spelletjesplatform toen programmeurs met de DirectX API de trage Windows GUI konden omzeilen. Door de integratie van de grafische schil met het besturingssysteem won de PC aan snelheid, maar konden de componenten steeds minder uitgewisseld worden. Maar dat was ook niet nodig, want alles draaide op dezelfde PC.

Onder het multi-user systeem Unix was het echter gebruikelijk om terminals te gebruiken. Meerdere terminals werden via seriele lijnen met een centrale UNIX server verbonden. Aan iedere terminal zat een gebruiker. Zo'n teletyper beschikte over een monochroom beeldscherm en een toetsenbord. Toch was zo'n dumb terminal al een hele luxe vergeleken met ponskaarten, magnetische banden en plotters van de UNIX pioniers uit de jaren 70.

Bovendien werden de terminals steeds slimmer. Ze kregen kleurenschermen, snellere verbindingen en via het aan het Massachusetts Institute of Technology (MIT) ontworpen X Window Systeem (X, 1984) konden ze ook grafische programma's draaien (X terminals). Uiteindelijk werden ze door zelfstandig operende UNIX werkstations met vaste schijf vervangen, zodat de gebruikers zowel lokaal als op afstand programma's konden draaien.

Het door het X Window systeem gebruikte X protocol is een geavanceerd grafisch netwerkprotocol. De berichten die de X client via de Window Manager naar de X server stuurt bevatten opdrachten als "teken een lijn" en "teken een a met een bepaalde font en kleur". Voor de X Client en Window Manager maakt het niet uit of de X server die hun opdrachten uitvoert op een OS/2, Windows of een UNIX werkstation staat.

Wat enige verwarring kan geven is dat de X server op het werkstation draait. Bij servers denkt men meestal aan mainframes, minicomputers, maar geen microcomputers of terminals. Maar bij een XFree86 server op de PC is dat niet het geval. De reden is simpel. De X server moet uw randapparatuur aansturen. Hierbij gaat het om de bediening van het toetsenbord, het beeldscherm (videokaart en monitor) en de muis. Dat kan alleen lokaal worden ingesteld. Want videokaarten, monitors, toetsenborden en muizen verschillen van werkstation tot werkstation.

X clients zijn de programma's die u draait. Ze mogen op het werkstation staan, maar ook op een iedere via het TCP/IP netwerk te bereiken server. Dat laatste impliceert dat een OS/2 PC die een XFree86/OS2 X server draait via het netwerk opeens de beschikking krijgt over de vele X applicaties die Linux rijk is! Zo'n Linux applicatieserver hoeft zelf geen X te draaien, wat weer geheugen bespaard. De Linux computer laadt het X programma in het geheugen maar het programma voert met de variabele "export DISPLAY=hostnaam:0.0" de opdrachten op de X server van OS/2 uit.

Nu zult u misschien denken dat grafische programma's niet goed over een netwerk kunnen lopen, maar dan hebt u het mis. Het X Window systeem werd voor trage netwerkverbindingen ontworpen. Daarom gebruikt een programma als Asteroids gebruikt maar 25 k cps. Een fractie van wat een netwerkkaart aankan. Zo'n X applicatie zendt meestal geen pixels over het netwerk, maar gerichte opdrachten als "teken een lijn" of "schrijf een woord met een bepaald font". De X server op uw PC voert die opdrachten uit. De fonts worden meestal lokaal geladen. Het grafische rekenwerk wordt door de X server verricht. Hierbij maken moderne X servers goed gebruik van de hardwareversnelling van de videokaart.

Op een PC zonder TCP/IP netwerkverbinding met een andere PC fungeert de zogenaamde loopback interface als een intermediair. Een "ifconfig lo 127.0.0.1 up" in de setup.cmd emuleert een netwerkkaart. Hiermee kunnen OS/2 Warp 3, 4 en of eComStation gebruikers zonder netwerkkaart het X Window systeem gebruiken. Jammer is dat er nog relatief weinig X applicaties naar OS/2 zijn omgezet. Want op de terugloop interface zult u de X Window applicaties vanaf de OS/2 computer moeten opstarten. En dat alleen als die X clients ook met OS/2's EMX bibliotheek gecompileerd zijn. Maar wat van deze open source X applicaties eenmaal "binnen" is, blijft binnen. Oftewel: er worden vorderingen gemaakt, die niemand van u af kan nemen.

X servers voor OS/2

>Top<

Omdat goede X terminals prijzig waren ontstond er een markt voor X servers op steeds goedkoper wordende PC's. Voor OS/2 kwamen er enkele beschikbaar. Een van de eerste was IBM's PM X. De laatste update van PM X voor OS/2 TCP/IP 2.0 kwam in 1997 uit. Een andere was Hummingbirds Exceed for OS/2. En ook Connectix bracht een PM X server voor OS/2 uit die als HOBLink X11 bij het eComStation Application Pack geleverd wordt. Daarnaast is er een Java X server WeirdX

In 1996 porteerden Holger Feit en Sebastian Marineau de voor het Intel platform ontworpen XFree86 versie 3 .2 server naar OS/2 en DOS. Dit was een mijlpaal. De open source XFree86/OS2 X server bood volledige compatibiliteit met de onder Linux en BSD gebruikte X servers zodat hij alle gangbare X applicaties weergeven kon. Anders dan de Presentation Manager X servers draaide hij op een volledig scherm. Hierdoor kon hij net als grafische DOS applicaties beter profiteren van videohardware. Onder PM was daar de DIVE API voor nodig. De XFree86/OS2 server maakte van dezelfde bibliotheken gebruik als veel open source Linux applicaties, wat de weg opende voor het porteren van X applicaties naar OS/2.

X applicaties ontwerpen voor OS/2 was iets dat de de PM X server fabrikanten wel hadden beloofd, maar nooit hadden gedaan. In de praktijk draaiden de X applicaties op UNIX servers, die het op de PM X server van OS/2 al dan niet of minder goed deden. Want ook een X server is maar een implementatie van een X protocol. Maar met de XFree86 port beschikten OS/2 gebruikers over een de facto standaard X server. Een X server die in niets voor de Linux versie onderdeed.

Zoals de meeste van Linux geporteerde programma's maakt XFree86/OS2 server gebruik van de EMX (Emulate Unix) bibliotheek. Een essentieel onderdeel is Holger Feits XF86SUP.SYS stuurbestand. Het zorgt voor de vertaling van het door het X Window systeem verwachte multi-user omgeving naar de single-user omgeving van OS/2. OS/2 kent bijv. geen virtuele toetsenborden, heeft andere I/0 mechanismen en laat niet zomaar toegang tot de videokaart toe. De XF86SUP.SYS driver biedt hier een oplossing voor. In een interview met OS/2 E-Zine (April 1996) verklaarde Holger Feit:

Initially, I thought that the X servers would be complicated, but surprisingly, they compiled almost out of the box after I had the support from the XF86SUP.SYS driver. The nice effect was that they share most of their code, so when we got one server working, the others automatically did as well, without specific testing. They now seem to be so compatible to their Linux and BSD equivalents, that the same bugs that appear there can also be observed under Linux. At this point I want to explicitly thank Sebastien Marineau, my remote colleague, who had debugged most of the problems in the server code and is responsible for the X11 / OS/2 interfacing.
The hardest things were applications that extremely use Unix features. This holds for xterm and xdm mainly. Interestingly, with X11R6 there was partly support for WinNT, and the applications missing from that port were: xterm, xdm, xconsole, and the servers!

Onder OS/2 hoeft u alleen maar het toetsenbord en het beeldscherm (videokaart + monitor) in te stellen. Onder XFree86/OS2 v. 3 blijft de muisbesturing in handen van OS/2. Een onder OS/2 ingestelde scrollmuis is meteen bruikbaar. Ook een Winkey driver (aanrader!) op een Window toetsenbord (voor X instellen als "Microsoft Natural toetsenbord" - ook al is het vierkant) werkt perfect als schakel tussen de OS/2 WPS en het X Window systeem.

Inmiddels is de XFree86 versie 4.4.0 server naar OS/2 geporteerd. Hij is op ftp://ftp.netlabs.org/pub/xfree86/ te downloaden. De belangrijkste verbetering van de versie 4 reeks was dat ze closed source stuurbestand code van videofabrikant toelieten. De objectcode bevindt zich in \usr\X11R6\lib\modules\drivers. Ze maken gebruik van de Direct Rendering Infrastructure (DRI), waar ook de niet zo open OpenGL en open source Mesa API gebruik van maakte. Voorheen moesten de X server programmeurs het met de beperkte publieke informatie van de videochipsets doen, waardoor de stuurbestanden van de XFree86 servers altijd minder snel waren dan die van closed source fabrikanten, die wel non-disclosure inzage in de hardware finesses hadden. Ze konden dus minder efficiënt van de ingebouwde hardwareversnelling van de kaarten gebruik maken. Maar inmiddels draait Linux ook op een 1 GHz PC 3D spelletjes als Tux racer.

Voor OS/2 bestaat dat voordeel helaas niet. De voor Linux gemaakte mga_drv.o van Matrox wordt niet door OS/2 geladen. Voor zover ik weet ondersteunen alleen VooDoo kaarten 3D onder OS/2, wat ze onder versie 3 ook al deden. De software emulatie van 3dfx kaarten heet Glide. Echte VooDoo kaarten pakken dit dus ook hardwarematig op. Maar het probleem is dat maar weinig 3D applicaties van de Glide API gebruik maken. Ze kiezen toch vooral voor het Windows platform, oftewel DirectX.

Wel hebben de naar OS/2 geporteerde versie 4 X servers het voordeel van een rijke hardwareondersteuning en -detectie. Plug en play is het nog niet, maar de PCI sniffer van \usr\X11R6\bin\xf86cfg.exe doet goed (voor)werk. Daarnaast is net als onder versie 3 een "handmatige" configuratie met xf86config.exe uitstekend te doen. Maar u moet dan wel over de hardware specificaties van uw PC beschikken en dat is in het Windows OEM tijdperk (Windows doet het toch?) soms al een hele kunst.

X applicaties via het netwerk draaien

>Top<

Dankzij Dr. Holger Feit en Sebastian Marinau beschikken OS/2 gebruikers over een snelle en actuele X server. Hiermee kunnen ze via het netwerk al hun grafische X applicaties aanspreken. OS/2 applicaties via de loopback interface en wat u maar wilt via het netwerk.

XFree86 via TCP/IP benaderen

De XFree86 server luistert naar TCP poort 6000. Een tweede X server (localhost:1.0) luistert naar poort 601 en zo verder.. Standaard luistert de X server alleen naar X clients op dezelfde computer. Dat kan via de loopback interface (127.0.01:0.0), maar ook via "locale" UNIX sockets(local/hostnaam:0). Lokale pijpen zijn sneller en veiliger dan TCP/IP. Ze zijn niet te scannen. Het is de standaard onder Linux.

Maar als uw poort 6000 wel open staat - en dat is onder XFree86/OS2 standaard het geval, kunt u de X server beter achter een firewall draaien. Weliswaar luistert de X server standaard alleen naar localhost, maar ook een gesloten poort zal de aandacht trekken. En stelt uw TCP/IP stack aan aanvallen bloot.

Om X applicaties te draaien via het netwerk maakt u van de netwerkkaart interface gebruik. Gebruikersauthentificatie neemt twee vormen aan: xhost +hostnaam laat X clients van die hostnaam toe. xhost + zet de op hostnamen en IP adressen gebaseerde gebruikersauthentificatie uit. En dat is spelen met vuur. Daarnaast is er een op wachtwoorden gebaseerde gebruikersauthentificatie van xauth of op Kerberos gebaseerde systemen.

Het kapen van een X sessie

Het kapen van een X sessie kwam in het verleden veelvuldig voor. Het komt er op neer dat je van een willekeurige lokatie andermans X server gebruikt. Dat geeft soms merkwaardige situaties, waarbij je voortdurend afvraagt "waar je nu eigenlijk op bent". Zo zal de volgende opdracht een x terminal op de X server van host sjoerd afbeelden.

aanvaller@linux:~ > xterm -display sjoerd:0.0

De aanvaller ziet dat beeld echter niet. Het verschijnt op de X server van sjoerd. En als sjoerd in zo'n pop-up xterminal bestandsgegevens opvraagt (ls) ziet hij de bestanden van de aanvaller. En heeft hij ook de gebruikersrechten van de aanvaller. En dat was nu ook niet de bedoeling. De aanvaller had liever een telnet sessie gehad. Want dan was hij op sjoerds PC de baas en kon hij diens bestanden uitvoeren.

Hoe vindt zo'n aanval dan wel plaats? Je zou een grafische pop-up applicatie "xlogin" kunnen maken en maar hopen dat iemand hier braaf zijn wachtwoord intikt. En daarnaast kan de aanvaller met een miniscule of als klok verklede keylogger de toetsenbordacties op de X server volgen en naar zijn eigen PC exorteren.

aanvaller@linux:~ > keylogger -display sjoerd:0.0 -file /home/aanvaller/sjoerd.log

En als de aanvaller eenmaal gebruikersnamen en wachtwoorden heeft, kan hij op een andere manier (telnet) de server opnieuw aanvallen. Waarbij de volgende stap het achterhalen van het rootwachtwoord is.


Dit voorbeeld geeft echter ook aan dat het goed mogelijk is om een Linux PC als applicatieserver voor XFree86/OS2 te laten optreden. Voor dat soort "distributed computing" was het X protocol uiteindelijk bedoeld. Als ik in de xterminal de opdracht startkde & geef, zie ik de KDE Desktop environment van Linux op OS/2 verschijnen. Met kicker & alleen de KDE taakbalk. De "&" werkt als de OS/2 start opdracht: hiermee krijgt u de prompt meteen terug.


Wat is hier voor nodig?

U moet de beschikking hebben over een met x applicaties uitgeruste server op uw netwerk (Linux, FreeBSD, NetBSD). De software kan gratis zijn, maar ik raad beginners aan een Nederlandstalige distributie als Suse te kopen. Linux is door zijn vele opties niet zo eenvoudig. De bijgeleverde boeken hebt u echt nodig.

De hardware valt wel mee: ik kocht voor nog geen 180 euro een door het bedrijfsleven afgedankte PC die nu als X applicatieserver, proxy, Imap server en bestands en printerserver op mijn thuisnetwerk voldoet. Hierbij is vooral de snelheid van de vaste schijf (Ultra DMA) en het geheugen (128 MB of meer) van belang. Anders dan met Java zullen de X applicaties in het geheugen van de applicatieserver draaien. Maar hiervoor hoeft de applicatieserver zelf geen X server te draaien.

Omdat u onder OS/2 werkt, is een ssh verbinding met Linux bijzonder prettig. Met ssh.exe -tc /etc/ssh_term.linux zolder beschikt u over een prima terminal voor Linux. Helaas is het installeren van ssh onder OS/2 geen sinecure. Er zijn meerdere implementaties. Wilt u OS/2 ook als ssh server gebruiken, dan komt u bij de OpenSSH/2 implementatie van het Security/2 Project (http://os2.kiev.ua) uit. Maar achter een firewall router levert zelfs telnet geen veiligheidsproblemen op. En als uw Linux server vlakbij staat, is het al genoeg om een x terminal op de X server van OS/2 te starten.

Op de OS/2 PC moet een X server als XFree86/OS2 (versie 4 is 30 MB) of Hoblink/X draaien. De hardware vereisten voor de XFree86/OS2 server zijn laag. Zeker vergeleken met Linux. Het belangrijkste is dat u gebruik kunt maken van de hardwarematige versnelling van uw videokaart.

Hoe u de X server configureert valt buiten het bestek van dit artikel. Kijk op http://www.xs4all.nl/~vissesh/multiboot/xfree86-os2/xf86config4.html voor een stappenplan. Christian Hennecke heeft een uitstekende site over X onder OS/2 geschreven: The X files op http://www.os2world.com/os2files.

Aan de slag!

Als ik met ssh of telnet op de Linux inlog, is de eerste opdracht:

export DISPLAY=visser:0.0

Hiermee zullen alle opgestarte X applicaties hun beeld op de X server van "visser" vertonen. Het IP adres opgeven mag natuurlijk ook. U kunt zelfs een apart os2 account aanmaken op Linux, waarbij u deze omgevingsvariabelen in een /home/os2/.bashrc zet. De aliasen besparen u tikwerk.

export NNTPSERVER=zolder 
export DISPLAY=visser:0.0 
export EDITOR=mcedit 
# wat shortcuts
alias xwp="/opt/wp8nl/wpbin/xwp" 
alias ecs="export DISPLAY=ecs:0.0"
alias visser="export DISPLAY=visser:0.0"  
alias zolder="export DISPLAY=localhost:0.0" 

Maar de X server op "visser" moet natuurlijk wel eerst draaien. Met startx brengt u hem aan de praat. De foutmeldingen stuur ik meteen door naar een xerror.log.

d:\usr\X11R6\bin\startx.cmd 2> d:\xerror.log

De naar localhost luisterende OS/2 X server moet wel weten dat X clients vanaf de Linux PC "zolder" zijn toegestaan:

d:\usr\X11R6\bin\xhost +zolder 

Als u dit toch vaker doet , is het handig om de xhost opdracht automatisch op te starten. Ga hiervoor naar het REXX script \usr\X11R6\lib\X11\xinit\xinitrc.cmd en zet daar de volgende opdracht bij (een privaat IP adres is wel zo veilig):

'twm'
'xhost +192.168.0.2'

Het xinitrc.cmd bestand is de autoexec.bat van het X systeem. Hij wordt vanuit startx.cmd geladen. Hier laadt het X initialisatie bestand de Tiny Window Manager (twm) en geeft een xhost opdracht af. Ze bevinden zich al in het pad (d:\usr\X11R6\bin\). Op deze manier kunt u ook andere OS/2 X goodies opstarten.

Velen zullen twm door de veel mooiere Enlightenment (E/2) Window Manager willen vervangen. Zie: Hennecke's site. Maar die is lastig te installeren. Een startkde (of andere WM) vanuit Linux doet het ook goed. Voor Hoblink/X gebruikers is kicker & een aanrader. Dit geeft een KDE taakbalk op de WPS.

De aanhalingstekens in het REXX script geven aan dat het om OS/2 opdrachten gaat. De XFREE86.EXE server loopt met meerdere tijdskritische draden. Hierdoor draaien ook applicaties als RealPlayer en filmpjes (het geluid komt van de naast OS/2 staande Linux PC) acceptabel. Leuk zou het zijn als ik het geluid ook naar OS/2 kan sturen en via Z! kan opvangen, maar zover ben ik nog niet.



Sjoerd Visser

Enige links

XFree86® Home to the X Window System : de open source XFree86 Xserver is de standaard van het X Window protocol.

Het XFree86/OS2 project van Holger Veit en Sebastien Marineau op de OS2-Unix Ports Repository. De origene site bestaat niet meer.

XFree86/OS2-3.3.6 server: De laatste naar OS/2 geporteerde versie 3 X server.

Op Netlabs staan ports van de XFree86 versie 4 X server: ftp://ftp.netlabs.org/pub/xfree86/.

WeirdX -- Pure Java X Window System Server under GPL : X server voor Java.

Exceed PC X server: Een PM shell X server.

PMX : de TCP/IP X server van IBM (obsoleet).

HOBLink X11: X server for OS/2 : X server voor OS/2 Presentation Manager.

VOICE Newsletter 4/2003 - Installing XFree86/OS2 4.3.0

Let ook op de GIMP for OS/2.

OS/2 e-Zine! - OS/2 and X-Window... Come Again? : Een interview met Holger Feit (1996).

OS/2 e-Zine! Running X applications in 3 easy steps... (Oktober 2002)

Running Local Applications Using HOBLink X11 under OS/2

Christian Hennecke biedt in de The OS/2 Files een uitstekend overzicht van XFree86/OS2 met veel praktische tips over het installeren (Duits en Engels).

Kai Uwe Pel's OS2UNIX Web Page bevat "Making OS/2 look like unix.

UX2 Build System

GNOME/2 and Enlightenment/2 Homepage van Christoph Vogelbusch

XFree86/OS2 : een nederlandstalige site over XFree86/OS2.

UnixOS2.org : Een UNIX omgeving voor OS/2.

OS2-Unix Ports Repository : Een zeer grote verzameling naat OS/2 geprte Unix tools.

Op het XFree86 OS2 Ports Archive kunt u vrijwel alle naar OS/2 geporteerde X applicaties downloaden.


X protocol :waar het onder draait.

DRI Wiki : meer informatie over DRI en haar API's.



>Top<