Unilogo
 
 
Common Desktop Environment
beim Einsatz in heterogenen verteilten Systemen

Sven Dickert
 
Diese Ausarbeitung ist unter der Betreuung von Andreas Ley
am Rechenzentrum der Universität Karlsruhe entstanden.

Zusammenfassung:

Das Common Desktop Environment (CDE) bietet eine graphische Benutzeroberfläche für verschiedene UNIX-Derivate. Eine benutzerfreundliche Bedienung, einfache Konfigurierbarkeit und eine einheitliche, wiedererkennbare Benutzerführung zeichnen das System aus. Diese Studienarbeit beschäftigt sich mit der Anpassung von CDE an den Rechnerraum-Betrieb des Rechenzentrums der Universität Karlsruhe. Neben dieser schriftlichen Ausarbeitung und den Konfigurationsdateien gehört ein Benutzer-Handbuch zum Umfang der Studienarbeit.


Inhalt

Einleitung

Die Gründe, welche für den Einsatz von graphischen Benutzeroberflächen sprechen, sind hinlänglich bekannt. Mit dem Common Desktop Environment (CDE) haben sich die Hersteller International Business Machines Corp. (IBM), Hewlett-Packard Company (HP), Sun Microsystems, Inc. (Sun) sowie Novell, Inc. (Novell) auf eine gemeinsame graphische Benutzeroberfläche (engl. desktop) für ihre UNIX-Derivate geeinigt. CDE wurde 1993 zunächst im Rahmen der Common Open Software Environment Initiative (COSE) von diesen Herstellern für heterogene Systeme spezifiziert. 1995 kam Version 1.0 heraus. Später beteiligten sich unter dem Dach der Open Software Foundation (OSF) noch Digital, Fujitsu und Hitachi als Lizenznehmer für CDE. Momentan ist CDE für sehr viele weitere Plattformen erhältlich.

Motivation

CDE bietet sich am Rechenzentrum der Universität Karlsruhe (RZ) als Desktop an, da hier Rechner der Hersteller HP und IBM in verschiedenen Rechnerräumen eingesetzt werden. Beide Hersteller pflegen ihre UNIX-Derivate, so daß kommerzielle Unterstüzung für CDE erwartet werden kann. Bisher wird auf allen Rechnern der Motif-Windowmanager (mwm) verwendet. Die Rechner von HP verwenden HP Visual User Environment (HP-VUE). CDE beruht sowohl auf HP-VUE als auch auf Motif, was eine Migration erleichtert. CDE unterstützt die Bestrebungen der Administration, ein einheitliches Aussehen der Benutzeroberfläche über die Derivatgrenzen hinaus zu schaffen. CDE ist flexibel und durch den objektorientierten Ansatz bei der Konfiguration jederzeit um Funktionen zu erweitern. Gegenüber anderen Desktop-Varianten zeichnet sich CDE durch eine höhere Funktionalität oder aber zumindest durch höhere Stabilität aus. Desweiteren ist CDE auf den Rechnern der oben aufgeführten Hersteller erpobt und muß nicht nachträglich angepaßt werden.

  
Vorgenommene Anpassungen

Benutzung der Anpassungen

Um CDE im Rahmen der RZ-Installation verwenden zu können, müssen sich die beiden symbolischen Links

/etc/dt/config -> /usr/segment/dt/config

/etc/dt/palettes -> /usr/segment/dt/palettes

und eine intakte Baumschulen-Installation [3] auf einem HP-UX 10.20 oder AIX 4.1 Rechner befinden. Weitere Dateien in /etc/dt ergänzen die Konfiguration maschinen-lokal, zählen aber nicht zur RZ-Installation und müssen ggf. entfernt werden.

Integration in den RZlogin

Der RZlogin erweitert den xdm (X Display Manager) um

Von CDE wird ein ähnlich erweitertes Programm angeboten. Dieses dtlogin bietet zusätzlich noch die Möglichkeit, die Sprache einer Sitzung festzulegen. Da diese Option hier kaum Verwendung findet und die Benutzer bereits an RZlogin gewöhnt sind, wurde der Sitzungsverlauf des CDE in den RZlogin integriert. Der Ablauf einer Sitzung gestaltet sich nun folgendermaßen (siehe dazu auch Abbildung Loginvorgang):
  
Abbildung: Anmeldung am System mit RZlogin integriert ins CDE

Login


1.
Start des RZlogin (/usr/machine/lib/rzlogin/bin/xdm) vom init-Prozeß. Dieser zeigt den RZgreet auf allen angeschlossenen Bildschirmen an, wie in /usr/machine/lib/rzlogin/config/Xaccess und /usr/machine/lib/rzlogin/config/Xservers geregelt.
2.
Erfolgreiche Authentifizierung und Sitzungswahl. Standard ist die CDE-Sitzung, wie das in /usr/machine/lib/rzlogin/config/Xconfig je nach Typ des angeschlossenen Bildschirms festgelegt ist.
3.
RZlogin startet nun /usr/machine/lib/rzlogin/config/Xsession mit dem Sitzungstyp (Dt) als erstes Argument. Im Xsession wird zunächst /usr/dt/bin/dthello gestartet, um dem Benutzer zu vermitteln, daß der Anmeldevorgang vorankommt.
4.
Als letztes startet Xsession ein angepaßtes /usr/machine/dt/bin/Xsession(CDE) als Shell-Skript. Von hier werden die weiteren CDE-Prozesse gestartet, wie in [1] Kapitel 2 beschrieben.

Nach Beendigung der Sitzung startet der RZlogin wieder einen RZgreet und der Ablauf beginnt wieder bei 1. Diese Vorgehensweise ersetzt die Programme /usr/dt/bin/dtlogin und /usr/dt/bin/dtgreet vollständig. Diese, sowie alle Dateien /usr/dt/X*, können ggf. entfernt werden.

  
Zusammenstellen von Anwendungen für den Anwendungsmanager

Bei jeder Anmeldung beim System werden von dtappgather die installierten Anwendungen gesammelt. Die Umgebungsvariable DTAPPSEARCHPATH enthält den Anwendungssuchpfad für registrierte Anwendungen. Dtappgather erstellt daraus ein Verzeichnis unter /var/dt mit symbolischen Links auf die registrierten Anwendungen. Diese symbolischen Links werden pro Benutzer und pro Bildschirm lokal auf jedem Rechner in /var/dt erstellt. Mit wachsender Anzahl von Benutzern wächst also auf jeder Maschine /var/dt linear an. Manche Rechner besitzen mehrer Bildschirme, so daß sich im schlechtesten Fall Anzahl(Benutzer)*Anzahl(Bildschirme) Verzeichnisse mit symbolischen Links auf jeder Maschine ansammeln können. Dieser Aufwand ist aber für das Rechenzentrum nicht notwendig. Es befinden sich auf allen Rechnern mit derselben Betriebssystemarchitektur dieselben Anwendungen. Weiter sind auf allen Rechnern die benutzereigenen Verzeichnisse vorhanden. In diesen sind die Konfigurationsdaten der Benutzer gut aufgehoben.

/usr/machine/dt/bin/dtappgather ersetzt nun das /usr/dt/bin/dtappgather in der Weise, daß die symbolischen Links nicht mehr unter /var/dt pro Benutzer und pro Bildschirm auf jeder Maschine gespeichert werden, sondern mit Hilfe der Umgebungsvariable SYSTEMTYPE nur pro Architektur unter $HOME/.dt/appmanager-$SYSTEMTYPE, also innerhalb der Benutzer-Verzeichnisse.

Dazu muß der Anwendungsmanager auf die neue Lage der symbolischen Links verwiesen werden. Der Anwendungsmanager ist nichts anderes als ein Dateimanager mit Aufruf-Parametern, die auf die Lage dieses speziellen Verzeichnisses mit den symbolischen Links hinweisen. In /usr/segment/dt/appconfig/types/C/overload.dt werden diese Aufruf-Parameter entsprechend gesetzt.

Durch diese Vorgehensweise spart man sich die Verwendung des SUID-Programmes /usr/dt/bin/dtappgather, welches gelöscht werden kann, /var/dt wird nun nicht mit persönlichen Daten der Benutzer belastet.

Setzen von Umgebungsvariablen

Während der Anmeldung beim System werden verschiedene Skripte und Programme ausgeführt. Alle zusammen erzeugen das Environment, welches nach dem Anmeldevorgang jeder Prozeß bekommt. Mit Hilfe des Environmentes und der Ressourcen kann man die Funktion von CDE beeinflussen. Deshalb soll hier gezeigt werden, welche Umgebungsvariablen in welchem Ablaufschritt, von welchem Prozeß und wie gesetzt werden.

init (nur unter AIX)

Der Init-Prozeß gibt jedem Kindprozeß die Variablen aus /etc/environment ins Environment mit. Änderungen sind nach jedem erneuten Prozeßstart sofort wirksam. Gesetzt werden PATH, TZ, LANG, LOCPATH, NLSPATH sowie ODMDIR.

RZlogin

Setzt wie jeder andere xdm oder der dtlogin die Variablen:

DISPLAY
je nach angeschlossenem Bildschirm
HOME, USER und SHELL
je nach Eintrag in /etc/passwd
PATH
auf /bin:/usr/bin:/usr/bin/X11:/usr/ucb für normale Benutzer und /etc:/bin:/usr/bin für den Benutzer root
Änderungen müssen im Quellcode durchgeführt werden und sind erst nach erneuter Installation des Programmes sowie erneuter Anmeldung beim System wirksam.

Xsession

Setzt die Variablen:

LOGNAME
auf $USER
MAIL
je nach Betriebssystem
Änderungen werden nach erneuter Anmeldung beim System wirksam.

profile

Das /etc/profile wird sowohl von den textuellen als auch von den graphischen Anmelde-Mechanismen verwendet. Dabei werden folgende Variablen gesetzt:

SYSTEMTYPE, CCOPTS, FCOPTS
je nach Betriebssystem
PATH, MANPATH, XFILESEARCHPATH
auf die Baumschule und betriebssystemabhängig
EDITOR, FCEDIT, VISUAL, EXINIT
für den vi
WWW_HOME und *_proxy
für WWW-Programme (alle Variablen, die auf ``_proxy'' enden und WWW_HOME)

MM_CHARSET
auf iso-8859-1
TZ
wie es in /etc/rc.values gesetzt ist
ENV und KSHRC
wird so auf /etc/kshrc gesetzt, daß dies nur bei interaktiven Eingabe-Aufforderungen (shell) durchlaufen wird
VPPHOME, NZ55HOME und RZANWHOME
je nach Benutzernamen
HOSTNAME und HOST
auf den Namen des Rechners
USER
auf $LOGNAME

Hier werden viele Umgebungsvariablen aus den obigen Schritten nochmals gesetzt, da sich das profile zentral auf alle Anmelde-Mechanismen bezieht. Eine Entflechtung von textueller und graphischer Anmeldung beim System würde auch das profile übersichtlicher gestalten. Auch könnte man anwendungsspezifisches Environment wie für den vi oder die WWW-Programme in entsprechende Aufrufskripte der Programme selber stecken. Änderungen werden nach erneuter Anmeldung beim System wirksam.

Prefer

Prefer wird vom Profile aufgerufen und setzt folgende Umgebungsvariablen:

SHELL
auf die Eingabeaufforderung (shell), Standard ist ksh
EDITOR
auf einen Text-Editor bei graphischer Anmeldung beim System, Standard ist vi. Diese Variable wird von Xsession(CDE) neu gesetzt.
PAGER
auf ein Programm zur seitenweisen Anzeige von Textdateien, Standard ist more
LC_CTYPE
auf einen Sprachkatalog. Diese Variable wird von Xsession(CDE) zur Ergänzung der Internationalisierung neu gesetzt.

Xsession(CDE)

Ist für die meisten Environment-Anpassungen zuständig und führt auch die benutzerspezifischen und weitere globale Konfigurationsdateien aus. Folgende Variablen werden gesetzt:

EDITOR
auf dtpad, da unter X11 der vi nicht ohne xterm funktioniert
LC_CTYPE
je nach Betriebssystem zur Ergänzung der Internationalisierung, siehe Kapitel Internationalisierung
TERM
auf dtterm
SESSION_SVR
auf den Namen des Rechners
DTSCREENSAVERLIST
auf die Aktions-Definitionen für mögliche Screensaver
DTUSERSESSION
auf $SYSTEMTYPE und damit betriebssystemabhängig. Dadurch werden die temporären Dateien des Hilfefensters in $HOME/.dt/help/$SYSTEMTYPE abgelegt. So werden diese nicht pro Rechner und Bildschirm neu erzeugt, sondern nur noch pro Betriebssystemarchitektur.
DTHELPUSERSEARCHPATH
auf die deutsche Dokumentation, wie das in Kapitel Internationalisierung beschrieben ist
DTSPSYSAPPHOSTS und DTSPSYSICON
zeigen auf /usr/segment. Damit spart man sich den Link von /etc/dt/appconfig ins /usr/segment/dt.
DTLOADRESOURCES
zeigt auf /usr/dt/bin/dtsession_res, welches die Ressourcen wie in Kapitel Xressourcen beschrieben, vermischt. Hier kann dem Sitzungsmanager ein beliebiges Programm oder Skript zur Ressourcenverwaltung untergeschoben werden.
Änderungen werden nach erneuter Anmeldung beim System wirksam.

sys.dtprofile oder .dtprofile

Bei der ersten Anmeldung beim System wird aus /usr/segment/dt/config/sys.dtprofile das $HOME/.dtprofile. Diese Datei wird von Xsession(CDE) ausgeführt. Darin stehen folgende Variablen:

