X instellen

ArticleCategory:

System Administration

AuthorImage:

[Foto van de Auteur]

TranslationInfo:

original in en Joel Mccarty

en to nl Tom Uijldert

AboutTheAuthor:

Abstract:

Waarvoor dienen die punt-wat-dan-ook bestanden eigenlijk?
Een artikel over het eenvoudig configureren van het X-window systeem.

ArticleIllustration:

[Illustratie]

ArticleBody:

Inleiding

Hier iets voor verse systeembeheerders en andere gebruikers die zich afvragen hoe je X sessies nog meer kunt aanpassen aan je persoonlijke voorkeuren of die van je gebruikers.

Om te beginnen gaat dit artikel er van uit dat het X window systeem reeds is geïnstalleerd en wordt gestart met het startx commando (het instellen van X voor meerdere gebruikers tegelijk via XDM is hopelijk het onderwerp van een volgend artikel). Laten we nu eerst eens kijken naar de belangrijkste bestanden hiervoor en ze kort behandelen...

xinitrc
xinitrc is een shell script wat via het startx commando door wordt gegeven aan xinit. Dit script stelt meestal algemene grootheden in (screen saver instellingen, toetsenbord definities enz.). Dit bestand is de lijm tussen de diverse X opstart processen.

Xclients
Dit is een verborgen bestand (punt-naam) in de directory van de gebruiker die client- processen start die alleen voor die gebruiker van belang zijn. Dit in tegenstelling tot de meer algemene, die door xinitrc worden opgestart.

Xresources
Dit bestand bevat instellingen en grootheden van widgets, die de standaard instellingen vervangen. Deze bevat meestal grootheden als grootte van lettertypes, kleurinstellingen en meer algemene representatieve grootheden. Deze kan echter ook worden gebruikt voor het bereiken van behoorlijk spectaculaire grafische effecten.

Laten we eens naar de instellingen gaan kijken nu we de primaire bestanden hebben behandeld...

.xinitrc

Na het geven van het commando startx, zal xinit (die verantwoordelijk is voor het opstarten van X) het bestand /etc/X11/xinit/xinitrc (algemeen) uitlezen of, wanneer dit aanwezig is, het bestand ~/.xinitrc (specifiek) uitlezen. Indien beide bestanden niet aanwezig zijn dan worden de instellingen overgelaten aan het xinit proces zelf (geen goed idee). Het xinitrc bestand (een specifiek bestand, indien aanwezig, vervangt het algemene bestand) is een shell script die diverse X client-processen opstart en vervolgens een aanroep naar exec() gebruikt voor het starten van de gegeven window manager.

Een eenvoudig xinitrc bestand zou er als volgt uit kunnen zien...


        # /etc/X11/xinit/xinitrc
        #!/bin/sh

        exec /usr/X11R6/bin/fvwm2
Dit bestand doet niets anders dan alleen het programma F(eeble) Virtual Window Manager 2 uitvoeren. Niet erg bruikbaar maar leuk als je even snel een nieuwe window manager in wilt stellen. Het wordt interessanter als we wat instellingen toevoegen en nog wat extra clients afstarten, iedere keer dat we X opstarten...

        #/etc/X11/xinit/xinitrc
        #!/bin/sh

        # gedaan met dat vervelende backspace-probleem!
        xmodmap -e "keycode 22=BackSpace"

        # stel de achtergrond in
        xsetroot -solid LightSlateGrey

        # screen saver na vijf minuten
        xset s 300

        # X clients die altijd moeten worden gestart
        xterm -g 80x20+150+8 &       # start een console venster
        xterm -g 80x20+150+325 &     # start een tweede console onder de eerste
        xload -g +4+0 &              # start een cpu belastings-meter
        xclock -g +815+0 -digital &  # start een digitale klok

        # Start Window Manager
        exec fvwm2

Schermafbeelding van een X-sessie met deze configuratie

We hebben nu een bestand dat eindelijk dat irritante backspace probleem oplost (voor de meeste gevallen), de numlock instelt, die vreselijke moire achtergrond weghaalt en een aantal programma's opstart iedere keer dat we X starten.

Een paar aandachtspunten. Een lokaal bestand in de directory van de gebruiker zal altijd worden gebruikt als die er is (daarbij voorbijgaand aan de globale instellingen). Let ook op de -g optie die de meeste X programma's kennen, dit staat voor geometry. Deze wordt gebruikt om de plaats op het scherm en de grootte van het programma te specificeren, als volgt...

