1. De hiërarchie van het bestandssysteem
[ Inleiding | Locatie van de boomstructuren | In de boomstructuur | Buiten de boomstructuur | Te doorzoeken locaties toevoegen ]1.1 Inleiding
KDE bepaalt een hiërarchie binnen het bestandssysteem, die zowel door KDE zelf als door KDE-toepassingen gebruikt en gerespecteerd wordt. Algemeen gesproken gaat het om een eenduidige, vastgelegde mappenstructuur. Meestal zijn er daarvan twee: eentje op systeemniveau en eentje op gebruikersniveau, in de persoonlijke map van de gebruiker. Als systeembeheerder kan je echter bijkomende structuren aanmaken.
KDE en KDE-toepassingen zoeken bestanden door de verschillende mappenstructuren te doorzoeken. Die structuren [nvdv: ik noem ze vanaf nu gewoon directory trees, want echt natuurlijk klinkt ons fijne Nederlands niet altijd] zijn onderling gekenmerkt door een volgorde van prioriteit. Als een bestand aanwezig is in meerdere directory trees, dan krijgt het bestand in de eerstvermelde tree de voorkeur. Normaalgesproken is de tree die zich in de persoonlijke map van de gebruiker bevindt degene met de hoogste prioriteit. Alleszins is het ook daar dat wijzigingen opgeslagen zullen worden.
Ietwat anders gaat het met configuratiebestanden. Worden meerdere configuratiebestanden gevonden met dezelfde naam, dan wordt hun inhoud samengevoegd. Toch speelt ook hier de volgorde van prioriteit een rol: als twee bestanden dezelfde sleutel bepalen, dan zal het bestand met de hoogste voorkeur de waarde voor die sleutel instellen.
1.2 Locatie van de boomstructuren
De locatie van KDE's directory trees wordt bepaald door een aantal omgevingsvariabelen. In KDE 2.x waren er twee, sinds KDE 3.x zijn er daar nog twee bijgekomen.
Omgevingsvariabelen in KDE 2.x:
- $KDEHOME
Deze omgevingsvariabele bepaalt de plaats van de boomstructuur op gebruikersniveau en wordt door KDE(-toepassingen) gebruikt bij het aanmaken en bewaren van bestanden. De tree heeft de hoogste graad van prioriteit; bestanden of instellingen die op dit niveau aangetroffen worden, zullen vóó de bestanden of instellingen die in andere trees gevonden worden gelden.
Zoals de naam van de variabele al aangaf, zal deze directory tree zich normaalgesproken in de persoonlijke map van de gebruiker bevinden. Wordt de variabele niet van een nieuwe definitie voorzien, dan is de standaardlocatie $HOME/.kde.
Als de variabele een waarde bevat die met een tilde begint (~), dan wordt die tilde at runtime vervangen door de persoonlijke map van de gebruiker. Let erop dat er correcte quotes gebruikt worden, anders zou de shell die substitutie al kunnen doorvoeren, wat ongewenst gedrag kan opleveren in combinatie met su.
- $KDEDIR
Deze omgevingsvariabele bepaalt de plaats van de boomstructuur op systeemniveau. Alle gegevensbestanden (icoontjes, geluidsbestanden, bestanden die het menu vormgeven etcetera) die KDE-toepassingen vergezellen, worden normaalgezien in deze directory tree geïnstalleerd.
Bijkomende omgevingsvariabelen in KDE 3.x:
- $KDEROOTHOME
Vanaf KDE 3.x werd de omgevingsvariabele $KDEROOTHOME geïntroduceerd, om problemen te voorkomen waarbij toepassingen die onder de root-gebruiker draaien ook bestanden met root-privileges opslaan in de persoonlijke map van de gebruiker. Toepassingen die onder uid 0 (root) draaien, zullen deze variabele dus gebruiken om te weten te komen waar de gebruikersmap zich bevindt en waar ze hun bestanden mogen opslaan. Wordt deze variabele niet vastgelegd, dan wordt de persoonlijke map van de root-gebruiker opgezocht in het password-bestand. Daaraan wordt ".kde" toegevoegd, zodat het standaard om /root/.kde/ gaat.
- $KDEDIRS
Sinds KDE 3.x is het mogelijk om meer dan één directory tree op systeemniveau op te geven. Zo kan je groepen van gebruikers een specifieke directory tree toewijzen, die bijvoorbeeld bijkomende toepassingen bevat, speciale bronnen voor bepaalde toepassingen of een specifiek geheel van standaardinstellingen die voor die gebruikersgroep het best geschikt is. Het is beter om standaardinstellingen op deze manier vast te leggen (en niet via een /etc/skel-kluwen), omdat je zo ook wijzigingen aan de standaardconfiguratie kan toebrengen nadat gebruikers aangemaakt zijn.
De mappen die je in $KDEDIRS opgeeft, scheidt je met een dubbele punt (:). De directories worden opgesomd in volgorde van prioriteit: de eerste geldt als de belangrijkste, de laatste heeft de laagste voorkeur. Omdat een directory tree voor een groep van gebruikers normaalgezien de instellingen op systeemniveau zou moeten overschrijven, wordt de directory tree op groepsniveau dus best vóór de tree op systeemniveau vermeld.
Blijft de variabele $KDEDIRS onbepaald, dan wordt de locatie van $KDEDIR gebruikt.
Om toepassingen van KDE 2.x in een KDE 3.x-omgeving te gebruiken, moet je $KDEDIR naar de plaats van de KDE 2.x-installatie en $KDEDIRS naar de plaats van de KDE 3.x-installatie laten verwijzen.
In de dagelijkse communicatie wordt met $KDEHOME naar de directory tree op gebruikersniveau verwezen en met $KDEDIR naar de tree op systeemniveau.
Voorbeeld
Een leidinggevend figuur van een universiteit zou deze instellingen kunnen hebben:
KDEHOME='~/.kde3' KDEROOTHOME='/root/.kde3' KDEDIRS='/opt/kde_staff:/opt/kde3'
In dat voorbeeld worden gebruikersinstellingen opgeslagen in de map .kde3 in de persoonlijke map van de gebruiker. Toepassingen die als root draaien, bewaren hun instellingen in /root/.kde3. KDE 3 is geïnstalleerd in /opt/kde3, maar er is een bijkomende directory tree onder /opt/kde_staff. Configuratiebestanden die zich daar bevinden, zullen een hogere prioriteit bezitten dan de bestanden in de systeemmappen onder /opt/kde3. /opt/kde_staff zou bijkomende toepassingen kunnen bevatten, die enkel voor belangrijke personen beschikbaar zouden mogen zijn.
[terug naar boven]1.3 In de boomstructuur
Elke directory tree waarvan KDE gebruik maakt, is gekenmerkt door een vaste structuur. Mappen die niet relevant zijn voor een bepaalde tree kunnen echter weggelaten worden: de mappen die gebruikt worden voor het bewaren van tijdelijke bestanden vind je bijvoorbeeld meestal onder $KDEHOME terug, maar niet in de andere trees.
KDE voegt de submappen in de verschillende boomstructuren samen en gebruikt het geheel als één enkele KDE-bron. De namen van KDE-bronnen (KDE resources) worden hieronder in tabellen beschreven.
Het gaat grofweg om drie grote categorieën: bestanden die specifiek gelden voor de CPU/architectuur, bestanden die gebonden zijn aan de betreffende host en bestanden die noch met de host, noch met de CPU, noch met de architectuur onlosmakelijk verbonden zijn.
CPU/architectuur-specifieke mappen:
| Map | KDE-bron | Beschrijving |
|---|---|---|
| bin/ | exe | Voor uitvoerbare bestanden van KDE. |
| cgi-bin/ | cgi | CGI-scripts die door het KDE Help Center gebruikt kunnen worden. |
| lib/ | lib | Voor KDE-bibliotheken. |
| lib/kde3/ | module | Voor componenten, plugins en andere objecten die at runtime gebruikt kunnen worden door KDE 3.x-toepassingen. |
Host-specifieke mappen:
Deze mappen zijn enkel beschikbaar onder $KDEHOME en zijn normaalgezien gesymlinked naar plekken buiten de $KDEHOME-tree.
| Map | KDE-bron | Beschrijving |
|---|---|---|
| socket-<HOSTNAME> | socket | Deze map bevat communicatie-sockets. Het bestandssysteem waarvan $KDEHOME gebruik maakt kan daartoe ongeschikt zijn, daarom verwijst deze map standaard naar een andere locatie. |
| tmp-<HOSTNAME> | tmp | Deze map bevat tijdelijke bestanden. Het bestandssysteem waarvan $KDEHOME gebruik maakt, zou zich op het netwerk kunnen bevinden. Om systeemprestaties niet onnodig negatief te beïnvloeden, verwijst deze map standaard naar een andere, lokaal gelegen plek. |
| cache-<HOSTNAME> | cache | Nieuw in KDE 3.2. Deze map bevat gecachete informatie, zoals HTTP-objecten, geformateerde help-pagina's en de cache van de systeemconfiguratie (ksycoca). Deze informatie is niet strikt noodzakelijk, daarom verwijst deze map standaard naar een andere locatie buiten $KDEHOME, om het maken van reservekopieën niet nodeloos te bemoeilijken en om schijfruimte te besparen. |
En verder...
De meerderheid van de systeemmappen bevat gegevens die niet specifiek CPU/architectuur- of hostgebonden zijn. Al deze mappen worden voorafgegaan door /share.
| Map | KDE-bron | Beschrijving |
|---|---|---|
| share/applnk/ | apps | Bevat .desktop-bestanden die het KDE-menu beschrijven. |
| share/apps/ | data | Bevat toepassingsspecifieke gegevens. Elke toepassing heeft hier een eigen submap waarin hij zijn bestanden kan bewaren. |
| share/config/ | config | Bevat configuratiebestanden. Configuratiebestanden worden meestal genoemd naar de toepassing waartoe ze behoren, gevolgd door "rc". Er zijn ook component-specifieke bestanden, waarheen dus verwezen wordt door alle toepassingen die van die component gebruik maken. Een geval apart is kdeglobals, dat door alle KDE-toepassingen ingelezen wordt. |
| share/config/session/ | - | Deze map wordt gebruikt bij het sessiebeheer en is normaalgezien enkel voorhanden onder $KDEHOME. Aan het einde van een sessie bewaren KDE-toepassingen hier hun status. De bestandsnamen beginnen met de toepassingsnaam, gevolgd door een getal. De sessie-beheerder, ksmserver, slaat verwijzingen naar deze getallen op bij het bewaren van sessies in ksmserverrc. |
| share/doc/HTML/ | html | Bevat de documentatie van KDE-toepassingen. Documentatie wordt gecategoriseerd volgens taal en naar de toepassingen waartoe hij behoort. Normaalgezien bevat deze map minstens twee bestanden: "index.docbook", dat de documentatie in ongeformateerd DocBook-formaat bevat, en "index.cache.bz2", dezelfde documentatie in de vorm van met bzip2 gecomprimeerd HTML. De HTML-versie wordt gebruikt door khelpcenter. Is de HTML-versie niet beschikbaar, dan wordt die opnieuw gegenereerd op basis van de DocBook-versie, maar dat vergt wat tijd. |
| share/icons/ | icon | Bevat iconen, gecategoriseerd volgens uiterlijke stijl, afmetingen en gebruikscategorie. |
| share/mimelnk | mime | Bevat .desktop-bestanden die mimetypes beschrijven. |
| share/services/ | services | Bevat .desktop-bestanden die "services" beschrijven. "Services" en toepassingen lijken erg op elkaar; het belangrijkste verschil is dat services normaalgezien enkel gebruikt worden door toepassingen of door andere services, terwijl toepassingen meestal door de gebruiker eigenhandig opgestart worden. Services worden niet opgesomd in het KDE-menu. |
| share/servicetypes/ | servicetypes | Bevat .desktop-bestanden die "servicetypes" beschrijven. Een "servicetype" staat meestal voor een bepaalde programmeer-interface. Toepassingen en services beschrijven in hun .desktop-bestanden welk servicetype ze aanbieden. |
| share/sounds/ | sound | Bevat geluidsbestanden. |
| share/templates/ | templates | Bevat sjablonen voor verschillende bestandtypes. Een sjabloon (template) bestaat uit een .desktop-bestand dat het bestandtype beschrijft en een verwijzing bevat naar een ander bestand in de submap .source. De sjablonen in deze map verschijnen in het menu onder "Create New..." ("Nieuw..."), beschikbaar op het bureaublad en in de bestandsbrowser Konqueror. Wanneer de gebruiker een sjabloon kiest, wordt het bronbestand gekopieerd. |
| share/wallpapers/ | wallpaper | Bevat afbeeldingen die gebruikt kunnen worden als bureaublad-achtergrond. |
[terug naar boven]
1.4 Buiten de boomstructuur
Zoals hogerop reeds gezegd werd, zijn er drie host-specifieke mappen die meestal middels een symlink naar andere locaties verwijzen. Als die locaties niet bestaan, zullen onderstaande symlinks en mappen aangemaakt worden met lnusertemp. Omdat zowel /tmp als /var/tmp world writable (door eender wie beschrijfbaar) zijn, bestaat de kans dat de mappen al bestaan, maar een andere gebruiker toebehoren. In dat geval zal lnusertemp een nieuwe map met een alternatieve naam aanmaken, en dan natuurlijk daarheen laten verwijzen.
| Symlink | Verwijst naar... | Beschrijving | Aangemaakt met... |
|---|---|---|---|
| $KDEHOME/socket-<HOSTNAME> | /tmp/ksocket-<GEBRUIKER>/ |
Maakt een map aan voor lokale communicatie-sockets en een symlink die daarheen verwijst. De samengevoegde lengte van de naam van de map en eender welke communicatie-socket mag niet langer zijn dan 106 tekens. Standaard wordt deze map aangemaakt onder /tmp; je kan andere locaties instellen door middel van de omgevingsvariabele $KDETMP. |
lnusertemp socket |
| $KDEHOME/tmp-<HOSTNAME> | /tmp/kde-<GEBRUIKER>/ |
Maakt een map aan voor tijdelijke bestanden en een symlink die daarheen verwijst. Ter wille van de prestatie van het systeem is het aan te bevelen deze map op een lokaal bestandssysteem te hebben, maar dat is niet strikt noodzakelijk. In KDE versies tot en met KDE 3.1 bevindt zich hier ook de cache van de systeemconfiguratie (ksycoca en ksycocastamp). Het is aan te bevelen deze bestanden NIET te verwijderen bij het opstarten van het systeem, omdat dat het opstarten van KDE erg zal vertragen. Standaard wordt deze map aangemaakt onder /tmp; je kan andere locaties instellen door middel van de omgevingsvariabele $KDETMP. |
lnusertemp tmp |
| $KDEHOME/cache-<HOSTNAME> | /var/tmp/kdecache-<GEBRUIKER>/ |
Nieuw in KDE 3.2. Maakt een map aan voor cache-bestanden en een symlink die daarheen verwijst. Ter willen van de prestatie van het systeem is het aan te bevelen deze map op een lokaal bestandssysteem te hebben, maar dat is niet strikt noodzakelijk. Sinds KDE 3.2 bevindt zich hier ook de cache van de systeemconfiguratie (ksycoca en ksycocastamp). Standaard wordt deze map aangemaakt onder /var/tmp; je kan andere locaties instellen door middel van de omgevingsvariabele $KDEVARTMP. |
lnusertemp cache |
KDE maakt gebruik van twee belangrijke bestanden die zich buiten de KDE-boomstructuren bevinden en die deel uitmaken van KDE's desktop communication protocol DCOP. Het gaat om volgende bestanden:
- $HOME/.ICEauthority
Dit bestand bevat access tokens voor DCOP. Toepassingen moeten geschikte access tokens kunnen voorleggen om via DCOP en de dcopserver met andere toepassingen te kunnen communiceren. Wanneer de dcopserver gestart wordt, zal hij een nieuw access token genereren en opslaan in dit bestand. Met de omgevingsvariabele $ICEAUTHORITY kan je een ander bestand voor dit doel bestemmen.
- $HOME/.DCOPserver_$HOSTNAME_$DISPLAY
Dit bestand bepaalt hoe de dcopserver van een bepaalde host en voor een bepaalde X display benaderd moet worden. Sinds KDE 3.1.4 kan je met de omgevingsvariabele $DCOPAUTHORITY kan je een ander bestand voor dit doel bestemmen. Merk echter op dat elke gelijktijdige KDE-sessie een eigen, uniek bestand moet hebben.
In de context van een Kiosk-omgeving kan het nuttig zijn om persoonlijke mappen read-only (enkel-lezen) te maken. In dat geval moeten $ICEAUTHORITY en $DCOPAUTHORITY naar beschrijfbare locaties verwijzen, want KDE zal weigeren op te starten als de persoonlijke map niet beschrijfbaar is. Sinds KDE 3.1.4 kan je dat gedrag vermijden door de omgevingsvariabele $KDE_HOME_READONLY in te stellen op eender welke niet-lege waarde.
Er zijn meldingen bekend die erop wijzen dat persoonlijke mappen die gemount zijn op bepaalde versies van Netware-bestandssystemen geen hardlinks ondersteunen. Dat veroorzaakt problemen bij het genereren van $HOME/.ICEauthority en leidt dus tot de onmogelijkheid om in te loggen in KDE. Je kan de situatie oplossen door $ICEAUTHORITY naar een bestand buiten de persoonlijke map te laten verwijzen, bijvoorbeeld ergens onder /tmp. Merk op dat elke gebruiker zijn eigen unieke bestand moet hebben.
[terug naar boven]1.5 Te doorzoeken locaties toevoegen
KDE-toepassingen zoeken gegevens op door middel van de resource names (bronnen-namen) die reeds beschreven werden in de sectie In de boomstructuur. KDE zal deze namen omzetten naar eigenlijke mappen, door de locaties van mappenstructuren te combineren met de mappen die opgesomd werden in de hogerop opgestelde tabellen.
Voorbeeld
Een gebruiker heeft volgende instellingen van directory trees:
KDEHOME='~/.kde3' KDEDIRS='/opt/kde_staff:/opt/kde3'
Zoekt een toepassing nu naar een "wallpaper"-bestand, dan wordt aan elk van de vermelde directory trees share/wallpapers/ toegevoegd. Daarna worden alle resulterende mappen op het bestand doorzocht:
- ~/.kde3/share/wallpapers/
- /opt/kde_staff/share/wallpapers/
- /opt/kde3/share/wallpapers/
Door meer directory trees aan de omgevingsvariabele $KDEDIRS toe te voegen, kan je meerdere mappen laten doorzoeken. Vaak is het wenselijk om maar één enkele map voor een zoektocht toe te voegen en geen hele mappenstructuur. Afzonderlijke mappen kan je toevoegen in het configuratiebestand kdeglobals, in de sectie "Directories". Wijs daartoe één of meerdere mappen toe aan de sleutel "dir_", gevolgd door de naam van de KDE-bron. Meerdere mappen scheid je met een komma (,).
Voorbeeld
Om de map /data/photos toe te voegen aan de systeembron "wallpapers", zet je deze twee lijnen in kdeglobals:
[Directories] dir_wallpaper=/data/photos
Wanneer een toepassing nu op zoek gaat naar "wallpaper"-bestanden, dan zal hij deze locaties raadplegen:
- /data/photos
- ~/.kde3/share/wallpapers/
- /opt/kde_staff/share/wallpapers/
- /opt/kde3/share/wallpapers/
[ Terug naar de inhoudsopgave | Verder naar sectie 2, "Configuratiebestanden" ] Over deze site | Laatst gewijzigd: 22 juni 2004, 13:11 door: Tom Verbreyt