DTSOURCEPROFILE
true oder false. Entscheidet ob $HOME/.profile ausgeführt wird. Eingestellt ist false, da nicht abzusehen ist, ob das .profile vom Benutzer für graphische Anmeldungen beim System vorbereitet wurde.
DTSTARTIMS
true oder false. Diese Variable entscheidet, ob bei erneuter Anmeldung beim System die letzte Sitzung restauriert wird. So werden alle beim Beenden der Sitzung aktiven Programme wieder gestartet. Eingestellt ist true wie bei CDE und auch HP-VUE üblich.
SPUSER und VPPUSER
geben an, welcher Benutzernamen für die Aktionen SPLogin oder VPPLogin verwendet wird. Sind diese Variablen leer, wird der Wert von $LOGNAME verwendet.
DTHELPUSERSEARCHPATH
ist auf deutschsprachige Online-Dokumentation von Xsession(CDE) gesetzt. Um ausschließlich englische Dokumentation zu bekommen, muß diese Variable von .dtprofile gelöscht werden.
Änderungen werden nach erneuter Anmeldung beim System wirksam und werden vom jedem Benutzer selbst durchgeführt. Die Datei ist weitgehend kommentiert.

Xsession.d/

Xsession.d ist ein systemweites Verzeichnis. Skripte darin werden von Xsession(CDE) ausgeführt. Hier wird XMBINDDIR gesetzt. In diesem Verzeichnis sucht Motif nach xmbind.alias und anderen virtuellen Bindungen, in denen festgelegt wird, wie Motif auf Tastatur- oder Mauseingaben reagiert.

dtsearchpath

wird von Xsession(CDE) gestartet und verändert folgende Variablen:

MANPATH
wird um /usr/dt/man erweitert.
DTAPPSEARCHPATH,
 
XMICONSEARCHPATH,
 
XMICONBMSEARCHPATH,
 
DTHELPSEARCHPATH
werden alle wie im Xsession(CDE) gesetzt und jeweils um /usr/segment erweitert.
Alle Änderungen werden durch die Steuerungsvariablen in Xsession(CDE) gemacht und nach erneuter Anmeldung beim System sichtbar.

Setzen von Ressourcen

Die von IBM und HP ausgelieferten Versionen des CDE unterscheiden sich in Ressourcen-Definitionen. Um hier ein gleiches Aussehen und kompatible Funktion über Derivatgrenzen hinweg zu schaffen, müssen diese Definitionen einander angepaßt werden. Zunächst muß zwischen globalen X-Ressourcen und jeweils spezifischen Anwendungsressourcen unterschieden werden.

Anwendungsressourcen

Anwendungsressourcen werden erst beim Start der zugehörigen Anwendung in den X-Server geladen. Dabei wird auf die Umgebungsvariable XFILESEARCHPATH zurückgegriffen. Diese wird im profile entsprechend auf Anwendungsressourcen (app-defaults) im segment gesetzt. Für CDE ist das nicht nötig, da die entsprechenden Pfade (/usr/dt/app-defaults/$LANG/%N und /etc/dt/app-defaults/$LANG/%) in /usr/dt/lib/libDtSvc.a fest integriert sind. An diesen Ressourcen wurden speziell für CDE keine Veränderungen vorgenommen.

  
X-Ressourcen

X-Ressourcen werden am Anfang der Desktop-Sitzung einmalig vom Sitzungsmanager in den X-Server geladen und haben Vorrang vor Anwendungsressourcen. Dabei handelt es sich um mehrere Dateien (siehe auch [4] Kapitel 4.3.4 und /usr/dt/bin/dtsession_res):

/usr/dt/config/$LANG/sys.resources
ist die systemweite Orginaldatei für globale Einstellungen.
/usr/segment/dt/config/C/sys.resources
ist die segmentweite Anpassung des Rechenzentrums.
$HOME/.dt/sessions/current/dt.resources
ist die persönliche Anpassung, die vom Sitzungsmanager geführt wird.
$HOME/.Xdefaults
enthält persönliche Anpassungen des Benutzers.
Änderungen werden erst wirksam, wenn sie vom Sitzungsmanager in den X-Server geladen werden. Dies geschieht bei jeder Anmeldung beim System automatisch oder mit der Aktion ``ReloadResources''. Wie in Abbildung DesktopFarben erkennbar ist, mußten nur wenige segmentweite Anpassungen vorgenommen werden:

dtwm
ist der Windowmanager und stellt das Bedienfeld zur Verfügung. Mit Setzen von $MAIL überwacht man aktuell eingetroffene Mail. Für ein HP-VUE-ähnliches Aussehen wurden die Icons rechts oben plaziert sowie die Strategie Focus-Follows-Mouse eingestellt. Diese richtet den Fensterfokus auf die Mausposition aus. Zur weiteren Anpassung an HP-VUE wurde der Rand der Fenster auf 6 Punkte verbreitert.
dtstyle
ist der Umgebungsmanager und legt die Anzahl verwendbarer Farben fest. Anstatt Farben werden Graustufen bei Darstellung der mitgelieferten Dokumentation verwendet. Dadurch stehen mehr Farben für Anwendungen zur Verfügung.
dtsession
ist der Sitzungsmanager. Um ein automatisches Bildschirmsperren aus dem Bildschimrschoner heraus zu vermeiden, wird der Timeout auf 0 gesetzt.
dtterm
ist ein Terminalfenster. Um im heterogenen Umfeld mit weiteren Unix-Derivaten nicht auf Fehler durch fehlende Terminalbeschreibungen zu stoßen, wurde der Terminalname auf das allgegenwärtige xterm gesetzt. Die visualBell erzeugt einen optischen Blitz statt einer Tonausgabe, das ist in einem Rechnerraum wichtig, da sonst immermal wieder einer von 80 Rechnern piept. Das Blinken des Cursors und die Menüzeile wurden zu gunsten einer größeren Ähnlichkeit zu xterm abgeschaltet.
Weitere Anpassungen durch Ressourcen geschehen in /usr/segment/dt/config/C/sys.font und beziehen sich auf die Internationialisierung, siehe dazu auch Kapitel Internationalisierung. In Zusammenarbeit mit dem Umgebungsmanager werden Schriftfamilien in verschiedenen Größen definiert. Diese unterteilen sich für CDE in User- und Systemfonts. Systemfonts sind für OFS/Motif-Bedienelemente wie Menüleisten, Menüs, Schaltflächen und Beschriftungen vorgesehen. Diese Schriftfamilien werden durch die beiden folgenden Ressourcen gesetzt:

*systemFont:           für CDE-Desktopprogramme

*FontList:             für OSF/Motif-Programme

Userfonts dagegen sind für Textfelder vorgesehen. Es werden mehrere Ressourcen eingetragen:

*Font, *FontSet:       für Nicht-Motif-Anwendungen

*XmText*FontList:      für mehrzeilige OSF/Motif-Textfelder

*XmTextField*FontList: für einzeilige OSF/Motif-Textfelder

Das Wissen um diese Ressourcen erlaubt es, durchgängig eine Schriftfamile an allen Bildschirmen zu verwenden.


  
Abbildung: /usr/segment/dt/config/C/sys.resources
!##################################################################
!#
!#   Common Desktop Environment (CDE)
!#
!#   sys.resources:     The Session Resource File
!#
!#   Placed In:         /usr/segment/dt/config/$LANG/sys.resources
!#
!#
!#   Sven    01 Mar 1999  Initial Version
!#   Sven    08 Apr 1999  HelpViewer in dtwm nutzen statt externen Prozess
!#
!###################################################################

!# Absolute Pfade .. $LANG geht hier nicht!
#include "/usr/segment/dt/config/C/sys.font"

Dtwm*Mail*fileName:         $MAIL
Dtwm*iconPlacement:         Right Top
Dtwm*keyboardFocusPolicy:   Pointer
Dtwm*resizeBorderWidth:     6
Dtwm*Info*clientFunctions:     -close -maximize
Dtwm*0*helpResources:   \n\
 wsHelp*onScreen: True\n\
 wsHelp*x: 27 \n\
 wsHelp*y: 7 \n\
 wsHelp*columns: 70 \n\
 wsHelp*rows: 25 \n\
 wsHelp*helpType: 0 \n\
 wsHelp*vPCount: 7 \n\
 wsHelp*helpVolume: Intromgr\n\

!# 8 Color Icons/Desktops so wie unter HP-Ux default.
!#*0*ColorUse:  HIGH_COLOR
!#*HelpColorUse:        COLOR

!# 4 Color Icons/Desktop so wie unter AIX default.
*0*ColorUse:  MEDIUM_COLOR
*HelpColorUse:        GRAY_SCALE

!# Terminaleinstellungen
Dtterm*menuBar: False
Dtterm*blinkRate: 0
Dtterm*visualBell: True
Dtterm*termName: xterm

!# Dtsession, fuern Screenlocker abschalten.
dtsession*extension.lockTimeout:        0

!# damit xv auch kleiner Bilder sauber anzeigt.
!# kein Default .. ist zwar nuetzlich, soll der User aber selber machen,
!# wenn er es denn braucht, weil sonst zu verwirrend
!#Dtwm*xv*clientDecoration: -minimize -maximize -menu -title

RZlogin löscht versehentlich X-Ressourcen

Die Integration des RZlogin bringt es mit sich, daß Probleme mit CDE auftreten, die vorher nicht aufgetreten sind. Trotz aller Integrationsbemühungen gingen deshalb die X-Ressourcen auf anfänglich unerklärliche Weise verloren. Leider waren die Symptome dabei nicht sehr aussagekräftig:

1.
plötzliches Wegbleiben der Ressourcen nach unterschiedlicher Zeit
2.
unabhängig davon, ob und welche Programme nach der Anmeldung beim System gestartet wurden
3.
nachdem die Ressourcen durch die Aktion ``ReloadResources'' nachträglich geladen wurden, gehen die Ressourcen nicht mehr verloren
Nähere Untersuchungen haben gezeigt, daß im RZlogin weiter zu suchen ist. Ein Testdurchlauf offenbart, daß dieses Programm je Anmeldung beim System einen Prozeß unterhält. So findet der RZlogin heraus, ob die Sitzung noch läuft. Dieser Prozeß überprüft ca. alle 15 Minuten, ob der X-Server noch da ist. Dazu wird der Aufruf XSync verwendet. Überraschend zeigt sich zeitgleich damit der Verlust der Ressourcen. Dieser Aufruf hat keine bekannten Seiteneffekte, die so etwas auslösen können. Ein Blick in den vorhandenen Quellcode offenbart jedoch einen Fehler in der Programmierung: Nachdem sich der RZgreet beendet hat, versucht der RZlogin, dessen Ressourcen vom X-Server zu löschen. Dazu löscht das Programm einfach alle X-Ressourcen. Da X11 ein asynchrones Protokoll zur Anzeige verwendet, wird dieser Aufruf nicht augenblicklich ausgeführt. Er würde vermutlich nie ausgeführt werden, wenn der RZlogin den X-Server nicht mittels XSync synchronisieren würde. Aber genau das passiert durch diesen immer wiederkehrenden XSync nach den ersten ca. 15 Minuten.

Die einfachste Lösung besteht darin, direkt nach Löschen der Ressourcen im RZlogin den Befehl XSync einzufügen. Siehe dazu das angepaßte Unterprogramm DeleteXloginResources in Abbildung Behebung des Fehlers in session.c.


  
Abbildung: Behebung des Fehlers in session.c
DeleteXloginResources (d, dpy)
  struct display *d;
  Display *dpy;
  {
    int i;

    Atom prop = XInternAtom(dpy,"SCREEN_RESOURCES", True);
    XDeleteProperty(dpy, RootWindow (dpy, 0), XA_RESOURCE_MANAGER);
    if (prop)
    {
      for (i = ScreenCount(dpy); --i >= 0; )
        XDeleteProperty(dpy, RootWindow (dpy, i), prop);
    }
>   XSync(dpy);
  }

Integration von Anwendungen

Zielsetzung

Vorhandene Anwendungen werden vom Rechenzentrum über die kleine Baumschule [3] verteilt. Dies ist ein System aus Verzeichnissen, die Anwendungen lokal, segmentweit und campusweit zur Verfügung stellt. Eine solche Aufteilung wird von CDE nicht unterstützt. Eine Verteilung der Konfiguration von CDE auf verschiedene Rechner ist ebenfalls nicht vorgesehen. Hier setzt die Integration an.

Diese Arbeit beschreibt zur Anwendungsintegration die Startintegration (siehe [4] Kapitel 5.1), die Einbindung von zentralen Anwendungen wie Drucken und die Integration von speziellen Anwendungen, wie beim Dateimanager oder der eMail. Stilintegration hätte umfassende Änderungen in den Anwendungsressourcen erfordert, die volle Integration sogar Änderungen am Quellcode der Anwendungen. Beides wurde nicht angestrebt.

Startintegration von Anwendungen

In erster Linie existieren drei Möglichkeiten, um Anwendungen zu starten: auf dem Bedienfeld, in einem Arbeitsbereichsmenü oder im Anwendungsmanager. Diese Reihenfolge stellt eine Spezialisierung der Anwendungsverteilung wie in Abbildung Erreichbarkeit gezeigt dar.

Grundsätzlich kann man alle Anwendungen über den Anwendungsmanager erreichen, weniger Anwendungen über das Arbeitsbereichsmenü und am wenigsten über das Bedienfeld. Mit sinkender Anzahl der dargestellten Anwendungen steigt die Übersichtlichkeit auf dem Desktop. Das Bedienfeld präsentiert die Anwendungen, die am häufigsten benutzt werden, am übersichtlichsten. Der Anwendungsmanager zeigt alle Anwendungen, dafür aber nur durch eine umfangreich verästelte Hierarchie.


  
Abbildung: sinkende Übersichtlichkeit bei steigender Anzahl der angebotenen Anwendungen

Erreichbarkeit


Anwendungstypen

Zur weiteren Verbesserung der Übersichtlichkeit wird durchgängig nach zehn Typen von Anwendungen unterschieden:

World Wide Web
Programme wie HTML-Browser oder -Editoren
eMail
eMail Programme
News
Usenet-News Programme
Editor
Texteditoren
Office
Textverarbeitungen oder Dokumentenverarbeitungsprogramme
Graphic
Grafikeditoren oder -Anzeigeprogramme
Science
wissenschaftliche Anwendungen
Custom
Programme, um den Desktop anzupassen
Tools
Programme, die in keine der obigen Kategorien passen
Unsupported
Anwendungen und Programme, die zwar installiert sind, aber nicht zu den vom Rechenzentrum unterstützten Anwendungen gehören, wie z.B. zusätzliche Windowmanager oder Compiler

  
Abbildung: dynamische Anwendungsintegration

