original in en Joel McCarty
en to nl Tom Uijldert
De meest waardevolle functionaliteit zit echter in het feit dat xdm autorisatie- informatie aan kan leveren die vervolgens door een X-server kan worden gebruikt voor het regelen van toegang tot systemen. Door z'n vermogen X login-sessies af te starten met daarin de standaard verificatie-technieken is xdm ideaal voor toepassing op een machine die door meerdere gebruikers wordt gedeeld.
Als je op zoek bent naar recepten voor het beheren van complete X-omgevingen dan raad ik het boek "The X Window System Administrators Guide" aan van O'Reilly & Associates. Dit boek gaat in detail in op het beheer en ligt buiten het onderwerp voor dit artikel.
xdm-config
Dit bestand geeft de plaats van alle andere bestanden voor het instellen (als je daarvan gebruik wilt maken) en bevat de commando's voor het starten van setup, startup, reset en startscript. In onderstaand voorbeeld staan alle bestanden in /etc/X11/xdm zodat ik de standaard bestanden in /usr/lib/X11/xdm niet hoef te wijzigen.DisplayManager.errorLogFile: /var/log/xdm-error.log DisplayManager.pidFile: /var/run/xdm.pid DisplayManager.keyFile: /etc/X11/xdm/xdm-keys DisplayManager.servers: /etc/X11/xdm/Xservers DisplayManager.accessFile: /etc/X11/xdm/Xaccess DisplayManager._0.authorize: true DisplayManager._1.authorize: true DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0 DisplayManager._0.startup: /etc/X11/xdm/GiveConsole DisplayManager._0.reset: /etc/X11/xdm/TakeConsole DisplayManager*resources: /etc/X11/xdm/Xresources DisplayManager*session: /etc/X11/xdm/Xsession DisplayManager*authComplain: false
Xservers
Een lijst met servers die xdm kan beheren. Minimaal moet hierin het lokale schermbeheer staan.$ kill
doen van dat proces als volgt:
# ps -a | grep xdm 2639 ? R 0:09 /usr/bin/X11/xdm # kill -9 2639Hieronder een voorbeeld voor een machine met slechts één gebruiker.
# first line should be the local display :0 local /usr/X11R6/bin/X # :0 specifies console # local denotes the X server is running on the locally # /usr/X11R6/bin/X executable run at startup # the syntax for X terminals is slightly different # since they run their X server from another machine # ONLY enter X terminals if they DO NOT support XDMCP eng1:0 foreign NCD xterminal # eng1 is the name of the terminal # :0 is the display to use on the terminal # foreign signifies the X server is running on a different machine # NCD xterminal are display class resources specific to this terminal # and aren't absolutely neccesary eng2:0 foreign NCD xterminal eng3:0 foreign Visual xterminal
Xsession
Het opstart-script dat wordt gedraaid bij iedere sessie:#!/bin/sh # following section enables failsafe logon when neccesary # using <CTRL><RETURN> after password activates failsafe mode case $# in 1) case $1 in failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac # redirect errors to a file in user's home directory for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER" do if ( cp /dev/null "$errfile" 2> /dev/null ) then chmod 600 "$errfile" exec > "$errfile" 2>&1 break fi done # use users local .xsession and .Xresources files if they exist startup=$HOME/.xsession resources=$HOME/.Xresources if [ -x "$startup" ]; then exec "$startup" elif [ -x "$HOME/.Xclients" ]; then exec "$HOME/.Xclients" elif [ -x /etc/X11/xinit/Xclients ]; then exec /etc/X11/xinit/Xclients else if [ -f "$resources" ]; then xrdb -load "$resources" fi exec xsm fi
Xresources
Bepaalt de resources die moeten worden geladen met xrdb(1) voor alle servers die xdm gaat beheren.# key settings to be used by Xlogin widget xlogin*login.translations: #override\ # Ctrl R stops xdm from managing display Ctrl<Key>R: abort-display()\n\ # F1 or Ctrl Return run a failsafe session # consisting of a single xterm window <Key>F1: set-session-argument(failsafe) finish-field()\n\ Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\ <Key>Return: set-session-argument() finish-field() # display setings for Xlogin widget to be displayed by xdm xlogin*borderWidth: 3 xlogin*greeting: CLIENTHOST xlogin*namePrompt: login:\040 xlogin*fail: Sorry Try Again #ifdef COLOR xlogin*greetColor: CadetBlue xlogin*failColor: red *Foreground: black *Background: #fffff0 #else xlogin*Foreground: black xlogin*Background: white #endif # settings for xconsole client which is used when xdm connection on # local server is initialized. This keeps console messages sent between # logins from going everywhere across the screen XConsole.text.geometry: 480x130 XConsole.verbose: true XConsole*iconic: true XConsole*font: fixed Chooser*geometry: 700x500+300+200 Chooser*allowShellResize: false Chooser*viewport.forceBars: true Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-* Chooser*label.label: XDMCP Host Menu from CLIENTHOST Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1 Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-*
xdm-pid
Bevat het huidige procesnummer van xdm (alleen ter informatie, niet veranderen).xdm-errors
Hierin komen alle foutmeldingen die xdm genereert.Xaccess
Stelt de toegangsrechten in voor XDMCP (vanaf versie X11R5). Het bestand bepaalt alleen de toegangsrechten voor verzoeken van XDMCP. Je kunt hier ook macro's definiëren voor een logische groepering van machines.GiveConsole
Een script dat wordt gebruikt om de rechten van de console op de gebruiker over te dragen. Verander hier niets zonder dat je er een goede reden voor hebt.#!/bin/sh # Assign ownership of the console to the invoking user # $XConsortium: GiveConsole,v 1.2 93/09/28 14:29:20 gildea Exp $ # # By convention, both xconsole and xterm -C check that the # console is owned by the invoking user and is readable before attaching # the console output. This way a random user can invoke xterm -C without # causing serious grief. # chown $USER /dev/console
Take Console
Dit script geeft de rechten weer terug aan gebruiker root (vanaf versie X11R5). Ook deze niet zonder gegronde redenen veranderen.#!/bin/sh # Reassign ownership of the console to root, this should disallow # assignment of console output to any random users's xterm # $XConsortium: TakeConsole,v 1.2 93/09/28 14:30:29 # chmod 622 /dev/console chown root /dev/console
Xsetup_0
Een script dat de instelling van het locale console bepaalt (vanaf versie X11R5). Dit start xconsole, een terminal window die systeemmeldingen weergeeft tussen logins door.#!/bin/sh # $XConsortium: Xsetup_0,v 1.3 93/09/28 14:30:31 /usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail
~/.xsession
Een opstart script van de gebruiker die aan wordt geroepen vanuit Xsession. In tegenstelling tot ~/.xinit kan dit script in elke shell-taal zijn geschreven (~/.xinit kan alleen een Bourne of Bash shell script zijn).~/.Xresources
Gebruikers resources die ook door Xsession worden ingelezen~/.xsession-errors
Bevat de foutmeldingen van de specifieke sessie van de gebruiker.~/.Xauthority
Bevat autorisatie informatie voor de server van de gebruiker.XDMCP maakt het mogelijk dat servers met xdm kunnen praten zonder dat deze ze reeds kent. Met XDMCP luistert de machine op de XDMCP-poort naar verzoeken op het netwerk (voor alle drie de mogelijke communicatiemethoden). Bij het ontvangen van een dergelijk verzoek start het een kopie van zichzelf en stuurt het loginscherm naar de terminal.
Met de methode DIRECT wordt een willekeurig verzoek op het netwerk geplaatst. Het eerste
xdm proces dat reageert krijgt dan het beheer over de server.
De methode INDIRECT heeft een keuzemenu tot gevolg waarin alle machines staan die een verbinding
kunnen verzorgen. De gebruiker kan er vervolgens één uitkiezen. De methode INDIRECT
is vooral geschikt in een omgeving met meerdere machines.
Om deze methode te kunnen gebruiken moet je de CHOOSER optie aanzetten in het bestand Xaccess.
Een alternatief is het gebruik van de methode BROADCAST, in samenwerking met CHOOSER,
die een verzoek verzendt over het gehele netwerk naar alle machines en de gebruiker
vervolgens laat kiezen.
eng*.odhs.dsd.com CHOOSER BROADCASTDeze regel maakt het mogelijk dat alle terminals van engineering bij odhs.dsd.com een keuzescherm krijgen met daarop alle beschikbare machines. Een wellicht beter scenario is dat ze een vaste lijst van beschikbare machines te zien krijgen waarmee ze verbinding kunnen leggen. Dit kan met de methode INDIRECT:
eng*.odhs.dsd.com CHOOSER \ dsdapps.odhs.dsd.com \ dbsrv.odhs.dsd.com \ test.odhs.dsd.comDeze instelling geeft toegang tot de applicatie-, database- en test servers voor alle engineers via een keuzemenu.
Het bestand Xaccess laat het verder toe macro's te definiëren voor logisch te groeperen machines. Hieronder een voorbeeld met een macro die gebruik maakt van de instelling als hierboven gegeven:
%ENGHOSTS dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com test.odhs.dsd.com eng*.odhs.dsd.com CHOOSER %ENGHOSTSDe presentatie van het keuzemenu kan verder in worden gesteld door waarden in het bestand Xresources te veranderen.
# init 5Hiermee gaat het systeem naar run level 5. xdm start meestal automatisch op dit niveau. Als het dat niet doet, kijk dan eens in /etc/inittab. Daarin staat op welk niveau xdm wordt gestart (Slackware bijvoorbeeld laat het soms op niveau 4 starten maar de meeste mij bekende distributies houden het op 5). Als het goed is zie je nu het xlogin programma en kun je je aanmelden en je instellingen uittesten. Als je zeker weet dat je alles volgens het boekje hebt gedaan en xdm reageert nog steeds niet naar behoren, ga dan naar de oplossingen-paragraaf hieronder.
In het andere geval kun je nu gaan prutsen aan je individuele instellingen. Wanneer je eenmaal xdm geheel naar wens hebt ingesteld kun je de instelling van je machine, in /etc/inittab, als volgt veranderen zodat deze tijdens opstarten naar niveau 5 gaat in plaats van 3. Verander :
id:3:initdefault:in
id:5:initdefault:Dit laat Linux altijd opstarten in run level 5, wat op zijn beurt het opstarten van xdm tot gevolg heeft.
Het login menu verschijnt niet op het scherm
Hoogstwaarschijnlijk een instellingsfout. Je test dit toch wel uit voordat je opstart met run level 5, toch?Je login is correct maar het login menu verschijnt weer
Het kan zijn dat je bestand .xsession niet uitvoerbaar is (geen execute rechten). Probeer nog een keer in te loggen maar toets nu CTRL-RETURN in na het invoeren van je wachtwoord (in plaats van gewoon 'return'). Daarmee wordt het script .xsession niet uitgevoerd en krijg je een enkel terminal-scherm van waaruit je het volgende commando kan geven:# chmod +x .xsessionen het opnieuw proberen.
Na inloggen knippert het scherm kort en het login-menu verschijnt weer
Gebruik de hierboven beschreven methode om .xsession te omzeilen en kijk of het laatste commando in dit bestand op de voorgrond wordt gestart.