Lengte x Breedte + X coördinaat + Y coördinaat
Punt van aandacht hierbij is dat programma's als xterm (en de meeste andere terminal programma's), de lengte en breedte in aantal tekens gespecificeerd willen zien in plaats van beeldschermpunten (als je dus niet uitkijkt kun je met aardig kleine windows komen te zitten). Let verder op het en-teken (&) aan het eind van ieder commando (behalve bij het starten van de window manager). Deze geeft aan dat het programma in de achtergrond moet draaien (anders start het volgende programma niet voordat de vorige is afgelopen - en dat heeft weinig nut). Alleen de window manager wordt dus in de voorgrond gestart en zal dus ook alle programma's eindigen die xinitrc afstart, zodra je de X- sessie eindigt.

We hebben nu dus een bruikbaar script voor algemeen gebruik of voor plaatsing in de directory van een gebruiker voor zijn aanpassingen (we willen wellicht andere dingen opstarten voor gebruikers van de technische dienst dan die van de financiële afdeling). Hoewel deze constructie aardig wat mogelijkheden biedt, wordt het nog steeds niet ten volle benut. Bedenk dat dit een shell script is en dat dus allerlei andere commando's in dit script kunnen worden opgenomen. Laten we eens kijken naar een laatste voorbeeld wat gebruik maakt van xmodmap en xrdb om een privé instelling te combineren met de globale xinitrc instellingen, zodat we niet telkens het xinitrc bestand naar de directory van de gebruiker hoeven te kopiëren voor afwijkende instellingen (aparte instellingen voor Xclients en Xresources worden verderop behandeld). Deze keer staan de commentaren (na de #hekjes#) in het Engels, zoals in het echte bestand:


        #/etc/X11/xinit/xinitrc
        #!/bin/sh

        # define locations for global and local resources
        userclients=$HOME/.Xclients
        userresources=$HOME/.Xresources
        usermodmap=$HOME/.Xmodmap
        sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
        sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap

        # merge system and user Xdefaults and keyboard maps
                if [ -f $sysresources ];  then xrdb -merge $sysresources; fi
                if [ -f $sysmodmap ];     then xmodmap $sysmodmap; fi
                if [ -f $userresources ]; then xrdb -merge $userresources; fi
                if [ -f $usermodmap ];    then xmodmap $usermodmap; fi

        # fix that annoying backspace problem     
        xmodmap -e "keycode 22=BackSpace"

        # set  background
        xsetroot -solid LightSlateGrey

        # screen saver after five minutes
        xset s 300

        # check for ~/.Xclients and execute else execute system
        # default clients ( local and global are NOT merged)
        if [ -f $userclients ]; then
                exec $userclients
        else

                # start some default clients
                xterm -g 80x20+150+8 &
                xterm -g 80x20+150+325 &
                xload -g +4+0 &
                xclock -g +815+0 -digital &
                # start window manager
                fvwm2

        fi

Schermafbeelding van een X-sessie met deze configuratie
In dit voorbeeld hebben we alle toetsenbord instellingen geladen en standaardinstellingen van programma's gedefinieerd (via .Xmodmap en .Xresources) waarna specifieke instellingen van gebruikers (uit hun eigen directory) zijn geladen. Dan gaan we verder met instellingen die we altijd willen hebben, ongeacht de aanwezigheid van algemene of lokale bestanden (voor bijvoorbeeld de backspace instelling en de numlock status). Vervolgens kijken we of de gebruiker Xclients heeft gedefinieerd in zijn eigen directory (en laden ze in als ze aanwezig zijn) of gaan anders op zoek naar algemene systeeminstellingen (let op: in tegenstelling tot de standaardinstellingen en resources eerder in het bestand worden deze twee regels niet samengenomen). Merk op dat als de gebruiker niets zelf heeft gedefinieerd, het eindresultaat hetzelfde is als ons eerdere scherm en niet dat van hierboven. Op deze manier hebben we het mechanisme voor een algemene instelling met de mogelijkheid van een op eigen smaak aangepaste omgeving, allemaal vanuit dezelfde xinitrc. Als laatste kijken we of onze favoriete window manager aanwezig is en anders vallen we terug op de goeie ouwe fvwm2 (als ook dit er niet is dan geldt als laatste redmiddel twm). We hebben nu de situatie dat we zeer specifieke aanpassingen kunnen doen voor individuele gebruikers door lokale bestanden aan te passen en tegelijkertijd algemene wijzigingen door te voeren zonder dat we het script nog ooit hoeven te veranderen.