Dyn_Integration


  
Dynamische Anwendungsintegration

Der Anwendungsmanager wird bei jeder Anmeldung beim System dynamisch durch dtappgather (siehe Kapitel dtappgather) neu an die vorhandenen Anwendungen angepaßt. Es bleibt dem Endanwender überlassen, mit dessen Hilfe das Bedienfeld zu gestalten, siehe [2] Kapitel 4. CDE sieht eine statische Konfiguration für das Bedienfeld und das Arbeitsbereichsmenü vor. Diese kann wie in [1] Kapitel 4 beschrieben verändert werden. Leider ist das benötigte Hintergrundwissen groß, so kann kaum von allen Software-Installateuren die Kenntnis für eine solchen Konfigurationsänderung verlangt werden. Auch sind eine entsprechende Authentifizierung sowie das Mehrere-Schreiber-Problem zu bedenken. Deshalb bietet das RZ einen einfachen Mechanismus an, eine Anwendung in die drei Desktop-Elemente Bedienfeld, Arbeitsbereichsmenü und Anwendungsmanager zu integrieren.

Alle Desktop-Elemente sind optisch betrachtet in einen statischen und einen dynamischen Bereich aufgeteilt:



  statisch dynamisch
Bedienfeld die linke Seite und die untere Zeile die reche Seite
Arbeitsbereichsmenü linke und mittlere Maustaste rechte Maustaste
Anwendungsmanager alle Verzeichnisse außer ``Programs'' ``Programs''-Verzeichnis



Im statischen Bereich der Konfiguration befinden sich zentrale Dienste wie Drucken oder der Zugriff auf die zentralen Rechner und Funktionen, die vom Desktop angeboten werden. Folgende Dateien sind für die statische Konfiguration zuständig:



  Konfigurationsdateien
Bedienfeld dtwm.fp, delete.fp
Arbeitsbereichsmenü /usr/segment/dt/config/sys.dtwmrc
Anwendungsmanager overload.dt
Dateimanager datatypes.dt
allen gemeinsam rz.dt, overload.dt, user-prefs.dt



Diese Dateien sind exakt so aufgebaut wie in [1] Kapitel 13 und 14 beschrieben und können entsprechend angepaßt werden. Sie sind alle in /usr/segment/dt/appconfig/types/C/ untergebracht, wenn nicht anders angegeben.

Im dynamischen Bereich der Konfiguration befinden sich Anwendungen, die über die kleine Baumschule verteilt werden. Diese Dateien werden auf den Segment-Servern durch das Skript /usr/segment/dt/bin/dtsegintegrate erstellt. Dies ist in Abbildung Dyn_Integration gezeigt. Um dies zu erreichen, wird jede Nacht das Skript dtsegintegrate ausgeführt. Dieses sammelt alle Daten über die zu integrierenden Programme in /usr/segment/dt/config/segment/ zusammen und erstellt auf dem Segment-Server die Dateien:



  Konfigurationsdateien
Bedienfeld Dynamic_Frontpanel.fp
Arbeitsbereichsmenü /usr/segment/dt/config/dtwmrc.menu
Anwendungsmanager /usr/segment/dt/appconfig/appmanager/C/
Dateimanager Type-Actions.dt
allen gemeinsam Segment-Applications.dt



Alle Konfigurationsdateien ihrerseits befinden sich in /usr/segment/dt/appconfig/types/C/, wenn nicht anders angegeben. So wird eine zentrale Administration aller CDE-Desktop-Elemente möglich.

Das Skript /usr/segment/dt/bin/dtcheckintegrate kann interaktiv zum Testen der verschiedenen Dateien in /usr/install/segment/dt/config/segment/ verwendet werden, räumt aber auch alle Hindernisse aus dem Weg, die dtsegintegrate stören könnten. Deshalb muß dtcheckintegrate vor dtsegintegrate ausgeführt werden.


  
Abbildung: statischer Bereich des Bedienfeldes

Frontpanel statisch


Integration in das Bedienfeld

Das Bedienfeld ist in zwei Bereiche aufgeteilt:

1.
Abbildung statisches Frontpanel zeigt die fest verankerten Anwendungen wie die Uhr, Kalender, xload, Hilfefenster und Druck-Manager. Die untere Zeile des Bedienfeldes beinhaltet weitere fest verankerte Anwendungen wie xterm, dtterm, ssh, SPLogin und VPPLogin, Umgebungsmanager, Anwendungsmanager, Dateimanager, dtcalc und Manpage-Anzeigeprogramm.
2.
Der rechte Teil des Bedienfeldes (Abbildung dynamisches Frontpanel) ist dynamisch erweiterbar und umfaßt momentan die Anwendungstypen World Wide Web, eMail, News, Editor, Office, Graphic und Science.
Die Integration verlangt eine komplette Iconfamilie (siehe Kapitel IconFamilie) je Anwendung, da diese auf dem Bedienfeld graphisch dargestellt werden.


  
Abbildung: dynamischer Bereich des Bedienfeldes

Frontpanel dynamisch


Integration in das Arbeitsbereichsmenü

Das Arbeitsbereichsmenü ist ein Rolladenmenü, das man erhält, wenn man mit der Maus auf den Hintergrund klickt. Insgesamt sind das drei verschiedene Menüs, für jeden Mausknopf ein anderes:

1.
Der linke und der mittlere Mausknopf sind mit den statischen Menüs ``Terminal'' und ``Workspace Menu'' belegt.
2.
Der rechte Mausknopf ist mit einem dynamischen Menü (siehe Abbildung Windowmanager Menü) belegt, welches alle zehn der oben beschriebenen Anwendungstypen umfaßt.
Die Anwendungen werden ausschließlich textuell mit dem Anwendungsnamen im Arbeitsbereichsmenü dargestellt, d.h. man benötigt keine Iconfamilie für eine Eintrag in diesem Menü. In aktuelleren Versionen von CDE z.B. CDE V1.3 von Sun Microsystems ist es möglich, hier farbige Icons und gleichzeitig Texte darzustellen. In der von IBM ausgelieferten Version kann man zumindest monochrome Icons, allerdings dann keinen Text darstellen. HP verzichtet ganz auf Icons im Arbeitsbereichsmenü.


  
Abbildung: Arbeitsbereichsmenü auf der rechten Maustaste

WindowManagerMenue


Integration in den Anwendungsmanager

Der Anwendungsmanager wird bei Bedarf gestartet und beinhaltet alle zehn Anwendungstypen im dynamischen Unterverzeichnis ``Programs''. Die Anwendungen werden im Anwendungsmanager sowohl graphisch als auch textuell dargestellt. Deshalb ist eine vollständige Iconfamilie (siehe Kapitel IconFamilie) zu deren korrekter Darstellung nötig. Ist keine vollständige Iconfamilie angegeben, wird auf ein Standard-Icon zurückgegriffen.

Integration in den Dateimanager

Der Dateimanager zeigt Dateien an und ermöglicht es, mit ihnen zu interagieren. Wenn man eine Datei mit der rechten Maustaste anwählt, erscheint ein Kontextmenü. Die 'Print' Funktion im Kontextmenü wurde mit dem PlotMenü belegt. Die Open-Funktion öffnet eine entsprechend assoziierte Anwendung und lädt dort die Datei. Eine weitere Funktion ist das Dekomprimieren von Dateien mit den Endungen .Z, .gz, .zip, .arj, .rar und .lha durch die entsprechenden Entpacker. Jede Datei kann mit dem Packer gzip komprimiert werden. Die Definitionen der Dateitypen wurden in der statischen Datei /usr/segment/dt/appconfig/types/C/datatypes.dt gemacht. Änderungen können wie in [1] Kapitel 11 beschrieben durchgeführt werden. Die Zuordnung von Datentypen zu Anwendungen geschieht in der dynamische erzeugten Datei Type-Actions.dt.

Spezielle Anwendungen

Manche Anwendungen verlangen eine engere Anbindung an den Desktop:

PlotMenu
ist das zentrale Programm des Rechenzentrums, um Dateien auf Druckern auszugeben und ist deshalb als Ersatz für den CDE Print-Manager einzubinden. Dessen Integration erstreckt sich jedoch nicht nur auf die Erreichbarkeit auf dem Desktop, sondern auch auf die Druckfunktion in den Kontextmenüs des Dateimanagers sowie dessen interaktiven Drag-And-Drop-Fähigkeit. PlotMenu ist fest in den Desktop integriert und entsprechend sind dessen Definitionen in den statischen Dateien /usr/segment/dt/appconfig/types/C/dtwm.fp und /usr/segment/dt/appconfig/types/C/overload.dt zu finden.
elm
ist ein eMail-Programm, das aus Migrationsgründen den CDE-Mailer dtmail ersetzt. Dtmail kann außerdem nicht eingesetzt werden, da es aktuelle Mailauslieferungsverfahren wie IMAP oder POP3 nicht unterstützt. Leider kann elm bei weitem nicht so gut mit dem Dateimanager interagieren wie dtmail. Um flexibel zu bleiben, wurde elm im dynamischen Teil der Konfiguration in /usr/segment/dt/config/segment/Programs/01.Mail/00.Elm untergebracht. Dabei wurde das Überwachen der Mailboxdatei mit Hilfe von erweiterten Definitionen durch MORECONTROL sichergestellt. So ist es möglich, auf dem Bedienfeld zu sehen, ob neue eMail eingetroffen ist.
ssh
ist ein sicherer Ersatz für rlogin/rsh und findet Erwähnung, um hier die interaktive Eingabe von Argumenten zu zeigen. Die Definitionen dazu findet man in /usr/segment/dt/appconfig/types/C/rz.dt .

  
Abbildung: Anwendungsmanager

AppManager


  
Darstellung durch Icon-Familien

Anwendungen werden im Anwendungsmanager und auf dem Bedienfeld durch kleine Piktogramme (Icons) dargestellt. CDE reagiert flexibel auf verschiedene Bildschirmauflösungen und Farbtiefen, deshalb müssen ganze Icon-Familien definiert werden. In [1] Kapitel 12 wird darauf näher eingegangen.

Die vom Rechenzentrum verwendeten Icons sind in /usr/dt/appconfig/icons/C installiert. Weitere Icons in /usr/common/segment/dt/appconfig/icons/C ergänzen diese. Die Icon-Dateien sind im Bitmap-Format (bm) für monochrome Darstellung und im Pixmap-Format (pm) für farbige Darstellung in jeweils 3 Größen vorhanden. Damit ergibt sich das folgende Namensschema:



Größe in Pixel Bitmap-Name Pixmap-Name Größe
48 X 48 name.l.bm name.l.pm large
32 X 32 name.m.bm name.m.pm medium
16 X 16 name.t.bm name.t.pm tiny



Im Rahmen dieser Arbeit wurden mehrere Icon-Familien erstellt. Das bezieht sich vor allem auf spezielle lokale Anwendungen wie SPLogin oder VPPLogin. Aber auch Anwendungen aus dem Public-Domain und sogar dem kommerziellen Bereich liefern die von CDE benötigten Iconfamilien selten mit. Hauptsächlich wurden vorhandene mitgelieferte Logos und Icons entsprechend angepaßt. Andere Icons wurden selbst entworfen. Um die Anzahl an Farben auf dem Desktop zu begrenzen, wurde in Handarbeit die Farbgebung der Icons reduziert und einander angeglichen. Die Größen der Icons sind mit Programmen aus dem netpbm-Paket skaliert und die Icons danach gegebenfalls nochmals von Hand nachbearbeitet worden. Insgesamt wurden CDE so 16 Iconfamilien hinzugefügt und eine entsprechende Anleitung geschrieben, die es Anwendungsinstallateuren erlaubt, weitere Iconfamilien zu erstellen. Siehe dazu Kapitel Dokumentation für Anwendungsinstallateure.

Wie in Abbildung statisches Frontpanel zu erkennen ist, wurde eine 4. Klasse von Icongrößen geschaffen, die in der schmalen unteren Zeile im Bedienfeld Platz findet. Diese Zeile wurde aus Platzgründen und wegen Ähnlichkeit zu HP-VUE so gestaltet. Icons, die hier integriert werden sollen, haben die Abmaße 48x24 und ihnen wird 'Fp.' vor den Namen gestellt. So ergibt sich das Namensschema 'Fp.name.l.pm'.

Probleme im heterogenen Umfeld

Das Aussehen und die Funktionen des Desktop unterscheiden sich zwischen der IBM und der HP-Version von CDE beträchtlich. Das ist insbesondere dann nicht vertretbar, wenn dadurch bestimmte Funktionen nur auf einer Plattform erreichbar sind. Hier muß vereinheitlicht werden, damit möglichst alle Funktionen über Derivatgrenzen hinweg erreichbar sind.

  
Internationalisierung

Leider haben HP und IBM unterschiedliche Ansichten darüber, deutsche Sonderzeichen intern darzustellen. HP verwendet die Kana8 Kodierung, IBM dagegen iso8859. Da iso8859 auch international üblich ist, müssen die Rechner von HP entsprechend angepaßt werden.

In /usr/segment/dt/config/C/sys.font werden eine Reihe von Font-Ressourcen spezifiziert, die auf jedem CDE-fähigen Bildschirm vorhanden sind und die Zeichen auch überall in iso8859 Kodierung anzeigen. Diese Datei wird von /usr/segment/dt/config/C/sys.resources geladen, deren Ressourcen bei jeder Anmeldung beim System eingebunden werden.

Unglücklicherweise reicht das Anzeigen von iso8859-Dateien nicht aus. An verschiedenen Terminals befinden sich deutsche Tastaturen. Diese verwenden weiterhin die Kana8 Kodierung (HP-UX) oder wollen keine deutschen Sonderzeichen verarbeiten (AIX). Durch Änderung der Umgebungvariable LC_CTYPE kann die libc angewiesen werden, die entsprechenden Zeichen richtig zu behandeln. In Xsession wird diese Variable je nach Betriebssystem AIX oder HP-UX, wie in Abbildung Internationalisierung gezeigt, gesetzt. Für AIX mußte dabei auf die Einstellung de_DE.ISO8859-1 zurückgegriffen werden, da C.ISO8859-1 nicht existiert.


  
Abbildung: LC_CTYPE aus /usr/machine/dt/bin/Xsession
if [ -z "$LC_CTYPE" ] ; then
  case "${SYSTEMTYPE}" in
    *-hpux*) LC_CTYPE="C.iso88591" ;;
    *-aix*) LC_CTYPE="de_DE.ISO8859-1" ;;
    *) LC_CTYPE="C" ;;
  esac
