SunSolve Internal

Infodoc ID   Synopsis   Date
16466   1920x1200@70 resolution on FFB framebuffers   31 Jan 1998

Description Top

1920x1200@70 is the highest resolution a Creator FFB frame buffer can support.
However, it is not supported by all FFB frame buffers and monitors.  It is
currently supported only by the Creator3D series 2 (FFB2) frame buffer, and
then only with Sun's 24-inch HDTV monitor.

As described in the ffbconfig manpage, you can determine which resolutions
your FFB framebuffer supports with your monitor by using the command
"ffbconfig -res ?":

  Some video-modes are supported only on certain revisions of FFB.  Also,
  some video-modes, supported by FFB, may not be supported by the monitor.
  The list of video-modes supported by the FFB device and the monitor can be
  obtained by running ffbconfig with the -res ? option.

All of the video modes supported by various FFB frame buffers are:
  ______________________________
 | 1024x768x60                 |
 | 1024x768x70                 |
 | 1024x768x75                 |
 | 1024x768x77                 |
 | 1024x800x84                 |
 | 1152x900x66                 |
 | 1152x900x76                 |
 | 1280x800x76                 |
 | 1280x1024x60                |
 | 1280x1024x67                |
 | 1280x1024x76                |
 | 960x680x112s    (stereo)    |
 | 960x680x108s    (stereo)    |
 | 640x480x60                  |
 | 640x480x60i     (interlaced)|
 | 768x575x50i     (interlaced)|
 | 1440x900x76     (hi-res)    |
 | 1600x1000x66    (hi-res)    |
 | 1600x1000x76i   (hi-res)    |
 | 1600x1280x76    (hi-res)    |
 | 1920x1080x72    (hi-res)    |
 | 1920x1200x70    (hi-res)    |
 |_____________________________|

Note that, as described above, not all FFB frame buffers support all
of these resolutions.

With Sun's 24-inch HDTV monitor the FFB2 supports these additional
resolutions:

  1920 x 1200 single-buffered
  1600 x 1000 single-buffered
  1440 x  900 single-buffered
  1280 x  800 single-buffered or double-buffered

This frame buffer has 15 MB RAM, which is normally used to provide
96 bits per pixel.  That's roughly 32 bits each for each of the double
buffers plus 32 for the Z buffer (it's actually more complex than that).

The two display buffers can be combined to give 10 MB to use as a single
display buffer.  However, the Z buffer memory cannot be combined in this
way, which is why you can't have double buffering at higher resolutions.


Info Docs Article 18072

Infodoc ID   Synopsis   Date
18072   CDE Workspace configuration files for Solaris 2.6   13 Mar 2000

Description Top

In order to customize the CDE Workspace, make a copy of the system's
default file:

        #cp /usr/dt/config/C/sys.dtwmrc /etc/dt/config/sys.dtwmrc

Edit the copied sys.dtwmrc file to make the Workspace customizations.

For all users to have one main Workspace Menu, the customized
/etc/dt/config/C/sys.dtwmrc must be copied to each user's
$HOME/.dt/dtwmrc.

Or make a custom $HOME/.dt/dtwmrc file for each user.

The Workspace Manager must be restarted in order for changes made to the
configuration file to take effect.

To restart the Workspace Manager: Move the pointer to the Backdrop,
hold down mouse button 3, then select Restart the Workspace Manager.

For information on CDE Workspace configuration files for 
Solaris 2.6 3/98 and above, reference InfoDoc 20835.

***Sun Does Not support Customization of CDE***
Applies To Operating Systems/Solaris/Solaris 2.6
Attachments (none)

Info Docs Article 13458


Infodoc ID   Synopsis   Date
13458   Running CDE in 24 bit mode   31 Jan 1998

Description Top

Running CDE in 24 bit Mode

Follow these steps:


1. cp /usr/dt/config/Xservers /etc/dt/config/Xservers
(NOTE: /etc/dt/config directory does not exist by default, you
must create it.)

2. change the following line of the Xserver file you just copied:

    :0 Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner
    
to this:

    :0 Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner      
-dev /dev/fb0 defdepth 24

After the modifications have been saved, you will need to reboot the
system for the changes to take effect.  Xservers is read by dtlogin
so you can restart dtlogin to re-read this file, but it is suggested
that you reboot the system instead.
Product Area Windows
Product CDE
OS Solaris 2.5
Hardware any

Info Docs Article 18370

Infodoc ID   Synopsis   Date
18370   How do I enable CDE/Xwindow through a Firewall?   23 Jan 1999

Description Top

This question could be put in another way:
"What TCP and UDP ports does CDE/Xwindow use?"

This is a very hard question. Your best bets are the following:

enable ports 6000 to 6004, they are used by X.
enable port 177, this is the XDMCP port
enable port 32798 (dtlogin uses it)

try to connect from hostA to hostB using CDE.

gather and analyze the output of: 
snoop -V hostA hostB


on the machine you want to log into check the following for 
*.1234 like port numbers:

netstat -an
/usr/proc/bin/ptree
# you can get lsof from www.sunfreeware.com, it is a public domain package
# not supported by Sun.

lsof |grep Xsun|grep inet
lsof |grep dtlogin|grep inet

If you are using 3rd party applications, please check
them with 
lsof |grep app3rdparty |grep inet
/etc/services and 
ypcat -k services (if using NIS) or the NIS+ services table.

Unfortunately, enabling port 6000 by itself may not solve the problem
since Xsun uses other ports once the X connection is already established.

*** Warning ***
In general, running CDE through a firewall is not a good idea, because
of security considerations. See the Nutshell book, "Internet
Firewalls" for more information. This information is not supported
by Sun and is provided without warranty.

Info Docs Article 13177
Infodoc ID   Synopsis   Date
13177   FFB screen resolution setup   31 Jan 1998

Description Top

FFB, the fast frame buffer on ultra machines, can be a primary console device
or a secondary device.  The Fcode device driver can:
 
   -Configure hardware for the selected resolution.
   -Clear the screen to white.
   -Turn on the video.

If you need to configure cgsix as your console device when you have
ffb on board, you can do so with: 

ok setenv output-device /sbus@1f,0/cgsix@1,0

How Do you select the screen resolution for ffb?

1) The screen resolution is selected by monitor ID.
2) The nvaram parameter "output-device" selects the screen resolution.

Ex: ok setenv output-device screen:r960x680x112s

Supported Monitor Resolutions:

Monitor ID    Resolution

0             r1024x768x77
1,3,5,7       r1152x900x66
6             r1152x1024x76
              r1280x1024x67
2,4           r1280x1024x76
svga          r1024x768x60
vesa std      r1024x768x70
xerox         r1024x800xx84
stereo        r960x680x112s
old stereo    r960x680x108s
NTSC          r640x480x60i
PAL           r768x575x50i
Hitachi       r1600x1280x76
HRV (Sony)    r1920x1080x72

How do I check the Fcode PROM version.