Laten we de bestanden die we hebben genoemd eens nader bekijken...

.Xclients

Het ~/.Xclients bestand bevat gebruikersspecifieke clients die aan het begin van een X-sessie worden opgestart. Het formaat van dit bestand is dezelfde als in het xinitrc bestand. Hieronder de inhoud van het ~/.Xclients bestand dat is gebruikt in het vorige plaatje.

       xv -rmode -noresetroot -quit /usr/local/backgrounds/slate.xpm &
       kfm &
       kcontrol -init &
       kbgndwm &
       krootwm &
       kpanel &
       kvt &
       kwm
Zoals je in de vorige figuur kunt zien kun je Xclients aanpassen aan de eigen smaak zonder het centrale bestand xinitrc te veranderen. Merk op dat bovenstaand xinitrc script geen clients start als er een lokale ~/.Xclients aanwezig is. Ik gebruik deze constructie zodat iedere gebruiker zijn eigen window manager kan instellen via .Xclients. Als je centraal clients moet opstarten doe dit dan voordat je de .Xclients van de gebruiker aanroept (als deze een window manager aanroept). Voor diegenen die meer willen weten over mijn configuratie uit het laatste voorbeeld, kijk naar KDE's home page. Versie 3.0 bèta is net uit en heeft een aantal mooie hulpmiddelen voor het instellen van grafische koppelingen (GUI).

.Xresources

Deze bevat X-instellingen voor lokale programma's (~/.Xresources) of voor algemene programma's (/usr/X11R6/lib/X11/xinit/.Xresources). X-programma's bestaan uit widgets. Widgets zijn stuurelementen. Aldus zijn er widgets voor het lettertype, voor scroll bars en voor achtergrondinstellingen. Bijna alles in X is een widget (en is dus in te stellen).

Widgets zitten meestal in een hiërarchische opstelling, in een frame widget voor een menu bijvoorbeeld zitten dan diverse widgets voor de diverse knoppen. Om dergelijke widgets individueel te veranderen moet je de volledige naam opgeven in de vorm van het pad in de hiërarchie. Hieronder een voorbeeld van mijn ~/.Xdefaults bestand dat al mijn terminal schermen standaard instelt.

XTerm*Font:             -misc-fixed-bold-r-normal-15-140-75-75-c-90-iso8859-1
XTerm*Background:       black
XTerm*Foreground:       cyan
XTerm*scrollBar:        true
XTerm*saveLines:        500
Xterm*VT100.geometry:   80x24
Merk op dat wild cards zijn toegestaan in een dergelijk bestand, aldus zal...
*Foreground:  cyan
*Background:  black
een standaard kleur geven aan alle programma's waarvan de instelling niet expliciet wordt veranderd in een .Xdefaults bestand. Als je net als mij meer flexibiliteit wil dan de wild cards je bieden maar je onmogelijk de hiërarchie kan onthouden... kijk dan eens naar editres. Dit is een hulpmiddel voor grafische koppelingen die je extreem gedetailleerde instellingen laat doen zonder dat je daarvoor .Xdefaults hoeft te veranderen. Kijk eens naar de afbeelding van editres in actie! Zo langzamerhand zul je wel begrijpen dat .Xdefaults interessante mogelijkheden biedt voor centraal gestandaardiseerde instellingen alsook voor zeer toegesneden omgevingen. Kijk eens wat .Xdefaults kan doen met deze eenvoudige xcalc. Bezoek voor een grondige, stapsgewijze inleiding in het gebruik van editres de pagina Isolation's X tips page.

Dat is het zo'n beetje voor deze maand. Ik hoop dat je nu hebt gezien wat voor mogelijkheden tot standaardisatie en instellingen X heeft, zonder dat je voor iedere nieuwe gebruiker uren aan scripts moet gaan zitten prutsen. In het volgende nummer (als de hoofdredacteur Miguel A .Sepulveda het wil) gaan we kijken hoe je meerdere X inlog-sessies kunt hebben op dezelfde machine met behulp van de X display manager. Voor vragen en/of commentaar, stuur maar een berichtje. Tot ziens...