fi

Da sich alle Anwendungen in englischer Sprache präsentieren, ist die Umgangssprache auf dem Desktop ebenfalls englisch. Allerdings bietet CDE die eigene Dokumentation auch in deutsch an. Deshalb wurde mit Hilfe der Umgebungsvariable DTHELPUSERSEARCHPATH in /usr/machine/dt/bin/Xsession die Anzeige der deutschen Hilfsdateien eingestellt. Durch Löschen dieser Umgebungsvariable in $HOME/.dtprofile kann diese Einstellung von jedem Benutzer wieder rückgängig gemacht werden.

Einbettung in die Baumschule

Wie schon in Kapitel Dynamische Anwendungsintegration erwähnt, ist die CDE-Konfiguration eng mit der kleinen Baumschule [3] verzahnt. So werden z.B. mit Hilfe der kleinen Baumschule alle Konfigurationsdateien auf die angeschlossenen Rechner übertragen. Es ist nur die einmalige Installation auf einem einzigen Rechner pro Betriebssystem nötig.

Doch die Einbettung in die Baumschule geht noch weiter. Verschiedene Dateien, die die Installation des Rechenzentrums ausmachen, sind hier nochmal thematisch aufgelistet:

Dokumentation
umfangreiche Dokumentation ist betriebsystemunabhängig und zentral in der Baumschule zu finden unter:
/usr/common/rzserv/doc/dt 
Icons
sind ebenso betriebsystemunabhängig, werden aber für jedes Segment vorgehalten, da auf sie häufiger zugegriffen wird. Deshalb sind alle Icons untergebracht in
/usr/common/segment/dt/appconfig/icons/C
Online-Dokumentation
fällt in die selbe Klasse von Daten wie die Icons. Dabei handelt es sich um Daten für das Hilfefenster, welche nicht lokal auf jeder Maschine vorhanden sind. Diese findet man unter
/usr/common/segment/dt/appconfig/help/de_DE.iso88591
Programme für die Anmeldung beim System
sind Skripte und Programme, die während der Anmeldung beim System durchgeführt werden. Sie sind auf jeder Maschine lokal untergebracht unter
/usr/machine/dt/bin
Dateien zur Konfiguration
beinhalten Environment- und Ressource-Anpassungen und sind in Kapitel Anpassungen beschrieben. Sie sind durchweg untergebracht in
/usr/segment/dt
Diese Aufteilung erlaubt es, eine eingeschränkte, funktionsfähige CDE-Umgebung anzutreffen, auch wenn z.B. ein Netzausfall vorliegt.

Mögliche weitere Anpassungen

Restart von Netscape nach erneutem Anmelden beim System

Normalerweise führt CDE nach einem erneuten Anmelden beim System wieder alle Programme aus, die beim Logout aktiv waren. Das Environment wird nicht gesichert. Es wird auch nur der letzte Prozeß eines Skriptes wieder gestartet und nicht das Skript selbst.

Netscape wird aus verschiedenen Gründen von einem Skript gestartet. Beim erneuten Anmelden beim System wird nun nicht das Skript, sondern direkt das Programm gestartet. Leider funktioniert das nicht, da das Environment nicht gesichert wird, und Netscape stürzt ab.

Abhilfe würde es schaffen, das Netscape Binary genau wie das Netscape Skript zu nennen und das Skript weiter vorne im Pfad zu haben. Ein anderer Weg wäre, argv[0] zu ändern, so daß der Netscape-Prozeß mit dem Namen des Skriptes in der Prozeßliste erscheint. Für netscape-4.6 wurde diese Anpassung bereits vorgenommen.


  
Abbildung: /usr/install/segment/dt/appconfig/types/C/dtlock.dt@PUBLIC
ACTION LockDisplay
{
  LABEL LockDisplay
  ARG_COUNT 0
  TYPE COMMAND
  WINDOW_TYPE NO_STDIO
  EXEC_STRING /usr/dt/bin/dterror.ds "You aren't allowed to lock this
dis\-play" "DtLock Error" "Ok"
}

Dtlock entfernen

Im Rechnerraum ist es wünschenswert, die Bildschirmlockfunktion zu entfernen. So vermeidet man, daß einzelne Benutzer einen Arbeitsplatz tagelang blockieren können. Bei den persönlichen Arbeitsplatzrechnern ist diese Funktion jedoch wünschenswert.

Leider kann die Funktion nicht völlig abgeschaltet werden. Genausowenig ist es möglich, einen Benutzer daran zu hindern, sich selbst ein Programm zu installieren, das diese Funktion erbringt. Es ist aber möglich, die Funktion vom Desktop zu entfernen, was in 90% der Fälle die Wirkung hat, als gäbe es die Funktion nicht.

Dtlock wird manuell vom Bedienfeld und automatisch vom Bildschirmschoner gestartet. Durch Überladen der entsprechenden Definition (siehe Abbildung dtlock.dt@PUBLIC) wird die Funktion entfernt und eine hinweisende Fehlermeldung angezeigt. Der automatische Start von Dtlock aus dem Bildschirmschoner heraus wurde bereits unterbunden (siehe Kapitel Xressourcen). Leider ist es mittels des Umgebungsmanagers einfach möglich, diese X-Ressourcen zu verändern, so daß es nötig ist, den Umgebungsmanager selbst durch die folgende X-Ressource einzuschränken:

Dtstyle*componentList: Color Font Backdrop 
Diese X-Ressource kann wie in Kapitel Xressourcen beschrieben in /usr/segment/dt/config/C/sys.resources gesetzt werden und ist nach erneuter Anmeldung beim System wirksam.

Beachtung von Mime-Types

CDE beachtet die Dateien /etc/mime.types und /etc/mailcap nicht. Mime.types ordnet Dateinamenendungen einem Dateityp zu. Mailcap ordnet diesen Dateitypen Programmen zu, welche diesen Dateityp verarbeiten.

Ähnlich dazu werden in /usr/segment/dt/appconfig/types/C/datatypes.dt und /usr/dt/appconfig/types/C/dt.dt Dateitypen verschiedene Dateiattribute zugeordnet. Zu diesen Dateiattributen zählen auch Dateinameendungen. Aktions-Definitionen greifen nun auf die Dateitypen zurück, um Programme zu öffnen, die diesen Dateityp verarbeiten können.

Um neue Dateitypen leichter ins CDE integrieren zu können, könnte man hier einen automatisierten Übergang schaffen.

Anhang

  
Dokumentation für Einsteiger

Willkommen beim Common Desktop Environment (CDE)

Das Common Desktop Environment (CDE) ist eine graphische Benutzer-Schnittstelle (Desktop) für UNIX Betriebssysteme.

Grundkenntnisse

Nach erfolgreicher Identifikation erscheinen nach kurzer Wartezeit Maus-Zeiger und mehrere Fenster auf dem Bildschirm.

Der Maus-Zeiger sieht aus wie ein kleines X. Mit Hilfe der Maus kann man den Maus-Zeiger über den Bildschirm bewegen. Solange man den Maus-Zeiger auf dem Hintergrund bewegt, sieht er weiterhin aus wie ein X. Innerhalb eines Fensters verändert er sich allerdings zu einem kleinen Pfeil.

Ein Fenster besteht aus einem Fenster-Rahmen und dem Fenster-Inhalt. In der rechten oberen Ecke des Fenster-Rahmens befindet sich ein quadratischer Knopf. Wenn man den Maus-Zeiger auf diesen Knopf bewegt und die linke Maus-Taste drückt und wieder losläßt, wird das Fenster so groß wie der ganze Bildschirm. So eine gezielte Maus-Bewegung mit anschließendem Betätigen der linken Maus-Taste nennt man einen Maus-Klick. Mit einem weiteren Maus-Klick auf diesen Knopf, der sich nun ganz rechts oben auf dem Bildschirm befindet und sich etwas verändert hat, bekommt das Fenster wieder seine ursprüngliche Größe.

Oben, in der Mitte des Fenster-Rahmens, wird der Name des Fensters angezeigt. Der Maus-Zeiger kann auch dorthin klicken. Läßt man die linke Maus-Taste allerdings nicht sofort wieder los, sondern bewegt den Maus-Zeiger erst, verschiebt sich das Fenster. Hat man das Fenster neu positioniert, kann man die Maus-Taste wieder loslassen.

Der Fenster-Inhalt ist je nach Anwendung verschieden. Beim Fenster mit dem Namen ``Help Viewer'' handelt er sich um ein elektronisches Nachschlagewerk, welches den Umgang mit dem Desktop erklärt. Der Hilfe-Band ``Desktop - Einführung'' wird in diesem Fenster angezeigt. Die folgenden Abschnitte befassen sich ausschließlich mit lokalen Gegebenheiten, die im elektronischen Nachschlagewerk keine Beachtung fanden.

Anwendungen

In der Mitte, am unteren Bildschirmrand, befindet sich das Bedienfeld (Panel). Auf dem Panel sind mehrere kleine Symbole (Icons) in zwei Zeilen untergebracht. Mit einem Maus-Klick auf ein Icon kann man Anwendungen starten. In der unteren Zeile sind das von links nach rechts gesehen folgende Anwendungen: xterm, dtterm, ssh, splogin, vpplogin, Umgebungsmanager, Anwendungsmanager, Datei-Manager, dtcalc, man page viewer.

Die obere Zeile des Panels besteht nicht nur aus Icons. In der Mitte befindet sich der Arbeitsbereichsumschalter (Switch). Links davon sind angeordnet: Uhr, Kalender, System-Auslastung, Hilfefenster und Drucker. Rechts vom Switch befinden sich die Anwendungen: netscape, elm, xrn, joe, framemaker, xv und xmaple. Oberhalb dieser Icons sind kleine Dreiecke, die mit der Spitze nach oben zeigen. Mit einem Maus-Klick darauf klappt eine Bedientafel (Subpanel) auf. Auf diesem Subpanel sind wieder Icons zu sehen. Mit einem Maus-Klick darauf kann man diese weiteren Anwendungen starten. Nähere Informationen zum Panel erhält man mit der ``Hilfe zum Bedienfeld'' im Hilfefenster.

Ein weiterer Weg, um Anwendungen zu starten, ist der Anwendungsmanager. Wie bereits erwähnt, befindet sich dessen Icon in der zweiten Zeile des Panels, das siebte von links. Mit einem Maus-Klick darauf öffnet sich ein Fenster mit dem Namen ``Application Manager''.

Schließlich gibt es noch einen dritten Weg, Anwendungen zu starten. Dazu klickt man mit der rechten Maus-Taste auf den Hintergrund und die Maus-Taste nicht los. Es erscheint in grau eine Liste mit weiß geschriebenen Worten, ein Menü. Mit einem Maus-Klick auf die Worte erscheinen weitere Menüs. Der Texteditor nedit ist z.B. unter Programs/Editor/Nedit zu finden.

Dateien

Einfache Operationen mit Dateien oder Ordnern erlaubt der Datei-Manager (File Manager). Mit einem Maus-Klick auf das achte Icon von links in der unteren Zeile des Panels öffnet sich ein Fenster mit dem Namen ``File Manager - `` und dem Benutzer-Namen. Die Icons repräsentieren Dateien oder Ordner. Der weitere Umgang mit dem Datei-Manager wird mit jeweils einem Maus-Klick auf Help/Overview erklärt.

Wie dort beschrieben, öffnet sich bei einem Doppel-Klick auf ein Icon eine passende Anwendung, um die Datei zu bearbeiten oder anzuzeigen. Mit einem Maus-Klick der rechten Maus-Taste auf ein Icon erscheint ein Menü, das unter anderem auch das Ausdrucken der Datei erlaubt.

Eigene Einstellungen

Mit dem Umgebungsmanager (Style Manager) kann man Farben, Schriftarten und das Verhalten des Desktop den eigenen Wünschen anpassen. Dazu klickt man auf das sechste Icon von links in der unteren Zeile des Panels.

Das Panel selbst kann sehr einfach verändert werden: Oben in einem aufgeklappten Subpanel befindet sich ``Install Icon''. Dort hinein kann man jedes andere Icon ziehen, z.B. die Icons aus dem Anwendungsmanager. Ein Maus-Klick mit der rechten Maus-Taste auf ein Icon in einem aufgeklappten Subpanel öffnet ein Menü. Mit ``Copy To Main Panel'' wird das angewählte Icon vorne auf dem Panel angezeigt.

Im Menü Programs/Custom sind Funktionen zusammengefaßt, die es erlauben, weitere Anpassungen vorzunehmen. Dabei muß man allerdings oft auf einen Text-Editor zurückgreifen, was eine genauere Kenntnis des Systems verlangt. Die Einstellungen machen sich erst nach erneuter Anmeldung bemerkbar. In der folgenden Tabelle sind Einstellungen und zugehörige Funktionen aus Programs/Custom aufgelistet. Die letzte Spalte der Tabelle gibt weitere Hinweise zur Konfiguration.



Einstellung Programs/Custom Hinweis
Paßwort ändern ChangePassword  
Standard Editor Prefer Menüpunkt 2 wählen
ändern und UserPrefsEdit ACTION TextEditor
.profile durchlaufen dtProfileEdit DTSOURCEPROFILE
englische Hilfen dtProfileEdit DTHELPUSERSEARCHPATH
SP und VPP Benutzer- Prefer Menüpunkt 6, dann 2 wählen
namen einstellen   SPUSER=Benutzername
    VPPUSER=Benutzername



Ausblick

Das riesige Potential der graphischen Benutzeroberfläche CDE erschließt sich erst nach etwas Übung. Ich hoffe, Ihnen mit diesem Text die nötigen Einstiegspunkte für ein weiteres Studium der Hilfe-Texte gegeben zu haben.

  
Dokumentation für Anwendungsinstallateure