1. setenv fcode-debug? true
2. reset
3. dev /SUNW,ffb
4. prt_sccsid
@(#)ffb.1.33 95/05/26Copyright (c) 1994 Sun Microsystems, Inc.
5. device-end

FFB self test

ok test /SUNW,ffb

If the diag-switch?true

You will see the following messages:

Verifying Console Mode for frame buffer board
This will take a few minutes
Verifying frame Buffer Memory used for console mode
This will take about two minutes
FFB Frame Bufferfuncrional test paased
ok

How do I know whether I have a frame buffer or not?

ok show-devs
SUNW, ffb@1e,0

If the system is up and you want know about the ffb
type the following command

prtconf | grep ffb

     ffb, instance #0
If you want to configure various ffb properties use
/usr/sbin/ffbconfig

Info Docs Article 21137

Infodoc ID   Synopsis   Date
21137   Chanding the message of the day in /etc/motd   14 Jul 2000

Description Top

1. Once you login CDE begins to initialize itself through a series of ksh
   programs located in /usr/dt/config/Xsession.d.  Creating a new script in 
   this directory can allow you to execute a CDE built in error reporting
   program which you can use to display your message.  The error messaging 
   program will open a window during the dtlogin session and require the 
   user to click on OK.  Look at the naming convention used for the CDE 
   initialization scripts.
   
   	# ls -l /usr/dt/config/Xsession.d
   	
2. Create the following script called 0003.message in the Xsession.d 
   directory.
   
   #!/bin/sh
   #
   # This shell script invokes a dialog
   # giving the user time to read the message of the day
   # 
   message=`cat /etc/motd | sed 's/$/\\\n/'`
   /usr/dt/bin/dterror.ds "$message" "A Message" "Click here when finished"

3. Change the mode of the new script to make it executable

	# chmod a+x 0003.message
	
4. Create a message of the day file in /etc/motd

Note: Any message (i.e. a security message) can be displayed using
this method.  Just replace the /etc/motd with the path to the file
to be displayed.
Info Docs Article 17432

Infodoc ID   Synopsis   Date
17432   How to add or remove an icon to or from the CDE Front Panel   16 Jul 1998

Description Top

How can I add an icon to the CDE Front Panel or remove an icon from the Front
Panel?

The CDE Front Panel is defined by a database of configuration files.  The
default Front Panel configuration is defined in:

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

Front Panel configuration files end with the extension ".fp".

By default, Front Panel configuration files are found in the following
directories:

$HOME/.dt/types/
/etc/dt/appconfig/types/C/
/usr/dt/appconfig/types/C/

Where there is a conflict between components of a definition, the following
rules apply:

+ If the components have the same name, the first component read is used
+ If two components specify the same position, the are placed in the order
  in which they are read

To remove a control from the Default CDE's Front Panel:

1.  Copy its definition from

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

    into a file with the ".fp" extension residing in the directory:

    $HOME/.dt/types

2.   Add the following text to the control definition:

    DELETE      True

3.   Choose "Restart WorkspaceManager ..." from the root menu.

For example, to remove the Text Edit application from the Front Panel
copy its text from:

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

into

	$HOME/.dt/types/textedit.fp

then add the line:

DELETE  True

The control definition should look like:

CONTROL TextEditor
{
  TYPE                  icon
  CONTAINER_NAME        Top
  CONTAINER_TYPE        BOX
  POSITION_HINTS        4
  ICON                  Fppenpd
  LABEL                 Text Editor
  PUSH_ACTION           Dtpad
  DROP_ACTION           Dtpad
  HELP_TOPIC            FPOnItemTextEditor
  HELP_VOLUME           FPanel
  DELETE                True
}

Finally, choose "Restart Workspace Manager..." , from the root menu.  The
Text Editor will be removed from the Front Panel.

To add a system-wide Control to the Front Panel:

1.  Create and edit a file with the extension ".fp" in:

    /etc/dt/appconfig/types/C/

    Alternatively, to add a personal Control to the Front Panel, create and
edit
    a file with the extension ".fp" in:

    $HOME/.dt/types/


2.   Define a control in that file using the following syntax:

    COMPONENT {name}
    {
        {keyword} {value}
        {keyword} {value}
    ...
    }

    Refer to the /usr/dt/appconfig/types/C/dtwm.fp for examples of {name},
    {keyword} and {value}

3.   Choose "Restart Workspace Manager ..." from the root menu.

For example, to add a Load Meter to the Front Panel as the third item from
the left, follow these steps:

	A. Create and edit the file:

		$HOME/.dt/types/load.fp

	B. Define the following control:

		CONTROL LoadMeter
		{
		    TYPE                client
		    POSITION_HINTS      3
		    CONTAINER_NAME      Top
		    CONTAINER_TYPE      BOX
		    CLIENT_NAME         xload
		    CLIENT_GEOMETRY     88x64
		}


	C. Choose "Restart Workspace Manager..." , from the root menu.  
	The Load Meter will be displayed in the Front Panel.

How to add a newly created CDE action to a subpanel on dtwm's front
panel on system-wide level.

1. Create a system-wide front panel configuration file (as root) using 
   this naming convention:

   /etc/dt/appconfig/types/language/name.fp

   where "name" is the name of the file.  Please retain the ".fp" extension.

2. Define the system-wide control in the file.

   Use the CONTAINER_NAME and CONTAINER_TYPE fields to specify the container
   for the control:

   CONTROL control_name
   {
     CONTANINER_NAME  subpanel_name
     CONTANINER_TYPE  SUBPANEL

     ...
   }

   where "..." is the actual CONTROL specifications.

   Note:  To find subpanel_name, examine these
   files:

   + $HOME/dt/appconfig/*.fp
   + /etc/dt/appconfig/types/C/*.fp
   + /usr/dt/appconfig/types/C/*.fp
  
3. Save the configuration.

4. Exit CDE and login as any user. 


EXAMPLE: Allows for a cmdtool to start from the Personal Applications subpanel
         for all users on one system.

1. Create /etc/appconfig/types/C/cmd.fp

2. cmd.fp file has the following CONTROL definition:

   CONTROL cmdtool
   {
     TYPE           icon
     CONTAINER_NAME PersAppsSubpanel
     CONTAINER_TYPE SUBPANEL
     ICON           Dtactn
     PUSH_ACTION    cmdAct
     PUSH_RECALL    True
   }

   Since this control is associated with a PUSH_ACTION, the ACTION 
   cmdACT must be created.  It is best placed in same directory, with 
   a file extension of ".dt"  (/etc/appconfig/types/C/name.dt.  In 
   this example name.dt = cmd.dt).

   The cmd.dt file has the following ACTION definition:

   ACTION cmdAct
   {
     EXEC_STRING    /usr/openwin/bin/cmdtool
     WINDOW_TYPE   NO_STDIO 
   }

3. When finished with step two one should have both a cmd.fp and a 
   cmd.dt in the "system-wide" directory /etc/appconfig/types/C

4. Exit CDE and login as any user.  The Personal Applications subpanel 
   will have a Dtactn icon.  When this icon is selected, an
   OpenWindows cmdtool will appear.
Info Docs Article 21571

Infodoc ID   Synopsis   Date
21571   Adding a Kernel Patch to a JumpStart Installation Boot Image   14 Jul 2000

Description Top
This document describes installing a Kernel Patch to a Net (JumpStart) Install Boot Image, and incorporating this patch to the completed installation of the OS which is automated once the patch is added as described below. Only a kernel patch can be installed because the SolStart script for installing patches does not support using a patch order file at this time.

When is this useful?

1) This will work when the "Operating Environment CDROM" and therefore the modify_install_server script is not available (See SRDB 20576). Also note that the modify_install_server script adds packages and patches for the PGX32 frame buffer, which may not be necessary in your particular instance.

2) This is also useful if you are JumpStarting Solaris 2.6 5/98 to an Enterprise Server with 400MHZ cpus with 8mb cache (See SRDB 20149).

Following are instructions with an example of this on a Solaris 2.6 5/98 install image at /export/Install/2.6_598/Solaris_2.6/Tools/Boot::

1) Copy the kernel patch to the /tmp directory then patch the boot portion of the Install Image.

Example:

#patchadd -C /export/Install/2.6_598/Solaris_2.6/Tools/Boot -M /tmp 105181-17

/export/Install/2.6_598 = Install Image Path (yours may differ)

Solaris_2.6 = Product Name Directory

105181-17 = 2.6 Kernel Patch

This will update the boot image patch directory as follows:

/export/Install/2.6_598/Solaris_2.6/Tools/Boot/tmp/root/var/sadm/patch

The default patches in this directory are:

105633-05 105654-03 105874-01 105924-03

After "patchadd -C" completes, the contents are:

105181-17 105633-05 105654-03 105874-01 105924-03

2) Copy the kernel patch to the Patches directory of the install image:

Patches directory example:

/export/Install/2.6_598/Solaris_2.6/Patches/105181-17

The default patches in this directory are:

105570-01 105633-05 105654-03 105924-03 106040-03Notes:

These patches will install in sequential order, so the kernel patch (105181-17) will install first.

This can be confirmed in the installation finish log in the /var/sadm/system/logs/finish.log_'date' file.

The patch_finish script is located in the

./Solaris_2.6/Tools/Boot/usr/sbin/install.d/install_config

directory of the install image.

Applies To OS Install/Boot, OS Install/Boot/Network Install, AFO Vertical Team Docs, AFO Vertical Team Docs/Install/Boot
Attachments (none)

Info Docs Article 13598
Infodoc ID   Synopsis   Date
13598   Adding alternate window managers from CDE's dtlogin   7 Jan 1997

Description Top
Adding Alternate Window Managers to the dtlogin options/sessions Menu.


This example uses mwm to add window managers
to the list, and assumes that mwm
is installed in its standard location from
the Software Developers Kit (SDK), which is
/opt/SUNWmfwm/bin/mwm

Three files need to be added:
- /usr/dt/config/C/Xresources.d/Xresources.mwm
- /usr/dt/config/Xsession.mwm
- /usr/dt/config/Xsession.mwm2

1. The easiest way to do this is to enter the following:
csh
setenv CONFIG /usr/dt/config
setenv RESOURCE /usr/dt/config/C/Xresources.d
cp $RESOURCE/Xresources.ow $RESOURCE/Xresources.mwm
cp $CONFIG/Xsession.ow $CONFIG/Xsession.mwm
cp $CONFIG/Xsession.ow2 $CONFIG/Xsession.mwm2


2. Modify the $RESOURCE/Xresources.mwm
FROM:
Dtlogin*altDtName:      OpenWindows Desktop
Dtlogin*altDtKey:       /usr/openwin/bin/olwm
Dtlogin*altDtStart:     /usr/dt/config/Xsession.ow
Dtlogin*altDtLogo:      OWlogo

TO:
Dtlogin*altDtName:      Mwm Desktop
Dtlogin*altDtKey:       /opt/SUNWmfwm/bin/mwm
Dtlogin*altDtStart:     /usr/dt/config/Xsession.mwm
Dtlogin*altDtLogo:      <What ever .pm file you like>

3. Put the .pm file in /etc/dt/appconfig/icons/C. To see 
what you have by default, go to /usr/dt/appconfig/icons/C

4. Modify the $CONFIG/Xsession.mwm
FROM:
        export SDT_ALT_SESSION="/usr/dt/config/Xsession.ow2"
TO:
        export SDT_ALT_SESSION="/usr/dt/config/Xsession.mwm2"

and 
FROM:
if [ -z "$SDT_ALT_HELLO" ]
then
  if [ -x $DTDSPMSG ]; then
     export SDT_ALT_HELLO="/usr/dt/bin/dthello -string '`$DTDSPMSG -s 37
/usr/dt/
lib/nls/msg/$LANG/dthello.cat 1 'Starting the OpenWindows Desktop'`' &"
  else
     export SDT_ALT_HELLO="/usr/dt/bin/dthello -string 'Starting the
OpenWindows
Desktop' &"
  fi
fi

TO:
if [ -z "$SDT_ALT_HELLO" ]
then
  if [ -x $DTDSPMSG ]; then
     export SDT_ALT_HELLO="/usr/dt/bin/dthello -string 'Starting the Motif
Deskto
p' &"
  else
     export SDT_ALT_HELLO="/usr/dt/bin/dthello -string 'Starting the Motif
Deskto
p' &"
  fi
fi


5. Modify the $CONFIG/Xsession.mwm2:
Add the following two lines to the beginning of the file:

OW_WINDOW_MANAGER=/opt/SUNWmfwm/bin/mwm
export OW_WINDOW_MANAGER
Info Docs Article 11730

Infodoc ID   Synopsis   Date
11730   Adding an application to CDE's Front Panel   20 Dec 1996

Description Top

The Front Panel is relatively easy to customize manually.  It is defined
by a database of configuration files.  The default Front Panel configuration
is defined in:

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

Front Panel configuration files end with the extension ".fp".

By default, Front Panel configuration files are in the following
directories:

$HOME/.dt/types/
/etc/dt/appconfig/types/C/
/usr/dt/appconfig/types/C/

Where there is a conflict between components of a definition, the following
rules apply:

+ If the components have the same name, the first component read is used.
+ If two components specify the same position, they are placed in the order
  in which they are read.


To add a system-wide Control to the Front Panel:

1.  Create and edit a file with the extension ".fp" in:

    /etc/dt/appconfig/types/C/

    Alternatively, to add a personal Control to the Front Panel, create and
edit
    a file with the extension ".fp" in:

    $HOME/.dt/types/


2.   Define a control in that file using the following syntax:

    COMPONENT {name}
    {
        {keyword} {value}
        {keyword} {value}
    ...
    }

    Refer to the /usr/dt/appconfig/types/C/dtwm.fp for examples of {name},
    {keyword} and {value}

3.   Choose "Restart Workspace Manager ..." from the root menu.

For example, to add a Load Meter to the Front Panel as the third item from
the left, follow these steps:

	A. Create and edit the file:

		$HOME/.dt/types/load.fp

	B. Define the following control:

		CONTROL LoadMeter
		{
		    TYPE                client
		    POSITION_HINTS      3
		    CONTAINER_NAME      Top
		    CONTAINER_TYPE      BOX
		    CLIENT_NAME         xload
		    CLIENT_GEOMETRY     88x64
		}


	C. Choose "Restart Workspace Manager..." , from the root menu.  
	The Load Meter will be displayed in the Front Panel.

Please note that if the Load Meter isn't displayed, type xload at the command
prompt.  The Load Meter displays on the Front Panel.  This only needs to
be done once.

Info Docs Article 11719

Infodoc ID   Synopsis   Date
11719   Starting Applications from a menu under CDE   17 Nov 1995

Description Top

Although CDE encourages the use of the front panel for starting regularly
used applications, it is still possible to start CDE tools, or indeed the
OpenWindows deskset tools from a WorkSpace menu.
The Open Look Window Manager (olwm) uses $HOME/.openwin-menu

The equivalent of the .openwin-menu* files is $HOME/.dt/dtwmrc .

The syntax of this file is a superset of the .mwmrc file used by the 
Motif Window Manager (mwm). Note CDE will *NOT* look for a .mwmrc file, only
$HOME/.dt/dtwmrc

This file can bemodified to include lines of the form 

"File Manager..."       f.exec "$OPENWINHOME/bin/filemgr &"

to have a File Manager button on the Workspace Menu for example.
The easiest way to start is to copy /usr/dt/config/C/sys.dtwmrc 
to $HOME/.dt/dtwmrc and edit it.

dtwmrc can also be edited through :

CDE Application Manager->Desktop_Tools Folder->Edit Dtwmrc

The ApplicationManager can be located on the CDE Front Panel
Info Docs Article 13383

Infodoc ID   Synopsis   Date
13383   Changing the dtlogin screen (fonts, bitmap, welcome text message)   11 Apr 2000

Description Top

To Customize the login screen appearance, you can change the logo or graphics, 
the welcome message, and the fonts. Here is how you can do it. 


*** The following steps constitute customization of CDE, which is unsupported
by Sun. ***

This example assumes you are using the C locale.

1. cp /usr/dt/config/C/Xresources /etc/dt/config/C/Xresources
2. vi /etc/dt/config/C/Xresources
Changing the dtlogin Screen

<1> Change the logo.

Change the line:

!! Dtlogin*logo*bitmapFile:             < bitmap or pixmap file >

to 

Dtloginn*logo*bitmapFile:  		/usr/dt/lib/bitmaps/MyLogo.bmp


<2> Change the welcome message.

Change the line:

Dtlogin*greeting.labelString:       Welcome to %LocalHost%

to 

Dtlogin*greeting.labelString:       This is my greeting at %LocalHost%

%LocalHost% and %DisplayName% can be used in this line.

<3> Change the welcome message text font

Add the line:

Dtlogin*greeting.fontList:		fixed


For information about modifying other resources, see the dtlogin man page.
Info Docs Article 17630
Infodoc ID   Synopsis   Date
17630   How do I change the dtlogin logos?  

Description Top
I would like to change the initial logo that comes up
when dtlogin (the grey screen with the login dialog) comes up (Q1).
Furthermore, I would also like to change the CDE session logo (Q2),
and the OpenWindows logo (Q3).

How do I do this?

Q1: How do I change the dtlogin default logo?
A1:
General dtlogin bitmap (welcome screen bitmap after dtlogin comes up)
---------------------------------------------------------------------

as root type	
mkdir -p /etc/dt/config/C
cp /usr/dt/config/C/Xresources /etc/dt/config/C
echo "Dtlogin*logo*bitmapFile: /usr/dt/appconfig/icons/C/SDtlogo.pm"  >>
/etc/dt/config/C/Xresources
ps -ef|grep dtlogin | grep -v grep | awk '{print $2}'|xargs kill;
/usr/dt/bin/dtlogin -daemon &

You can change SDtlogo.pm to any bitmap file you would like to see
as the default bitmap. 


Q2: How do I change the CDE session logo bitmap?
A:
CDE session bitmap
------------------

When you change the session to CDE,
dtlogin shows /usr/dt/appconfig/icons/C/Dtlogo.pm

mkdir -p /etc/dt/config/
cp /usr/dt/config/C/Xresources /etc/dt/config/C/

edit /etc/dt/config/C/Xresources
using you favorite text editor, and change the line:
Dtlogin*altDtLogo1:     <full-pathname-of-the-bitmap-file>

ps -ef|grep dtlogin | grep -v grep | awk '{print $2}'|xargs kill;
/usr/dt/bin/dtlogin -daemon &


Q3: How do I change the OpenWindows session logo bitmap?
A3:
OpenWin session bitmap
----------------------

When you change the session to OpenWindows,
dtlogin shows /usr/dt/appconfig/icons/C/OWlogo.pm

mkdir -p /etc/dt/config/C/Xresources.d
cp /usr/dt/config/C/Xresources.d/Xresources.ow /etc/dt/config/C/Xresources.d

edit /etc/dt/config/C/Xresources.d/Xresources.ow
using you favorite text editor, and change the line:
Dtlogin*altDtLogo:      <full-pathname-of-the-bitmap-file>

ps -ef|grep dtlogin | grep -v grep | awk '{print $2}'|xargs kill;
/usr/dt/bin/dtlogin -daemon &

------------------------------------------------------------------
The above steps are customizations of CDE and are supported by
Sun Microsystems, Inc. on a best effort-basis only.
------------------------------------------------------------------
Info Docs Article 17826
Infodoc ID   Synopsis   Date
17826   how to change dtwm's look and feel from CDE to mwm at runtime   3 Oct 1998

Description Top
In dtwm, CDE's desktop window manager, you can change the look and feel of
the window manager from CDE to Motif window manager using the following key
sequence:

  Control-Alt-Shift-1

Pressing these four keys at the same time will display a dialog box which
asks: Switch to Default Behavior?  If you select the OK button, the window
manager restarts with a Motif window manager look and feel.

You can change the look and feel back to CDE using the same key sequence.
Pressing the four keys at the same time will display a dialog box which
asks: Switch to Custom Behavior?  If you select the OK button, the window
manager restarts with a CDE look and feel.

This key sequence is defined by default in /usr/dt/config/<locale>/sys.dtwmrc.
The dtwmrc man page describes the function:

        f.set_behavior This function causes the workspace manager
                       to restart with the default behavior (if a
                       custom behavior is configured) or a custom
                       behavior (if a default behavior is config-
                       ured).   By  default  this  is  bound   to
                       Shift Ctrl Alt <Key>!.
Info Docs Article 17789

Infodoc ID   Synopsis   Date
17789   changing the mouse cursor image in CDE   3 Oct 1998

Description Top

To change the default mouse cursor image in CDE -- and every other window
manager -- use the command "/usr/openwin/bin/xsetroot -cursor", and provide
a path to the cursor bitmap and the cursor mask bitmap you want to use.

From the xsetroot man page:

     -cursor cursorfile maskfile
          This lets you change the pointer cursor to whatever you
          want  when the pointer cursor is outside of any window.
          Cursor and mask files are  bitmaps  (little  pictures),
          and  can be made with the bitmap(1) program.  You prob-
          ably want the mask file to be all black until  you  get
          used to the way masks work.

Note that in CDE and other window managers, individual applications can
override the default mouse cursor image with their own images.

You can use the /usr/openwin/bin/bitmap application to draw your own cursor
and cursor mask bitmaps.  See the bitmap man page for more information
about this application.

For example:
xsetroot -cursor /usr/openwin/share/src/xview/examples/dnd/arrow.bm
/usr/openwin
/share/src/xview/examples/dnd/arrow_mask.bm
Info Docs Article 20790

Infodoc ID   Synopsis   Date
20790   How do you change monitor resolution at the OBP level when using a PGX32 frame buffer?   6 Jun 2000

Description Top

Reasons for Changing the Console Resolution

Normally, the default console resolution is sufficient for most users.
However, you may need to change the default resolution if:

You change the X Windows depth from the default listed in the table, then
you should configure the console depth to match the X Windows depth. 

The monitor does not "sync up" at the default console resolution, then you
need to choose a different console resolution.

-------------------------------------------------------------------------------

Note  - The monitor must be turned on prior to booting the system in order
for the PGX32 to communicate with it.

-------------------------------------------------------------------------------

The methods described in this appendix will override any information obtained
via EDID.

output-device Method

It is possible to specify the console resolution of PGX32 card via the
output-device environment variable by using the format screen:rAxBxC, where:

A is the desired horizontal resolution, B is the desired vertical resolution,
and C is the desired refresh rate.

The system will check these values against an internal list of resolutions
(see Table 5 ), and use the corresponding entry as the console resolution.

For example, to use VESA1024x768x75 as the console resolution, type the
following at the ok prompt:

ok setenv output-device screen:r1024x768x75
ok reset

-------------------------------------------------------------------------------

Note  - The new console resolution will take effect following the reset, and
will hold the resolution information until the output-device variable is
changed manually.


-------------------------------------------------------------------------------

Reference PGX 32 installation guide Appendix A part number 805-7770

            
Info Docs Article 14686

Infodoc ID   Synopsis   Date
14686   Changing TGX/TGX+ resolution when it's the 2nd framebuffer   21 Jun 2000

Description Top

How do you set the resolution for TGX and TGX+ framebuffers when they are used
as the second framebuffer on a system?

You have to set the resolution at boot time in the nvramrc. Here is a script 
that will set up the nvramrc so  that it initialises the resolution to 
1280x1024 @ 76Hz.

Note: This script is modified from one in Sun document No: 802-5011-10 Platform
Notes: SMCC Frame Buffers, available in the Answerbook volume 'Solaris 2.5 on 
Sun Hardware' - search for the string "TurboGXplus Frame Buffer".

      #!/bin/sh
      # Configure the entries for "cgsix@0" and "cgsix@1"
      # to refer to each of your frame buffers.
      # NOTE: 
      # The actual full device path/names should be determined using 'show-devs'
      # which will vary from hw platform to hw platform.
      # If you are NOT using the correct path to the device, this script will
      # not work.
   

      eeprom fcode-debug\?=true
      eeprom nvramrc='probe-all
      " /iommu/sbus/cgsix@0" select-dev
      r1280x1024x76
      " /iommu/sbus/cgsix@1" " set-resolution" execute-device-method drop
      device-end
      install-console
      banner
      '
      eeprom use-nvramrc\?=true

The script presumes sun4m architecture; for sun4c change /iommu/sbus to /sbus
The other information you will need to run the script is which sbus slot the 
second frame buffer card resides in - ie the one that will be used as the 
second head. In this instance, it assumes a cgsix frame buffer in sbus slot 3.

The script has the disadvantage that it makes the second TGX+ the console frame
buffer. You may not want this; for example if you have a SS20SX or Ultra Creator
with an additional TGX+, you may wish to set the resolution of the TGX+ while 
maintaining the SX or FFB as the console. 

In which case, try this script instead. It should set the resolution of the 
TGX+ to 1280x1024@76 while maintaining the default console.

      #!/bin/sh
      eeprom fcode-debug\?=true
      eeprom nvramrc='probe-all
      install-console
      banner
      : vsetup " 135000000,81128,76,32,64,288,1280,2,8,32,1024,COLOR,0OFFSET" ;
      vsetup 4
      " /sbus/cgsix@2" " override" execute-device-method drop
      '
      eeprom use-nvramrc\?=true

This is another alternate script that can be used to set up the resolution
of a second TGX+/cgsix framebuffer.

#!/bin/sh
#
# This is a script to set a TGX+ graphics card supporting
# the second monitor in a two-monitor configuration to
# a resolution of 1280x1024x67. Run the script in the
# Bourne shell and then reboot.
#
eeprom fcode-debug\?=true
eeprom nvramrc='probe-all
: vsetup1 " 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" ;
vsetup1 4 " /sbus@1f,0/cgsix@2,0" " override" execute-device-method drop
device-end
install-console
banner
'
eeprom use-nvramrc\?=true
touch /reconfigure


Note: The number 4 in vsetup 4 refers to the sense code of the monitor. For
an incomplete list of sense codes, see below.
Again, please make sure that /sbus@1f,0/cgsix@2,0 is the correct full
pathname of the second framebuffer that comes up in show-devs or probe-all
from the <ok> prompt.

Here is the appropriate voodoo for several supported resolutions. Note also that
this will only work for the TGX or TGX+. 

      1024 x  768 at 60 Hz:
      	64125000,48286,60,16,128,160,1024,2,6,29,768,COLOR
      	
      1024 x  768 at 70 Hz:
      	74250000,56593,70,16,136,136,1024,2,6,32,768,COLOR
      	
      1024 x  768 at 77 Hz:
      	84375000,62040,77,32,128,176,1024,2,4,31,768,COLOR
      	
      1152 x  900 at 66 Hz:
      	94500000,61845,66,40,128,208,1152,2,4,31,900,COLOR
      	
      1152 x  900 at 76 Hz:
      	108000000,71808,76,32,128,192,1152,2,4,31,900,COLOR,0OFFSET
      	
      1280 x 1024 at 67 Hz:
      	117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET
      	
      1280 x 1024 at 76 Hz:
      	135000000,81128,76,32,64,288,1280,2,8,32,1024,COLOR,0OFFSET
      	
      1600 x 1280 at 76 Hz:
      	216000000,101890,76,24,216,280,1600,2,8,50,1280,COLOR,0OFFSET

And this is what the numbers actually mean, taking 1280x1024@67 as an example: 

      117000000       Pixel frequency or dot clock    (in Hz)
      71691           Horizontal frequency            (in Hz)
      67              Vertical frequency              (in Hz)
      16              Horizontal Front Porch          (in pixels)
      112             Horizontal Sync Width           (in pixels)
      224             Horizontal Back Porch           (in pixels )
      1280            Horizontal Displayed pixels     (in pixels)
      2               Vertical Front Porch            (in lines)
      8               Vertical Sync Width             (in lines)
      33              Vertical Back Porch             (in lines)
      1024            Vertical Displayed lines        (in lines)
      COLOR           Color monitor flag
      0OFFSET         No sync pedestal flag

Monitor sense codes (incomplete list), check FE Handbook for more information:

0 is denoted by a link (a 100 ohm resistor) to pin 4 (Ground, or Sense Return).
1 is denoted by the absence of a link - the pin is unconnected.

      3 8 9 (pins)
      2 1 0 (bits)
      1 1 1	7 - No monitor connected
      1 1 0	6 - Low cost 17" 
      1 0 1	5 - Sony 16"
      1 0 0	4 - Sony GDM20 series (with built-in lead)
      0 1 1	3 - BNC Adaptor, Hitachi 19", old Sony 16"
      0 1 0	2 - 
      0 0 1	1 - 
      0 0 0	0       
Info Docs Article 14641

Infodoc ID   Synopsis   Date
14641   Anatomy of a COMMAND Action in CDE   21 Dec 1996

Description Top

An Action Definition has the following syntax :

ACTION  <action_name>
{
    TYPE <action_type>
    <action_field>+
}

where:

<action_name> is the name used to invoke the action

<action_type> is one of three types of Actions:

   1) Command actions. A command action executes a command that starts an 
      application, utility, shell script, or operating system command.

   2) Map actions, which is primarily used to specify alternative names
      for actions.  A map action is "mapped" to another action.

   3) TT_MSG actions, which send Tooltalk messages.

<action_field>+ is one or more fields that describe an action's behavior
or look and feel.

Here is an overview of some of the {action_fields} used in
the popular Action Type COMMAND:

WINDOW_TYPE: specifies the type of windowing support required by the action:
        - NO_STDIO: No type of windowing support.  The action
          has its own window or has no output.
        - PERM_TERMINAL: a permanent terminal emulator window, which remains
          open until the user closes it.
        - TERMINAL: a temporary terminal emulator window, which closes as
          soon as the command is completed.

EXEC_STRING: the application, shell script or operating system command
that this action is to invoke.  There is special syntax that can
be used in case arguments are needed:
        - %(File)Arg_{n}%
          lets a user drop a data file on the action
                where {n} is an integer starting at 1
        - %Args%
          accepts multiple files, that a user drops on the action
        - %(File)"{prompt}"%
          displays a prompt for a file name, when the user invokes
          the action
                where {prompt} is a text string that prompts the user
                               for a file name
        -%(File)Arg_{n}"prompt" combines the two above.  It accepts
         a dropped file as an argument.  Otherwise, it displays
         a prompt for a file name
        -%(String)"prompt"% prompts for a non-file argument


LABEL: the Action Label seen in CDE's File Manager and Application Manager

ICON: used to specify the icons seen in CDE's File Manager and Application
Manager

For example, an Action that runs a single Unix C shell command is:
 
ACTION csh_command
{
    TYPE        COMMAND
    WINDOW_TYPE PERM_TERMINAL
    EXEC_STRING /usr/bin/csh -c '%(String)"Csh Command: "%'
    LABEL       One-time C Shell
    ICON        /usr/dt/appconfig/icons/C/Dtterm.m.pm
}

To make this work from CDE's dtfile, create an empty executable file
called csh_command, and make it executable:

$ touch csh_command
$ chmod 755 csh_command

Then, create a file called $HOME/.dt/types/csh_command, that
has the above action.

Run this command:

$ dtaction ReloadActions

To invoke the action, bring up dtfile, and double-click the csh_command
empty file, previously created.
Info Docs Article 20889

Infodoc ID   Synopsis   Date
20889   How to control what systems can have a remote display to your machine   22 Dec 1999

Description Top

HOW TO CONTROL WHAT SYSTEMS CAN HAVE A REMOTE DISPLAY TO YOUR MACHINE
(Controlling which machines sees your machine in their chooser list)

At the dtlogin screen, by using the dtchooser screen,  a user can have
a remote Xserver display to another machine. To limit only certain
machines to have access for a remote Xserver display:

First, copy /usr/dt/config/Xaccess to /etc/dt/config/Xaccess.
If necessary, create the /etc/dt/config directory and mimic the
permissions, owner and group of the /usr/dt/config directory.

Then, modify the file /etc/dt/config/Xaccess as follows:

This is what it currently looks like by default:
#   Entries...

*                       # grant service to all remote displays

Change it to the following:

#   Entries...

# *                       # grant service to all remote displays

host_a host_b             # grant service to these displays

NOTE: You should not list the local name of the machine. Only the machines
that you want access for remote displays should be added.  The list of
hostnames
should be separated by spaces.

When finished, you can restart the Xserver or reboot the machine for the
changes to take effect

To restart the Xserver, telnet or rlogin to the server to stop and restart
dtlogin:

# /etc/rc2.d/S99dtlogin stop
# /etc/rc2.d/S99dtlogin start
Info Docs Article 20686

Infodoc ID   Synopsis   Date
20686   Customizing CDE Front Panel Workspace names for multiple users   7 Jan 2000

Description Top

Internally, the workspaces are numbered by the numbering convention wsn, 
where n is 0, 1, 2 and so on. For example, the default four workspaces are 
numbered internally ws0 through ws3.

The system-wide resource file to add/edit resources is:

	/etc/dt/config/lang/sys.resources

(You may have to create this file.)

Use the "title" resource to change the name of a specified workspace:

	Dtwm*wsn: <name_of_workspace>

where n is 0, 1, 2, 3 and so on.

For example, the following resources set the default four workspaces to the 
specified names:

Dtwm*ws0*title: Anna
Dtwm*ws1*title: Don
Dtwm*ws2*title: Julia
Dtwm*ws3*title: Patti

For individual users, the above resources can be added in the $HOME/.Xdefaults 
file.

Info Docs Article 18436

Infodoc ID   Synopsis   Date
18436   How to define or change a default printer for CDE   10 Feb 1999

Description Top

CDE uses a default printer if you have defined one, but it does not provide a
way to specify or change your default printer.

To define a default printer, in your $HOME/.login or $HOME/.profile file
define the environment variable LPDEST and set it to the name of the printer
you want to be the default printer:

For .login:
  setenv LPDEST myprinter

For .profile:
  LPDEST=myprinter
  export LPDEST

If you have not specified that CDE read your .profile or .login on startup,
uncomment the last line of your $HOME/.dtprofile so that the command
DTSOURCEPROFILE=true will be run by CDE on startup.  This will cause CDE
to source your .login or .profile as CDE starts.  If you do this, be aware that
CDE cannot handle some commands in a .login or .profile like tset and may
not start your desktop if it encounters those commands.  Please review the
comments in $HOME/.dtprofile to see how to encapsulate those commands.
Bear also in mind, that .dtprofile is NOT a shell script.

To change a default printer, modify your LPDEST environment variable in your
.login or .profile and restart CDE.
Info Docs Article 13444

Infodoc ID   Synopsis   Date
13444   CDE: Setting up CDE to have different home session depending on machine   11 May 1999

Description Top

Setting up CDE to Have Different Home Sessions Depending on Machine?

Create subdirectories for each machine in ${HOME}/.dt. You need to include
a display number as well.  For example, to create
separate config directories for machine1 and machine2, do:

mkdir ~/.dt/machine1:0
mkdir ~/.dt/machine1:1
mkdir ~/.dt/machine2:0
mkdir ~/.dt/machine2:1

Log out and log back in to your desktop. When you log in, if the directory
exists for the current display (i.e., machine:displaynum), that directory
will be used to restore and save sessions. All other machines will use the
default directory (~/.dt/sessions).

It is also very important that you install the lates dtlogin and 
dtwm patches.
Info Docs Article 15774

Infodoc ID   Synopsis   Date
15774   Dtaction PSD   26 Sep 1997

Description Top

----------------------------------------------------------------------------

                                  Dtaction
                                    PSD

----------------------------------------------------------------------------

General Information:

  1. What are Actions
  2. Dtsession's environment and the Command Line environment
  3. Action/Data Types Search Paths and Environment Variables in CDE
  4. Files are associated with an Action in CDE
  5. Anatomy of a COMMAND Action in CDE
  6. CDE: What is dtspcd? How is it set-up?

How To's:

  7. Invoking actions from the command line
  8. CDE: How is an Action selected?
  9. Adding xload to the Front Panel in CDE
 10. CDE: Using xlock from the dtwm front panel
 11. CDE: Locking the Screen Without Using xlock or the Front Panel
 12. CDE: how to change the editor default action
 13. Adding and Removing Actions to and from the CDE desktop

Related Topics:

 14. CDE: ttsession client limit causes failed actions, defunct processes


  1. What are Actions

     Tech Note id:001.data
     Last Updated:04/18/97

     Actions are instructions written to automate tasks such as running
     applications.  Actions used with Data Types are powerful components
     for integrating applications into the desktop.  The desktop
     provides the ability to attach user interface components such as
     icons to actions.  Conversely, Actions can be easily attached to the
     desktop's Front panel.

     If you are familiar with object oriented technology, an
     analogy between that paradigm, and Actions and Data Types can be made.
     A Data Type can be thought of as a CDE class.  Actions can be
     thought of as the methods available for instances of these CDE class.
     Actions act on these instances.

     Actions can be created using the Create Action application, or
     created manually.  Create Action is launched from the Desktop_Apps
     folder in Application Manager.  There are several Actions in
     the Desktop_Tools in Application Manager, as well.

  2. Dtsession's environment and the Command Line environment

     infodoc id: 14638
     Last Updated:12/21/96

     DETAIL DESCRIPTION:

     When a CDE application, such as dtterm is started via actions (e.g.
     Front Panel, Appmanager, Workspace Menu), a different environment can
     be inherited than that which is established in the the command
     line environment.

     When CDE applications are launched via actions, the
     action inherits its environment from its parent, which is very
     likely to be the session manager, dtsession.

     By default, a user's account shell start-up files ($HOME/.login,
     $HOME/.profile etc) are *not* sourced when the user logs in via dtlogin
     and dtsession.  (This is controlled by a setting in $HOME/.dtprofile).
     Therefore by default, environment variables set in these start-up files
are
     *not* available from dtsession and to actions.

     When CDE applications are launched from the command line, the
     action inherits from that command line's shell.

     The start-up files are sourced by the time the command line
     interface is established; therefore, the start-up
     files's environment variables are available to actions.

  3. Action/Data Types Search Paths and Environment Variables in CDE

     infodoc id: 14637
     Last Updated:12/20/96

     DETAIL DESCRIPTION:

     CDE uses search paths to locate applications and associated desktop files.
     There are four search paths: Application, Database, Icons and Help data.
     Of interest to Actions and Data Types is the Database search path.   The
     Database search path is used to specify locations for action and data type
     definition files (as well as Front Panel files).

     To obtain the search paths' value for the current user, execute this
command:

             dtsearchpath -v

     dtsearchpath uses a combination of environment variables and built-in
values
     to create search paths.

     The environment variables dtsearchpath reads are called input variables.
     For the Database search path, the input variables are:

     DTSPSYSDATABASEHOSTS - System Wide Input Variable, set in
                            /etc/dt/config/Xsession.d/0010.dtpaths.
                            For example, if this file doesn't exist, copy it
from
                            /usr/dt/config/Xsession.d/0010.dtpaths.  Then,
                            add the following line:

                            export DTSPSYSDATABASEHOSTS=/var/applications/db

                            By default, this value is set to
                            /etc/dt/appconfig/types/{language}

                            where {language} by default is C.

     DTSPUSERDATABASEHOSTS - Personal (User) Input Variable, set in the
                             $HOME/.dtprofile.  For example:
                             export DTSPUSERDATABASEHOSTS=/home/user/mydb

                             By default, this value is set to
                             $HOME/.dt/types

     For changes to the input variables to take effect, one must exit, then
     re-enter the CDE window manager.

     The Database search path built-in value is
/usr/dt/appconfig/types/{language}
     where {language} by default is C.

     When dtsearchpath assembles these values, it assigns these values
     to an output variable.  For the Database search path, the output
     variable is DTDATABASESEARCHPATH.

     DTDATABASESEARCHPATH by default will be something like:

             /home/user/.dt/types
             /etc/dt/appconfig/types/%L
             /etc/dt/appconfig/types/C
             /usr/dt/appconfig/types/%L
             /usr/dt/appconfig/types/C

     DATABASESEARCHPATH is created by incorporating the following environment
     variables or locations:

         + DTSPUSERDATABASEHOSTS
         + $HOME/.dt/types
         + /etc/dt/appconfig/types/{language}
         + DTSPSYSDATABASEHOSTS
         + DTSPSYSAPPHOSTS
         + /usr/dt/appconfig/types/{language}

  4. Files are associated with an Action in CDE

     infodoc id: 14640
     Last Updated:12/21/96

     DETAIL DESCRIPTION:

     There are three items associated with Actions:

      - An action file - an executable file with the same name as an action,
but
        it is only used to "view" the action via desktop tools, for example
        File Manager or Application Manager.  For example, the action file for
        the "Reload Action" action is:

             /usr/dt/appconfig/appmanager/C/Desktop_Tools/ReloadActions

      - An action definition file - a file named with the ".dt" extension,
        containing the definition of the action.  For example, the
        action definition file for the "Reload Action" action is:

             /usr/dt/appconfig/types/C/dt.dt

        Established action files containing one or more action definitions
        can be found in /usr/dt/appconfig/types/C

      - An action icon - the pixmap or bitmap that represents the action file.
        The default icon (a jogger) is:

             /usr/dt/appconfig/icons/C/Dtactn.*

        Established CDE Action icons are found in:

             /usr/dt/appconfig/icons/C

     When an action is selected through desktop tools, the action file is
"selected".
     When an action is double-clicked, the action is invoked.  The actions
     database is searched to see if there are any actions whose name matches
     the action file's name.  If a match is found, the underlying action
     definition is used to determine the action's behavior.

  5. Anatomy of a COMMAND Action in CDE

     infodoc id: 14641
     Last Updated:12/21/96

     DETAIL DESCRIPTION:

     An Action Definition has the following syntax :

     ACTION
     {
         TYPE
         +
     }

     where:

      is the name used to invoke the action

      is one of three types of Actions:

        1) Command actions. A command action executes a command that starts an
           application, utility, shell script, or operating system command.

        2) Map actions, which is primarily used to specify alternative names
           for actions.  A map action is "mapped" to another action.

        3) TT_MSG actions, which send Tooltalk messages.

     + is one or more fields that describe an action's behavior
     or look and feel.

     Here is an overview of some of the {action_fields} used in
     the popular Action Type COMMAND:

     WINDOW_TYPE: specifies the type of windowing support required by the
action:
             - NO_STDIO: No type of windowing support.  The action
               has its own window or has no output.
             - PERM_TERMINAL: a permanent terminal emulator window, which
remains
               open until the user closes it.
             - TERMINAL: a temporary terminal emulator window, which closes as
               soon as the command is completed.

     EXEC_STRING: the application, shell script or operating system command
     that this action is to invoke.  There is special syntax that can
     be used in case arguments are needed:
             - %(File)Arg_{n}%
               lets a user drop a data file on the action
                     where {n} is an integer starting at 1
             - %Args%
               accepts multiple files, that a user drops on the action
             - %(File)"{prompt}"%
               displays a prompt for a file name, when the user invokes
               the action
                     where {prompt} is a text string that prompts the user
                                    for a file name
             -%(File)Arg_{n}"prompt" combines the two above.  It accepts
              a dropped file as an argument.  Otherwise, it displays
              a prompt for a file name
             -%(String)"prompt"% prompts for a non-file argument

     LABEL: the Action Label seen in CDE's File Manager and Application Manager

     ICON: used to specify the icons seen in CDE's File Manager and Application
     Manager

     For example, an Action that runs a single Unix C shell command is:

     ACTION csh_command
     {
         TYPE        COMMAND
         WINDOW_TYPE PERM_TERMINAL
         EXEC_STRING /usr/bin/csh -c '%(String)"Csh Command: "%'
         LABEL       One-time C Shell
         ICON        /usr/dt/appconfig/icons/C/Dtterm.m.pm
     }

     To make this work from CDE's dtfile, create an empty executable file
     called csh_command, and make it executable:

     $ touch csh_command
     $ chmod 755 csh_command

     Then, create a file called $HOME/.dt/types/csh_command, that
     has the above action.

     Run this command:

     $ dtaction ReloadActions

     To invoke the action, bring up dtfile, and double-click the csh_command
     empty file, previously created.

  6. CDE: What is dtspcd? How is it set-up?

     infodoc id: 14644
     Last Updated:12/18/96

     DETAIL DESCRIPTION:

     Dtspcd, or more formally the desktop subprocess control service daemon,
     is used by the desktop to launch remote applications and actions.
     It is an inetd daemon that accepts requests from remote clients to
     execute commands.

     As far as configuration goes, dtspcd must have access to the
authentication
     directory that is also mounted by other subprocess control client systems.
     By default, this is the user's home directory.

     Also, dtspcd must be properly registered in two files:

     1) /etc/services:

     dtspc      6112/tcp

     2)  /etc/inetd.conf:

     dtspc  stream  tcp  nowait  root  /usr/dt/bin/dtspcd/usr/dt/bin/dtspcd

     The CDE installation scripts automatically place these entries in
     their proper files.

  7. Invoking actions from the command line

     infodoc id: 14642
     Last Updated:12/19/96

     DETAIL DESCRIPTION:

     CDE provides the dtaction command for running actions from the command
line.

     For example, to run the ReloadActions action, use:

         dtaction ReloadActions

     To run an action on a remote host running CDE, use the "-execHost"
argument:

         dtaction -execHost remote ReloadActions

     For more information, see the dtaction(1) man page.

  8. CDE: How is an Action selected?

     infodoc id: 14643
     Last Updated:12/18/96

     DETAIL DESCRIPTION:

     Two steps are taken to determine which action is executed when an action
     is invoked:

     1) The action database is searched for a matching pattern name.

        The action database is created initially when a user logs into
        CDE.  However, it is recreated when the Workspace Manager is Restarted,
        when the user chooses save from the Create Action application,
        or when the ReloadActions action is invoked:

        dtaction ReloadActions

        This database is created by collecting all the action and data type
        definitions located in the DTDATABASESEARCHPATH path.
        By default, DTDATABASESEARCHPATH has these paths:

             $HOME/.dt/types
             /etc/dt/appconfig/types/%L
             /etc/dt/appconfig/types/C
             /usr/dt/appconfig/types/%L
             /usr/dt/appconfig/types/C

     2) When one or more actions exist with that name, precedence rules are
used
        to decide which one to use.

        a) If no other precedence rules apply, the precedence is based
           on the definition location.  The location precedence,
           from higher to lower precedence is:

           - personal actions - those located in $HOME/.dt/types
           - system wide local  actions - those located in
/etc/dt/appconfig/types/C
           - system wide remote actions - those located in
                     {hostname}:/etc/dt/appconfig/types/C
                     where {hostname} is the name of a remote host
                     and are listed in the application search path
                     DTSPUSERAPPHOSTS
           - built-in actions - those located in /usr/dt/appconfig/types/C

           For example, if an action called My_Action exists in both
           /etc/dt/appconfig/types/C and /usr/dt/appconfig/types/C, then
           the definition in /etc/... is the action that would be invoked

        b) Actions that have action fields: ARG_CLASS, ARG_TYPE, ARG_MODE or
           ARG_COUNT have precedence over less restrictive actions.
           Precedence among these fields, from higher to lower precedence
           is:

           - ARG_CLASS
           - ARG_TYPE
           - ARG_MODE
           - ARG_COUNT

           Since ARG_COUNT can take values or "*", values have precedence
           over "*".

           For example, if these three actions are loaded into the actions
database:

           ACTION My_Action
           {
               ARG_TYPE  TEXTFILE
           }

           ACTION My_Action
           {
               ARG_COUNT  0
           }

           ACTION My_Action
           {
               ARG_TYPE  *
           }

           and no argument is provided, then the second ACTION is invoked
           because none of the other actions apply.
           However, if an argument is provided, then the first ACTION is
           invoked.  ARG_TYPE takes precedence over ARG_COUNT.

  9. Adding xload to the Front Panel in CDE

     infodoc id: 14639
     Last Updated:12/21/96

     DETAIL DESCRIPTION:

     1. Create a file in $HOME/.dt/types called load.fp, containing this
control:

     CONTROL LoadMeter
     {
         TYPE                client
         POSITION_HINTS      3
         CONTAINER_NAME      Top
         CONTAINER_TYPE      BOX
         CLIENT_NAME         xload
         CLIENT_GEOMETRY     88x64
     }

     2. Restart the Workspace Manager.

     3. Type "xload &" at a command line.

     4. If the Home Session is used (rather than the Current Session),
        remember to re-save the Home Session to include the xload process.

 10. CDE: Using xlock from the dtwm front panel

     infodoc id: 13527
     Last Updated:07/10/96

     DETAIL DESCRIPTION:

     Using xlock in the dtwm Front Panel

     First the easy way (This is to overwrite the default CDE action)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     1. Run dtcreate
     2. Create an action called LockDisplay
     3. Set the "Command when action is opened" field to:
                      /usr/openwin/bin/xlock
     4. Set the "Window Type" field to No Output.
     5. Save the file ==> this creates a LockDisplay.dt in ~/.dt/types
     6. Reload the action.

     This will help you to bring up xlock when you are using lock in the
     front panel.

     Second way (another way to use action)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     1. Create a new action for your desktop.  We'll call it Xlock.
     2. Tell the desktop about the new action and then test it.
     3. Modify the front panel so that it will call your new
                action, Xlock, instead of the old action, LockDisplay.

     1. CREATING A NEW ACTION:

             - cd to ~/.dt/types and create a file called Xlock.dt.
             - Add the following action definition to this file.

     ACTION Xlock
     {
             LABEL           Xlock
             ARG_COUNT       0
             TYPE            COMMAND
             WINDOW_TYPE     NO_STDIO
             EXEC_STRING     /usr/openwin/bin/xlock
             DESCRIPTION     xlock
     }

             - This action definition defines an action called "Xlock".
               When the action is called, it will execute xlock by
               calling /usr/openwin/bin/xlock.

     2. TELLING THE DESKTOP ABOUT THE NEW ACTION AND TESTING IT:

             - Now that we have defined the new Xlock action, we need to
               first tell the desktop about it and then test it.
             - To tell the desktop about the new action bring up
               the "Application Manager".  You can do this by selecting
               it from the front panel.
             - From the Application Manager, select "Desktop_Tools"
             - Now, select "Reload Actions".

             - At this point, the desktop knows about the new Xlock action.
               To test it, type "dtaction Xlock".  Xlock should start up.

     3. ADDING THE NEW ACTION TO THE FRONT PANEL:

             - copy the dtwm front panel configuration file, dtwm.fp, from
               /opt/CDE/appconfig/types/C directory to your personal dt
               directory "~/.dt/types" directory.
             - cd to ~/.dt/types
             - From here, edit the dtwm.fp
             - Search for Lock.  You should see something like:

     CONTROL Lock
     {
       TYPE                  icon
       CONTAINER_NAME        Switch
       CONTAINER_TYPE        SWITCH
       POSITION_HINTS        1
       ICON                  Fplock
       LABEL                 Lock
       PUSH_ACTION           LockDisplay
       HELP_TOPIC            FPOnItemLock
       HELP_VOLUME           FPanel
     }

             - When you press the lock icon on the front panel, it calls
               the action LockDisplay.  The above paragraph is the definition
               for that front panel lock icon.

             - To get the front panel lock icon to call the action we
               just defined, Xlock, instead of the LockDisplay action, all
               you need do is change the PUSH_ACTION line from
               "LockDisplay" to "Xlock".

     CONTROL Lock
     {
       TYPE                  icon
       CONTAINER_NAME        Switch
       CONTAINER_TYPE        SWITCH
       POSITION_HINTS        1
       ICON                  Fplock
       LABEL                 Lock
       PUSH_ACTION           Xlock
       HELP_TOPIC            FPOnItemLock
       HELP_VOLUME           FPanel
     }

             - Note:  You might change the Label field to Xlock and you
               might remove the HELP_TOPIC and HELP_VOLUME fields, but this
               modification is not necessary.

             - Now tell the window manger to reread the configuration
               files.  You do this by selecting "Restart Workspace Manager..."
               from your workspace menu.

             - Press the lock icon on the front panel...xlock should be
               called.  If not, make sure your DTDATABASESEARCHPATH
               environment variable contains $HOME/.dt/types.

 11. CDE: Locking the Screen Without Using xlock or the Front Panel

     srdb id: 13436
     Last Updated:07/10/96

     DETAIL DESCRIPTION:

     Locking the Screen in CDE Without Using xlock or the Front Panel

     There are three ways to do this:

     1. From the command line:

     /usr/dt/bin/dtaction LockDisplay

     2. From the menu:

     Put the following line in your $HOME/dtwmrc file:

      "LOCK" Alt Shiftl      f.action        LockDisplay

     3. Using an accerator key:

     Use method 2, but specify a key of your choice for locking the screen.

     SOLUTION SUMMARY:

     There are 2 solutions to this problem:

     1. from command line:

     /usr/dt/bin/dtaction LockDisplay

     2. from menu

     Please put this in your $HOME/dtwmrc

      "LOCK" Alt Shiftl      f.action        LockDisplay

     3. Using accerator key:

     Using the previous methods 2 but using the key you define to
     invoke the CDE lock screen.

 12. CDE: how to change the editor default action

     infodoc id: 13356
     Last Updated:07/10/96

     DETAIL DESCRIPTION:

     CDE:  Changing the Editor Default Action

     a) cp /usr/dt/appconfig/types/C/user-prefs.dt
$HOME/.dt/types/user-prefs.dt

     b) Change the MAP_ACTION to the appropriate editor action.  Many actions
             already exist in other *.dt files in /usr/dt/appconfig/types/C
             for commonly used editors, such as vi and textedit, so it is
             easy to map this to another action.

     To change the action to use OpenWindows textedit:

        ACTION TextEditor
        {
              LABEL           Text Editor
              ICON            OWtextedit
              TYPE            MAP
              MAP_ACTION      OWtextedit
              DESCRIPTION     Use OW textedit
        }

     To change the action to use vi:

        ACTION TextEditor
        {
              LABEL           Text Editor
              ICON            Dtpenpd
              TYPE            MAP
              MAP_ACTION      Vi
              DESCRIPTION     Use standard unix vi editor
        }

 13. Adding and Removing Actions to and from the CDE desktop

     infodoc id: 14636
     Last Updated:12/20/96

     DETAIL DESCRIPTION:

     Actions can be placed on the CDE desktop simply by dragging
     the action from dtfile and placing it on the desktop.
     Actions remain on the desktop, much like any other window.

     When a user logs out of CDE, but returns to the current session,
     the actions remain on the desktop.

     This information is stored in $HOME/.dt/Desktop/.!dtdesktop.  However, do
     not edit this file.

     To remove actions, select them on the desktop, press the right
     mouse button and select "Remove from Workspace" from the resulting menu.

     Multiple actions can be selected by dragging a select box around the
icons.

 14. CDE: ttsession client limit causes failed actions, defunct processes

     infodoc id: 13380
     Last Updated:07/10/96

     DETAIL DESCRIPTION:

     If you have a lot of tools running and new tools mysteriously start
     failing to come up, you may have reached the default limit of
     ToolTalk clients.

     To raise the limit, set the -N option on the ToolTalk
     message daemon, ttsession.  This can be done by setting

     dtstart_ttsession='/usr/dt/bin/ttsession -sN'

     in the user's ~/.dtprofile. See "Starting the ToolTalk messaging
     daemon" in the CDE Advanced User's and System Administrator's Guide.
     As described in the book, the change can be made for all users on a
     system by adding a script to /etc/dt/config/Xsession.d; before doing this
for
     all users, consider that setting the -N option on ttsession will increase
     ttsession's working set.  This effect is most noticeable on
     small-memory systems running Solaris 2.4; systems with lots of memory
     and systems running Solaris 2.5 or later are much less affected.

     This is a known bug, bugID 1222870. It has been fixed in 1.2.1.

     By default, the desktop's ToolTalk session is limited to about 30
     ToolTalk clients.  This includes dtsession, dtwm, dtfile, dtpad,
     dtmail, dtterm, and any long-running command actions launched from
     e.g. the front panel, dtfile, or dtmail.  When the limit is reached,
     ToolTalk client applications (and indeed any command action) can
     fail, sometimes without any error message.
Info Docs Article 16267

Infodoc ID   Synopsis   Date
16267   How to make the dtterm title bar dynamic   13 Jan 1998

Description Top

How to make the dtterm title bar dynamic.

This is not controlled by the terminal window itself. It's controlled
by the escape sequences sent to the terminal window. The exact use of the 
escape sequences can be found in the man page for dtterm(5).

There are several examples listed below to do this:

Example 1: (Simple escape sequence to dynamically generate title for dtterm 
             or xterm)

Place the following line in your $HOME/.cshrc file:

  alias cd 'cd \!*;echo $cwd;echo ^[]0\;\(`uname -n`\):$cwd^G'

Now source you .cshrc file.

Example 2: (Expert Level: The below example will work for any window not
            just dtterm and will work across telnets)

1. Place the following in your $HOME/.cshrc:

   #  Set banner for cmdtool
   if ( $TERM == "sun-cmd" || $TERM == "sun" || $TERM == "dtterm") then
      source $HOME/.xbanners
   endif

2. Make sure to REMOVE the following from your $HOME/.cshrc file:

   a.) If you have a "set prompt = ..."
   b.) Any aliases for cd, back, push, pop, or rlogin

3. Add the follow file to your home directory and name it .xbanners:

#  .xbanners -- a file to be sourced if you want to have banners that
#		tell you what machine and where you are for a window.
#
# the header string displays the host and user names, very helpful
# if you log on multiple machines or as different users
setenv HOSTNAME `hostname`
#set headerstring = " $USER @ $HOSTNAME -- "
set headerstring = " $HOSTNAME ($USER) -- "
alias setprompt	set prompt = "$HOSTNAME'% '"
setprompt
set oldcd = `pwd`

alias cd  'set oldcd = `pwd`;chdir \!*;set x = `dirs`;echo -n "]l
           $headerstring $x[1] \";unset x'    #;setprompt'

alias back 'set x = $oldcd;set oldcd = `pwd`;chdir $x;set x = `dirs`;echo -n
            "]l $headerstring $x[1] \";unset x;setprompt'

alias push  'set oldcd = `pwd`;pushd \!*;set x = `dirs`;echo -n "]l
             $headerstring $x[1] \";unset x;setprompt'

alias pop  'set oldcd = `pwd`;popd;set x = `dirs`;echo -n "]l
            $headerstring $x[1] \";unset x;setprompt'

alias rlogin  '/usr/ucb/rlogin \!*;set x = `dirs`;echo -n "]l
               $headerstring $x[1] \";unset x;setprompt'

setenv BANNERS

cd .

Info Docs Article 17940

Infodoc ID   Synopsis   Date
17940   How to determine if the frame buffer is running in 8 bit or 24 bit mode   4 Jan 2000

Description Top

How to determine if a frame buffer is running in 8-bit or 24-bit mode.

- Run: #xdpyinfo | more

- Page down to area of output that says "depth of root window:"

- The "# planes" listed is equal to the # bit mode the frame 
  buffer is running in.

For example,
  depth of root window:    24 planes

means that the frame buffer is running in 24 bit mode.
Info Docs Article 21423

Infodoc ID   Synopsis   Date
21423   How ffbconfig and other graphic card configuration tools determine the monitor resolution capability   24 Dec 1999

Description Top

The below description relates to ffbconfig, but is also true of other
xxxconfig utilities that support DDC.

The monitor is interrogated by the OBP (Fcode PROM) at reset (init) time (e.g. 
when you do reboot) via two (serial) lines (called DDC sense and clock lines) 
connected to the monitor. Then the OBP (Fcode) puts the returned data on the 
PROM device tree node for the device (e.g ..../ffb0) as a property called 
edid_data, so that the kernel driver can later retreive this data (called edid)

and use it when a GETEDIDDATA or SETMODE ioctl is sent to it.
This edid data contains data pertaining to display monitor particulars, such as

supported resolutions/modes, etc.
ffbconfig in turn issues the GETEDIDDATA ioctl to the Kernel Driver to obtain 
this data.

What is DDC?:

DDC (Display Identification Standard) is a VESA standard for obtaining
information 
from the monitor. DDC allows the frame buffer to read the monitor's information
EDID. 
This information entails resolutions supported, max width, max refresh, sync
type and so
forth. DDC uses the protocol known as I2C (I squared C). For more information
on I2C, look 
in Phillips I2c handbook of Phillips Desktop Video Data Handbook. 

I2C Bus:

I2C is a bidirectional two line bus. It uses external pull up resistors and
allows either 
the slave (monitor) or master (host) to pull down the signal. The maximum clock
rate is 
specified to be 100Khz. 

What is DDC1/2/2B/2B+/2AB ?

  DDC1 Uses vsync instead of SCL to transfer EDID data, unidirectional, point
to point. 
  DDC2 Standard never implemented 
  DDC2B Uses I2C bus to read EDID, unidirectional, point to point. What Sun
uses! 
  DDC2B+ Modification to DDC2B to allow bidirection interface, point to point. 
  DDC2AB Same as DDC2B+ but multi point. Other devices can be on bus. 

* Bidirectional implementation allows monitor settings control from the host. 

EDID 1.0/1.1:
The EDID information consists of 128 bytes of monitor data. Refer to the
included list 
for a summary. Both EDID versions 1.0 and 1.1 are supported in 
pineapple (PGX/PGX8 8-bit only) and FFB2. The difference in these versions lies
in the 
detailed timings information section. Since we do not use the detailed timings,
both 
versions appear the same. Additional blocks of 128 bytes can be stored in EDID
extension 
blocks (aka VDIF) after the initial EDID block. These blocks contain addtional
detailed 
timing information. There is a flag within the EDID to indicate the existence
of these 
blocks. VDIF is not currently used in our systems. 

Procedure for monitor initialization:

1) Read Sense Codes and set initial resolution to appropriate value
        1a)     If no sense code, use 1152x900x66
2) Read EDID 1.5 seconds after applying sync
        2a)     Use first standard timing id that matches a supported
resolution
                on the frame buffer     (Look at list for matches)
        2b)     If no standard timings match, or no EDID present, use
resolution
                as determined in step 1
3) Look at NVRAM settings.  If output_display = resolution, set resolution to
        that value, else use results from EDID.

FRAME BUFFERS:

PGX:

Full DDC support 

FFB:

FFB does not officially support DDC. 

FFB2:

FFB2 does officially support DDC.  
Clock stretching is not supported. The current FFB2
fcode does not support ack as either. 

FFB2+:

Has full DDC support. 

AFB:

Supports DDC based on RAMDAC. If it is a 49(7 or 8)+, it will have full DDC.
Info Docs Article 23476

Infodoc ID   Synopsis   Date
23476   Hardware Diagnostics for Sun Systems: A Toolkit for System Administrators   10 Aug 2000

Description Top


Hardware Diagnostics for Sun TM Systems: A Toolkit for System Administrators
 

Have you ever stared at the ok prompt on your Sun system, and wondered how to continue? Or have you ever wondered why all the LEDs on the system board sometimes appear to flash madly like a broken street light?

Look no further -- read on to find the answer to these questions.

By using OpenBootTM commands, the Power On Self Test (POST) program, and the status LEDs on system boards, you can diagnose hardware related problems on Sun Microsystems TM server and desktop products. With these low-level diagnostics, you can establish the state of the system and attached devices. For example, you can determine if a device is recognized by the system and working properly, or you can also obtain useful system configuration information.

Use this table to locate subjects in this article:

OpenBoot Prom (OBP) Diagnostic Commands and Tools Describes OBP commands you can use to display the system configuration, test devices attached to the system, monitor network connections, and more.
OBDiag Shows how you can run tests and perform diagnostics on the main logic board and its interfaces, and on devices such as disk and tape drives.
Power On Self Test (POST) Explains how POST initializes, configures, and tests the system, and shows you how to capture POST output and interpret the results using the LEDs on the system board and power supply.
System Board and Power Supply LED Status Tables Provides reference information to help you interpret the meaning of LED status for system boards and power supplies installed on Ultra TM Enterprise Server products.
Solaris Operating Environment Diagnostic Commands Lists useful OS commands you can use to display the system configuration, including failed Field Replacable Units (FRU), hardware revision information, installed patches, and more.

OBP DIAGNOSTIC COMMANDS AND TOOLS

OBP is a powerful, low-level interface to the system and devices attached to the system (OBP is also known as the ok prompt). By entering simple OBP commands, you can learn system configuration details such as the ethernet address, the CPU and bus speeds, installed memory, and so on. Using OBP, you can also query and set system parameter values such as the default boot device, run tests on devices such as the network interface, and display the SCSI and SBUS devices attached to the system.

The following table describes commands available in OpenBoot version 3. x. To use a command, simply type the command at the OBP ok prompt and press Return.

banner Displays the power on banner. The banner includes information such as CPU speed, OBP revision, total system memory, ethernet address and hostid.
devalias alias path Defines a new device alias, where alias is the new alias name and path is the physical path of the device. If devalias is used without arguments, it displays all system device aliases (will run up to 120 MHz).
.enet-addr Displays the ethernet address.
led-off/led-on Turns the system led off or on.
nvalias name path Creates a new alias for a device, where name is the name of the alias and path is the physical path of the device.
Note - Run the reset-all or the nvstore command to save the new alias in non-volatile memory (NVRAM).
nvunalias name path Deletes a user-created alias (see nvalias), where name is the name of the alias and path is the physical path of the device.
Note - Run the reset-all or nvstore command to save changes in NVRAM.
nvstore Copies the contents of the temporary buffer to NVRAM and discards the contents of the temporary buffer.
power-off/power-on Powers the system off or on.
printenv Displays all parameters, settings, and values.
probe-fcal-all Identifies Fiber Channel Arbitrated Loop (FCAL) devices on a system. 1
probe-sbus Identifies devices attached to all SBUS slots.
Note - This command works only on systems with SBUS slots.
probe-scsi Identifies devices attached to the onboard SCSI bus. 1
probe-scsi-all Identifies devices attached to all SCSI busses. 1
set-default parameter Resets the value of parameter to the default setting.
set-defaults Resets the value of all parameters to the default settings.
Tip - You can also press the Stop and N keys simultaneously during system power-up to reset the values to their defaults.
setenv parameter value Sets parameter to specified value.
Note - Run the reset-all command to save changes in NVRAM.
show-devs Displays all the devices recognized by the system.
show-disks Displays the physical device path for disk controllers.
show-displays Displays the physical device path for frame buffers.
show-nets Displays the physical device path for network interfaces.
show-post-results If run after Power On Self Test (POST) is completed, this command displays the findings of POST in a readable format.
show-sbus Displays devices attached to all SBUS slots. Similar to probe-sbus .
show-tapes Displays the physical device path for tape controllers.
sifting string Searches for OBP commands or methods that contain string. For example, the sifting probe command displays probe-scsi, probe-scsi-all, probe-sbus , and so on.
.speed Displays CPU and bus speeds.
test device-specifier Executes the selftest method for device-specifier. For example, the test net command tests the network connection.
test-all Tests all devices that have a built-in test method.
.version Displays OBP and POST version information.
watch-clock Tests a clock function.
watch-net Monitors the network connection for the primary interface.
watch-net-all Monitors all the network connections.
words Displays all OBP commands and methods.
1 On Ultra (sun4u) systems, set the auto-boot? variable to false , or the probe-scsi, probe-scsi-all, and probe-fcal-all commands will cause the system to hang. To set this variable, type setenv auto-boot? false at the ok prompt, then type reset-all (remember to change the value back to true when testing is completed, or the system will not automatically boot).

OBDIAG

OBDiag enables you to interactively run tests and diagnostics at the OBP level on these Sun systems:

OBDiag displays its test results using the LEDs on the front system panel and on the keyboard. Use the system board and power supply LED status tables table to interpret the results.

OBDiag also displays diagnostic and error messages on the system console. To learn more about OBDiag, visit docs.sun.com.

On the main logic board, OBDiag tests not only the main logic board, but also its interfaces:

How To Run OBDiag

To run OBDiag, simply type obdiag at the Open Boot ok prompt.

You can also set up OBDiag to run automatically when the system is powered on using the following methods:

POWER ON SELF TEST (POST)

POST is a program that resides in the firmware of each board in a system, and it is used to initialize, configure, and test the system boards. POST output is sent to serial port A (on an Ultra Enterprise server, POST output is sent only to serial port A on the system and clock board). The status LEDs of each system board on Ultra Enterprise servers indicate the POST completion status. For example, if a system board fails the POST test, the amber LED stays lit.

You can watch POST ouput in real-time by attaching a terminal device to serial port A. If none is available, you can use the OBP command show-post-results to view the results after POST completes.

How To Run POST

  1. Attach a terminal device to serial port A.

  2. Set the OBP diagnostics variable:

    ok setenv diag-switch? true

  3. Set the desired testing level.
    Two different levels of POST can be run, and you can choose to run all tests or some of the tests. Set the OBP variable diag-level to the desired level of testing (max or min), for example:

    ok setenv diag-level max

  4. If you wish to boot from disk, set the OBP variable diag-device :

    ok setenv diag-device disk

    The system default for this variable is net.

  5. Set the auto-boot variable:

    ok setenv auto-boot? false

  6. Save the changes.
ok reset-all

  • Power cycle the system (turn it off, and then back on).

    POST runs while the system is powered on, and the output is displayed on the device attached to serial port A. After POST is completed, you can also run the OBP command show-post-results to view the results.

    SYSTEM BOARD AND POWER SUPPLY LED STATUS TABLES

    This section contains reference information to help you understand the LED status on system boards and power supplies installed on Ultra Enterprise Server products.

    Ultra Enterprise Server Front Panel and Clock Board LED Status

    Power LED Service LED Cycling LED Condition
    off off off no power
    off on off failure mode
    off off on failure mode
    off on on failure mode
    on off off hung in POST/OBP or OS
    on off on hung in OS
    on on off hung in POST/OBP
    hung in OS/failed component
    on on on hung in POST/OBP
    hung in OS/failed component
    on off flashing OS running normally
    on on flashing OS running with failed component
    on flashing off slow flash = POST
    fast flash=OBP
    on flashing on OS or OBP error

    Notes:

    LED Name Location Note
    Power LED Left Should always be on. If all three LEDs are off, suspect a power problem. If this LED is in any other state than on and steady, it indicates a problem.
    Service LED Middle This LED should be off in normal operation. If on, a component is in an error state and you should check check individual board LEDs. A lit service LED does not imply there is an OS-related problem.
    Cycling LED Right This LED should be flashing -- this is the normal state.

    Ultra Enterprise CPU/Memory, I/O, and Disk Board LED Status

    Power LED Service LED Cycling LED Condition
    off off off board no power
    off on off low power mode - unpluggable
    off off on failure mode
    off on on failure mode
    on off off hung in POST/OBP of OS
    on off on hung in OS
    on on off hung in POST/OBP
    hung in OS and failed component on board
    on on on hung in POST/OBP
    hung in OS/failed component on board
    on off flashing OS running normally
    on on flashing OS running normally/failed component on board
    on flashing off slow flash = POST
    fast flash = OBP
    on flashing on OS or OBP error
    Notes: Low Power Mode - If the status of the LEDs on the board is off-on-off, this means the board is in low power mode. This occurs when the board is disabled because it failed POST, or if the board was just inserted. Low power mode is the only state in which you may unplug the board while the system is running.
    Disk Boards - The amber LED on disk boards installed in Ultra Enterprise servers will remain on when the Ultra Enterprise server is running Solaris 2.6 5/98 or above. This is normal, and it indicates the board is in low power mode (the board can be removed from the system provided the disks have been idled).
    Power Supply LED Status

    LEDs are used on the power supply to report an error condition such as power supply or fan failure. Power supplies are hot-pluggable, but the Solaris Operating Environment halts the system if insufficient power is detected. Generally, a system is configured with a power supply for each system board.

    Green LED Yellow LED Condition
    off off No AC input or keyswitch is turned off
    on off normal operation
    on on Fan failure or one or more voltages out of specification
    off on One or more DC outputs failed, or voltages out of specification, or system in low power state
    SOLARIS OPERATING ENVIRONMENT DIAGNOSTIC COMMANDS

    The following table describes OS commands you can use to display the system configuration, such as failed Field Replaceable Units (FRU), hardware revision information, installed patches, and so on.

    /usr/platform/sun4u/sbin/prtdiag -v Displays system configuration and diagnostic information, and lists any failed Field Replaceable Units (FRU).
    /usr/bin/showrev [-p] Displays revision information for the current hardware and software. When used with the -p option, displays installed patches.
    /usr/sbin/prtconf Displays system configuration information.
    /usr/sbin/psrinfo -v Displays CPU information, including clock speed.

    RELATED LINKS

    Using Device Path Names to Identify System Devices: Eliminate the Guesswork
    Establish the hardware configuration of your system using the OpenBootTM device tree.

  • Info Docs Article 17131

    Infodoc ID   Synopsis   Date
    17131   How do I add an additional head (framebuffer) to my system?   20 Jan 2000

    Description Top

    How do I add an additional head (framebuffer) to my system?
    ===========================================================
    
    Adding an additional head to a system is quite easy.  Before OpenWindows 
    v3.2 (Solaris 2.2) there was a limit of 4 heads supported by the xnews server.  
    With v3.2 this was raised to 16.  However, the effective limit is dependent
    upon the physical limitations of a particular system.
    
    In order to add an additional framebuffer, follow these steps.
    	
    1) touch /reconfigure
    2) halt the system
    3) power off the system
    4) Install the framebuffer
    5) reboot the system.  It should perform a re-configuration boot (due to the 
       existence of /reconfigure).
    
    How do I start OpenWindows in a dual-headed configuration?
    ==========================================================
    
    You will need a machine that has two frame buffers correctly installed,
    together with matching monitors. The frame buffers do not need to be
    identical; there are several advantages in having each screen running
    on entirely different framebuffers.
    
    The component that controls the screen is the X server, Xsun. This is started
    automatically when you invoke openwin. Openwin will pass flags and options
    down to Xsun to tell it how to configure the displays. The flags needed are
    detailed in the Xsun manual page.
    
    Take as an example a machine which has two GX's installed. Looking in /dev
    you  should see the following: 
    
          /dev/fb is a symbolic link to the frame buffer entry in the devices 
    directory:
          /devices/sbus@1,f8000000/cgsix@1,0:cgsix0. 
          /dev/fb0 and /dev/fb1 are links to entries in the directory /dev/fbs,
    in this case
          /dev/fbs/cgsix0 and /dev/fbs/cgsix1. 
    
    To start up a multi headed configuration you must specify each device you
    wish to use using the option -dev, thus: 
    
            openwin -dev /dev/fb0 -dev /dev/fb1
    
    For a 3 headed system, this would be 
        openwin -dev /dev/fb0 -dev /dev/fb1 -dev /dev/fb2
     
      The order that you give them is important for two reasons; display zero 
    machinename:0.0 comes first, then display one machinename:0.1 and so on. By 
    default they are ordered left to right; to change the order you can use the 
    keywords left, right, top or bottom. Thus the commands: 
    
            openwin -dev /dev/fb0 -dev /dev/fb1 left
            openwin -dev /dev/fb1 -dev /dev/fb0
    
    will start up OpenWindows with fb1 on the left and fb0 on the right, but in
    the first instance fb0 will be logical screen 0, and in the second it will be 
    screen 1.
    
    The keyword tells the server where to position the current display relative to 
    the previous one, so any keyword placed after the first device is ignored. If
    no keyword is given, the default is right. Thus the command: 
    
            openwin -dev /dev/fb0 top -dev /dev/fb1
    
    will not have the desired effect; you would need to use: 
    
            openwin -dev /dev/fb0 -dev /dev/fb1 bottom
    
    Other keywords can be used after the device name to control such things as 
    default depth or visual; these are discussed in the manual pages and are
    beyond the scope of this document.
    Info Docs Article 15890

    Infodoc ID   Synopsis   Date
    15890   Keyboard Mapping PSD/FAQ   2 Mar 2000

    Description Top

    Keyboard Frequently Asked Questions
    Last updated: October 9, 1997
        
    1.  What is a keyboard modifier?
    2.  How do I set the Function Key escape sequence in shelltool?
    3.  How do I set the Function Key escape sequence in cmdtool & textedit?
    4.  How do I set the Function Key escape sequence in xterm?
    5.  How do I set keyboard translations for dtterm?
    6.  In Solaris 2.6, how do I setup keyboard translations for the dtterm?
    7.  How do I use the F11 and F12 Function Keys?
    8.  How do I use the F11 and F12 Function Keys for Solaris 2.6?
    9.  How do I prevent the F1 Function Key from bringing up Help?
    10. What is the recommended way to emulate a VT100 keyboard?
    11. What are the commands to manipulate the keyboard in OpenWindows?
    12. How do I customize the keyboard layout for all X applications?
    13. What keyboard resources can be set in .Xdefaults?
    14. How do I turn on keyboard Accelerators for CDE?
    15. How do I turn on keyboard Accelerators for Openwindows?
    16. How do I turn on Menu Accelerator keys for CDE?
    17. How do I make the Back Space and Delete keys both send delete?
    18. How do I change the Key rate in openwindows?
    19. How do I change the delete/backspace key functionality in Dtmail?
    20. How do I get my Xlib application to receive Keyboard input?
    21. When I exit openwindows, my keyboard only prints garbage to the screen
    22. How do I disable the L1-A key on my keyboard?
    23. How do keysyms and keycodes work?
    24. How do I get the Print Screen Key to work in Openwindows or CDE?
    25. How do I map the Front and Open keys in CDE?
    26. Where can xmodmap changes be added permanently?
    27. Are there any public domain utilities that have a GUI front-end to
        xmodmap?
    
    ---------------------------------------------------------------------------
    
    1. What is a keyboard modifier?
    
    	Shift(CapsLock) and AltGraph (Mode_switch) are the 2 modifers
    	supported by Xlib. Client applications are in charge of the other
    	modifiers. 
    	
    	Suppose you type xmodmap -e 'keysym q = a b c d'
    	
    	q will give          	a
    	shift+q			b
    	AltGraph+q		c
    	Shift+AltGraph+q	d
    	
    	
    	OR type xmodmap -e 'keycode 16 = 0x0c9 b c d'
    	
    	F11 will give		É  ( Which is E with an accent )
    	Shift+F11		b
    	AltGraph+F11		c
    	Shift+AltGraph+F11	d
    	
    2.  How do I set the Function Key escape sequence in shelltool?
    
    	Openwindows 3.X:
    	
    	This is done by modifying the .ttyswrc file in your home directory. 
    	This file allows you to attach text, including escape codes to Function 
    	Keys. The format of the .ttyswrc file is:
    	
    	#				Starts a comment line
    	mapi	[Key]	[text]		Inputs [text] when [key] is pressed
    	mapo	[Key] 	[text]		Outputs [text] when [key] is pressed
    	
    	The [key] may be F2 -F10, R1-R7, R9, R11, R13, R15, L2 (Again), 
    	L3 (Props), and L4(Undo) as the [key]. There are no provisions for 
    	shifted and unshifted function keys. The shift state is ignored.
    	
    	The [text] may contain escape strings such as \E for escape, \n for 
    	newline, ^X for Control-X.
    	
    	mapi will send the [text] out to the application as if the text were 
    	sent via the keyboard. This is what you would want to use if you wanted 
    	to map an escape sequence to a Function Key.
    	
    	mapo will send the [text] to the tty as if it were sent out from the
    	application. This is useful when you want to set things on the tty line
    	such as the cursor position. It is not as common as mapi.
    	
    	A sample .ttyswrc file is in $OPENWINHOME/lib/.ttyswrc.
    	
            Example:
                
                  To map F5 key to send out <ESC>[228z the following line
                  would be in .ttyswrc
                  
                     mapi F5	\E[228z
                     
    3. How do I set the Function Key escape sequence in cmdtool & textedit?
    
    	This is done by modifying the .textswrc file in your home directory.
            The file allows you to attach filters to Function Keys. Filters are
            really just programs that are run, so you can use /usr/bin/echo to
            send out the escape code. The format of the .textswrc file is:
    
                    [key-name]      FILTER     
                    [command-line]
    
            The [key-name] is a string signifying the area on the keyboard where
            the Function Key resides. It is either KEY_TOP(xx) for the Fxx keys,
            KEY_LEFT(xx) for the Lxx keys, or KEY_RIGHT(xx) for the Rxx keys.
    
            The F2-F10, R1-R7, R9, R11, R13, R15, L2, L3, L4 may be used in the
            .textswrc file. There are no provisions for shifted and unshifted
            function keys. The shift state is ignored.
    
            The [command-line] is the command you would type to send out
            the escape code. /usr/bin/echo would be good for this purpose.
    
            For openwindows 3.0, a sample .textswrc file is located in 
            /usr/lib/textswrc. For openwindows 3.4 and above the .textswrc file
            is located in /usr/openwin/share/src/xview/examples/textsw/textswrc.
    
            Example1
                    To map the F5 key to send out <ESC>[228z, you would put
                    the following two lines in .textswrc
    
                            KEY_TOP(5)      FILTER
                            /usr/bin/echo "\033[228z\c"
                            
            Example2
                    To map F10 Key to print the date and your name, you would put
                    the following two lines in .textswrc
                    
                            KEY_TOP(10)     FILTER
                            /usr/bin/echo "[ `date +%e.%b.%y` KLEIN ]\n"
                            
                            which outputs : [ 23.Sep.97 KLEIN ]
    
    4.  How do I set the Function Key escape sequence in xterm?
    
        Openwindows 3.X ONLY:
        
        This is done by adding some lines to the $HOME/.Xdefaults file in
        your home directory and then running xrdb -l $HOME/.Xdefaults to reload 
        the X resources. The lines should have the following format for 
        Openwindows 3.0:
    
                    XTerm.VT100.Translations:       #override                
    [ShiftStates]<key>[KeySym]:     string([text]) \n                ...
                    [ShiftStates]<key>[KeySym]:     string([text])
                    
        The format for Openwindows 3.4 and above:
        
                    XTerm.VT100.Translations:       #override                
    [ShiftStates]<key>[KeySym]:     string([text]) \n                ...
                    [ShiftStates]<key>[KeySym]:     string([text])\n
        
    
        The [ShiftStates] are the states of key keyboard modifiers that
        need to be in effect when they key is pressed. The values can be
        any combination of Shift, Ctrl, Meta, mod1, mod2, mod3, mod4 & mod5.
        Placing a tilde (~) in front of a modifier specifies that the modifier
        is Up or Not Pressed rather than Down or Pressed. Being able to
        specifies shift states allows the Shifted and Unshifted keys to
        be unique.
    
        The [KeySym] is the symbol that the key generates when it is pressed.
        This value can be retrieved by running $OPENWINHOME/demo/xev, moving
        the pointer into the window that xev creates, and pressing the desired
        keys. This will generate text in the window you started xev from. If
        you look at the text that is displayed, you will see in the some text
        like (keysym nnnn, kkkk). It is the kkkk field that is the [KeySym].
        
        The [text] field is the string that you actually want to be sent.
        it had been typed. Quotation is necessary if the string contains
        whitespace or non-alphanumeric characters. If the string argument
        begins with the characters ``0x'', it is interpreted as a hex
        character constant.
        
        To see example Xterm translations for any Openwindows see the file 
        $OPENWINHOME/lib/app-defaults/XTerm
    
        *********************************************************************
        Openwindows 3.0:
        Note that every line except the first and the last lines must have
        the "\n\" string appended to it. The first line needs only a "\", and
        the last line should have nothing.
        
        Openwindows 3.4 and above:
        Note that every line except the first and the last lines must have
        the "\n\" string appended to it. The first line needs only a "\", and
        the last line should have "\n".
        
        *********************************************************************
        
        Example for Openwindows 3.0:
        
                    To map the F5 key to send out <ESC>[228z, you would put
                    the following two lines in $HOME/.Xdefaults
    
    
                    XTerm.VT100.Translations:   #override                 <Key>F5: 
                      string(0x1b) string("[228z")
    
        Example for Openwindows 3.4 and above:
        
        		To map the F5 key to send out <ESC>[228z, you would put
        		the following two lines in $HOME/.Xdefaults
        		
        		XTerm.VT100.Translations:   #override                 <Key>F5:           
            string(0x1b) string("[228z")\n
                    
    5.  How do I setup key translations for dtterms?
    
        Openwindows 3.4, 3.5 and 3.5.1 ONLY:
        
        dtterm uses the osf keysyms for actions/translations instead of the
        Sun-defined ones like xterm uses. 
    
        The order in which the key translations are done is important.
        If you are trying to get a Shift-F2 key to print "Hello"
        and the non-shifted F2 key to print "Good bye", then
        you *must* have the shifted key listed before the non-shifted key.
        
        How to map the PageUp, PageDown, Home, End, Delete, and Insert keys
        to escape sequences ?
        
        When attempting to change any key mappings for a dtterm, you can not 
        use the "#override" option for the action/translations.  You must use 
        the "#replace".
    	  
    	  So, the below line will not work:
    	  
    	  	*DtTerm*Translations:   #override 
    
    	  But this one will:
    	  
    	  	*DtTerm*Translations:   #replace 
    
    
         Please refer to bug id 1232154.
         
         So, one must supply *ALL* key mappings even if you want to
         replace/modify one key.  The entire list of action/translation
         mappings can be found in the man page for DtTerm(3).
         
         It seems that using Sun's Keysyms, Prior, Next, Home, End,
         Delete, and Insert, will not work for a dtterm.  You must use 
         the osf equivalents listed below:
    
    		Sun:		osf:
    		~~~~~		~~~~~~~~~
    		Prior		osfPageUp
    		Next		osfPageDown
    		End		osfEndLine
    		Home		osfBeginLine
    		Delete		osfDelete
    		Insert		osfInsert
    
         The order in which your new key mappings are listed is important.
         If you put a non-shifted key ( <Key>osfPageUp ) before
         a shifted key ( Shift<Key>osfPageUp ), only the non-shifted
         key mapping will be used.  So, please put any multi-key 
         mappings before the non-shifted key mapping.
    	  
         Below are the translations keys used with the action, "string()".
    
    
         	Shift<Key>osfPageUp:           string(" Shift osfPageUp ") \n
    	Shift<Key>osfPageDown:         string(" Shift osfPageDown ") \n
    	Shift<Key>osfEndLine:          string(" Shift osfEndLine ") \n
    	Shift<Key>osfBeginLine:        string(" Shift osfBeginLine ") \n
    	Shift<Key>osfDelete:           string(" Shift osfDelete ")\n
    	Shift<Key>osfInsert:           string(" Shift osfInsert ")\n
    	Shift<Key>SunF36:              string(" Shift SunF36 ") \n
    	Shift<Key>SunF37:              string(" Shift SunF37 ") \n
    	<Key>osfPageUp:                string(" osfPageUp ") \n
    	<Key>osfPageDown:              string(" osfPageDown ") \n
    	<Key>osfEndLine:               string(" osfEndLine ") \n
    	<Key>osfBeginLine:             string(" osfBeginLine ") \n
    	<Key>osfDelete:                string(" osfDelete ") \n
    	<Key>osfInsert:                string(" osfInsert ") \n
    	<Key>SunF36:                   string(" SunF36 ") \n
    	<Key>SunF37:                   string(" SunF37 ") \n
    
        The translations can be put in either the $HOME/.Xdefaults file or in
        /usr/dt/app-config/C/DtTerm file.
    	  
        The Insert key could not be mapped to anything. 
    	  
        If you have used the above mappings and have gotten them to work,
        then you are ready to change the mappings to be something more useful.
    
        Once you've added the key translations for the dtterms into your
        .Xdefaults, run xrdb -l $HOME/.Xdefaults to reload X resouces.
        
        Sample entries can be extracted from the DtTerm man page.
        
    6. In Solaris 2.6, how do I setup keyboard translations for the dtterm?
    
    Openwindows 3.6 ONLY:
    
    1.  If the individual wishes to make a system wide changes,:
        cp /usr/dt/app-defaults/C/Dtterm /etc/dt/app-defaults/C/Dtterm
        edit /etc/dt/app-defaults/C/Dtterm
    
    2.  Otherwise, if the change is user-specific, edit
    	$HOME/.Xdefaults
    
    If, for example, the user wishes to have the function keys F11 and F12 echo
    their escape sequences to the screen as the other function keys do, they
    can do the following in either of the above files:
    
    DtTerm*Translations:    #override\n<Key>F11:       vt-function-key-execute(11,
    UDK)\n<Key>F12:       vt-function-key-execute(12, UDK)
    
    After doing this, starting a new dtterm from the command line will pick up
    these changes.  A Terminal started from the front panel or the menu will
    not pick up these changes as an action is being executed.
    
    A man on DtTerm will tell most of the functions and keys that can be defined
    and what the actions are that can be used, i.e, vt-function-key-execute().
    
    7.  How do I use the F11 and F12 Function Keys?
    
          For Openwindows 3.0 ONLY:
    
    	The F11 and F12 keys are mapped to keysyms SunXK_F36 and SunXK_F37
            respectively, which are Sun defined keysyms.
    
            This was done for a couple of reasons. First, Standard MIT X11 only
            defines 35 Function Key keysyms. Since Sun's Type-4 keyboard contains
            37 Function Keys, it was necessary for Sun to define 2 keysyms.
    
            The reason F11 and F12 were selected to use the new keysyms is
            for compatibility with Sun's older Type-3 keyboards which have
            Function Keys F1-F10, L1-L10 and R1-R15. The L keys were defined
            as F11-F20 and the R keys were defined as F21-F35. Modifying this
            layout for Type-4 keyboards would have meant conditional programming
            for Type-3 and Type-4 keyboards.
            
          For Openwindows 3.4 and above:
          
            The F11 and F12 keys are mapped to keysyms SunF36 and SunF37
            respectively, which are Sun defined keysyms.
    
    8.  How do I use the F11 and F12 Function Keys for Solaris 2.6?
    
        For Xterm:
        
        	If a customer wishes to make changes to the translation tables for Xterms
    	for the F11 and/or F12 keys, changes need to be made to the VT100 
    	Translation table.
    
    	If this is on a system wide basis:
     	cp /usr/openwin/lib/app-defaults/XTerm
    /usr/openwin/lib/app-defaults/XTerm.bak
     	edit /usr/openwin/lib/app-defaults/XTerm
    
    	However, if this is just user-specific, he/she can edit
    		$HOME/.Xdefaults
    
    	In /usr/openwin/lib/app-defaults/XTerm, search for the string
    		*VT100.Translations:    #override 	Under there, before the end of the
    definition for the translations,
            place the following:
            	<Key>SunF36:    string(\^[[23~)\n        	<Key>SunF37:   
    string(\^[[24~)\n
    	This will actually mimic the actions of the other Fkeys when the escape
    	sequences are being printed to the screen.
    
    	After this, start another xterm to see the changes that have been made.
    	
       
       For Dtterm: ( ONLY if the user is using a shell other than csh or tcsh )
       
           	1.  If the individual wishes to make a system wide changes,:
        	    cp /usr/dt/app-defaults/C/Dtterm /etc/dt/app-defaults/C/Dtterm
                edit /etc/dt/app-defaults/C/Dtterm
    
    	2.  Otherwise, if the change is user-specific, edit
    	    $HOME/.Xdefaults
    
    	If, for example, the user wishes to have the function keys F11 and F12
    	echo their escape sequences to the screen as the other function keys do,
    	they can do the following in either of the above files:
    
    	DtTerm*Translations:    #override\n	<Key>F11:       vt-function-key-execute(11,
     UDK)\n	<Key>F12:       vt-function-key-execute(12, UDK)
    
    	After doing this, starting a new dtterm from the command line will pick up
    	these changes.  A Terminal started from the front panel or the menu will
    	not pick up these changes as an action is being executed.
    
    	A man on DtTerm will tell most of the functions and keys that can be defined
    	and what the actions are that can be used, i.e, vt-function-key-execute().
    
    9.  How do I prevent the F1 Function Key from bringing up Help?
    
        Openwindows 3.0 and above ONLY:
        
        By default the F1 key is mapped to bring up the Help menu. If you were
        to view the syntax for it it would look like this:
        
        xmodmap -e 'keysym F1 = Help'
        
        To modify the F1 key so it isn't mapped to Help, 
        Create a file in your home directory called .xmodmaprc and place the 
        following line in there:
        
        xmodmap -e 'keysym F1 = '   <=== This disables to Help function from F1
        				     but is sets the F1 key to print out ^@
        				     
        The best thing is to have in mind a keysym that you'd like to map the F1
        key to so that way you aren't getting ^@ by disabling the Help portion.
        
        Then when you run xmodmap .xmodmaprc, the file will be read and your 
        modifications will take effect.
        
    10.  What is the recommended way to emulate a VT100 keyboard?
    
     	xterm emulates vt100 terminal emulation. Here is a method 
            to make the keypad behave like a vt100 keypad.
    	
             Modifying xterm* stuff in .Xdefaults
            
    	Method:
    	
    	Edit the .Xdefaults in your home directory to include anything
    	from /usr/openwin/lib/app-defaults/XTerm that has "VT" in it. 
    
        *********************************************************************
        Openwindows 3.0:
        Note that every line except the first and the last lines must have
        the "\n\" string appended to it. The first line needs only a "\", and
        the last line should have nothing.
        
        Openwindows 3.4 and above:
        Note that every line except the first and the last lines must have
        the "\n\" string appended to it. The first line needs only a "\", and
        the last line should have "\n".
        
        *********************************************************************
        
        For example:
        
        1.	*VT100.Translations:    #override 
            ....
            <Key>End: scroll-forw(100,page) \n
            
        2.  *vtMenu.*  
        
        3. *VT100*font*
    
    11. What are the commands to manipulate the keyboard in OpenWindows?
    
    	/usr/openwin/bin/xmodmap  - Utility for modifying keymaps in X
            /usr/openwin/bin/xset     - User preference utility for X.
                            	    Option to look for is "r".
            
            Example: "xset r 84" should change the 'a' key
                      so it does repeat.
                     "xset -r 84" should change the 'a' key
                      so it does not repeat.
    
            /usr/openwin/bin/kbd_mode - Change the keyboard translation mode
    
         Another useful command is:
         
         /usr/openwin/demo/xev - print contents of X events
         
    12. How do I customize the keyboard layout for all X applications?
    
        You use the same commands published above under question 11.
        
    13. What keyboard resources can be set in .Xdefaults?
    
        Resource:      OpenWindows.KeyboardCommand.*
        Resource:      OpenWindows.KeyboardCommands
        
        For details on these resources please read the man page for xview
        and look in the XView Programming Manual.
        
        For Openwindows 3.0, the rest of the Keyboard resources can be found
        in the Xview reference manual. See page#216-229.
    
    14. How do I turn on keyboard Accelerators for CDE?
    
    	In CDE the keyboard Accelerators are provided. See question
    	16 for the default accelerator settings.	
    
    15. How do I turn on keyboard Accelerators for Openwindows? 
       
    	 Place the following resource in .Xdefaults file:
             OpenWindows.KeyboardCommands:   Full
    
    16. How do I turn on Menu Accelerator keys for CDE?
    
    The window menu used by default by the window manager, dtwm, is built-in
    and looks like the following:
    
        "Restore"                   _R      Alt<Key>F5      f.normalize
        "Move"                      _M      Alt<Key>F7      f.move
        "Size"                      _S      Alt<Key>F8      f.resize
        "Minimize"                  _n      Alt<Key>F9      f.minimize
        "Maximize"                  _x      Alt<Key>F10     f.maximize
        "Lower"                     _L      Alt<Key>F3      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      Alt<Key>F4      f.kill
    
    If you wish to use the default window menu, but change the
    accelerator keys used to activate the menu items using key sequences
    as opposed to using the mouse, create a menu in $HOME/.dt/dtwmrc
    by a name of your choice, replacing the accelerator keys with your
    desired key mappings.  Then, set the following resource:
    
    Dtwm*windowMenu: Your_Menu_name
    
    For example, to change the "Alt" accelerator key to the "Meta" accelerator
    key, place the following entry in $HOME/.dt/dtwmrc:
    
    Menu AcceleratorWindowMenu
    {
        "Restore"                   _R      Meta<Key>R      f.normalize
        "Move"                      _M      Meta<Key>M      f.move
        "Size"                      _S      Meta<Key>S      f.resize
        "Minimize"                  _n      Meta<Key>n      f.minimize
        "Maximize"                  _x      Meta<Key>x      f.maximize
        "Lower"                     _L      Meta<Key>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      Meta<Key>C      f.kill
    }
    
    Then, set the following resource in $HOME/.Xdefaults:
    
    Dtwm*windowMenu: AcceleratorWindowMenu
    
    The new AcceleratorWindowMenu will take effect after dtwm is restarted.
    
    17. How do I make the Back Space and Delete keys both send delete?
    
         xmodmap -e "keysym BackSpace = Delete"
         
         The above command should be placed into your .xmodmaprc and the 
         command xmodmap .xmodmaprc should be placed in another start up 
         file like .xinitrc. 
         
         Suppose you have the Delete key set ^? instead of actual erase.
         After typing in the xmodmap command above you know have Delete 
         and BackSpace printing out ^? characters. How do you get rid of 
         those?
         
         place in your .login/.profile the following line:
         
         stty erase '^?'
         
         Now both Delete and BackSpace erase a character.
          
    18. How do I change the Key rate in openwindows?
    
         The command `xset r' is used to turn autorepeat ON or
         OFF (this is from the xset manpage):
    
         The r option controls the autorepeat.  If a  preced-
         ing  dash or the 'off' flag is used, autorepeat will
         be disabled.  If no parameters or the 'on'  flag  is
         used, autorepeat will be enabled.
         
         Below are some repeat key parameters for Xsun ONLY:
    
         -ar1 milliseconds
                 Specify amount of  time  in  milliseconds  before  a
                 pressed key begins to autorepeating.  The default is
                 500 milliseconds.  This option is not  available  on
                 Solaris x86 or PowerPC.
    
         -ar2 milliseconds
                 specify  the  interval   in   milliseconds   between
                 autorepeats of pressed keys.  The default is 50 mil-
                 liseconds.  This option is not available on  Solaris
                 x86 or PowerPC.
                 
         Openwindows 3.0 ONLY:
         
         Here is what users can add/modify in their .user.ps
         file in their home directory under OpenWindows to change
         the repeat key parameters:
    
            UserProfile begin
            %% cause the server to wait 1/2 second before repeating keys
                /KeyRepeatThresh 1 60 div 2 div storetimeval def
    
            %% cause keys to repeat 10 times per second
                /KeyRepeatTime 1 60 div 10 div storetimeval def
    
    19. How do I change the delete/backspace key functionality in Dtmail?
    
    	In a dtmail compose window, when you hit the delete key anywhere in
    	that text field the next line is concatenating onto the end rather 
    	than a character being deleted. 
    
    	In dtmail and in all text windows, the delete key deletes the character
    	to the right of the cursor and backspace deletes the character to the
    	left of the cursor.  When you are on the end of a line and press
    	Delete, it deletes the carriage return character, thus concatenating
    	the lines.  The same thing will happen if you are at the beginning of a
    	line and press Backspace.
    
    	The behavior can be modified via resources.  The resource is
    	DtEditor*textTranslations and is documented in manual page DtEditor(3).
    	Take a look at /usr/dt/app-defaults/C/UNIXbindings.  It redefines
    	this resource.  Use it as a guideline, or use it as described in
    	the comments in this file.
    
    20. How do I get my Xlib application to receive Keyboard input?
    
    	Keyboard input is set to a window with XSetInputFocus. The focus
            window must be viewable. For window to be viewable , it must be
            mapped and all its ancestors must be mapped, but it may be obscured.
    
    21. When I exit openwindows, my keyboard only prints garbage to the screen
    
    	After logging out of openwindows, typing on the console only gives me
    	control characters or "garbage".  Nothing legible. 
    	How can this be fixed?
    	
    	This generally happens when Xserver dies unexpectedly or is
    	not quit gracefully.
    	
    	The system should still be available over the network, so issue the 
    	following commands to fix the problem:
    
    	$ telnet hostname
    	login:  root
    	passwd:
    
    	# /usr/openwin/bin/kbd_mode -a >/dev/console
    	# exit
    
    	This resets the keyboard maps to translate simple ascii characters.
    
    	From the man page:
    
         	kbd_mode sets the translation mode of the console's keyboard
         	(/dev/kbd)  to  one of the four values defined for KIOCTRANS
         	in kb(7).  This is useful when a  program  that  resets  the
         	translation  mode terminates abnormally and fails to restore
         	the original translation mode.
    
         	Note that SunView desires translated events  (kbd_mode  -e),
         	while  Xsun(1)  desires  untranslated  events (kbd_mode -u).
         	See man page for an explanation of the -e and -u options.
    
    22. How do I disable the L1-A key on my keyboard?
        
        Openwindows 3.0 to Openwindows 3.5.1 does not have this ability.
        There is no supported way to disable the L1-A key.
        
        Solaris 2.6 offers users two ways to disable the L1-A key.
        
        1. Edit /etc/default/kbd and place the following resource in there:
            KBD_ABORT=enable|disable
            
        2. From command line: kbd -a enable|disable
        
    23. How do keysyms and keycodes work?
    
    Keycodes
    --------
    
    Each keycode represents a physical (or logical) key. They lie in the
    range of [8,255]. If the physical hardware generates keycodes outside
    of this range, the X server must map them with in the allowable range.
    They cannot be modified by any means.
    
    Keysyms
    -------
    
    A keysym is a code which has implied meaning. Keysyms usually come in
    sets that correspond to character sets. The defined sets include
    Latin-1, Latin-2, Latin-3, Latin-4, Lana, Arabic, Cryllic, Greek,
    Technical, Special, Publish, Apl, Hebrew as well as a set of common
    Keyboard symbols. Keysyms with the most-significant bit set (of 29
    bits) are vendor-specific.
    
    Defining Mappings
    -----------------
    
    Mappings are defined by quintuplets, one keycode and four keysyms (see
    Note). Mappings can be defined with fewer than five fields, and in
    these cases certain translations occur. Using "xmodmap" mappings are
    defined in one of three ways:
    
            xmodmap <filename>
            xmodmap -e "keycode <keycode> = <keysym-list>"
            xmodmap -e "keysym  <keysym>  = <keysym-list>"
    
    If the <keysym-list> contains fewer that four fields, the list
    translates as follows:
    
    1. If List is a Singleton, for example "K1"
       then the list is translated as "K1 NoSymbol K1 NoSymbol"
    
    2. If List is a Pair, for example "K1 K2"
       then the list is translated as "K1 K2 K1 K2"
    
    3. If List is a Triple, for example "K1 K2 K3"
       then the list is translated as "K1 K2 K3 NoSymbol"
    
    If a "Null" or "Void" element is desired, the value VoidSymbol should
    be used in the list.
    
    Note: Apparently it is possible to define mappings with more than
          four keysyms associated with a keycode, but it is not clear how
          to generate the fifth or higher keysym from the keyboard.
    
    Keysym Generation
    -----------------
    
     KeyCode    KeySym(s)
    +-------+  +-------------------------------+
    | X     |  | A     | B     | A     | B     |
    +-------+  +-------------------------------+
               |<---GROUP 1--->|<---GROUP 2--->|
    
    The list of keysyms is broken up into two groups of two as pictured
    above. When a key has been pressed, the keysym that is generated
    depends on the three shift states Shift, Lock, and GroupModifier.
    Before the keysym is generated, a couple of substitutions take place,
    these are:
    
    1. if B is NoSymbol, and A is Alphabetic
       then A = Lowercase A and B = Uppercase A
    
    2. if B is NoSymbol, and A is NOT Alphabetic
       then B = A
    
    After the substitutions are made, the following rules are applied to
    determine which keysym to use:
    
    1. if GroupModifier is Pressed
       then use Group 2
       else use Group 1
    
    2. if Shift is NOT Pressed and Lock is NOT Pressed
       then use A
    
    3. if Shift is Pressed
       then use B
    
    4. if Lock is On and B is Uppercase Alphabetic
      then use B
    
    5. if Lock is interpreted as Shift and Lock is On
       then use B
    
    6. if Rules 2 through 5 have not found a keysym
       then use A
    
    Notes
    -----
    
    The GroupModifier's keysym is Mode_switch. To use the GroupModifier,
    Mode_switch must be bound to a keycode, then to a modifier (mod1
    through mod5).
    
    The good resource to determine the keycodes generated by each key is
    the files in the directory $OPENWINHOME/etc/keytables. For a US Type 4
    keyboard, the file would be US4.kt
    
    Examples
    --------
    
    These examples all assume the following modifier environment:
    
            shift       Shift_L (0x6a),  Shift_R (0x75)
            lock        Caps_Lock (0x7e)
            mod2        Mode_switch (0x14)
    
    And the following mappings for the keysyms:
    
                 20         0xff7e (Mode_switch)    ! Type 4 AltGraph Key
                106         0xffe1 (Shift_L)        ! Type 4 LeftShift Key
                117         0xffe2 (Shift_R)        ! Type 4 RightShift Key
                126         0xffe5 (Caps_Lock)      ! Type 4 CapsLock Key
    
    
    1. After running the command (Note: keycode 84 = A key):
    
            xmodmap -e "keycode 84 = A"
    
       The Keysym Matrix is:
    
                            Shift (shift)
     
                              up    down
                           +------+------+
            Group       up |  a   |  A   |
            Modifier       +------+------+
           (AltGraph) down |  a   |  A   |
                           +------+------+
    
    
    2. After running the command:
      
      xmodmap -e "keycode 84 = A NoSymbol J plus"
    
       The Keysym Matrix is:
    
                            Shift (shift)
     
                              up    down
                           +------+------+
            Group       up |  a   |  A   |
            Modifier       +------+------+
     (AltGraph) down |  J   | plus |
                           +------+------+
    
    
    References and Files
    --------------------
    
    "X Protocol Reference Manual", Appendix E: Keyboards and Pointers
    "X11/NeWS Version 2 Server Guide", XMODMAP Manual Page ( Openwindows 3.0 )
    
    
    $OPENWINHOME/etc/keytables/*.kt or $OPENWINHOME/etc/keytables/*.kt.Z for
    Solaris
    $OPENWINHOME/include/X11/keysymdef.h
    $OPENWINHOME/include/X11/keysym.h
    $OPENWINHOME/include/X11/Sunkeysym.h
    
    man on keytable.map
    
    srdb 3841
    infodoc 15663
    
    24. How do I get the Print Screen Key to work in Openwindows or CDE?
    
    	The Print Screen key is on both the type 4 and type 5 Sun keyboards.
    	This key serves no purpose under Openwindows and CDE. This key
    	was added to Sun keyboards so they are compatible with PC software.
    	For example, the Print Screen key works under Wabi. Wabi is a PC
    	emmulator that allows a Sun workstation to run PC software like
    	MicroSoft Word, etc... Most PC applications have built in actions
    	for the Print Screen key which makes it function in a certain 
    	way within an application.
    	
    	To make the Print Screen key work under Openwindows and CDE, you
    	need to define an action for the key itself. Below are some 
    	examples of how to sign an action to the Print Key within various
    	applications.
    	
    	1. Determine what the keycode is for the Print Screen key.
    	
    	   xmodmap -pk | grep Print
    	   29         0xffd3 (F22)    0xffd3 (F22)    0xff61 (Print)  0x1005ff60
    (SunSys_Req)
    
               You can verify that above information is true by running the 
               xev gui and hitting the Print Screen key to obtain it's values.
               
               KeyRelease event, serial 23, synthetic NO, window 0x9800002,
        	   root 0x33, subw 0x0, time 3334056025, (113,117), root:(229,204),
               state 0x0, keycode 29 (keysym 0xffd3, F22), same_screen YES,
               XLookupString gives 0 characters:  ""
    
               The above two pieces of information verify that the keycode for
               Print Screen is 29
           
            2. Now map the Print Screen key to another key.
           
               Currently keysym 29 is mapped to the following:
               
               F22 F22 Print SunSys_Req
               
               Let's change that order so that we map keycode 29 to another
               function.
               
               xmodmap -e 'keycode 29 = F5 F22 Print SunSys_Req'
               
               Now if we hit the Print Screen key it will output the value 
               of the function 5 key.
              
              
           3.  Now we need to give an action to F5 so that when we hit the 
               Print Screen key it executes the action.
           
               There are a few ways to do this depending on the type of
               application you need to execute the command in.
           
               Text Fields and cmdtool:
           
               vi $HOME/.textswrc
              
                TOP_KEY(5)	FILTER
                echo hello
                
                Also see question 3.
                
                
               shelltool window:
               
               vi $HOME/.ttyswrc
               
                mapo F5 hello
                        
               Also see question 2.
               
               dtterm window:
               
               In the resource file put the following:
    
    	   *DtTerm.Translations:   #overrideCtrl <Key>F5:   string("ls -l")\nCtrl
    <Key>F8:   string("foo")
     
    	   For more information look into:
    	   man DtTerm 
    
    	   (the widget class, not dtterm the executable) for more
    	   information.
    
         	   SRDB ID: 12619
    
    25. How do I map the Front and Open keys in CDE?
    
    The Front and Open keys are actually controlled by the window manager 
    and require special instructions to map them.
    
    CDE instructions:
    
    1. You need to edit the window manager resources file. Depending on
       how you're environment is setup, edit $HOME/.dt/dtwmrc or
       /etc/dt/config/C/sys.dtwmrc.
    
    2. If you look at this file then you'll notice the preexisting settings:
    
        <Key>SunFront               ifkey|icon|window       f.raise_lower
        <Key>SunOpen                ifkey|window            f.minimize
        <Key>SunOpen                ifkey|icon              f.normalize
    
    3. You can remap these by changing them to the following:
    
       Example: Let's say you want to map F11 to the Front key.
    
       <Key>SunF36		        ifkey|icon|window       f.raise_lower
    
       Now restart the workspace manager and the changes will take effect.
    
    NOTE: One big draw back it that the actual Front key on Sun Keyboards 
          is no longer mapped to anything. This srdb will probably only
          be used by people who have a third party keyboard and want to
          have a key on the keyboard actually have the Front capability.
    
    Also there are keyboard independent sequences you can use to
    generate the Front and Open functionality. 
    
            window                  keyboard        keyboard
            function                independent     specific
            --------                -----------     --------
            raise/lower             Alt+F3          SunFront
            minimize/restore        Alt+F5          SunOpen
    
    Please see srdb 12240 for more details.
    
    26.  Where can xmodmap changes be added permanently?
    
    Where can xmodmap changes be added for a permanent solution?
    
    SOLUTION SUMMARY:
    
    On a workstation, or X Terminal running:
    
        - Openwin:	make a back-up copy of the /usr/openwin/etc/keytables/US5.kt 
    		file.  Then, modify this file to reflect changes to
    		keysyms/keycodes
    
        - XDM:	make a back-up copy of the
    		/usr/openwin/lib/xdm/Xsetup_0 file.  Then modify
    		this file to add the desired xmodmap commands.
    		Also ensure that in /usr/openwin/lib/xdm-config
    		that this line is in place:
    
          		    DisplayManager._0.setup:  /usr/openwin/lib/xdm/Xsetup_0
    
        - Openwin 
          or XDM:	modify $HOME/.xinitrc to include the desired
    		xmodmap commands
    
        - CDE: 	copy /usr/dt/config/Xsetup to /etc/dt/config/Xsetup
    		(the directories under /etc may need to be created, first).
    		Then modify /etc/dt/config/Xsetup to add 
    		the desired xmodmap commands
    
    On a Xterminal not running Openwin, XDM or CDE:
    
         - If the command "openxt" was used to bring up the window manager,
           modify $HOME/.xinitrc to include the desired xmodmap commands
    
         - Otherwise, run the xmodmap commands manually
    
    27. Are there any public domain GUI front-ends to xmodmap?
    
    Try xkeycaps, available from http://www.jwz.org/xkeycaps/
    
    *** Sun does not support customization of X11/Openwindows/CDE. ***
    Info Docs Article 13065

    Infodoc ID   Synopsis   Date
    13065   How to kill CDE screen lock   16 Mar 1999

    Description Top

    This infodoc relates to CDE 1.0.1, which is supported on Solaris 2.4 and
    Solaris 2.5, CDE 1.0.2, which is supported on Solaris 2.5.1, CDE 1.2, which
    is supported on Solaris 2.6, and CDE 1.3, which is supported on Solaris 7.
    
    CDE provides a facility for an end-user to lock their screen by clicking on
    a padlock icon on the CDE front panel.
    
    This causes a screen lock to be enabled so that the user's screen is
    protected from other users.
    
    A similar capability existed in OpenWindows, but this is different because
    OpenWindows used the "xlock" client, whereas the CDE screen lock is integrated
    into the window manager (dtwm) and session manager (dtsession).
    
    So when a CDE user invokes a screen lock via tooltalk messaging, the CDE
    dtsession is requested to lock the screen.  dtsession locks the screen by
    calling dtexec to execute dtscreen, which is the program which displays the
    screen saver patterns on the screen.  From the dtscreen(1X) man page:
    
         Note that the Session Manager, dtsession, is responsible for
         locking the session and prompting for a password to unlock.
    
         The session manager may launch the dtscreen client  to  pro-
         vide  screen  saver animations during session lock. Refer to
         the session manager specification for resources  controlling
         the launching of screen savers by the session manager.
    
    However you *cannot* unlock the screen simply by killing dtscreen.  This is
    because CDE notices its death and starts a new one.  This is part of the
    normal scheme where dtsession invokes multiple instances of the screen saver,
    in succession, to put up different patterns.
    
    Also, the password dialog is part of the window manager, not the dtscreen
    process.
    
    The only way to kill the screen lock is to kill the user's dtsession, which
    ends their login session very abruptly! They will be logged out of CDE and
    work-in-progress may be lost.
    
    This design was necessary to provide a secure screen-lock to the user.
    Info Docs Article 16634

    Infodoc ID   Synopsis   Date
    16634   how to make dtwm look like mwm in Solaris 2.6   3 Mar 1998

    Description Top

    How do you make the CDE window manager, dtwm, look like the Motif Window
    manager, mwm?
    
    This functionality is only for Solaris 2.6/CDE 1.2.
    
    Do the following:
    
    1. Add the following resources to ~/.Xdefaults:
    
         Dtwm*useFrontPanel: False
         Dtwm*configFile: $HOME/.mwmrc
    
       There may be other resources that need to be set differently as well.  See
       the dtwm man page for more information.
    
       The configFile resource assumes you are using a customized .mwmrc file.
       If you are not, you do not need to set this resource.  The resource is
       documented in the dtwm man page.
    
       The root menus for dtwm and mwm are not the same.  The dtwm root menu is
       fully configurable, so you can make changes in the root menu if you need
       to.  See the man pages for dtwm and dtwmrc for more information.
    
       If you want these resource changes to be system-wide for all users, copy
       /usr/dt/app-defaults/C/Dtwm to /etc/dt/app-defaults/C and make the changes
       in there.  Note: if you are using a locale other than the standard English
       locale, replace C with the name of your locale.
    
    2. Set the OW_WINDOW_MANAGER environment variable to /usr/dt/bin/dtwm -name
    Mwm:
       csh: setenv OW_WINDOW_MANAGER /usr/dt/bin/dtwm -name Mwm
       ksh: OW_WINDOW_MANAGER=/usr/dt/bin/dtwm -name Mwm; export OW_WINDOW_MANAGER
    
       Note: this assumes that you are using the standard .xinitrc, which is
       copied from /usr/openwin/lib/Xinitrc.  If you have a modified one, please
       move .xinitrc to another location for the test.
    	
       The option -name Mwm lets dtwm behave as if it were mwm.  It actually reads
       all the resources starting with Mwm*.  This option is documented in the
       dtwm man page.
    
    3. Set the LD_LIBRARY_PATH environment variable to
    /usr/dt/lib:/usr/openwin/lib:
       csh: setenv LD_LIBRARY_PATH /usr/dt/lib:/usr/openwin/lib
       ksh: LD_LIBRARY_PATH=/usr/dt/lib:/usr/openwin/lib; export LD_LIBRARY_PATH
    
    Note: Sun does not endorse or support this functionality of dtwm.
    
    
    Info Docs Article 10374

    Infodoc ID   Synopsis   Date
    10374   how to set up multiple TurboGX framebuffers with nonstandard resolutions   2 Mar 2000

    Description Top

    Here are the steps to set up several (TurboGX) tgx cards.
    
    (This may make assumptions about the openboot prom rev level
     and the resolutions the frame buffer supports.)
    
    1) The console monitor is set up using output-device
    
    	User can find which device is the console monitor with:
    
    		L1-A  (Stop-a)
    		ok devalias screen
    
    	It should say something like /sbus@1,f8000000/cgsix@3,0 this is
    	the console screen.  This string will differ on other types of
    	hardware.  For instance, it may be /obio/cgfourteen@2,0 on a
    	sparc-20.
    
    
    	Next, look at all the frame buffers on the system:
     
    		ok show-devs
    		... /cgsix@0,0
    		... /cgsix@2,0
    		... /cgsix@3,0
    
    
    	It has already been seen which device was the console frame buffer.
    	The other two frame buffers are cgsix@2 and cgsix@3.  This output
    	will widely vary depending on the system architecture.
    
    
    Now, set up a shell script:
    
    
    #!/bin/sh
    eeprom output-device='screen:r1280x1024x76'
    eeprom fcode-debug\?=true
    eeprom nvramrc='probe-sbus
    " /iommu/sbus/cgsix@2" select-d ev
    r1280x1024x76
    " /iommu/sbus/cgsix@2" " set-resolution" execute-device-method drop
    device-end
    " /iommu/sbus/cgsix@3" select-dev
    r1280x1024x76
    " /iommu/sbus/cgsix@3" " set-resolution" execute-device-method drop
    device-end
    install-console
    banner
    '
    eepr om use-nvramrc\?=true
    
    
    Pay attention to the spaces within the double-quotes.
    
    The output-device line sets the resolution for the console, which
    is the primary frame buffer.
    
    The nvramrc line sets up code that executes each time the system
    boots.  This program sets up the resolution on the second and
    third tgx devices.
    
    The last line says to use the script in nvramrc when booting.
    
    Notes:
    
    To find built-in resolutions available for some of the newer frame
    buffers (this doesn't work for all devices),  type:
    
    	L1-A
    	ok show-devices
    	...
    	/sbus@1,f8000000/cgsix@3,0	<-- this is the frame buffer
    	...
    	ok cd /sbus/cgsix@3,0
    	ok words
    
    The resolutions supported show up like r1280x1024x76 (or hdtv).
    
    Other references:
    Open Boot Command Reference
    
    Writing Fcode Programs
    Info Docs Article 2221

    Infodoc ID   Synopsis   Date
    2221   Setting the resolution of secondary frame buffer   12 Apr 2000

    Description Top

    A machine can have more than one frame buffer installed, sometimes known
    as being "multi-headed."
    
    
    The resolution of the PRIMARY frame buffer can be set in the NVRAM.
    For example: to change the resolution to 1280x1024x76, user would use
    the command:
    
    	# eeprom output-device=screen:r1280x1024x76
    	
    or from the system monitor prompt:
    
    	ok setenv output-device screen:r1280x1024x76
    	ok reset
    
    To change the secondary frame buffer it is a little more complex. 
    
    The following script assumes sun4m architecture.  For sun4c/sun4u 
    architecture change /iommu/sbus to /sbus
    
    It also assumes that the frame buffer is in sbus slot #3
    	- to change this to (say) 2, change cgsix@3 to cgsix@2
    
    Finally it assumes a resolution of r1280x1024x76
    	- substitute whatever value is appropriate.
    
    #############################################################################
    
    #!/bin/sh
    
    eeprom fcode-debug\?=true
    eeprom nvramrc='probe-sbus
    " /iommu/sbus/cgsix@3" select-dev
    r1280x1024x76
    " /iommu/sbus/cgsix@3" " set-resolution" execute-device-method drop
    
    device-end
    install-console
    banner
    '
    eeprom use-nvramrc\?=true
    
    ##############################################################################
    
    Here is the procedure to use:
    
    1. Boot the system up 
    2. Determine which sbus slot the frame buffer board resides in for the second
       head.
       Do this with the command
       	# dmesg | grep cgsix
      	cgsix1 at sbus0: SBus slot 3 0x0 pri 7
    	                     ^^^^^^^^
    3. Determine the system architecture. Do this with the command
    	# uname -m
    	sun4m
    4. Modify the script accordingly. Make sure that it is executable.  
       	# chmod 755 scriptname
    
    5. Execute the script, there should be no error messages.
       If an error message such as "not found" is displayed, check to make sure
       that the closed single quotes in the above script are being used properly.
    
    6. Once the script has been executed error free, reboot the system.
    
    7. To determine whether or not the 2nd head has been reconfigured to the 
       proper resolution, use the command:
    
    	# dmesg | grep cgsix
    	cgsix0 at SBus slot 1 0x0 pri 7
    	cgsix0: screen 1280x1024, double buffered, 4M mappable, rev 11
    	cgsix1 at SBus slot 3 0x0 pri 7
    	cgsix1: screen 1280x1024, double buffered, 4M mappable, rev 11
    
    The script will only need to be run once, since the configuration will be 
    stored in the NVRAM.
    Info Docs Article 17918

    Infodoc ID   Synopsis   Date
    17918   How to reinstall CDE on Solaris 2.6?   4 Nov 1998

    Description Top

    Q: How do I reinstall CDE on Solaris 2.6? How do I uninstall it?
    Solaris 2.5.1 used to have the "install-cde" command on the CD-ROM.
    I cannot find it any more.
    
    A: Removing CDE from Solaris 2.6 is not supported unless you are using
    the "Core installation" option of Solaris, in which case you do not have 
    CDE and OpenWindows and X11 installed at all. 
    Changing installation levels (Core, Enduser, Developer, Full,
    Full OEM) after the system is installed is NOT supported.
     
    Having said that, you can pkgrm and pkgadd the following packages from the
    distribution CDROM:
    
    CDE Runtime:
    
    SUNWdtbas
    SUNWdtdmn
    SUNWdtdte
    SUNWdtlog
    
    
    CDE Developer Software:
    
    SUNWdtinc
    SUNWdtab
    SUNWdthed
    SUNWdtdem
    SUNWdtma
    SUNWdtmad
    SUNWmfman
    
    
    CDE End User Software
    
    SUNWdticn
    SUNWdtwm
    SUNWdtdst
    SUNWdthe
    SUNWdthev
    SUNWdthj
    SUNWdtim
    SUNWdtrme
    
    
    Solaris Desktop Extensions (if installed at all)
    SUNWdtezt
    SUNWdthez
    SUNWdtmaz
    Info Docs Article 21424

    Infodoc ID   Synopsis   Date
    21424   Removing the padlock button from the CDE front panel   20 Jan 2000

    Description Top

    How do I remove the padlock button from the front panel?
    
    The way to do this is described in the Solaris 7 AnswerBook2 User Collection.
    Reference the:  Solaris Common Desktop Environment: Advanced User's and 
    System Administrator's Guide.  Navigate through the following sections:
     
            Advanced Front Panel Customization
    	Modifying the Main Panel
    	To Remove a Control
    
    To make a system wide change, copy /usr/dt/appconfig/types/C/dtwm.fp 
    to /etc/dt/appconfig/types/C and edit the CONTROL Lock section by adding 
    the line
    
      DELETE	True
    
    before the final closing brace.  
    
    Example:
      CONTROL Lock
    {
      TYPE                  icon
      CONTAINER_NAME        Switch
      CONTAINER_TYPE        SWITCH
      POSITION_HINTS        1
      ICON                  Fplock
      LABEL                 Lock
      PUSH_ACTION           LockDisplay
      HELP_TOPIC            FPOnItemLock
      HELP_VOLUME           FPanel
      DELETE	True
    }
    
    *** Sun does not support customization of CDE. ***
    Info Docs Article 14636

    Infodoc ID   Synopsis   Date
    14636   Adding and Removing Actions to and from the CDE desktop   20 Dec 1996

    Description Top

    Actions can be placed on the CDE desktop simply by dragging
    the action from dtfile and placing it on the desktop.
    Actions remain on the desktop, much like any other window.
    
    When a user logs out of CDE, but returns to the current session,
    the actions remain on the desktop.
    
    This information is stored in $HOME/.dt/Desktop/.!dtdesktop.  However, do
    not edit this file.
     
    To remove actions, select them on the desktop, press the right
    mouse button and select "Remove from Workspace" from the resulting menu.
     
    Multiple actions can be selected by dragging a select box around the icons.
    Info Docs Article 11669

    Infodoc ID   Synopsis   Date
    11669   How to run CDE on a second framebuffer OR with a dual-head display   20 Jan 2000

    Description Top

    Create a double-headed (one X display, 2 screens) CDE configuration
    as follows:
    
    1. As root, copy /usr/dt/config/Xservers to /etc/dt/config/Xservers.
    
       * You may need to make the directories under /etc first.
    
    2. In the copy of /etc/dt/config/Xservers, change the last line (which is
    uncommented) that reads:
    
       :0 Local local@console /usr/openwin/bin/Xsun :0
    
       to 
    
       :0 Local local@console /usr/openwin/bin/Xsun :0 -dev /dev/fb0 -dev /dev/fb1
        
       * Refer to the "Xsun" manual page for more information on the options
         to Xsun.
       * Make sure that the devices in this line match your system's configuration.
     
    3. Either reboot your system, or exit CDE, login at the command line,
       and kill and restart dtlogin
    
    (Note: In Solaris 2.6 or earlier, the front panel does not show up on both
    screens. For Solaris 2.7 (CDE 1.3), a separate front panel is displayed on each screen.)
    Info Docs Article 11732

    Infodoc ID   Synopsis   Date
    11732   To run CDE and OpenLook on two screens of same X display   17 Nov 1995

    Description Top

    It is possible to run OpenWindows - meaning the Open Look Window Manager (olwm)
     -  on one head of a two-headed system, and the CDE window manager on the
    other.
    
    This is possible because they are just window managers and have
    options to say which screens of a display they will manage.
    
    steps:
    (You may need to vary this if your setup is unusual but this gives
    the basic idea).
    
    
    1) Ensure that CDE works fine on one or both heads
    
    2) Run the command "xrdb -q | grep multiScreen".  If
       the line:
    
       Dtwm*multiScreen:       True
    
       Or
    
       Dtwm.multiScreen:      True
    
       appears, determine which of the user's resource files (e.g.,
       $HOME/.Xdefaults, $HOME/.dt/sessions/home/dt.resources, etc.) that line
       is located in, and remove all such lines.
    
    3) Add the following line to the $HOME/.Xdefaults or
       $HOME/.dt/sessions/home/dt.resources file
    
       Dtwm*multiScreen:       False
    
    
    4) Add the following line to the $HOME/.dt/sessions/sessionetc file:
    
      /usr/openwin/bin/olwm -single -display :0.1 &
    
    where :0.1 is the number of the screen the user wants Openwindows to
      appear.
    
       This will make CDE run on screen 0, and olwm on screen 1.
    
      If $HOME/.dt/sessions/sessionetc didn't exist before, make sure
      that the file executable by doing a "chmod a+x
    $HOME/.dt/sessions/sessionetc".
    
    The next time the user logs in from the CDE login screen,
    Openwindows should come up on the specified head, and CDE on the other.
    Applications started on the CDE screen will start there, and applications
    started fromthe olwm menu on its screen. This is just normal behaviour.
    
    
    You can still start up openlook or CDE applications on the other headby
    setting the display arguments to the commands, but this allows you to
    use your OpenLook menu and CDE front panel simultaneously.
    Info Docs Article 19284

    Infodoc ID   Synopsis   Date
    19284   how to run the Xserver on a headless system   3 Apr 2000

    Description Top

    To run the Xsun X-server on a headless system (a system without a frame
    buffer), copy /usr/dt/config/Xservers to /etc/dt/config/Xservers, then edit
    /etc/dt/config/Xservers and comment out the last line by inserting the #
    character into the beginning of the line:
    
      # :0   Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner
    
    This will prevent the console from starting any X-windows display manager but
    will allow X-windows applications to be run on the system and remotely
    displayed to other systems.
    
    If you are using the XDM login manager on your system, comment out the last
    line of /usr/openwin/lib/xdm/Xservers:
    
      # :0 Local local /usr/openwin/lib/xdm/StartOW :0
    
    This will prevent the console from starting OpenWindows.
    Info Docs Article 15531

    Infodoc ID   Synopsis   Date
    15531   CDE: How to change the screen power management   8 Jan 1998

    Description Top

    The screensaver timeout is a function of the Xserver, ie. Xsun.  The
    default value is 10 minutes with a cycle time of 10 minutes.  From
    the Xserver man page:
    
         -s minutes
                 Set screen-saver timeout time in minutes. The
                 default is 10 minutes.
    
         -p minutes
                 Set screen-saver pattern cycle time in minutes. The
                 default is 10 minutes.
    
         v       sets video-off screen-saver preference.  This is
                 the default.
    
         -v      sets video-on screen-saver preference.
    
    
    Beginning with Solaris 2.6, this feature of the Xserver also controls
    power management of the monitor.  In order for power management of
    the monitor to occur, the video-off preference must be set.  These
    Xserver values can be modified by the logged-in user via the xset
    command or CDE style manager.  The values for these settings may
    be modified by the CDE environment once a user logs in.
    
    The following procedure only guarantees how the Xserver will behave
    when at the CDE login screen:
    
    As superuser,
    
    1. Add the following to the Xsun line in /etc/dt/config/Xservers (copy
       this file from /usr/dt/config if it doesn't exist):
    
    	-s <timeout-in-minutes> -p <cycletime-in-minutes>
    
       Add -v if you wish to disable power management.
    
       For example, the line might look like:
    
    :0   Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner -s 5 -p 5
    
    2. Make sure the following line is in /etc/dt/config/Xconfig (copy from
       /usr/dt/config if it doesn't exist):
    
    	Dtlogin*terminateServer:   True
    
       This will cause the Xserver to restart after the user logs out, thus
       restoring the default values as described in the Xservers file from
       step 1.
    
    3. Force the X Display Manager, dtlogin, to reread its configuration
       files:
    
    	/usr/dt/bin/dtconfig -reset
    
    4. Log out.
    
    Remember, the Xserver values can be modified by the logged-in user via the
    xset command or CDE style manager.  The values for these settings may
    be modified by the CDE environment once a user logs in, either by default
    CDE configuration or by user customization.
    Info Docs Article 2221

    Infodoc ID   Synopsis   Date
    2221   Setting the resolution of secondary frame buffer   12 Apr 2000

    Description Top

    A machine can have more than one frame buffer installed, sometimes known
    as being "multi-headed."
    
    
    The resolution of the PRIMARY frame buffer can be set in the NVRAM.
    For example: to change the resolution to 1280x1024x76, user would use
    the command:
    
    	# eeprom output-device=screen:r1280x1024x76
    	
    or from the system monitor prompt:
    
    	ok setenv output-device screen:r1280x1024x76
    	ok reset
    
    To change the secondary frame buffer it is a little more complex. 
    
    The following script assumes sun4m architecture.  For sun4c/sun4u 
    architecture change /iommu/sbus to /sbus
    
    It also assumes that the frame buffer is in sbus slot #3
    	- to change this to (say) 2, change cgsix@3 to cgsix@2
    
    Finally it assumes a resolution of r1280x1024x76
    	- substitute whatever value is appropriate.
    
    #############################################################################
    
    #!/bin/sh
    
    eeprom fcode-debug\?=true
    eeprom nvramrc='probe-sbus
    " /iommu/sbus/cgsix@3" select-dev
    r1280x1024x76
    " /iommu/sbus/cgsix@3" " set-resolution" execute-device-method drop
    
    device-end
    install-console
    banner
    '
    eeprom use-nvramrc\?=true
    
    ##############################################################################
    
    Here is the procedure to use:
    
    1. Boot the system up 
    2. Determine which sbus slot the frame buffer board resides in for the second
       head.
       Do this with the command
       	# dmesg | grep cgsix
      	cgsix1 at sbus0: SBus slot 3 0x0 pri 7
    	                     ^^^^^^^^
    3. Determine the system architecture. Do this with the command
    	# uname -m
    	sun4m
    4. Modify the script accordingly. Make sure that it is executable.  
       	# chmod 755 scriptname
    
    5. Execute the script, there should be no error messages.
       If an error message such as "not found" is displayed, check to make sure
       that the closed single quotes in the above script are being used properly.
    
    6. Once the script has been executed error free, reboot the system.
    
    7. To determine whether or not the 2nd head has been reconfigured to the 
       proper resolution, use the command:
    
    	# dmesg | grep cgsix
    	cgsix0 at SBus slot 1 0x0 pri 7
    	cgsix0: screen 1280x1024, double buffered, 4M mappable, rev 11
    	cgsix1 at SBus slot 3 0x0 pri 7
    	cgsix1: screen 1280x1024, double buffered, 4M mappable, rev 11
    
    The script will only need to be run once, since the configuration will be 
    stored in the NVRAM.
    Info Docs Article 18215

    Infodoc ID   Synopsis   Date
    18215   How to start CDE from the command line   11 Dec 1998

    Description Top

    To start CDE from the command line:
    
    - Make sure your OPENWINHOME environment variable is set to /usr/openwin
    
      To see if it is set, type: echo $OPENWINHOME.  If it returns /usr/openwin,
      it is set correctly.  If it returns nothing, you will need to set it.
    
      To set it in C-Shell, type: setenv OPENWINHOME /usr/openwin 
      To set it in Bourne Shell or K-Shell, type:
        OPENWINHOME=/usr/openwin;export OPENWINHOME
    
    - Make sure your PATH environment variable has /usr/dt/bin and /usr/openwin/bin
      at the front of it
    
      To see if it is set, type: echo $PATH.  If PATH is set correctly, /usr/dt/bin
      and /usr/openwin/bin will be at the front of it.
    
      To add these paths to PATH in C-Shell, type:
        setenv PATH /usr/dt/bin:/usr/openwin/bin:${PATH}
    
      To add these paths to PATH in Bourne shell or K-shell, type:
        PATH=/usr/dt/bin:/usr/openwin/bin:${PATH};export PATH
      
    - Type the command: /usr/openwin/bin/xinit /usr/dt/bin/Xsession
    Info Docs Article 17656

    Infodoc ID   Synopsis   Date
    17656   how to start CDE without the front panel   28 Aug 1998

    Description Top

    How do I start CDE without the front panel?
    
    The following resource setting turns off the dtwm front panel (dtwm is the
    window manager for CDE):
    
        Dtwm*useFrontPanel:      False
    
    This resource can be set in $HOME/.Xdefaults, or you can change the existing
    global resource in the file /usr/dt/app-defaults/C/Dtwm from "True" to "False".
    To do this, copy /usr/dt/app-defaults/C/Dtwm to /etc/dt/app-defaults/C and
    edit the copy.
    Info Docs Article 10596

    Infodoc ID   Synopsis   Date
    10596   How to bring up Openwindow at boot time   8 Dec 1994

    Description Top

    Use following procedure to being OpenWindows up at boot time:
    
    1. Create a file similar to the one shown below and name it S90Openwindows.
    
    #! /bin/sh
    
    HOME=/
    export HOME
    
    chmod 666 /dev/console
    /usr/openwin/bin/openwin 
    
    2. Copy the file to /etc/rc3.d.
    
    3. chmod +x S90Openwindows.
    
    4. Modify the file /etc/logindevperm as shown below:
    
    /dev/console	0666	/dev/mouse:/dev/kbd
    /dev/console	0666	/dev/sound/*		# audio devices
    /dev/console	0666	/dev/fbs/*		# frame buffers
    
    5. Reboot two times. <== This is very important.
    Info Docs Article 12649

    Infodoc ID   Synopsis   Date
    12649   CDE: Xemacs as CDE text editor server instead of dtpad   13 Jan 1998

    Description Top

    If you're not a gung-ho Emacs user, you need read no further.
    
    Even if you are a gung-ho Emacs user, if you're not using Xemacs 19.10 or later
    (Xemacs is the new name for what used to be called Lucid Emacs) this won't
    apply.
    
    The enclosed bit of Xemacs elisp will make Xemacs respond to the standard Media
    Exchange ToolTalk messages; this makes Xemacs substitute for dtpad when
    displaying and editing objects like files and mail attachments.
    
    To use it, save this attachment somewhere, load the attachment into your Xemacs
    (you might want to edit your ~/.emacs to do this all the time) and make sure
    you
    don't have a dtpad server running (ps -elf > grep dtpad and kill any "dtpad
    -server" processes.)
    
    Then try double-clicking on text files in dtfile, or on text attachments in
    dtmail.  The file/attachment should be loaded into your running Xemacs.
    
    ;;; @(#)cde-media-exchange.el	1.1 95/08/24
    
    ;;; Make Xemacs a CDE/Media Exchange ToolTalk client.
    ;;;
    ;;; Bugs:
    ;;;   - For buffer editing, need to do Deposits on saving.
    ;;;     does write-file-hooks help?
    ;;;     I bet ange-ftp has example of what to do
    ;;;   - does not yet send the dt housekeeping notices like
    ;;;     Started and Stopped, or Saved notices when saving files.
    
    (defvar ttmx-use-new-screen t "t if media exchange opens should create a new
    screen if one isn't showing the
    file. nil if the current screen should be re-used.")
    
    ;; ToolTalk will always prefer a running process to one that would
    ;; have to be started.  We also have Xemacs, like dtpad, register
    ;; for ANY media type.  This ends up meaning that if dtmail isn't running
    ;; but Xemacs is, Display requests for mail folders get sent to Xemacs
    ;; instead of starting dtmail.  We work around this by having a Xemacs
    ;; reject anything that doesn't have a handler-ptype of DTPAD.
    ;; dtpad gets that behavior by default because it registers its patterns
    ;; via tt_ptype_declare, and the patterns so generated have handler-ptype
    ;; set.  If Xemacs's ToolTalk support had tt_ptype_declare we could
    ;; do the same thing.
    
    (defun ttmx-reject-invalid-types (msg) "
    If the message is not for the generic editor (ptype DTPAD) reject it
    and return t else return nil"
      (cond
       ((string= (get-tooltalk-message-attribute msg 'handler_ptype) "DTPAD")
        nil)
       (t
        (return-tooltalk-message msg 'reject)
        t)
       )
      )
        
      
    
    (defun ttmx-switch-to-buffer (buf) "Switch to a buffer either in current screen
    or a new screen, under control
    of ttmx-use-new-screen"
      (if ttmx-use-new-screen
          (switch-to-buffer-other-screen buf)
        (switch-to-buffer buf)
        )
      )
      
    ;; register a session-scoped handle pattern
    
    (defun ttmx-register-handle-pat(op args callback) "Register a session-scoped
    ToolTalk pattern to handle a Media Exchange message."
      (let ((pat (create-tooltalk-pattern)))
        (add-tooltalk-pattern-attribute 'TT_HANDLE pat 'category)
        (add-tooltalk-pattern-attribute 'TT_SESSION pat 'scope)
        (add-tooltalk-pattern-attribute op pat 'op)
        (add-tooltalk-pattern-attribute callback pat 'callback)
        (while args
          (let* ((arg (car args))
    	     (mode (car arg))
    	     (vtype (car (cdr arg))))
    	(add-tooltalk-pattern-arg pat mode vtype nil)
    	)
          (setq args (cdr args))
          )
        (register-tooltalk-pattern pat)
        )
      )
    
    ;; Helper function to tag current buffer so request will be responded to
    ;; when buffer is deleted
    
    (defun ttmx-tag-buffer (msg)
      (make-local-variable 'ttmx-messages)
      (if (not (boundp 'ttmx-messages)) (setq ttmx-messages nil))
      (setq ttmx-messages (cons msg ttmx-messages))
      (add-hook 'kill-buffer-hook 'ttmx-respond-to-buffer-messages)
      )
    
    ;; Helper functions to respond to and remove all messages associated with
    ;; current buffer
    
    (defun ttmx-respond-to-buffer-messages()
      (if (boundp 'ttmx-messages)
          (mapcar
           (function (lambda (x) (return-tooltalk-message x 'reply)))
           ttmx-messages)
        )
      (setq ttmx-messages nil)
      )
    
    ;; Ensure all messages are responded to when killing emacs
    
    (add-hook
     'kill-emacs-hook
     (function
      (lambda ()
        (save-excursion
          (mapcar
           (function
    	(lambda (buf)
    	  (set-buffer buf)
    	  (ttmx-respond-to-buffer-messages)
    	  )
    	)
           (buffer-list t)
           )
          )
        )
      )
     )
    
    ;; Display (read-only) a buffer
    
    (defun ttmx-display-buffer (contents title counterfoil msg)
      (let ((buf (generate-new-buffer title)))
        (ttmx-switch-to-buffer buf)
        (insert contents)
        (set-buffer-modified-p nil)
        (setq buffer-read-only t)
      )
    )
    
    ;; Edit a buffer
    
    (defun ttmx-edit-buffer (contents title counterfoil msg)
      (let ((buf (generate-new-buffer title)))
        (ttmx-switch-to-buffer buf)
        (insert contents)
        (ttmx-tag-buffer msg)
        )
      )
    
    ;; Edit or display a file -- let permissions of file control read/write
    ;; versus read-only.  This is consistent with the behavior of dtpad,
    ;; although not very consistent with the defined meanings of
    ;; the Edit and Display messages. 
    
    (defun ttmx-edit-file (filename title counterfoil msg)
      (let* ((buf (find-file-noselect filename))
    	 (window (get-buffer-window buf t t))
    	 )
        (if window
    	(let ((screen (window-screen window)))
    	  (deiconify-screen screen)
    	  (raise-screen screen)
    	  (set-buffer buf)
    	  )
          (ttmx-switch-to-buffer buf)
          )
        (if title (rename-buffer title t))
        (ttmx-tag-buffer msg)
        )
      )
    
    ;; session Display(in ALL contents)
    
    (defun ttmx-disp-1 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0)))
          (if (not (string-equal "" contents))
    	  (ttmx-display-buffer contents "Unnamed" nil msg)
    	(ttmx-edit-file (get-tooltalk-message-attribute msg 'file)
    			"Unnamed" nil msg)
    	)
          )
        )
      )
    
    (ttmx-register-handle-pat
     "Display"
     '((TT_IN "ALL" contents))
     'ttmx-disp-1)
    
    ;; session Display(in ALL contents, in messageID counterfoil)
          
    (defun ttmx-disp-2 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0)))
          (if (not (string-equal "" contents))
    	  (ttmx-display-buffer contents "Unnamed" nil msg)
    	(ttmx-edit-file (get-tooltalk-message-attribute msg 'file)
    			nil nil msg)
    	)
          )
        )
      )
        
    
    (ttmx-register-handle-pat
     "Display"
     '((TT_IN "ALL" contents) (TT_IN "messageID" counterfoil)) 
     'ttmx-disp-2)
    
    ;; session Display(in ALL contents, in title docName)
    
    (defun ttmx-disp-3 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0))
    	  (title (get-tooltalk-message-attribute msg 'arg_val 1))
    	  )
          (if (not (string-equal "" contents))
    	  (ttmx-display-buffer contents title nil msg)
    	(ttmx-edit-file
    	 (get-tooltalk-message-attribute msg 'file) title nil msg)
    	)
          )
        )
      )
        
    
    (ttmx-register-handle-pat
     "Display"
     '((TT_IN "ALL" contents) (TT_IN "title" docName)) 
     'ttmx-disp-3)
    
    ;; session Display(in ALL contents, in messageID counterfoil, in title docName)
    
    (defun ttmx-disp-4 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0))
    	  (title (get-tooltalk-message-attribute msg 'arg_val 2))
    	  )
          (if (not (string-equal "" contents))
    	  (ttmx-display-buffer contents title nil msg)
    	(ttmx-edit-file
    	 (get-tooltalk-message-attribute msg 'file) title nil msg)
    	)
          )
        )
      )
    
    (ttmx-register-handle-pat
     "Display"
     '((TT_IN "ALL" contents) (TT_IN "messageID" counterfoil)
       (TT_IN "title" docName)) 
     'ttmx-disp-4)
    
    ;; session Edit(inout ALL contents) 
    
    (defun ttmx-edit-1 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0)))
          (if (not (string-equal "" contents))
    	  (ttmx-edit-buffer contents "Unnamed" nil msg)
    	(ttmx-edit-file (get-tooltalk-message-attribute msg 'file)
    			nil nil msg)
    	)
          )
        )
      )
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_INOUT "ALL" contents))
     'ttmx-edit-1)
    
    ;; session Edit(inout ALL contents, in messageID counterfoil) 
          
    (defun ttmx-edit-2 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0)))
          (if (not (string-equal "" contents))
    	  (ttmx-edit-buffer contents "Unnamed" nil msg)
    	(ttmx-edit-file (get-tooltalk-message-attribute msg 'file)
    			nil nil msg)
    	)
          )
        )
      )
        
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_INOUT "ALL" contents) (TT_IN "messageID" counterfoil)) 
     'ttmx-edit-2)
    
    ;; session Edit(inout ALL contents, in title docName) 
    
    (defun ttmx-edit-3 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0))
    	  (title (get-tooltalk-message-attribute msg 'arg_val 1))
    	  )
          (if (not (string-equal "" contents))
    	  (ttmx-edit-buffer contents title nil msg)
    	(ttmx-edit-file
    	 (get-tooltalk-message-attribute msg 'file) title nil msg)
    	)
          )
        )
      )
        
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_INOUT "ALL" contents) (TT_IN "title" docName)) 
     'ttmx-edit-3)
    
    ;; session Edit(inout ALL contents, in messageID counterfoil, in title docName)
    
    (defun ttmx-edit-4 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (let ((contents (get-tooltalk-message-attribute msg 'arg_val 0))
    	  (title (get-tooltalk-message-attribute msg 'arg_val 2))
    	  )
          (if (not (string-equal "" contents))
    	  (ttmx-edit-buffer contents title nil msg)
    	(ttmx-edit-file
    	 (get-tooltalk-message-attribute msg 'file) title nil msg)
    	)
          )
        )
      )
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_INOUT "ALL" contents) (TT_IN "messageID" counterfoil)
       (TT_IN "title" docName)) 
     'ttmx-edit-4)
    
    ;; session Edit(out ALL contents) 
    
    (defun ttmx-edit-5 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg)
          nil
        (ttmx-edit-buffer "" "Unnamed" nil msg)
        )
      )
        
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_OUT "ALL" contents))
     'ttmx-edit-5)
    
    ;; session Edit(out ALL contents, in messageID counterfoil) 
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_OUT "ALL" contents) (TT_IN "messageID" counterfoil))
     'ttmx-edit-5)
    
    ;; session Edit(out ALL contents, in title docName) 
    
    (defun ttmx-edit-7 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg) (return nil))
      (let ((title (get-tooltalk-message-attribute msg 'arg_val 1))
    	)
        (ttmx-edit-buffer "" title nil msg)
        )
      )
        
    (ttmx-register-handle-pat
     "Edit"
     '((TT_OUT "ALL" contents) (TT_IN "title" docName)) 
     'ttmx-edit-7)
    
    
    ;; session Edit(out ALL contents, in messageID counterfoil, in title docName) 
    
    (defun ttmx-edit-8 (msg pat) "Pattern callback"
      (if (ttmx-reject-invalid-types msg) (return nil))
      (let ((title (get-tooltalk-message-attribute msg 'arg_val 2))
    	)
        (ttmx-edit-buffer "" title nil msg)
        )
      )
    
    (ttmx-register-handle-pat
     "Edit"
     '((TT_OUT "ALL" contents) (TT_IN "messageID" counterfoil)
       (TT_IN "title" docName)) 
     'ttmx-edit-8)
    
    
    Info Docs Article 13388

    Infodoc ID   Synopsis   Date
    13388   CDE: Stopping dtlogin From Running Without Doing L1-A?   10 Jul 1996

    Description Top

    Stopping dtlogin From Running Without Doing L1-A?
    
    It depends on how you started dtlogin and if you want to be 
    permanently out of dtlogin or not. 
    
    If you did a /usr/dt/bin/dtconfig -e to enable dtlogin to start each and 
    every time you boot your machine, then from the login screen, pull down on 
    the Options button and select Command Line Login. 
    
    If dtconfig has enabled dtlogin to run all the time, you will be presented 
    with a command line prompt (after pressing the return key when indicated) 
    and can do your command line login and subsequent work. Once you log out, or 
    if you fail in your login attempt, dtlogin will restart. 
    
    However, if you never enabled dtlogin through dtconfig, you will be a 
    victim of a code fix to avert a potential security hole in the login 
    process. Whereas the previously discussed option used to be available
    from the login screen, someone could use this mechanism to break the 
    login process with a Control-C, thus dropping them into your system 
    as root, something that should not happen. So, if dtlogin is executed from
    the command line, the Command Line Login is specifically disallowed. 
    The thought is that, whether or not you agree with it, to run dtlogin, 
    one must do a dtconfig -e to enable the new login process. 
    
    Aussuming that you will only run the login configuration script, to get 
    out, you can still use Control-C, but you have to use it after 
    the logout process has completed (you'll usually see all those apps in your
    workspaces map to the screen and then have the screen blank). Once the 
    screen goes blank, you can press the Control-C to abort the dtlogin process. 
    It's not pretty, but it does the job you want. 
     
    To disable a permanent dtlogin from the command line (as root) do: 
    
    /usr/dt/bin/dtconfig -d 
    
    to disable the recurrent dtlogin screen. A reboot might be necessary after 
    disabling dtlogin through dtconfig to make the system understand that the 
    removal of this process is permanent.
    Info Docs Article 19070

    Infodoc ID   Synopsis   Date
    19070   how to use old .mwmrc files with CDE?   1 May 1999

    Description Top

    I would like to use my $HOME/.mwmrc file with CDE.  How do I accomplish this?
    
    To use an mwmrc config file with CDE(or to at least get the mouse pull-down
    menuss):
    
    - Put the .mwmrc file in $HOME
    
    - Edit the .mwmrc and change the following line:
    
        Buttons DefaultButtonBindings 
    
      to:
    
        Buttons DtButtonBindings
    
    - Create a .Xdefaults file in $HOME and put the following line in it:
    
      Dtwm*configFile:           /home/testuser/.mwmrc
    
    Please note that the environment variable name $HOME may not work in
    .Xdefaults.
    
    *** Sun does not support or endorse such customization of CDE. ***
    Info Docs Article 14637

    Infodoc ID   Synopsis   Date
    14637   Action/Data Types Search Paths and Environment Variables in CDE   24 May 1997

    Description Top

    CDE uses search paths to locate applications and associated desktop files.
    There are four search paths: Application, Database, Icons, and Help data.
    Of interest to Actions and Data Types is the Database search path.   The
    Database search path is used to specify locations for action and data type
    definition files (as well as Front Panel files).
     
    To obtain the search paths' value for the current user, execute this command:
     
            dtsearchpath -v
     
    dtsearchpath uses a combination of environment variables and built-in values
    to create search paths.
     
    The environment variables dtsearchpath reads are called input variables.
    For the Database search path, the input variables are:
     
    DTSPSYSDATABASEHOSTS - System Wide Input Variable, set in
                           /etc/dt/config/Xsession.d/0010.dtpaths.
                           For example, if this file doesn't exist, copy it from
                           /usr/dt/config/Xsession.d/0010.dtpaths.  Then,
                           add the following line:
     
                           export DTSPSYSDATABASEHOSTS=/var/applications/db
     
                           By default, this value is set to
                           /etc/dt/appconfig/types/{language}
     
                           where {language} by default is C.
     
    DTSPUSERDATABASEHOSTS - Personal (User) Input Variable, set in the
                            $HOME/.dtprofile.  For example:
                            export DTSPUSERDATABASEHOSTS=/home/user/mydb
    
                            By default, this value is set to
                            $HOME/.dt/types
    
    
    For changes to these input variables to take effect, one must exit, then
    re-enter the CDE window manager.
    
    The Database search path built-in value is /usr/dt/appconfig/types/{language}
    where {language} by default is C.
    
    When dtsearchpath assembles these values, it assigns these values
    to an output variable.  For the Database search path, the output
    variable is DTDATABASESEARCHPATH.
    
    DTDATABASESEARCHPATH by default will be something like:
    
            /home/user/.dt/types
            /etc/dt/appconfig/types/%L
            /etc/dt/appconfig/types/C
            /usr/dt/appconfig/types/%L
            /usr/dt/appconfig/types/C
    
    DTDATABASESEARCHPATH is created by incorporating the following environment
    variables or locations:
    
        + DTSPUSERDATABASEHOSTS
        + $HOME/.dt/types
        + /etc/dt/appconfig/types/{language}
        + DTSPSYSDATABASEHOSTS
        + DTSPSYSAPPHOSTS
        + /usr/dt/appconfig/types/{language}
    
    
    Info Docs Article 16248

    Infodoc ID   Synopsis   Date
    16248   Xterminal PSD   2 Jun 1998

    Description Top

    Xterminal PSD
    			-------------
    
    
    1.  What is an Xterminal?
    2.  What are Sun's Xterminals?
    3.  What is XDMCP and how do Xterminals use it?
    4.  What are the different methods for xdm to display onto Xterminals?
    5.  What is the Xterminal software?
    6.  What's the difference between the XTerminal boot host and the Xterminal
        session server?
    7.  If an Xterminal is going to use xdm does it need the xterminal software?
    8.  How do you setup fonts for Xterminals?
    9.  Do Xterminals have Xservers?
    10. Do Xterminals work across subnets?
    11. How do I capture error messages from Xterminals?
    12. Troubleshooting tips for Xterminals?
    13. Why does quitting one session from one XTerminal cause all XTerminals to
        reset? 
    14. How do I bring up CDE on an Xterminal?
    15. CDE: The window manager periodically dies on X Terminals
    16. How do I change the resolution of the Xterminal?
    17. How do I get my Xterminals to pick up fonts from another system besides
        the boot host?
    18. Xterminals don't work (hang) with CDE 1.2 if NOT using NIS
    
    ==============================================================================
    
    1. What is an Xterminal?
    
    An Xterminal is a cost effective , SPARC-based display station.
    It displays applications that are running on other computers, called remote
    hosts, as if the applications were running on the terminal itself. These are
    called client applications. The Xterminal passes its keyboard and mouse input
    to these client applications, which display their output in windows on the
    Xterminal's screen. The Xterminal fulfills its role as a graphical display
    station for a remote host by using the X Window System Software.
    
    2. What are Sun's Xterminals?
    
    	The Xterminal 1 and the Xterminal Classic
    
           EX. Xterminal Classic hardware:
    
               Is a stripped down SPARC classic
               single ethernet port
               initial config will have cg3; although cg6 model offered later
               no serial, audio, or external SCSI capability
               4MB of memory; although an 8MB config will be offered
               upgradable to diskless workstation
               type-5 keyboard and mouse
               16" color monitor
    
             Xterminal Classic Software:
    
               boots via tftp
               no Xserver such as Xsun or NeWS, uses a generic Xserver
               no audio
               no DPS
               no serial line connect or Xremote capability
    
             X SERVER
             
               X11R5 based
               special modifications for low memory management
               in low memory situations:
               - releases active backing store
               - selective memory allocation
               - connection refusal
               fontpath extension for remote system NFS fontpaths
               i.e. special syntax for specifying remote font locations
                    does not access R5 style font servers
                    recognizes local Window Manager process
    
               Font Support:
                 X11R5 MIT supplied formats:
                 .bdf, .pcf, scaled: speedo and Adobe Type 1
                 Sun scalable
                 .f3b (folio format fonts)
    
               Does not support:
                 postscript fonts
    
    
    3. What is XDMCP and how do Xterminals use it?
    
        XDMCP stands for X Display Manager Control Protocol which is a
        standard protocol established by the X Consortium in 1989.
    
        From the end user's point of view, it maintains the connection
        between the XTerminal and its server in regardless of the state
        of the XTerminal, namely ON or OFF.
    
        When a XDMCP-compatible XTerminal is powered on, it would
        broadcast a request for establishing a connection to a remote 
        host.  A remote host has xdm running would reply and send a login
        prompt to the XTerminal.
    
        "xdm" Release 4 supports XDMCP.  Therefore, if XDMCP is implemented
        both on the XTerminal and xdm on the remote host, an entry for
        the XTerminal is not required in the Xservers file.
    
        However, if neither the XTerminal nor xdm on the remote host
        supports XDMCP, an entry for the XTerminal should be put into
        the Xservers file to force a direct connection between the
        remote host and the XTerminal. Please read the Xservers file 
        for more details.
    
    
    4. What are the different methods for xdm or dtlogin to display onto
    Xterminals?
    
    See INFODOC ID: 11666
    
    Xterminals generally supply three different ways of running XDMCP:
    
    Direct          Establish an XDM connection to the specified host.  This
                    requires that the name or IP address of the host running
                    xdm be supplied.
    
    Indirect        Send an indirect request for XDM connection to the specified
                    host, which then forwards the request to another host.  This
                    requires that the name or IP address of the host running
                    xdm be supplied.  For a host running X11R4, an "Indirect" query
                  	is treated the same as a "Direct" one.  For a host running
                    X11R5, it can be configured to respond to an "Indirect" query
                    by forwarding the request to another host or by offering a
                    list of hosts for the user to choose from.
    
    Broadcast       Broadcast the request for an XDM connection to all hosts on
                    the subnet.  This does not require a hostname or address.
                    For most Xterminals, the first host that responds is the one
                    that is used.  For some smarter Xterminals, the X server
                    gathers responses from all hosts on the local network and
                    allows the user to choose one to start up on.
    
    		If an Terminal doesn't connect to any host running xdm
                    under a Broadcast query, but can connect to hosts via a
                    Direct or Indirect query, then there is probably something
                    wrong with the Broadcast address that you have configured
                    the Xterminal to use.  See your vendor's documentation for
                    information on how to set the Broadcast address.
    
    
    5. What is the Xterminal software?
    
    Sun provided three versions of Xterminal software, versions 1.0, 2.0 and 2.1.
    Sun does not sell any Xterminal software anymore because the product has
    been End of Lifed.
    	
    Xterminal Software is installed on the server that will be acting as the boot
    host for a given Xterminal. This software allows the server to provide 
    an ip address for the Xterminal as well as configuration files.
    	
    The reason why the Xterminal software is installed on a server instead of 
    the Xterminal itself is because the Xterminal is a dumb terminal which only
    contains enough memory for boot prom information. The Xterminal's Xserver
    is then downloaded from the boot host via the Xterminal software so that 
    client  applications can display onto the Xterminal.
    	
    
    6. What's the difference between the XTerminal boot host and the Xterminal
       session server?
    
    The Sun Xterminal boot host and the Xterminal session server can be the same
    system. The boot host needs to have the Xterminal software installed so it
    can provide the Xterminal's rarp request with an ip address at boot time. 
       
    The Xterminal Session Server is there to provide the X Windows Environment
    for an Xterminal. This can be a separate system than the boot host depending
    on how the Xterminal is configured by the Xterminal Software.
    
    7. If an Xterminal is going to use xdm does it need the xterminal software?
    
    If the Xterminal is a Sun Xterminal then the answer is YES. If the Xterminal
    is actually a Sun workstation that's being used as an Xterminal then the
    answer is NO. The reason is that a Sun workstation already knows it's IP
    address and therefore just needs to get the display from the server.
    
    8. How do you setup fonts for Sun Xterminals?
    
    Under the Xterminal software there is a GUI application 
    called xtmgr. xtmgr has a properties window which allows
    you to set the path for the fonts the Xterminal should use.
       
    9. Do Xterminals have an Xserver?
    
    All Xterminals have an Xserver which is downloaded from the Xterminal
    software on the boot host. The Xserver is a fully compliant X Window System X11
    
    Revision 5 (X11R5) server. 
    
    
    10. Do Xterminals work across subnets?
    
    Broadcast queries are restricted to the local network or subnet. Unlike
    Direct and Indirect queries, you cannot use a Broadcast query to access
    a host through a gateway.
    
    11. How do I capture error messages from Xterminals?
    
    Go onto the boot host and bring up the xtmgr GUI. Select properties and
    environment you'll see a syslog option. Once you find it click on Yes to
    enable it and then you should start seeing error messages in /var/adm/messages.
    
    12. Troubleshooting tips for Xterminals?
    
        1. Always find out the exact environment setup. 
           
              - What is the boot host? 
              - Is it the Xterminal server as well? 
              - What version of Xterminal software is running? 
              - How many Xterminals?
              - Are the Xterminal on the Same subnet? 
    	  - What type of connection is being used? telnet or xdm?
              - Do either telnet or xdm connection work?
    	  - What type of Xterminals?
    	  - Patches??? showrev -p
              - Any errors under /var/adm/messages?
              - At what point is the Xterminal failing? Get Description of the
                state of the Xterminals.
         2. Enable syslog if it's not already enabled.
         3. What is the command used to boot the Xterminal?  
         4. You can run a snoop to see what the Xterminal and the servers are
    doing.
             snoop -rarp
    
    13. Why does quitting one session from one XTerminal cause all XTerminals
        to reset ?
    
        The most likely reason for the resource:
    
    		DisplayManager*reset
    
        in the $OPENWINHOME/lib/xdm/xdm-config file is being set to:
    
    		$OPENWINHOME/lib/xdm/Xreset
    
        If the entry does exist in the xdm-config file:
    
    	DisplayManager*reset:           $OPENWINHOME/lib/xdm/Xreset
    
        it should be changed to:
    
    	DisplayManager._0.reset:        $OPENWINHOME/lib/xdm/Xreset
    
        The xdm process should be restarted.
    
    
    14. How to start CDE on Xterminals 
    
    CDE works nicely with Sun's Xterminal line. The InstallGuide has a 
    Using Xterminals section, around page 25 (depending on the doc's revision).  
    You can find an online copy of this guide in the CDE Application Mgr's
    Information Folder (on CDE system's installed with Developer's cluster).  
    This guide is also in the CDE answerbook.
    
    Thw abbreviated answer is, on the Xterminal's property setup, select:
          
            Use XDM
            XDM connection : indirect to <name of wkstn running CDE>
            Local Winodw Mgr : None
    
    On the Xterminal's Fonts setup dialog:
     
            Add Font path of /usr/dt/config/xfonts/C (for C local)
            to a workstation exporting the installed CDE area.
    
            (Note that this font path is installed from the package SUWdtft,
            which is available in Solaris 2.4 and 2.5.X.  It is not available
            after Solaris 2.5.1.  For Solaris 2.6, you may be able to use the
            font path of /usr/openwin/lib/X11/fonts/F3bitmaps, although this
            has not been tested.)
     
    Restart the Xterminal and CDE's chooser screen will appear.
    Then double-click on the name of the workstation that you wish to log in to.
    
    
    15.  CDE: The window manager periodically dies on X Terminals
    
    CDE consistently dies on all Xterminals connected to a specific
    server after running for a time period - usually in the
    range of 10 to 15 minutes.   
    
    In addition, these messages appear in ~/.dt/startlog:
    
    ...
     --- /usr/dt/bin/Xsession starting...
     fbconsole: open /dev/console: Permission denied
     --- Xsession started by dtlogin
    ...
    
    
    and these messages appear in ~/.dt/errorlog:
    
    ...
    Workspace Manager: I/O error on display:: ...
    
    The Xterminal's server does not have a graphics monitor on it.  Rather,
    it has serial console connected or no monitor at all.
    
    SOLUTION SUMMARY:
    
    The problem is that the server console doesn't have an associated
    framebuffer.  CDE is attempting to start up the X Server on a server
    that has no framebuffer, and failing.  When that happens the 
    CDE processes die, bringing down all the CDE Xterminal connections
    to the server.
    
    To avoid this problem, modify Xservers as follows:
    
    1. cp /usr/dt/config/Xservers /etc/dt/config
    2. Comment out the following line in /etc/dt/config:
    
          :0   Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner
    
       to:
    
        # :0   Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner
    
    
    16. How do I change the resolution of the Xterminal?
    
    How do I change the resolution on an X-Terminal running 2.1,
    for example from 75x75dpi to 90x90dpi.
    
    Edit the sunxt_config file either in /tftpboot or in
    the sub-directory /tfptboot/HOSTID_CFG and add the
    following line:
    
       screen_resolution 90dpi
    
    17. How do I get my Xterminals to pick up fonts from another system besides
        the boot host?
    
    Problem: A customer has an Xterminal 1, NFS server(boot host), and a PC. 
    The customer wants to have the fonts and rgb from the PC instead of the 
    boot host.
    
    Solution: 
    
    The correct way to do this is to bring up xtmgr on the boot host,
    then modify the Xterminal properties. Go under fonts and enter the PC hostname 
    and the path to the fonts found on the PC. Do the same for the rgb, go to the
    environment properties. Change the Color Server to the PC hostname, specify
    the path name to the rgb file of the PC, then hit apply and add. 
    
    NOTE: All these modifications should be done on the boot host.
    
       The NFS server should not be turned off at all if the xterminal will be
    used.
       The Solution given above will not work if the boot host isn't up and
    running.
       The Xterminal is dependent on the boot host during boot up.
    
    
    18. Xterminals don't work (hang) with CDE 1.2 if NOT using NIS
    
    Xterminals like hamlet, Xterminal1, NCD, and Tektronix don't come up
    with CDE 1.2. if NOT running NIS.  After booting, the terminal hangs. 
    Dtlogin does not show up. This happens at sites where no NIS is running 
    as well as at sites where the NIS domainname equals the DNS domainname.
    The assumption being made in CDE is that there is always NIS running and 
    that the NIS domainname has an additional prefix over the dns domainname. 
    This is certainly the case at most sites, but this is not guaranteed. 
    
    The interesting lines are in /usr/dt/config/Xstartup:
    
          # Append Font Server to tail of path.  
          # Will server any "-dt-" fonts not found on the remote machine.
          # 
          if [ -x /usr/openwin/bin/fs ]; then
            $XDIR/xset fp+ tcp/`/usr/bin/hostname`.`/usr/bin/domainname |
            /usr/bin/cut -d. -f2-`:7100
          fi
    
    and /usr/dt/bin/Xsession.
    
          # Append Font Server to tail of path.  
          # Will server any "-dt-" fonts not found on the remote machine.
          # 
          if [ -x /usr/openwin/bin/fs ]; then
            $XDIR/xset fp+ tcp/`/usr/bin/hostname`.`/usr/bin/domainname |
            /usr/bin/cut -d. -f2-`:7100
          fi
    
    Comment out the mentioned lines.