Common Desktop Environment (CDE) und die kleine Baumschule

Das Rechenzentrum verwendet CDE als Standard-Benutzeroberfläche (Desktop) für die UNIX-Betriebssysteme HP-UX 10.20 und IBM AIX 4.1. Anwendungen werden für gewöhnlich über die kleine Baumschule verteilt. Dieser Text beschreibt die Vorgehensweise, wie man diese Anwendungen ins CDE integriert.

Voraussetzungen

Vor Integration einer Anwendung muß man sich über folgendes im klaren sein:

1.
wie wird die Anwendung gestartet, eventuell mit Parametern auf der Kommandozeile?
2.
benötigt die Anwendung ein Terminal (textbasierende Anwendung) oder nicht?
3.
welches Icon repräsentiert die Anwendung?
4.
zu welcher Programm-Art gehört die Anwendung?
5.
wo soll die Anwendung plaziert werden ?

Umsetzung

Für jedes ausführbare Programm erstellt man eine Datei. In dieser Datei sind folgende Schlüsselworte als Zuweisungen benutzbar:

EXEC_STRING
ist zwingend notwendig und beschreibt den Aufruf der Anwendung von der Kommandozeile aus.
WINDOW_TYPE
gibt an, ob die Anwendungen ein Terminal benutzt oder nicht. Fehlt diese Zuweisung, wird als Standardwert TERMINAL benutzt. Liegt eine X-Anwendung vor, die kein Terminal benutzt, trägt man hier NO_STDIO ein.
ICON
ist der Name der Bild-Dateien, die die Anwendung repräsentieren. Als Standardwert wird Dtactn verwendet.
DTWM
gibt an, ob die Anwendung im Menü auf der rechten Maus-Taste (dtwm) angezeigt werden soll oder nicht. Standard ist hier No. Um die Anwendung anzuzeigen, trägt man hier Yes ein.
FRONTP
gibt an, ob die Anwendung in einem der Subpanel angezeigt werden soll. Standard ist No. Um die Anwendung anzuzeigen, trägt man hier Yes ein.
Der Inhalt einer solchen Datei sieht dann beispielsweise wie folgt aus:

EXEC_STRING=xpaint

ICON=xpaint

WINDOW_TYPE=NO_STDIO

DTWM=Yes

FRONTP=Yes

In /usr/install/segment/dt/config/segment/Programs auf den Installationsmaschinen rzaix-41 und rzhp-10 befinden sich Verzeichnisse. Diese stehen für verschiedene Programm-Sparten. So z.b. 00.WWW für World Wide Web Programme oder 06.Science für wissenschaftliche Anwendungen. Je nach Programm-Art kopiert man die oben erstellte Datei in das entsprechende Verzeichnis. Dabei ist zu beachten, daß der Dateiname folgendermaßen aufgebaut ist:

<Index>.<Name der Anwendung>
Der Index der Anwendung orientiert sich an den bereits vorhandenen Anwendungen. Mit seiner Hilfe wird die Position der Anwendung im Subpanel oder im Submenü (von oben nach unten) festgelegt. Nach dem ``.'' folgt der Name der Anwendung. Die Datei muß für alle Benutzer lesbar und ausführbar sein.

Nachdem man die Datei erstellt und plaziert hat, sollte man zur Überprüfung das Skript /usr/segment/dt/bin/dtcheckintegrate aufrufen. Gibt das Skript Warnungen aus, werden die angegebenen Fehler automatisch behoben. In besonders schweren Fällen wird die von Ihnen erzeugte Datei entfernt, Ihnen als Mail zugeschickt und ein Fehler ausgegeben. Hat alles fehlerlos geklappt, wird die Anwendung bis zum nächsten Tag ins CDE integriert.

Icons

Die unter CDE verwendbaren Icons sind in /usr/dt/appconfig/icons/C installiert. Weitere Icons in /usr/common/segment/dt/appconfig/icons/C ergänzen diese. Die Icon-Dateien sind im Bitmap-Format (xbm) für monochrome Darstellung und im Pixmap-Format (xpm) für farbige Darstellung in jeweils 3 Größen vorhanden. Damit ergibt sich das in folgender Tabelle beschriebene Namensschema:



Größe in Pixel Bitmap-Name Pixmap-Name
48 X 48 name.l.bm name.l.pm
32 X 32 name.m.bm name.m.pm
16 X 16 name.t.bm name.t.pm



Grundsätzlich kann man zur Erstellung eigener Icons auf alle Programme zurückgreifen, die die obigen Formate verwenden. Besser ist es, zur Icon-Erstellung das Programm dticon, den CDE-eigenen Icon-Editor, heranzuziehen.

Leider sind viele X-Umgebungen auf 256 Farben beschränkt, so daß man sehr sparsam mit den Farben eigener Icons umgehen muß. Man riskiert sonst, daß am Ende verschiedene Icons gar nicht angezeigt werden. Die mit dem Icon-Editor erstellten Icons werden auf jeden Fall dargestellt, da sie das Farbmodell von CDE benutzen. Dieses schreibt die folgenden Farben vor:



Name der Farbe Color-String im xpm
Schwarz s iconColor1 m black c black
Weiß s iconColor2 m white c white
Rot s iconColor3 m white c white
Grün s iconColor4 m white c green
Blau s iconColor5 m black c blue
Gelb s iconColor6 m white c yellow
Cyan s iconColor7 m white c cyan
Magenta s iconColor8 m black c magenta
Grau1 s iconGray1 m white c #dededededede
Grau2 s iconGray2 m white c #bdbdbdbdbdbd
Grau3 s iconGray3 m white c #adadadadadad
Grau4 s iconGray4 m white c #949494949494
Grau5 s iconGray5 m black c #737373737373
Grau6 s iconGray6 m black c #636363636363
Grau7 s iconGray7 m black c #424242424242
Grau8 s iconGray8 m black c #212121212121
TopShadow s topShadowColor m white c #bdbdbdbdbdbd
SelectColor s selectColor m white c #737373737373
Background s background m black c #949494949494
BottomShadow s bottomShadowColor m black c #636363636363
Transparent s none m none c none



Die ersten beiden Teile der Tabelle beschreiben die statischen Farben und Grau-Stufen. Darunter stehen die dynamischen Farben, die sich an der Benutzer-Einstellung oder dem Hintergrund orientieren.

Icons erhält man sehr einfach, wenn man die von der Anwendung mitgelieferten Dateien nach einem Logo oder Icon absucht, diese mit xv (grab) in die drei benötigten Größen skaliert und sie dann mit dem Icon-Editor der Farben wegen nach bearbeitet. In /usr/install/common/segment/dt/appconfig/icons/C legt man diese Dateien für alle lesbar ab. Der Name des Icons kann dann bei der obigen ICON Zuweisung verwendet werden.

Weitere Informationen

Für eine weitere Integration einer Anwendung, z.B. die Datei-Typen im File-Manager, muß man allerdings den in den Hilfen zu CDE beschriebenen Weg gehen. In /usr/common/rzserv/doc/dt/admin.ps.Z wird erklärt, wie man die entsprechenden Aktions-Dateien schreibt. In /usr/install/segment/dt/appconfig/types/C werden diese installiert.

Anmeldeskripte

/usr/machine/dt/bin/dtappgather


#/bin/sh

#
# dtappgather -- with variable path to base of Application Manager
# does what the man dtappgather says
#

APPMANAGERBASE=$HOME/.dt/appmanager-$SYSTEMTYPE

if [ -d $APPMANAGERBASE ] ; then
  if [ "$1" != "-r" ] ; then
    chmod 700 $APPMANAGERBASE
    rm -fR $APPMANAGERBASE
  fi
fi

mkdir $APPMANAGERBASE
chmod 700 $APPMANAGERBASE

for APP in `echo $DTAPPSEARCHPATH|sed -e 's/:/ /g; s/%L/$LANG/g'` ; do
  ln -s $APP/* $APPMANAGERBASE 2>/dev/null
done

rm -f $APPMANAGERBASE/\*

chmod 555 $APPMANAGERBASE

/usr/machine/dt/bin/Xsession


#!/usr/bin/ksh
# ###########################################################################
#
#   Xsession
#
#   Common Desktop Environment (CDE)
#
#   Configuration script for the Login Manager
#
#   Sven    27 Feb 1999  initial version
#   Sven    14 Mar 1999  take care of variables in $HOME/.dtprofile  
#
#
# ###########################################################################

#
# Variables must be explicitly exported
#
set +a

# ###########################################################################
#
#   Initialize session startup logging
#
# ##########################################################################

  exec >/dev/null 2>/dev/null

  LOGDIR=$HOME/.dt

  LOGFILENAME=$LOGDIR/startlog

  if [ ! -d $LOGDIR ]; then
    mkdir $LOGDIR
    if [ -d $LOGDIR ]; then
      /usr/bin/chmod 755 $LOGDIR
    fi
  fi

  [ -f $LOGFILENAME.older ] && rm -f $LOGFILENAME.older
  [ -f $LOGFILENAME.old ] && mv -f $LOGFILENAME.old $LOGFILENAME.older
  [ -f $LOGFILENAME ] && mv -f $LOGFILENAME $LOGFILENAME.old
  touch $LOGFILENAME

  if [ -w $LOGFILENAME ]; then
    exec >>$LOGFILENAME 2>&1
  fi

  Log()
  {
    echo "--- $1" >>$LOGFILENAME 2>&1
  }

  Log "$(date)"
  Log "$0 starting..."

# ###########################################################################
#
#   Global environment section
#
#   pre-sets from:
#
#   xdm      -- DISPLAY HOME LOGNAME SHELL
#   Xsession -- MAIL 
#   profile  -- PATH TZ USER
#
#   we set   -- EDITOR LANG LC_CTYPE TERM SESSION_SVR
#
# ###########################################################################

  if [ "$EDITOR"  = "vi" ] ; then 
    EDITOR=/usr/dt/bin/dtpad
  fi

  if [ -z "$LANG" ] ; then 
    LANG=C
  fi

  if [ -z "$LC_CTYPE" ] ; then 
    case "${SYSTEMTYPE}" in
      *-hpux*) LC_CTYPE="C.iso88591" ;;
      *-aix*) LC_CTYPE="de_DE.ISO8859-1" ;;
      *) LC_CTYPE="C" ;;
    esac
  fi 

  TERM=dtterm
  SESSION_SVR=`hostname`

  export EDITOR TERM SESSION_SVR LANG LC_CTYPE

  #
  # Locate configuration file directories
  #
  DT_BINPATH=/usr/dt/bin
  DT_INSTALL_CONFIG=/usr/dt/config
  DT_CONFIG=/etc/dt/config
  DT_CONFIG_PATH="$DT_CONFIG $DT_INSTALL_CONFIG"

# ###########################################################################
#
#  Default desktop component configuration variable settings
#
#  This section sets the default value for variables controlling
#  some desktop components.
#
# ###########################################################################

  #
  # Input method server startup -- restart clients, last time started
  #
  DTSTARTIMS=True

  #
  # Default desktop screen saver action list
  #
  export DTSCREENSAVERLIST="StartDtscreenSwarm StartDtscreenQix \
    StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife \
    StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank"

  #
  # DTUSERSESSION on a per-machine basis, not on per-user, per-session basis
  #
  export DTUSERSESSION=$SYSTEMTYPE

  #
  # default german help,
  # don't work with dtsearchpath because of %L is not de_DE.iso88591
  #
  export DTHELPUSERSEARCHPATH=/usr/common/segment/dt/appconfig/help/\
de_DE.iso88591/%H:/usr/common/segment/dt/appconfig/help/de_DE.iso88591/\
%H.sdl:/usr/common/segment/dt/appconfig/help/de_DE.iso88591/%H.hv

  #
  # finding applications for dtappgather
  #
  export DTSPSYSAPPHOSTS=/usr/segment/dt/appconfig

  #
  # finding icons for panel, appmanager etc.
  #
  export DTSPSYSICON=/usr/common/segment/dt/appconfig/icons/C

  #
  # Session startup clients and args
  #
  dtstart_session="$DT_BINPATH/dtsession"
  dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh"
  dtstart_ttsession="$DT_BINPATH/ttsession -s"
  dtstart_appgather="/usr/machine/dt/bin/dtappgather &"

# ###########################################################################
#
#   Source user's desktop profile
#
#   This section determines if the user has a desktop profile in their
#   home directory. If not, the desktop default profile is copied to
#   the home directory. The desktop profile is then sourced. The purpose
#   is to incorporate any per-user/per-session environment customizations
#   and thereby propagate them to applications and desktop components.
#
# ###########################################################################

  DTSYSPROFILE=sys.dtprofile
  DTPROFILE=.dtprofile

  if [ ! -f $HOME/$DTPROFILE ]; then

    for i in $DT_CONFIG_PATH
    do
      if [ -f $i/$DTSYSPROFILE ]; then
        /usr/bin/awk '
          BEGIN {printit=1}
          /SYSPROFILE COMMENT START/ {printit=0; next}
          /SYSPROFILE COMMENT END/ {printit=1; next}
          printit==1 {print}' <$i/$DTSYSPROFILE >$HOME/$DTPROFILE
        /usr/bin/chmod 755 $HOME/$DTPROFILE
        break
      fi
    done
  fi

  #
  # source the .dtprofile.
  #
  if [ -f $HOME/$DTPROFILE ]; then
    Log "sourcing $HOME/$DTPROFILE..."
    . $HOME/$DTPROFILE
  fi

# ###########################################################################
#
#  External Xsession processing section
#
#  This section searches the Xsession.d subdirectory and sources
#  the files contained therein.  The purpose is to set up any
#  per-user/per-session environment customizations and thereby propagate
#  them to applications and desktop components.
#
# ##########################################################################

  DT_XSESSION_DIR=Xsession.d

  #
  # Run custom Xsession scripts for this session.
  # If multiple scripts have the same name, run only the first one found.
  #
  for SCRIPT in $(
    (
      for i in $DT_CONFIG_PATH; do
        if [[ -d $i/$DT_XSESSION_DIR ]]; then
          ls $i/$DT_XSESSION_DIR
        fi
      done
    ) | sort -u
  ); do
    for i in $DT_CONFIG_PATH
    do
      #
      # dttmpdir is not allowed to set up in /var/dt/tmp
      #
      case "$SCRIPT" in *dttmpdir) continue ;; esac

      if [ -x $i/$DT_XSESSION_DIR/$SCRIPT -a \
          \( ! -d $i/$DT_XSESSION_DIR/$SCRIPT \) ]; then
             Log "sourcing $i/$DT_XSESSION_DIR/$SCRIPT..."
             . $i/$DT_XSESSION_DIR/$SCRIPT
             break
      fi 
    done
  done

# ###########################################################################
#
#   Startup section.
#
#   Note: The ksh syntax ${parameter%% *} is used when appropriate to
# 	    remove any command line options that may have been included
# 	    in the definition of a DT executable below.
#
# ###########################################################################

Start()
{
  if [ ! -z "$1" ]; then
    Log "starting $1"
    if [ "$2" = "eval" ]; then
      eval `eval "PATH=$DT_BINPATH:$PATH $1"`
    else
      eval "PATH=$DT_BINPATH:$PATH $1"
    fi
  fi
}

startup="$dtstart_session"                  # get desktop session client
Start "$dtstart_searchpath" eval            # setup desktop search paths
tooltalk="$dtstart_ttsession"               # get tooltalk client
Start "$dtstart_appgather"                  # setup session applications

  #
  # Start the session.
  #

  if [ "$DTSOURCEPROFILE" = "true" ]; then

    case ${SHELL##*/} in
       sh | ksh) shellprofile="$HOME/.profile";;
       csh) shellprofile="$HOME/.login";;
       *) Log "non-standard shell $SHELL"
    esac
  fi

  if [ "$shellprofile" -a ! -f "$shellprofile" ]
  then
    Log "could not read $shellprofile"
    unset shellprofile
  fi

  if [ $shellprofile ]
  then
    Log "execing $startup using $shellprofile..."
    case ${SHELL##*/} in
      sh | ksh) exec $SHELL -c "DT=true; export DT;   \
                                . $shellprofile;      \
                                unset DT;             \
                                PATH=/usr/dt/bin:\$PATH $tooltalk; \
                                exec $startup >/dev/null 2>&1" ;;
      csh) exec $SHELL -c "unsetenv _ PWD;       \
                           setenv DT true;       \
                           source $shellprofile; \
                           unsetenv DT;          \
                           (set path = ( $DT_BINPATH \$path );$tooltalk); \
                           exec $startup  >&! /dev/null" ;;
    esac
  else
    PATH=/usr/dt/bin:$PATH $tooltalk
    Log "execing $startup..."
    exec $startup >/dev/null 2>&1
  fi

# ####################         eof      #################################

$HOME/.dtprofile


#############################################################################
###
###   .dtprofile   user personal environment variables
###
###   placed in: $HOME/.dtprofile
###
###   Sven    17 Mar 1999     Initital version, session variables
###
#############################################################################


#############################################################################
###
###   Your $HOME/.dtprofile is read each time you login to the Common Desktop
###   Enviroment (CDE) and is the place to set or override desktop 
###   environment variables for your session. Environment variables set in
###   $HOME/.dtprofile are made available to all applications on the desktop.
###   The desktop will accept either sh or ksh syntax for the commands in 
###   $HOME/.dtprofile.
###
###   By default, the desktop does not read your standard $HOME/.profile
###   or $HOME/.login files. This can be changed by uncommenting the
###   DTSOURCEPROFILE variable assignment at the end of this file. The
###   desktop reads .profile if your $SHELL is "sh" or "ksh", or .login
###   if your $SHELL is "csh".
###
###   The desktop reads the .dtprofile and .profile/.login without an 
###   associated terminal emulator such as xterm or dtterm. This means
###   there is no available command line for interaction with the user.
###   This being the case, these scripts must avoid using commands that
###   depend on having an associated terminal emulator or that interact
###   with the user. Any messages printed in these scripts will not be
###   seen when you log in and any prompts such as by the 'read' command
###   will return an empty string to the script. Commands that set a
###   terminal state, such as "tset" or "stty" should be avoided.
###
###   With minor editing, it is possible to adapt your .profile or .login
###   for use both with and without the desktop.  Group the statements not
###   appropriate for your desktop session into one section and enclose them
###   with an "if" statement that checks for the setting of the "DT"
###   environment variable. When the desktop reads your .profile or .login
###   file, it will set "DT" to a non-empty value for which your .profile or
###   .login can test. 
###   
###   example for sh/ksh
###   
###     if [ ! "$DT" ]; then
###       #
###       # commands and environment variables not appropriate for desktop
###       #
###       stty ...
###	   tset ...
###	   DISPLAY=mydisplay:0
###	   ...
###     fi	    
###
###     #
###     # environment variables common to both desktop and non-desktop
###     #
###     PATH=$HOME/bin:$PATH
###     MYVAR=value
###     export MYVAR
###     ...
###	  
###   example for csh
###
###     if ( ! ${?DT} ) then
###       #
###       # commands and environment variables not appropriate for desktop
###       #
###       stty ...
###       tset ...
###       setenv DISPLAY mydisplay:0
###       ...
###     endif
###
###     #
###     # environment variables common to both desktop and non-desktop
###     #
###     setenv PATH $HOME/bin:$PATH
###     setenv MYVAR value
###     ...
###  
###   Errors in .dtprofile or .profile (.login) may prevent a successful
###   login. If after you login, your session startup terminates and you
###   are presented with the login screen, this might be the cause. If this
###   happens, select the Options->Sessions->Failsafe Session item on the
###   login screen, login and correct the error. The $HOME/.dt/startlog and
###   $HOME/.dt/errorlog files may be helpful in identifying errors.
###
##############################################################################

#
#  If $HOME/.profile (.login) has been edited as described above, uncomment
#  the following line.
#
# DTSOURCEPROFILE=true

#
# Don't like restart of clients that were last time up? Uncomment the 
# following line.
#
# DTSTARTIMS=false
#

#
# want english texts in 'Help Viewer'? Uncomment the following line.
#
# unset DTHELPUSERSEARCHPATH ; export DTHELPUSERSEARCHPATH
#

# 
# want another username for Sp/VPPlogin ? change this.
#
# SPUSER=$LOGNAME
# VPPUSER=$LOGNAME
#

#
# Locate configuration file directories
#
# DT_BINPATH=/usr/dt/bin
# DT_INSTALL_CONFIG=/usr/dt/config
# DT_CONFIG=/etc/dt/config
# DT_CONFIG_PATH="$DT_CONFIG $DT_INSTALL_CONFIG"

#
# Session startup clients and args
#
# dtstart_session="$DT_BINPATH/dtsession"
# dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh"
# dtstart_ttsession="$DT_BINPATH/ttsession -s"
# dtstart_appgather="/usr/machine/dt/bin/dtappgather &"

$HOME/.dt/sessions/current/dt.session


################################################################
#
#   Common Desktop Environment (CDE)
#
#   sys.session:  Session initiation file for CDE DT
#
#   This file is processed once for new CDE DT users
#
#   placed in: /usr/segment/dt/config/$LANG/sys.session
#
#
#   Sven    03 Mar 1999  Initial Version
#   Sven    08 Apr 1999  HelpViewer in dtwm nutzen statt externen Prozess
#
################################################################

#
# Start up the System Load client...
#
dtsmcmd  -cmd "dtaction LoadMeter"

#
# Start up the Introduction Manager 
#
#dtsmcmd -cmd "/usr/dt/bin/dthelpview -helpVolume Intromgr"

###################       End of the sys.session File  #############

Konfigurationsdateien

/usr/segment/dt/config/sys.dtwmrc


####################################################################
#
#	sys.dtwmrc:	The Resource Description File for the CDE Window
#							Manager dtwm
#
#	placed in: /usr/segment/dt/config/sys.dtwmrc
#
#	Sven	01 Mar 1999	Initial Version
#	Sven	15 Mar 1999	INCLUDEs Program-Menu dtwmrc.menu
#	Sven	17 Mar 1999	Warning 
#	Sven	31 Mar 1999	tuning Workspace-Menu
#
####################################################################

##
#
# Take care! You've now created $HOME/.dt/dtwmrc
#
# you'll find the right button 'Programs' in 
# /usr/segment/dt/config/dtwmrc.menu
# if you change this, you won't get any updates for 'Programs'
# 
# you may undo this selection with putting $HOME/.dt/dtwmrc into trash 
# can by typing
# rm $HOME/.dt/dtwmrc
# at any terminal
#
##


##
#
#    Program - Menu Description
#
###

INCLUDE
{  
     /usr/segment/dt/config/dtwmrc.menu
}

###
#
# Root Menu Description
#
###

Menu DtRootMenu
{
	"Workspace Menu"														f.title
	"Goto Workspace"							f.menu Workspaces
# Geht nur bei AIX 4.2 
#	"Goto Application"	 							f.show_app_list
#	"Graphical Workspace Manager"							f.show_gwm
	"Minimize/Restore Front Panel"							f.toggle_frontpanel
	 no-label																		f.separator
	"About"									f.version 
	 no-label																		f.separator
	"Refresh"																		f.refresh
	"Restart Workspace Manager..."							f.restart
	"Log out..."																f.action ExitSession
}

Menu Workspaces
{

	"One"										f.goto_workspace One
	"Two"										f.goto_workspace Two
	"Three"										f.goto_workspace Three
	"Four"										f.goto_workspace Four
}

Menu Terminal
{
	"Terminal"																	f.title
	"xterm"																			f.action Xterm
	"dtterm"																		f.action Dtterm
	 no-label																		f.separator
        "ssh"	 f.action Ssh
        "RS/6000 SP"	f.action Splogin
        "VPP/300"	 f.action Vpplogin

	 no-label																		f.separator
	"Log out..."																f.action ExitSession
}

###
#
# Front panel Manu Description
#
###

Menu DtPanelMenu
{
	Restore	_R																	f.normalize
	Move	_M																		f.move
	Minimize	_n																f.minimize
	Lower	_L																		f.lower
	Refresh	_f																	f.refresh
	 no-label																		f.separator
	"Log out..."	_o														f.action ExitSession
}


###
#
# Sample Window Menu Description
# This menu description exists as a sample only.
# The normal window manager menu is built in.
#
###

Menu SampleWindowMenu
{
	"Restore"	_R																f.normalize
	"Move"	_M																	f.move
	"Size"	_S																	f.resize
	"Minimize"	_n															f.minimize
	"Maximize"	_x															f.maximize
	"Lower"	_L																	f.lower
	 no-label																		f.separator
	"Occupy Workspace..."	_O										f.workspace_presence
	"Occupy All Workspaces"	_A									f.occupy_all
	"Unoccupy Workspace"	_U										f.remove
	 no-label																		f.separator
	"Close"	_C								AltF4				f.kill
}

###
#
# Alternate Window Menu Description without accelerators
#
###

Menu NoAcceleratorWindowMenu
{
	"Restore"	_R																f.normalize
	"Move"	_M																	f.move
	"Size"	_S																	f.resize
	"Minimize"	_n															f.minimize
	"Maximize"	_x															f.maximize
	"Lower"	_L																	f.lower
	 no-label																		f.separator
	"Occupy Workspace..."	_O										f.workspace_presence
	"Occupy All Workspaces"	_A									f.occupy_all
	"Unoccupy Workspace"	_U										f.remove
	 no-label																		f.separator
	"Close"	_C																	f.kill
}

###
#
# Key Bindings Description
#
###

Keys DtKeyBindings
{

#	AltMenu							root|icon|window	f.toggle_frontpanel 

	ShiftEscape					icon|window				f.post_wmenu
	Altspace							icon|window				f.post_wmenu
	AltTab								root|icon|window	f.next_key
	Alt ShiftTab					root|icon|window	f.prev_key
	AltEscape						root|icon|window	f.next_key
	Alt ShiftEscape			root|icon|window	f.prev_key
	AltDown							root|icon|window	f.circle_down
	AltUp								root|icon|window	f.circle_up
	Alt Ctrl Shiftexclam	root|icon|window	f.set_behavior
	AltF6								window						f.next_key transient
	AltF10								root|icon|window	f.menu DtRootMenu
	AltNext							root							f.next_workspace
	AltPrior							root							f.prev_workspace
	AltKP_0							root|icon|window	f.toggle_frontpanel
	AltKP_1							root|icon|window	f.goto_workspace One
	AltKP_2							root|icon|window	f.goto_workspace Two
	AltKP_3							root|icon|window	f.goto_workspace Three
	AltKP_4							root|icon|window	f.goto_workspace Four
	AltKP_5							root|icon|window	f.goto_workspace Five
	AltKP_6							root|icon|window	f.goto_workspace Six
	Altspace							icon|window				f.post_wmenu

	AltF5								window						f.normalize
	AltF7								window						f.move
	AltF8								window						f.resize
	AltF9								window						f.minimize
	AltF10								window						f.maximize
	AltF3								window						f.lower
}

###
#
# Mouse Button Bindings Description
#
###

Buttons DtButtonBindings
{
									root							f.menu Terminal
									root							f.menu DtRootMenu
									root							f.menu Programs
									frame|icon				f.raise
									frame|icon				f.post_wmenu
	Alt							icon|window				f.move
	Alt							window						f.minimize
}


###
#
# Defaults:	Window menus, key bindings, and mouse button bindings
#
###

Menu DefaultWindowMenu
{
	"Restore"	_R							AltF5				f.normalize
	"Move"	_M								AltF7				f.move
	"Size"	_S								AltF8				f.resize
	"Minimize"	_n						AltF9				f.minimize
	"Maximize"	_x						AltF10				f.maximize
	"Lower"	_L								AltF3				f.lower
	 no-label																		f.separator
	"Close"	_C								AltF4				f.kill
}

Keys DefaultKeyBindings
{
	ShiftEscape					icon|window				f.post_wmenu
	Altspace							icon|window				f.post_wmenu
	AltTab								root|icon|window	f.next_key
	Alt ShiftTab					root|icon|window	f.prev_key
	AltEscape						root|icon|window	f.next_key
	Alt ShiftEscape			root|icon|window	f.prev_key
	Alt Ctrl Shiftexclam	root|icon|window	f.set_behavior
	AltF6								window						f.next_key transient
}

Buttons DefaultButtonBindings
{
									frame|icon				f.raise
									icon							f.post_wmenu
}

/usr/segment/dt/config/C/sys.resources


!##################################################################
!#
!#   Common Desktop Environment (CDE)
!#
!#   sys.resources:     The Session Resource File
!#
!#   Placed In:         /usr/segment/dt/config/$LANG/sys.resources
!#
!#
!#   Sven    01 Mar 1999  Initial Version
!#   Sven    08 Apr 1999  HelpViewer in dtwm nutzen statt externen Prozess
!#
!###################################################################

!# Absolute Pfade .. $LANG geht hier nicht!
#include "/usr/segment/dt/config/C/sys.font"

Dtwm*Mail*fileName:         $MAIL
Dtwm*iconPlacement:         Right Top
Dtwm*keyboardFocusPolicy:   Pointer
Dtwm*resizeBorderWidth:     6
Dtwm*Info*clientFunctions:     -close -maximize
Dtwm*0*helpResources:   \n\
 wsHelp*onScreen: True\n\
 wsHelp*x: 27 \n\
 wsHelp*y: 7 \n\
 wsHelp*columns: 70 \n\
 wsHelp*rows: 25 \n\
 wsHelp*helpType: 0 \n\
 wsHelp*vPCount: 7 \n\
 wsHelp*helpVolume: Intromgr\n\

!# 8 Color Icons/Desktops so wie unter HP-Ux default.
!#*0*ColorUse:  HIGH_COLOR
!#*HelpColorUse:        COLOR

!# 4 Color Icons/Desktop so wie unter AIX default.
*0*ColorUse:  MEDIUM_COLOR
*HelpColorUse:        GRAY_SCALE

!# Terminaleinstellungen
Dtterm*menuBar: False
Dtterm*blinkRate: 0
Dtterm*visualBell: True
Dtterm*termName: xterm

!# Dtsession, fuern Screenlocker abschalten.
dtsession*extension.lockTimeout:        0

!# damit xv auch kleiner Bilder sauber anzeigt.
!# kein Default .. ist zwar nuetzlich, soll der User aber selber machen,
!# wenn er es denn braucht, weil sonst zu verwirrend
!#Dtwm*xv*clientDecoration: -minimize -maximize -menu -title

/usr/segment/dt/appconfig/types/C/delete.fp


######################################################################
#
#    Common Desktop Environment (CDE)
#
#   Delete.fp:   Action and DataType Definition File
#   placed in:   /usr/segment/dt/appconfig/types/C/Delete.fp
#
#   Removes the complete old top-box
#
#   Sven    01 Mar 1999  Initial Version
#
####################################################################

BOX Top
{
  CONTAINER_NAME        FrontPanel
  DELETE                True
}

/usr/segment/dt/appconfig/types/C/dtwm.fp


######################################################################
#
#    Common Desktop Environment (CDE)
#
#   Frontpanel.fp:  This file contains a definition for the front panel.
#   placed in:   /usr/segment/dt/appconfig/types/C/Frontpanel.fp
#
#   Sven    03 Mar 1999  Initial Version
#
####################################################################
set DtDbVersion=1.0

PANEL FrontPanel
{
  DISPLAY_HANDLES        True
  DISPLAY_MENU           True
  DISPLAY_MINIMIZE       False
  CONTROL_BEHAVIOR       single_click
  DISPLAY_CONTROL_LABELS False
  HELP_TOPIC             FPOnItemFrontPanel
  HELP_VOLUME            FPanel
}

BOX Down
{
  CONTAINER_NAME        FrontPanel
}

CONTROL Xterm
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        2
  ICON                  Fpxterm
  PUSH_ACTION           Xterm
  HELP_STRING		The Xterm action runs the desktop terminal emulation \
application xterm
}

CONTROL Dtterm
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        3
  ICON                  Fpdtterm
  PUSH_ACTION           Dtterm
  HELP_TOPIC            FPOnItemTerm
  HELP_VOLUME           FPanel
}

CONTROL Ssh
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        4
  ICON                  Fpssh
  PUSH_ACTION           Ssh
  HELP_STRING		The Ssh action prompts the user for the name of a system, \
opens an terminal emulator window, and then performs a ssh to that system.
}

CONTROL Splogin
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        7
  ICON                  Fpsp
  PUSH_ACTION           Splogin
  HELP_STRING		The Splogin action opens an terminal emulator window, and \
then performs a ssh to the RS/6000 SP system.
}

CONTROL Vpplogin
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        8
  ICON                  Fpvpp
  PUSH_ACTION           Vpplogin
  HELP_STRING		The Vpplogin action opens an terminal emulator window, and \
then performs a ssh to the VPP/300 system.
}

CONTROL Style
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        10
  ICON                  Fpstyle2
  PUSH_ACTION           Dtstyle
  HELP_TOPIC            FPOnItemStyle
  HELP_VOLUME           FPanel
}

CONTROL Appmgr
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        11
  ICON                  Fpapps2
  PUSH_ACTION           Dtappmgr
  HELP_TOPIC            FPOnItemAppMgr
  HELP_VOLUME           FPanel
}

CONTROL Filemgr
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        12
  ICON                  Fphome2
  PUSH_ACTION           DtfileHome
  DROP_ACTION           Dtfile
  HELP_TOPIC            FPOnItemHome
  HELP_VOLUME           FPanel
}

CONTROL Calc
{
  TYPE                  icon
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        13
  ICON                  Fpcalc
  PUSH_ACTION           Dtcalc
  HELP_STRING		The Dtcalc action starts the desktop calculator application
}

CONTROL Manpageview
{
  TYPE			icon 
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        14
  ICON                  Fphover
  PUSH_ACTION           Dtmanpageview
  HELP_STRING           The Man Page Viewer action displays a man page in \
a Quick Help viewer window.
}



CONTROL Blanko
{
  TYPE                  blank
  CONTAINER_NAME        Down
  CONTAINER_TYPE        BOX
  POSITION_HINTS        last
  ICON                  Fpblank2
}

BOX Programs
{
  CONTAINER_NAME        FrontPanel
  POSITION_HINTS        first
  LOCKED		True
}

CONTROL Clock
{
  TYPE                  clock
  CONTAINER_NAME        Programs
  CONTAINER_TYPE        BOX
  POSITION_HINTS        1
  ICON                  clock
  LABEL                 Clock
  HELP_TOPIC            FPOnItemClock
  HELP_VOLUME           FPanel
}

CONTROL Date
{
  TYPE                  date
  CONTAINER_NAME        Programs
  CONTAINER_TYPE        BOX
  POSITION_HINTS        2
  ICON                  FpCM
  LABEL                 Calendar
  DATE_FORMAT           %b%n%e
  PUSH_ACTION           Dtcm
  PUSH_RECALL           True
  DROP_ACTION           DtcmInsert
  CLIENT_NAME           dtcm
  HELP_TOPIC            FPOnItemDate
  HELP_VOLUME           FPanel
}

CONTROL LoadMeter
{
  TYPE                  client
  CONTAINER_NAME        Programs
  CONTAINER_TYPE        BOX
  POSITION_HINTS        3
  CLIENT_NAME           dtload
  CLIENT_GEOMETRY       50x30
  LABEL                 LoadMeter
  PUSH_ACTION           LoadMeter
  HELP_STRING		The LoadMeter displays the actual system load.
}

CONTROL Help
{
  TYPE                  icon
  CONTAINER_NAME        Programs
  CONTAINER_TYPE        BOX
  POSITION_HINTS        47 
  ICON                  Fphelp
  LABEL                 Help Manager
  PUSH_ACTION           Dthelpview
  DROP_ACTION           Dthelpview
  HELP_TOPIC            FPOnItemHelpMgr
  HELP_VOLUME           FPanel
}

CONTROL Plot-Menu
{
  TYPE                  icon
  CONTAINER_NAME        Programs
  CONTAINER_TYPE        BOX
  POSITION_HINTS        48
  LABEL                 Default
  ICON                  Fpprnt
  PUSH_ACTION           DtPrint
  DROP_ACTION           DtPrint
  DROP_ANIMATION        PrinterDrop
  HELP_TOPIC            FPOnItemPrinter
  HELP_VOLUME           FPanel
}

SWITCH Switch
{
  CONTAINER_NAME        Programs
  POSITION_HINTS        50
  NUMBER_OF_ROWS        2
}


/usr/segment/dt/appconfig/types/C/rz.dt


######################################################################
#
#    Common Desktop Environment (CDE)
#
#   Rz.dt:       Action and DataType Definition File
#   placed in:   /usr/segment/dt/appconfig/types/C/Rz.dt
#
#   RZ specific additional functions
#
#   Sven    01 Mar 1999  Initial Version
#
####################################################################

ACTION Ssh
{                           
     LABEL           SSH
     ICON            Dtterm
     ARG_COUNT       0   
     TYPE            COMMAND
     WINDOW_TYPE     TERMINAL
     EXEC_STRING     ksh -c 'export _title="%"Hostname:"%"; \
         export _user="%"Username: (${LOGNAME})"%"; \
         export _user=\${_user:-\${LOGNAME}}; \
         echo Trying to establish connection to \${_user}@\${_title}... \
Please wait. ; \
         ssh \$_title -l \${_user}; sleep 5;'
     DESCRIPTION     The Ssh action prompts the \
                     user for the name of a system, opens a \
                     terminal emulator window, and then performs an \
                     'ssh' to that system.
}                         

ACTION Splogin
{                           
     LABEL           SPlogin
     ICON            Dtterm
     ARG_COUNT       0   
     TYPE            COMMAND
     WINDOW_TYPE     TERMINAL
     EXEC_STRING     ksh -c '\
         export SPUSER=\${SPUSER:-\${LOGNAME}};\
         echo Trying to establish connection to RS6000/SP as \${SPUSER} ... \
Please wait.; \
         splogin -l \${SPUSER} ; sleep 5;'
     DESCRIPTION     The SPlogin action opens a \
                     terminal emulator window and then performs a \
                     'splogin' to that system.
}                         

ACTION Vpplogin
{                           
     LABEL           Vpplogin
     ICON            Dtterm
     ARG_COUNT       0   
     TYPE            COMMAND
     WINDOW_TYPE     TERMINAL
     EXEC_STRING     ksh -c '\
         export VPPUSER=\${VPPUSER:-\${LOGNAME}};\
         echo Trying to establish connection to VPP/300 as \${VPPUSER} ... \
Please wait.; \
         ssh vpp.fzk.de -l \${VPPUSER} ; sleep 5;'
     DESCRIPTION     The Vpplogin action opens a \
                     terminal emulator window and then performs a \
                     'splogin' to vpp system.
}                         

ACTION LoadMeter
{
        LABEL           LoadMeter
        ARG_COUNT       0
        ICON            Dtload
        TYPE            COMMAND
        WINDOW_TYPE     NO_STDIO
        EXEC_STRING     xload -name dtload -nolabel -bg \#bdbdbdbdbdbd -iconic
        DESCRIPTION     The PanelLoad (Dtload) action displays a \
                        graphical view of the system load.  It uses the \
                        xload command.
}

/usr/segment/dt/appconfig/types/C/overload.dt


######################################################################
#
#    Common Desktop Environment (CDE)
#
#   Overload.dt: Action and DataType Definition File
#   placed in:   /usr/segment/dt/appconfig/types/C/Overload.dt
#
#   This file overwrites dt-definitions for different actions.
#   to give 'em another icon, label or path.
#
#   Sven    02 Mar 1999  Initial Version
#
####################################################################

####################################################################
# have an own xterm-icon
####################################################################

ACTION Xterm
{
     LABEL         Xterm
     TYPE          COMMAND
     EXEC_STRING   xterm
     ICON          Dtxterm
     WINDOW_TYPE   NO_STDIO
     DESCRIPTION   The Xterm action starts an 'xterm' terminal emulator.
}

####################################################################
# prevent Application-Manager to go to /var/dt/appconfig/appmanager
####################################################################

ACTION Dtappmgr 
{
        LABEL                   Application Manager
        ICON                    Fpapps
        TYPE                    TT_MSG
        TT_CLASS                TT_REQUEST
        TT_SCOPE                TT_SESSION
        TT_OPERATION            DtTools_Show
        TT_FILE                 $HOME/.dt/appmanager-$SYSTEMTYPE
        TT_ARG0_MODE            TT_IN
        TT_ARG0_VTYPE           -title
        TT_ARG0_REP_TYPE        TT_REP_STRING
        TT_ARG0_VALUE           Application Manager
        TT_ARG1_MODE            TT_IN
        TT_ARG1_VTYPE           -help_volume
        TT_ARG1_REP_TYPE        TT_REP_STRING
        TT_ARG1_VALUE           Appmanager
        DESCRIPTION             The Application Manger (Dtappmgr) action \
				opens a File Manager view of the the \
				Application Manager.
}

ACTION OpenAppGroup
{
        LABEL                   Open
        TYPE                    TT_MSG
        TT_CLASS                TT_REQUEST
        TT_SCOPE                TT_SESSION
        TT_OPERATION            DtTools_Show
        TT_FILE                 %Arg_1%
        TT_ARG0_MODE            TT_IN
        TT_ARG0_VTYPE           -title
        TT_ARG0_REP_TYPE        TT_REP_STRING
        TT_ARG0_VALUE           Application Manager
        TT_ARG1_MODE            TT_IN
        TT_ARG1_VTYPE           -help_volume
        TT_ARG1_REP_TYPE        TT_REP_STRING
        TT_ARG1_VALUE           Appmanager
        TT_ARG2_MODE            TT_IN
        TT_ARG2_VTYPE           -root
        TT_ARG2_REP_TYPE        TT_REP_STRING
        TT_ARG2_VALUE           $HOME/.dt/appmanager-$SYSTEMTYPE
        TT_ARG3_MODE            TT_IN
        TT_ARG3_VTYPE           -common_link_point
        TT_ARG3_REP_TYPE        TT_REP_STRING
        TT_ARG3_VALUE           $LANG
}
ACTION OpenParentAppGroup
{
        LABEL                   OpenParent
        TYPE                    TT_MSG
        TT_CLASS                TT_REQUEST
        TT_SCOPE                TT_SESSION
        TT_OPERATION            DtTools_Show
        TT_FILE                 %Arg_1%
        TT_ARG0_MODE            TT_IN
        TT_ARG0_VTYPE           -title
        TT_ARG0_REP_TYPE        TT_REP_STRING
        TT_ARG0_VALUE           Application Manager
        TT_ARG1_MODE            TT_IN
        TT_ARG1_VTYPE           -help_volume
        TT_ARG1_REP_TYPE        TT_REP_STRING
        TT_ARG1_VALUE           Appmanager
        TT_ARG2_MODE            TT_IN
        TT_ARG2_VTYPE           -root
        TT_ARG2_REP_TYPE        TT_REP_STRING
        TT_ARG2_VALUE           $HOME/.dt/appmanager-$SYSTEMTYPE
        TT_ARG3_MODE            TT_IN
        TT_ARG3_VTYPE           -common_link_point
        TT_ARG3_REP_TYPE        TT_REP_STRING
        TT_ARG3_VALUE           $LANG
        TT_ARG4_MODE            TT_IN
        TT_ARG4_VTYPE           -user_install_point
        TT_ARG4_REP_TYPE        TT_REP_STRING
        TT_ARG4_VALUE           .dt/appmanager
}

####################################################################
# prevent dtappgather to go to /var/dt/appconfig/appmanager
####################################################################

ACTION ReloadApps
{
        LABEL           Reload Applications
        ARG_COUNT       0
        TYPE            COMMAND
        WINDOW_TYPE     NO_STDIO
        EXEC_STRING     /bin/sh -c '/usr/dt/bin/dtaction ReloadActions;                            /usr/machine/dt/bin/dtappgather -r;                     /usr/dt/bin/dthelpgen -dir $HOME/.dt/help '
        DESCRIPTION     The Reload Applications action reloads the \
                        database of action, data type and front panel \
                        definitions.
}


####################################################################
# Plot-Menu for Default-Printer
####################################################################
ACTION Print
{
        LABEL           Print
        ARG_TYPE        *
        ARG_COUNT       *
        TYPE            COMMAND
        WINDOW_TYPE     TERMINAL
        EXEC_STRING     pm -- %(File)Arg_1%
        DESCRIPTION     This is the default print action.  When it is run \
                        with a file argument, it gathers printer-specific \
                        options and then prints the file.  When it is run \
                        with no arguments, it displays the menu window.
}

ACTION PrintRaw
{
        LABEL                   Print
        TYPE                    MAP
        MAP_ACTION              Print
}

ACTION Dtprintinfo
{
        LABEL           Print Jobs
        ARG_COUNT       0
        ICON            Fpprnt
        TYPE            COMMAND
        WINDOW_TYPE     TERMINAL
        EXEC_STRING     pm
        DESCRIPTION     The Print Jobs (Dtprintinfo) action enables you to \
                        determine the status and view print jobs of a printer.
}

ACTION Dtprintinfo
{
        LABEL           Print Jobs
        ICON            Fpprnt
        TYPE            COMMAND
        WINDOW_TYPE     TERMINAL
        EXEC_STRING     pm -- %(String)Arg_1%
        DESCRIPTION     The Print Jobs (Dtprintinfo) action enables you to \
                        determine the status and view print jobs of a printer.
}

/usr/segment/dt/appconfig/types/C/datatypes.dt


#
# Adobe PDF 
#
DATA_ATTRIBUTES                 PDF
{
        ACTIONS                 Open,Print,Gzip
        NAME_TEMPLATE           %s.pdf
        MIME_TYPE               application/pdf
        ICON                    pdf
}

DATA_CRITERIA                   PDFCriteria1
{
        DATA_ATTRIBUTES_NAME    PDF
        NAME_PATTERN            *.pdf
        MODE                    f
}

DATA_CRITERIA                   PDFCriteria2
{
        DATA_ATTRIBUTES_NAME    PDF
        CONTENT                 0 string %PDF
        MODE                    f
}
#
# Lyx
#
DATA_ATTRIBUTES                 LYX
{
        ACTIONS         Open,Gzip
        NAME_TEMPLATE   %s.lyx
        ICON            lyx
}

DATA_CRITERIA                   LYXCriteria1
{
        DATA_ATTRIBUTES_NAME    LYX
        NAME_PATTERN            *.lyx
        MODE                    f
}

#
# Plain FrameMaker file
#

DATA_ATTRIBUTES                 FRM
{
        ACTIONS         Open,Print,Gzip
        NAME_TEMPLATE   %s.fm
        ICON            framefile
}

DATA_CRITERIA                   FRMCriteria1
{
        DATA_ATTRIBUTES_NAME    FRM
        NAME_PATTERN            *.fm
        MODE                    f
}

DATA_CRITERIA                   FRMCriteria2
{
        DATA_ATTRIBUTES_NAME    FRM
        CONTENT                 0 string 

/usr/segment/dt/appconfig/types/C/user-prefs.dt


###############################################################################
#
#     user-prefs.dt     Actions which define user preferences.
#     placed in: $HOME/.dt/types
#
#     Sven    18 Mar 1999  initial version , choose
#
###############################################################################
set DtDbVersion=1.0

######

# The default TextEditor for Common Desktop Environment (CDE) is Dtterm

ACTION TextEditor
{
        LABEL		Text Editor
	TYPE		MAP
#       choose one of them
#	MAP_ACTION	Vi
#	MAP_ACTION	Joe
#	MAP_ACTION	Nedit
	MAP_ACTION	Dtpad
        DESCRIPTION	The Text Editor action runs the user preferred \
                        text editor.
}

######

# The default term for Common Desktop Environment (CDE) is Dtterm.

ACTION Terminal
{
        LABEL		Terminal
	TYPE		MAP
#       choose one of them
#	MAP_ACTION	Xterm
	MAP_ACTION	Dtterm
        DESCRIPTION	The Terminal action runs the user preferred \
                        terminal emulator.
}

######

# The default trash can for Common Desktop Environment (CDE) is Dttrash.

ACTION Trash
{
        LABEL		Trash
	TYPE		MAP
	MAP_ACTION	Dttrash
        DESCRIPTION	The Trash action runs the user preferred \
                        Trash client.
}

########################### EOF ##############################################

Anwendungsintegration

/usr/segment/dt/bin/dtcheckintegrate


#!/bin/sh

# checks setup-files, noone is perfect.

# Wenn interaktiv aufgerufen, dann in install testen.
tty > /dev/null 
if [ $? -eq 0 ] ; then
  STARTDIR=/usr/install/segment/dt/config/segment
else
  STARTDIR=/usr/segment/dt/config/segment
fi

get_dbvalues()
{
  unset ICON EXEC_STRING WINDOW_TYPE FRONTP DTWM
  unset MORECONTROL # Just spezial add ons for CONTROLS
  unset DATATYPES # for Open Actions with Filetypes
  # get ICON, EXEC_STRING, WINDOW_TYPE
  # FRONTP DTWM
  # MORECONTROL
  # DATATYPES
  . $1

  if [ $? -ne 0 ] ; then
    return 1
  fi

  # Errors
  if [ -z "$EXEC_STRING" ] ; then
    return 1
  fi

  # Default values

  if [ -z "$ICON" ] ; then
    ICON=Dtactn
  fi

  if [ -z "$WINDOW_TYPE" ] ; then
    WINDOW_TYPE=TERMINAL
  fi

  if [ -z "$FRONTP" ] ; then
    FRONTP=No
  fi

  if [ -z "$DTWM" ] ; then
    DTWM=No
  fi

}

traverse()
{
  AKTDIR=$1
  CHILDS=`cd ${AKTDIR} && ls -1`

  if [ -z "$CHILDS" ] ; then
    echo Fehler beim Eintraege holen
    exit 1
  fi

  unset CHILDFILES_DTWM CHILDDIRS_DTWM

  POSITION_HINTS=1
  set -- ${CHILDS}
  while [ -n "$1" ] ; do
    if [ "$1" = "core" ]; then
      echo core geloescht
      rm -f ${AKTDIR}/$1
    else  
      if [ ! -s ${AKTDIR}/$1 ]; then
        echo ${AKTDIR}/$1 ist NULL-Bytes gross und ist nun geloescht worden
        rm -f ${AKTDIR}/$1
      fi
    fi  

    if [ ! -x ${AKTDIR}/$1  -a -f ${AKTDIR}/$1 ] ; then
      echo ${AKTDIR}/$1 war nicht ausfuerbar, fixed
      chmod a+x ${AKTDIR}/$1 
    fi 

    if [ -f ${AKTDIR}/$1 ] ; then
      if [ ! -r ${AKTDIR}/$1 ] ; then
        echo ${AKTDIR}/$1 war nicht lesbar, fixed
        chmod a+r ${AKTDIR}/$1 
      fi 
      get_dbvalues ${AKTDIR}/$1

      if [ "$?" -ne 0 ] ; then
	OWNER=`ls -l ${AKTDIR}/$1 |awk '{ print $3 }'`
        cat ${AKTDIR}/$1 |mail -s 'CDE config: File geloescht weil schwerer \
Fehler aufgetreten ist' ${OWNER}@rz.uni-karlsruhe.de
	rm -f ${AKTDIR}/$1
      fi
    else
      if [ -d ${AKTDIR}/$1 ] ; then
        ( traverse ${AKTDIR}/$1 )
      fi
    fi
    shift
  done
}


traverse $STARTDIR/Programs 

/usr/segment/dt/bin/dtsegintegrate


#!/bin/sh

# checks setup-files, noone is perfect.

# Wenn interaktiv aufgerufen, dann in install testen.
tty > /dev/null 
if [ $? -eq 0 ] ; then
  STARTDIR=/usr/install/segment/dt/config/segment
else
  STARTDIR=/usr/segment/dt/config/segment
fi

get_dbvalues()
{
  unset ICON EXEC_STRING WINDOW_TYPE FRONTP DTWM
  unset MORECONTROL # Just spezial add ons for CONTROLS
  unset DATATYPES # for Open Actions with Filetypes
  # get ICON, EXEC_STRING, WINDOW_TYPE
  # FRONTP DTWM
  # MORECONTROL
  # DATATYPES
  . $1

  if [ $? -ne 0 ] ; then
    return 1
  fi

  # Errors
  if [ -z "$EXEC_STRING" ] ; then
    return 1
  fi

  # Default values

  if [ -z "$ICON" ] ; then
    ICON=Dtactn
  fi

  if [ -z "$WINDOW_TYPE" ] ; then
    WINDOW_TYPE=TERMINAL
  fi

  if [ -z "$FRONTP" ] ; then
    FRONTP=No
  fi

  if [ -z "$DTWM" ] ; then
    DTWM=No
  fi

}

traverse()
{
  AKTDIR=$1
  CHILDS=`cd ${AKTDIR} && ls -1`

  if [ -z "$CHILDS" ] ; then
    echo Fehler beim Eintraege holen
    exit 1
  fi

  unset CHILDFILES_DTWM CHILDDIRS_DTWM

  POSITION_HINTS=1
  set -- ${CHILDS}
  while [ -n "$1" ] ; do
    if [ "$1" = "core" ]; then
      echo core geloescht
      rm -f ${AKTDIR}/$1
    else  
      if [ ! -s ${AKTDIR}/$1 ]; then
        echo ${AKTDIR}/$1 ist NULL-Bytes gross und ist nun geloescht worden
        rm -f ${AKTDIR}/$1
      fi
    fi  

    if [ ! -x ${AKTDIR}/$1  -a -f ${AKTDIR}/$1 ] ; then
      echo ${AKTDIR}/$1 war nicht ausfuerbar, fixed
      chmod a+x ${AKTDIR}/$1 
    fi 

    if [ -f ${AKTDIR}/$1 ] ; then
      if [ ! -r ${AKTDIR}/$1 ] ; then
        echo ${AKTDIR}/$1 war nicht lesbar, fixed
        chmod a+r ${AKTDIR}/$1 
      fi 
      get_dbvalues ${AKTDIR}/$1

      if [ "$?" -ne 0 ] ; then
	OWNER=`ls -l ${AKTDIR}/$1 |awk '{ print $3 }'`
        cat ${AKTDIR}/$1 |mail -s 'CDE config: File geloescht weil schwerer \
Fehler aufgetreten ist' ${OWNER}@rz.uni-karlsruhe.de
	rm -f ${AKTDIR}/$1
      fi
    else
      if [ -d ${AKTDIR}/$1 ] ; then
        ( traverse ${AKTDIR}/$1 )
      fi
    fi
    shift
  done
}


traverse $STARTDIR/Programs 

/usr/segment/dt/config/segment/Programs/04.Office/00.Framemaker


EXEC_STRING="detach /usr/segment/bin/frame"
WINDOW_TYPE=NO_STDIO
ICON=frame
DTWM=Yes
FRONTP=Yes
DATATYPES="FRM"

/usr/segment/dt/config/segment/Programs/10.Custom/00.ChangePassword


WINDOW_TYPE=NO_STDIO
EXEC_STRING="xterm -geometry 60x8 -e sh -c ' \
                echo \"Changing password\"; \
                echo \"-----------------\"; \
                passwd'"

DTWM=Yes
FRONTP=No

Literatur

[1]
Advanced User's and System Administrator's Guide, /usr/common/rzserv/doc/dt/admin.ps.Z

[2]
User's Guide, /usr/common/rzserv/doc/dt/users.ps.Z

[3]
Die kleine Baumschule, http://www.rz.uni-karlsruhe.de/Uni/RZ/Software/Baumschule.html

[4]
Common Desktop Environment - der Standard UNIX Desktop - Anwendung und Konfiguration, Stefan Fütterling, DPunkt Verlag, 1996
Last update was on Thursday, 21-Oct-1999 by Sven Dickert