[Solaris x86 FAQ] 6. Post-installation and Customization (Solaris x86 FAQ)


(6.1) How do I add additional drives?

First, you must have Solaris scan for the new drive. Become root and type: "touch /reconfigure; /usr/sbin/shutdown -i6" This rebuilds the /devices/ and /dev/ directories.

ATAPI and SCSI the drives are already low-level formatted. If you wish to format a SCSI you can use /usr/sbin/format that comes with Solaris. A second drive install would use format.

To create and use a filesystem:

[Thanks to Bob Palowoda's FAQ and Sonny Leman]

(6.2) + How do I add or configure users, printers, serial ports, software, etc.?

For Solaris 11 use the System-->Preferences and System-->Administration menu options in GNOME.

For Solaris 10 use Solaris Management Console (/usr/sadm/lib/smc/bin/smc) from X Windows. An alternative are several command line programs in /usr/sbin such as lpadmin, stty, and useradd.

(6.3) How do I suppress the banner page on my printer?

To disable the banner pages permanently perform one of the following steps:

[Thanks to Norm Jacobs]

(6.4) How do I set up an HP-compatible printer to print PostScript files?

Solaris 8 has this ability with Print Manager, /usr/sadm/admin/bin/printmgr, Note that higher-end HP printers (e.g., LaserJet IV) support PostScript directly. Also, Michael Riley reminds us that EPP and ECP printer modes are unsupported.

Before you do any of this, try printing a plain text file (such as /etc/motd) to the printer.

John Groenveld provides the following instructions for Solaris 8. It assumes you have a working Ghostscript with a driver for your printer and that it's attached to /dev/lp1 (/dev/lp0 on some systems). With Solaris 8, USB printers are assigned logical device names /dev/printers/[0..N] The printer queue in the example below is called "lj6l_ps"

# Test your driver:
# (gs may be in /usr/csw/bin/gs, /usr/local/bin, or /opt/gnu/bin, depending
# on who built the Solaris package)
/usr/csw/bin/gs -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=laserjet \
        -sOutputFile=/dev/lp1 /opt/csw/share/ghostscript/examples/

# Create the printer filter definition
# (the "Command:" line is 1 line--it may be broken up below):
cat > /etc/lp/fd/laserjet.fd <<eof
Input types: postscript
Output types: laserjet
Printer types: any
Printers: any
Filter type: fast
Command: /opt/csw/bin/gs -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=laserjet
-sOutputFile=- -

# Test:
/usr/ucb/lpr -Plj6l_ps -h /opt/csw/share/ghostscript/examples/

# Add the filter name to the filter table:
chown lp:lp /etc/lp/fd/laserjet.fd
chmod 664 /etc/lp/fd/laserjet.fd
lpfilter -f laserjet -F /etc/lp/fd/laserjet.fd

# Configure the printer to use the LaserJet filter:
lpadmin -p lj6l_ps -I laserjet

# Stop the data stream to the printer from being modified:
lpadmin -p lj6l_ps -o stty="-opost"

# Enable the printer to accept jobs:
accept lj6l_ps
enable lj6l_ps

# Retry (if needed):
# If something goes wrong (such as using an incorrect command path
# in laserjet.fd), try deleting the printer destination and starting over
# after making your corrections:
lpadmin -x lj6l_ps
lpadmin -p lj6l_ps -v /dev/lp1 -o nobanner

After it's working you may want to set the default printer with the LPDEST and PRINTER environment variables in your startup script (~/.login or ~/.profile) and with "lpadmin -d"

Update: Norm Jacobs adds: Solaris 9u6 and later contain a number of open source packages including Foomatic, Ghostscript, gimp-print, hpijs, and some changes to the printmgr to make this considerably easier. If you turn on "command logging", in the tool from the file menu, you can see the lpadmin command that is used.

Another solution is Common UNIX Printing System (CUPS), which implements the Internet Printing Protocol (IPP), RFC 1179. IPP standardizes printing of multiple document formats. CUPS provides System V and BSD (lp & lpr) interfaces and supports PostScript with a modified version of Ghostscript. For Solaris x86 binaries and documentation, see See also the question below in this section on easy-to-use printing solutions. For configuring and enabling CUPS with Solaris 10, see my blog article at

[Thanks for additional comments from Mark Francis Villa]

(6.5) How can I improve disk and graphic performance?

Disk Performance (iozone)

A typical iozone test with 10 to 20 MB sequential file will give about 2 MB/sec. read/write on a 50 MHz ESIA system on a Maxtor 540SL (8.5 ms) drive with an Adaptec 2740 controller. You'll get a little better performance from a 90 MHz Pentium system. A fully thrashed system will see writes down to about 1 MB/sec. I noticed that the NCR 810/825, etc., seem a little more peaky in the performance specially on the PCI bus.

If you're using a fast wide SCSI controller such as the Adaptec 2940, use a wide SCSI drive for the system drive. These drives usually have double the throughput of the normal 8-bit drives, according to the iozone benchmark results, and they make the tmpfs fly.

Note: If you're using high speed spindle drivers for your boot driver, like 5400 and 7200 RPM drives, you may want to use "set maxpgio=60" for the 5400 RPM drive or "set maxpgio=80" for the 7200 RPM drives in your /etc/system file. This causes the schedpaging to be more efficient. Enable by typing "touch /reconfigure; /usr/sbin/shutdown -i6"

[Andrew Gabriel adds for ATAPI: Read about drive0_block_factor and drive1_block_factor in /platform/i86pc/kernel/drv/ata.conf (man -s 7D ata). Even my oldest ATAPI drives support drive0_block_factor=0x10 without any trouble.]

Starting with Solaris 8, DMA is disabled for ATAPI devices, as it caused installs to fail for several BIOSes. For Solaris 10, it is enabled, at least for me. It can be enabled with the "ata-dma-enabled" property from the GRUB menu (-B ata-dma-enabled=1) After installation, you can also change this line in file /boot/solaris/bootenv.rc:
setprop ata-dma-enabled '1'
If you do this and you have a buggy motherboard chipset, your system won't boot. This happened to me. You can recover by booting in recovery mode and mounting the root filesystem (see the answer in this FAQ about recovering from forgotten root passwords). Buggy chipsets include those with the VIA chipset and ASUS PA5 motherboards. For more details, see the Solaris 8 Intel Release Notes.

Graphic Performance (xstone) Xstones is a little more of a subjective measurement of graphics performance. The comp.unix.x.i386 newsgroup keeps up on the latest xstone performance on graphics cards for PC's.

[From Bob Palowoda's Solaris 2.4 x86 FAQ]

(6.7) How do I get Solaris to recognize generic network cards with well-known chipsets?

There are many new ethernet cards available at major retailers for under $20 using well-supported chipsets. Unfortunately, the cards on the Solaris HCL have been out of production for quite some time -- particularly the Intel cards. I was amazed how difficult it is to find hardware on the Solaris HCL.

First, save yourself a lot of trouble and see if there's a driver for your card somewhere. See if the card is listed on the Hardware Compatibility List (HCL) for the latest Solaris Maintenance Update (MU). The HCL is at I've had good luck with Intel NICs. Check for new and third-party drivers at http://www.Sun.COM/io_technologies/. Also check to see if there's a patch supporting your card.

A list of third-party drivers (mostly from hardware vendors) for Solaris x86 is at

If you have a Linksys LNE100TX or other NIC card, it may be supported by one of Garrett D'Amore's Ethernet drivers. See

More free Solaris NIC drivers are provided by Masayuki Murayama at,

If there's no driver found above, here's what to do:

  1. Install the card and watch the computer boot. Look for the list of devices in the BIOS summary screen. Write down the two 4-digit numbers. For the Intel card it was 8086 1030, the PCI/PnP vendor and device ID for the InBusiness card.
  2. Boot into Solaris. Open the /boot/solaris/devicedb/master file and look for the vendor ID you wrote down. In this example, the vendor ID is 8086 for Intel. Look through the file for devices that closely fit the description of your device under the vendor ID. One of them for this card happens to be iprb for the Intel 82559 chipset which is listed as:
    pci8086,1029 pc8086,1029 net pci iprb.bef "Intel Pro 100/B Fast Ethernet"
  3. If you're confident that you have a reasonable match, add a new line to this file that uses the vendor ID and device that you wrote down: pci8086,1030 pc8086,1030 net pci iprb.bef "Intel 82559 You Bonehead"
  4. Open the /etc/driver_aliases file and add a line for the card:
    iprb "pci8086,1030"
  5. Type "devlinks". Type "touch /reconfigure". Restart. Hit ESC in the the Device Configuration Assistant phase of the boot process and ask it to scan for new devices. It should find your device and display the name you typed in in step (3) above. This step is crucial--the DCA step in the boot process is where some important magic happens.
  6. Once the system is finished booting, note the magic appearance of /dev/iprb (or whatever your device is called) and experience joy. Type "ifconfig iprb0 plumb" to wake it up. Edit a file called /etc/hostname.iprb0 and put your hostname into it. (if you use IPv6, also add /etc/hostname6.iprb0). Type "touch /reconfigure" just for good measure and restart a final time. If you are using Solaris 11, /etc/hostname.* files are ignored (use netcfg(1M) and netadm(1M instead).

As another example, these entries (in /etc/driver_aliases and /boot/solaris/devicedb/master) support both the 905C and 3C980 card, using the elxl driver:

elxl "pci10b7,9200" elxl "pci10b7,9800"
pci10b7,9200 pci10b7,9200 net pci elxl.bef "3Com 3C905C-TX-M El XL 10/100"
pci10b7,9800 pci10b7,9800 net pci elxl.bef "3Com 3C980-TX El Server 10/100"

Finally, here's a partial list of the sub-$20 cards and their chipsets, but I am still looking for the proper driver for the super-cheap 100baseT chipsets from Realtek and Macronix as used by some Dlink, Hawking, Netgear, and Linksys cards.

Another good set of instructions, particularly for newer generations of supported NICs, is at which is based on Keith Parkansky's

[Thanks to Casper Dik, Bruce Adler, and Kriston]

(6.8) How do I change the IP address or hostname or both on Solaris/x86?

See the instructions in "man sys-unconfig" Basically, sys-unconfig unconfigures the machine to make it ready to be configured again on reboot. It's a lot easier and less error prone than the usual dozen or so steps required to purge the old IP address.

For the thrill-seekers among us, you can also do it "by-hand" by editing these files (possibly more?) with your fav. editor:

/etc/nodename          Solaris 10: Update if the hostname changed. Use command
                       "hostname" to set hostname until the next reboot.
                       Solaris 11: To set:
                       svccfg -s identity:node setprop config/nodename="newname"
                       svcadm restart identity:node
/etc/defaultdomain     Solaris 10: Set the default NIS domain name, if any
                       Solaris 11: Use netcfg.
/etc/defaultrouter     Solaris 10: Set the default router's IP address if different
                       For Solaris 11 use netcfg (example below) or
                       "route -p add default"
                       (change to your default router IP address)
/etc/hostname.le0      (change le0) Update if the hostname changed.
                       For Solaris 11 use netcfg or ipadm (examples below).
/etc/hostname6.le0     (change le0) Ditto, if you use IPv6.
                       For Solaris 11 use netcfg or ipadm (examples below).
/etc/dhcp.le0          (change le0) Touch if using DHCP or remove if not using
                       For Solaris 11 use netcfg or ipadm (examples below).
/etc/hostname6.ip.tun0 Update if you use a IPv4/IPv6 tunnel (e.g., 6bone)
                       For Solaris 11 use netcfg or ipadm (examples below).
/etc/nsswitch.conf     Update if your name resolution method/order changed.
                       Copy /etc/nsswitch.dns to /etc/nsswitch.conf if you
                       use DNS instead of (rarely used) NIS.
                       For Solaris 11, make this persistent by typing:
                       nscfg import -f name-service/switch
                       svcadm refresh name-service/switch
/etc/resolv.conf       Update if your name servers/domain changed (DNS only).
                       For Solaris 11, make this persistent by typing:
                       nscfg import -f dns/client
                       svcadm refresh dns/client
/etc/inet/hosts        Make sure your IP address is updated or added here.
                       List your FQDN is first, before the short hostname.
                       E.g., " foo"
/etc/inet/netmasks     Set your network number & netmask, if it changed.
/etc/inet/networks     Set your network name, if it changed.

Obsolete Files
/etc/net/ticlts/hosts, /etc/net/ticots/hosts, /etc/net/ticotsord/hosts
                       Solaris 10: For streams-level loopback interface.
                       For Solaris 11, /etc/net/tic* files are no longer used.
/etc/inet/ipnodes      Solaris 8 & 9: IPv6 version of hosts file
                       For Solaris 10+ use /etc/inet/hosts

By default, DHCP is used to get the IP address and other networking information. Here's how to set a static IP address, if desired, using netcfg(1M) or ipcfg(1M) in Solaris 11.

# netcfg
netcfg> create -t automatic ncp myncp
netcfg:ncp:myncp> list
	phys	net0
	ip	net0
netcfg:ncp:myncp> select ncu ip net0
netcfg:ncp:myncp:ncu:net0> list
	type            	interface
	class           	ip
	parent          	"myncp"
	enabled         	true
	ip-version      	ipv4,ipv6
	ipv4-addrsrc    	dhcp
	ipv6-addrsrc    	dhcp,autoconf
netcfg:ncp:myncp:ncu:net0> set ipv4-addrsrc=static
netcfg:ncp:myncp:ncu:net0> set ipv4-addr=
netcfg:ncp:myncp:ncu:net0> set ipv4-default-route=
netcfg:ncp:myncp:ncu:net0> end
Committed changes
netcfg:ncp:myncp> end
netcfg> end
# netadm enable myncp
Enable ncp 'myncp'

Here's another way to set a static IP address "Automatic" configuration

# netadm enable -p ncp defaultfixed
# ipadm show-if
# ipadm create-ip net0
# ipadm create-addr -T static -a local= net0/v4static1

(6.9) How do I configure another serial port, /dev/ttyb-ttyd (COM2-4)?

Solaris 2.6 and above configures the second serial port automatically. If you just added a serial port type the following:
touch /reconfigure; /usr/sbin/shutdown -i6

If the serial port isn't present after rebooting, follow these instructions:

For Solaris 10+, use sacadm. For Solaris 7 - 9, use admintool and select "Browse-->Serial Ports."

If the steps above don't work, perform the following as root to add the second serial port. For other serial ports and internal modems follow the same steps but change the appropriate line in the /kernel/drv/asy.conf file.

[Modified from Bruce Riddle's Solarisx86 2.5/Dialup PPP Configs FAQ; updates from Michael Wang]

(6.10) How do I disable Solaris/x86 from probing the UPS on COM2?

With the following command, ran as root:

# eeprom com2-noprobe=true

This (undocumented) option to the eeprom command disables boot-up time probing of COM2 (apparently done to detect modems). The eeprom command alters the Solaris boot sector. If the UPS is connected to a serial port during boot-up time, the UPS may go into self-test or shutdown or recalibrate. An alternate solution is to disconnect the serial cable during booting. With the obvious change, this also works for COM1. See also BugID 4038351.

[Thanks to Andy I. McMullin and John D. Groenveld]

(6.11) * How to I boot into 32-bit mode on AMD64 or Intel 64?

Solaris 11 is only available as a 64-bit kernel (although 32-bit binaries and libraries are still supported). For Solaris 10, it normally boots into 64-bit mode on AMD64. You may want 32-bit for, say, a device driver that's 32-bit only. To boot into 32-bit mode, copy the Solaris entry in /boot/grub/menu.lst and add "kernel/unix" as the first argument on the multiboot line. For example:

title Solaris
	root (hd0,2,d)
	kernel /platform/i86pc/multiboot
        module /platform/i86pc/boot_archive

title Solaris 32-bit
	root (hd0,2,d)
	kernel /platform/i86pc/multiboot kernel/unix
        module /platform/i86pc/boot_archive

[Thanks to Casper Dik]

(6.12) How to I set the time zone?

If you don't know your timezone, look in /usr/share/lib/zoneinfo for subdirectories, which are supported timezone strings. The default value is "localtime." In Solaris 11, use (1 line):
svccfg -s system/environment:init setprop environment/TZ="US/Pacific"
Verify the value with
svccfg -s system/environment:init listprop environment/TZ

In Solaris 10 and earlier, edit /etc/default/init (linked to from /etc/TIMEZONE). For example, "TZ=US/Pacific" (without the quotes).

For Solaris x86 (any version), if /etc/rtc_config exists, update the timezone there with the rtc(1M) command. For example,
rtc -z US/pacific
Don't run the rtc command if rtc_config doesn't exist. It's only needed for dual-booted systems that have MS Windows, which set the hardware clock to local time instead of UTC/GMT time.

On a per-user basis the time zone can be set in GNOME under
System-->Administration-->Time & Date.

(6.13) How do I configure Dynamic IP Addresses (DHCP)?

For Solaris 11, DHCP is used automatically. To change that, use netcfg(1M) and netadm(1M). For Solaris 10 and earlier follow these instructions.

Create empty files /etc/hostname.interface and /etc/dhcp.interface (instead of containing the IP address or hostname) where interface where interface is your Ethernet interface (e.g., le0). for example, as root: > /etc/hostname.le0 and > /etc/dhcp.le0).

If you are using PPP, do not specify an IP address in your pppd options file and use ppp0 as the interface.

In addition to the IP address, if you want the DHCP server to supply the hostname (normally not needed, as it should be in /etc/nodename), follow the steps in "DHCP Client Hostnames" in the System Administration Guide mentioned below.

For more information, see "DHCP" in the System Administration Guide "IP Services" chapter at http://docs.Sun.COM/ and

[Thanks to Bruce Riddle, Wyatt Wong, and Ed Ravin]

(6.14) How do I configure my SoundBlaster or other sound card?

If you have a SoundBlaster PCI card, download Jürgen Keil's audio drivers at It includes drivers for Soundblaster, and Intel ICH and VIA AC97 integrated chipsets. I've found it easy to use—just install the packages and reboot. Philip Brown also has a and older version of Soundblaster driver, which he worked on with Jürgen, which supports fewer devices. It's at

A commercial alternative to the above is to use 4Front Technologies' Open Sound System (OSS). It's available for a free trial for about 10 days. After that, it's $30, but well-worth the savings in time. For cards newer than SoundBlaster 16/32/Pro, it's the only choice. To use, download the tar.Z file from, extract, and run the install menu ./oss-install and let it auto-detect the sound card. Reboot (or at least sync), then run "soundon" to enable the driver manually (see file oss/Readme for how to enable automatically). OSS supports the widest variety of sound cards on Solaris. Don't use both Jürgen's driver and OSS at the same time--remove one and reboot before you decide to install the other.

The most difficult procedure is to use the Sun-provided sbpro driver. It works only for old ISA SoundBlaster cards. I recommend not doing this. Instead, buy a sound card supported by Jürgen's, Philip's, or OSS's drivers, instead of wasting your time.

To configure the old Sun sbpro driver become root and type: "touch /reconfigure; /usr/sbin/shutdown -i6". If this works, you should see two links under /dev/sound and be able to play .au files with audiotool

  1. Run "prtconf -pv" to print the current system configuration:

            Node 0xf5a33500
                compatible: 'pnpCTL,00E4,0' + 'sbpro'
                dma-channels:  00000001.00000005
                interrupts:  00000005
                model:  'Audio'
                name:  'pnpCTL,0045'
                pnp-csn:  00000001
                reg:  8e8c00e4.19f815e8.00000000.00000001.00000220.00000010
                unit-address:  'pnpCTL,00E4,19f815e8'

    The device ID I want is CTL0045. This comes from the name line "pnpCTL,0045". There were a couple of other 'pnpXXX,DDDD' devices. This was the only one with the model "Audio".

  2. According to old Sun InfoDoc 15830, I used "CTL,0045" from above and updated /platform/i86pc/boot/solaris/devicedb/master as follows (no comma):

    < CSC0000|PNPB002|PNPB003|CTL0031|ESS1681 sbpro oth all sbpro.bef
     "Sound Blaster"
    - ---
    > CTL0045|CSC0000|PNPB002|PNPB003|CTL0031|ESS1681 sbpro oth all sbpro.bef
     "Sound Blaster"
    This is only an example. For Solaris 10, the CTL0045 entry is now present.

  3. Rebooted and rebuilt my devices:
    # touch /reconfigure; /usr/sbin/shutdown -i6

  4. I also ran the Device Configuration Assistant (DCA) -- press Escape as soon as the machine boots, it will prompt you -- just to verify that the Sound Blaster showed up in the device list. It did as "Sound Blaster." Since I ran the DCA boot will get the -r arg anyways.

  5. When I boot /dev/audio was present. Yeah! I am currently listening to the Sunday Blues on real audio.

  6. For more information, type "man sbpro."

[Thanks to Park Byoung-Gi, Steve Krapp, Chris, Dave, Norma, Jürgen Keil, & Philip Brown]

(6.15) How do I enable the audio output from my CDROM to my SBPRO card?

Start audiocontrol then select "Record." Ha ha, "Record" really means "Sound Source ;-)." In the audiocontrol record window, select "Internal CD" (other choices are Microphone or Line in).

You must have audiocontrol running before starting your favorite CD player application. You can use GNOME, CDE, or open source players, such as xmcd. Robert Muir reports you can use this from the command line (non-X):
audiorecord -p internal-cd /dev/null &

[Thanks to Eugene Bobin and Robert Muir]

(6.16) Can I use Solaris/x86 to setup a "headless" server?

The answer is yes, it can be done, but it's BIOS dependent, since many BIOS chips won't boot up the system without the keyboard and video card. The console can be configured to go to serial ports as described below. Removal of video card is also BIOS dependent. Setup steps:

1. Set the serial line's Carrier Detect (CD) to HIGH and (for 2.6 only) set the serial line's Data Set Ready (DSR) to HIGH. If you don't--it won't boot. This can be done with a NULL modem or with the following 25-pin or 9-pin pinouts:

     DTE A         DTE B
     25 (9)        25 (9)
     ------        ------
FG    1 (-) ------  1 (-) FG
TD*   2 (3) ------  3 (2) RD
RD    3 (2) ------  2 (3) TD*
CTS   5 (8) -+---- 20 (4) DTR*
DSR   6 (6) -|  +-  5 (8) CTS
CD    8 (1) -+  |-  6 (6) DSR
DTR* 20 (4) ----+-  8 (1) CD
SG    7 (5) ------  7 (5) SG
RTS*  4 (7)  (nc)   4 (7) RTS*
RI   22 (9)  (nc)  22 (9) RI
* DTE (terminal/computer) driven
(nc) = no connection

If the NULL modem is "incomplete", the boot process hangs shortly after starting the asy driver (after the message "asy0 is /isa/asy@1,3f8" or similar asy1/2f8 message). For details, see

2. Set your the terminal to (9600 bps,8 bits, No parity, 1 stop bit).

3. Use the eeprom command to specify the console (ttya, ttyb): eeprom input-device=ttya output-device=ttya (just like SPARC? ;-)
Update: Andrew Schwabecher reports that using "ttya" doesn't work. Instead, he adds these entries to /boot/solaris/bootenv.rc:

setprop output-device com1
setprop input-device com1
Update2: David Cocking reports that using "ttya" does work, except with Sun's LX50. For LX50 both ports are set to sense whichever one you attach to under "ttyb".

Steve Rikli adds the following simpler 3-pin alternative, in lieu of the above:

I've found that, while the full NULL modem pinouts work just fine, a simple 3-pin (TD/RD/SG) pinout scheme will also work in Solaris 8 by issuing eeprom commands thusly:

eeprom output-device=ttya
eeprom input-device=ttya
eeprom ttya-ignore-cd=true

The kicker is the "-ignore-cd" variable, which doesn't seem to be present by default on a Solaris x86 install, unlike Solaris for SPARC hardware. But setting it does work and it does persist across reboot/power-cycle. In the absence of "ttya-ignore-cd=true" one does indeed need a full NULL modem pinout.

PC Weasel 2000, at is a PCI board that emulates VGA cards over a serial line. This provides a serial console interface for PC-class computers transparent to the operating system. This is useful for BIOS configuration and the Solaris Device Configuration Assistant (DCA) remotely. Of course, you can't run CDE with it, but once Solaris is up, you can use a regular serial port. Herb Peyerl, one of the company founders, adds: "I've tested this card under 2.8 and it works fine. There isn't a Solaris Watchdog driver for the Weasel yet and sometimes the text attributes are a little funky, but it's certainly usable."

[Thanks to John Weekley, Scott Wedel, Kenneth Wagner, Andy Spitzer, Kai O'Yang, Michael Wang, David Page, Andrew Schwabecher, Steve Rikli, Richard Shuford, and Herb Peyerl]

(6.17) Can I get a Sun-style keyboard (Ctrl & Caps Lock reversed) for S/x86?

Yes, from PFU, now part of Fujitsu, sells it's "Happy Hacking Keyboard" for $69. It's Sun type 5 keyboard with only the essential 60 keys.

You can order a Sun USB keyboard and mouse that works quite well with Solaris x86. They are available from Sun Store,, with the following part numbers:

If you don't want to buy any new hardware, you can use just software to switch Control_L and Caps_Lock keys. Create file $HOME/.xmodmaprc with:

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
and add "xmodmap $HOME/.xmodmaprc" to your $HOME/.dtprofile file.

For the adventurous electrician, there's a web page to show how to build and program a PCB to to drive a Sun Type 5/6 keyboard from a PC. This includes a PCB mask, source code, and instructions. See

[Thanks to Don Christensen and Ian Hall-Beyer]

(6.18) Can I run multiple terminals on the console of Solaris x86 like those supported on Linux, FreeBSD, Interactive Unix, and SCO?

Yes, this feature is called Virtual Consoles and this sorely-missed feature is available again in Solaris. They used to be available in Solaris/x86 2.3. In Solaris/x86 2.4, they were no longer configured (1994), and in Solaris 8 the functionality was removed (1998). It's now back in Solaris Express build snv_124 and greater (Oct. 2009).

Virtual consoles are text-oriented 80x25 character text-oriented consoles available on Linux and other Unix-class systems. It's a handy feature for recovery when your X Window GUI console is frozen or otherwise unavailable. Here's a script to enable it (run as root):

#! /bin/ksh
svcadm enable vtdaemon
for i in 2 3 4 5 6 ; do
    svcadm enable console-login:vt$i
svccfg -s vtdaemon setprop options/secure=false
svccfg -s vtdaemon setprop options/hotkeys=true
svcadm refresh vtdaemon; svcadm restart vtdaemon

You can now switch to virtual terminals with ctl-alt-F1 to ctl-alt-F6. Use ctl-alt-F7 to switch to the X Window GUI. For best functionality, log out and log back in X Windows, if X is running. If you want an automatic X screen lock when switching to a virtual terminal (most won't), skip the line above containing "secure=false". For more information, see

(6.19) How do I upgrade my video graphics card?

First see if you have the driver installed. They are listed when you run kdmconfig. If the driver is present, configure with kdmconfig. If it's a new card, see if it's listed in the latest driver updates for your Solaris release on http://access1.Sun.COM/drivers/ If listed, install the update. kdmconfig is ran automatically at the end of the update installation. Before changing cards, choose, from kdmconfig, the 16-color 640x480 VGA setting, which is the lowest-common denominator for VGA video cards. After switching cards and rebooting (verifying the VGA setting works for the new card) choose a higher setting with kdmconfig.

See the Update Guide that comes with the update on specific installation instructions for the update. Generally, it's done as follows: (assuming the image downloaded from access1.Sun.COM is named vdu11image.Z and is in /tmp), type as root:

    # cd /tmp
    # uncompress du11vid2.Z ; cat du11vid1.bin du11vid2 | cpio -icvdum
    # zcat vdu11image.Z | cpio -icvdumB
    # ./

(6.20) How do I burn a CD or DVD with Solaris?

Use cdrecord or GNOME's Brasero to burn or produce CDs and DVDs. Brasero is GUI-based and cdrecord is command-line based. Personally, I find cdrecord more reliable and robust for just burning CDs or DVDs. Both are in Solaris. tend to be better supported than ATAPI drives. For details, see the Sun CD-ROM FAQ at and Jörg Schilling's cdrecord page at:

Here's brief instructions on setting up and using cdrecord. First create a /etc/default/cdrecord file. Here's an example:


Update the last line based on the output of cdrecord -scanbus. Make sure to set CDR_DEVICE to the CD/DVD drive and not a hard drive. For example, here's my output from -scanbus:

	2,0,0	200) 'MATSHITA' 'DVD-RAM UJ-85JS ' 'F100' Removable CD-ROM
	3,0,0	300) 'HITACHI ' 'HUS1514SBSUN146G' 'SA02' Disk

To burn, use a command line such as this:
cdrecord -v solaris-11-live-x86.iso

(6.21) Is IPv6 available for Solaris/x86?

Yes, starting in Solaris 8. It is certified IPv6 ready by the IPv6 Consortium ("AIPv6 Ready Phase-2 Core Approved"). For general IPv6 information, see If you wish to connect to the 6bone, an experimental, mostly tunneled IPv6 network, see

(6.22) Is IPsec available for Solaris/x86?

Yes, for Solaris 8. See volume 3 of the System Administrator's Guide at http://docs.Sun.COM/ for more configuration information. Solaris 8 IPSec supports AH (authentication) and ESP (encryption) headers, and "shared secrets" (manual keying), but not automatic (ISAKMP or IKE) keying. Solaris 9 supports IKE.

Adam Barclay adds these comments:

As a reminder, some countries (e.g., Russia) prohibit the use or possession of encryption software.

(6.23) Is Kerberos 5 available for Solaris/x86?

Yes, for Solaris 8. See volume 3 of the System Administrator's Guide at http://docs.Sun.COM/ for more configuration information. The configuration files reside at /etc/krb5 and /var/krb5 and the binary files at /usr/krb5 and /usr/lib/krb5. Make sure you answer "y" to whether you want Kerberos during your Solaris install. Then, install SEAM (Sun Enterprise Authentication Mechanism, what Solaris calls Kerberos) from the Solaris 8 Admin Pack, freely downloadable from http://www.Sun.COM/software/solaris/easyaccess/sol8.html

(6.24) Does Solaris x86 support multiple processors?

Yes. Solaris x86 automatically detects multiple processors. The limit is at least 8 according to the HCL and by observation. The theoretical kernel limit (_ncp) is 21. Due to bus conflicts, there's diminishing returns as you increase the number of procs. psrinfo(1M) will print the status of your processors, mpstat(1M) will report the CPU usages, and psradm(1M) can be used to take processors offline.

Some people have had problems with Solaris "seeing" the extra processors, with at least one type of motherboard (HP/Compaq?). They had success with going into the BIOS utility and setting OS type to "other" for "Solaris". With most motherboards no special BIOS settings are required. Likewise, Solaris x86 also supports Intel's Hyperthreading (multiple logical processors). This is because most or all of the additional support required is in the motherboard and not Solaris. However, psrinfo -p will still display 1 processor (as it's not true multi-threading).

[Thanks to John Groenveld, Jürgen Keil, Bob Palowoda, Bruce Alder, and Michael VanLoon]

(6.25) How do I uncompress a .gz file?

With "gzip -d" (or gunzip, which is gzip linked to gzip). Solaris 8 has gzip. Solaris 7 or earlier does not come with gzip (it doesn't have zip either--only unzip). Gzip is available as a pre-compiled package from (use "pkgadd -d packageFileName" to install) and also as a tar file (to extract, type "uncompress gzip*Z; tar xvf gzip*.tar") at

(6.26) Why doesn't /usr/bin/cc work?

Because it's just a front-end "stub" for the unbundled C compiler, Oracle Solaris Studio (formerly Sun Studio). However, you can download Oracle Solaris Studio for free. See

You can also get the free GNU C compiler, gcc, in pkgadd format from various locations. It is bundled with Solaris 11. For Solaris 10 and earlier, it is bundled with the the "Solaris Software Companion CD" and can be downloaded from If you install gcc, I recommend that you rename or compress /usr/bin/cc and softlink (ln -s) /usr/local/bin/gcc (or /usr/sfw/bin/gcc or wherever it is) to /usr/bin/cc.

By default, Solaris comes with support tools (such as make and libraries) and header files in /usr/include. If not, add the appropriate packages. For more information, see the "Software Development" section in Casper Dik's Solaris 2 FAQ.

(6.27) How do you connect Solaris to my cable modem?

See also the next question on RoadRunner.

At least for the the East Brunswick, NJ, servers, I had the easiest time with DHCP (not the static setup):

/etc/hosts:    localhost    CCxxxxx-A  # where CCxxxxx-A is your hostname
       24.x.x.x      CCxxxxx-A    loghost   # where 24.x.x.x is your assigned IP

       hosts:        files dns


/etc/dhcp.elx0 (empty file)

/etc/hostname.elxl0 (empty file)
       NOTE: replace "elxl0" with your NIC device name
No /etc/defaultdomain, /etc/defaultrouter, or /etc/netmasks files are used. This info is handled by DHCP. Reboot and you're hooked up. Here's my (partially disguised) netstat -rn and ifconfig -a outputs:
$ netstat -rn
Routing Table:
  Destination           Gateway           Flags  Ref   Use   Interface
-------------------- -------------------- ----- ----- ------ ---------
24.x.x.0               24.x.x.x            U      3      2     elxl0            24.x.x.x              U      3      0     elxl0
default              24.x.x.1              UG     0      44               UH     0     236      lo0

$ ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
        inet netmask ff000000
elxl0: flags=4843<UP,BROADCAST,RUNNING,MULTICAST,DHCP> mtu 1500
        inet 24.x.x.x netmask ffffff00 broadcast 24.x.x.255

[Thanks to Alan Lucero.]

(6.28) How do you setup Solaris to use RoadRunner's cable modem service?

RoadRunner uses General Instrument's SURFboard or other cable modem hooked up to a coax cable on one side and a straight-through Ethernet cable on the other side. The real throughput is about 6-MB/sec. on downlinks and 768KB/sec. on uplinks. The cable modem looks like a router to your computer.

RoadRunner configures home systems with Dynamic Host Configuration Protocol (DHCP), which provides the IP address, default route, and name servers. RoadRunner only supports Windows and Macs, but it works fine with Solaris (they just won't help you setup or diagnose Solaris DHCP). You need Solaris 2.6 or higher for DHCP. To set it up for Solaris, follow these steps, as root:

  1. "touch /etc/dhcp.iprb0" (replace the ".iprb0" with whatever the ethernet interface for your system might be, as shown by "ifconfig -a")
  2. "cp /dev/null /etc/hostname.iprb0". You need to make *SURE* that this file is EMPTY - otherwise, DHCP configuration won't work.
  3. Make sure that /etc/inet/hosts only has one line in it, the one containing " localhost". Any other lines will be ignored, and any additional necessary lines will be added by the DHCP client at boot time.
  4. "touch /etc/notrouter" - this creates a file to tell Solaris that your system will not be performing routing or packet-forwarding duties (if that's the case in your situation). If it already exists, good. Leave it be. 8-)
  5. "cp /dev/null /etc/defaultrouter" - since the DHCP client software will automatically put the needed entries in this file, we just need to make sure that it exists as an empty file. If it already exists, rename it and create the empty file in its place.
  6. "cp /dev/null /etc/resolv.conf" - again, the necessary entries will be added by the DHCP client. If you already have this file, rename it and create an empty file in its place.
  7. Copy /etc/nsswitch.dns to /etc/nsswitch.conf to enable your machine to resolve addresses using DNS, the Domain Name System (instead of NIS). Or edit the file /etc/nsswitch.conf, and look at the "hosts:" line. By default, it reads "files"; change it to read "hosts: files dns".
Once you've performed these steps, your machine is ready to get its networking information via DHCP. The easiest way to do this is to reboot your machine. You will see status messages during boot about the DHCP client, this is normal. Once the machine is booted type the "ifconfig -a" command. You will see output similar to this:
	$ ifconfig -a
	lo0: flags=849 mtu 8232
	inet netmask ff000000
	iprb0: flags=4843 mtu 1500
	inet netmask ffffff00 broadcast
	ether 8:0:20:1b:1:72

The entry we're concerned about is iprb0 (lo0 is the dummy loopback interface); just make sure that its configured via DHCP, and that an IP address and broadcast address was assigned. You can also check the /etc/resolv.conf and /etc/defaultrouter files to make sure they were configured by the DHCP client.

Type "nslookup" to test that /etc/nsswitch.conf and /etc/resolv.conf are setup correctly for DNS lookups. If not, they may need to be hand-edited with values provided by your ISP. These files are documented in nsswitch.conf(4) and resolv.conf(4). The resolv.conf needs to have "domain" and "nameserver" lines.

Type "netstat -rn" to see if there's a "default" destination configured in /etc/defaultrouter and type "ping" to verify routing is OK. Use "traceroute" to diagnose routing problems.

Type "hostname" to see if it says "unknown." If so, DHCP did not provide a hostname. One workaround is to edit /etc/init.d/network and replace all occurrences of "unknown" with your real hostname.

This information is adapted from Bill Bradford. Some (older) RoadRunner setups may still require a RoadRunner login program. This is explained in that link.

RoadRunner information is at and help is at The Unofficial RR FAQ is at

For generic cable modem information, see the e-zine article "xDSL and cable modems" referenced in the previous question on @Home service. The article covers instructions on enabling Solaris with a cable ISP.

(6.29) How do I force the speed and/or duplex of my network interfaces (ndd(1M) doesn't work)?

No x86 driver can be interfaced via ndd(1M). The only way to set speed/duplex is via the NIC's driver.conf(4). iprb(7D) on Solaris 8 suggests that you can specify speed/duplex for multiple instances via ForceSpeedDuplex option. For other drivers, you'll need to specify each instance per driver.conf(4). Finally, for most people, auto-negotiating works as expected. Having to hard-code values may indicate cabling or switch problems.

(6.30) Why can't I create a home directory under /home?

For Solaris, /home is not an on-disk file system, it is a file system under the control of the automounter, and only the automounter can create directories/files in it.

If you don't want the automounter to manage /home, then remove the "/home" entry from /etc/auto_master (and issue the command "automount -v" to force the file to be reread, or reboot).

However, the typical setup for Solaris is to locate user's home directories in /export/home.

/home is intended to be where all users' home directories appear regardless of which machine they are really located on--by virtue of the automounter and auto_home map. This makes your home directory always appear in the same place regardless of which machine you login to, and regardless of which server the sysadmin decides to move your home directory.

If you are not part of a network with workstations and servers, this may look strange. If you want to, as a demonstration, you can set up a standalone workstation to operate this way, as follows. (I'm assuming you still have the default setup of /home under the control of the automounter.)

Create a user with a home directory in /export/home, say, /export/home/andrew, so that the directory is correctly created with .profile, .login, etc in it.

Put the following line in /etc/auto_home:

andrew cucumber:/export/home/andrew
(substitute your user name for 'andrew' and your hostname for 'cucumber'). If there is an "+auto_home" entry in there, comment it out. Make the automounter reread the files: "automount -v".

You should now be able to "ls /home/andrew" and see the files there which are in /export/home/andrew.

If you issue the command "/usr/sbin/mount -p", you will see that /export/home/andrew has been mounted on /home/andrew (by the automounter). Normally this would be an NFS mount to a remote server, but in this case the system has spotted that is it attempting to NFS mount itself and uses the loop-back filesystem instead (lofs) which avoids the NFS overhead when the filesystem is on the same machine.

Finally, to complete the use of /home, you should change Andrew's entry in the /etc/passwd file such that the home directory is /home/andrew.

In a networked environment, you also need to add /export/home to the /etc/dfs/dfstab file so that it is available for other clients to mount. Also, the /etc/passwd file and /etc/auto_master file (and much more besides) would be obtained using naming services from a single networked copy, so you would only need to set this up once whatever the size of your network, not once per workstation.

[Thanks to Andrew Gabriel]

(6.31) Is Symantec Veritas file system available for Solaris x86?

Yes. Formerly it was available only through NCR Corporation. But now it is available directly from Symantec:

(6.32) * How to I find the battery status for a laptop under Solaris?

For Solaris 11, it is available as an applet in GNOME. Right click on the GNOME toolbar, select "Add to Panel", and click on "Battery Charge Monitor." The battery status is displayed on the taskbar and you get a pop-up window when the charge goes below 15%.

(6.33) How do I use Linux NIC drivers for Solaris x86?

Sun has released (9/2000) a free network driver porting kit to port Linux PCI-based network drivers to Solaris x86. The kit includes, as examples, ported Linux drivers for the Intel EEPro100 and the Digital "Tulip" 2104x/2114x chip (a reliable chip used by the Netgear FA-310-TX, SMC EtherPower, Kingston EtherX, D-Link DFE, and other lower-cost cards) For legal reasons (the Linux driver authors complained about use of these drivers in a commercial Product--Solaris), this kit was pulled and is no longer available.

(6.34) How do I add color to "ls" or "vi"?

For Solaris 11, use GNU "ls" in /usr/gnu/bin/ls. For Solaris 10, you need the GNU "fileutils" version of ls. Obtain the binary from or compile it yourself from source from I then use this alias: alias ls='/usr/gnu/bin/ls --color=auto' (remove the "=" for *csh shells).

Vim For vi, I use vim (or gvim for X Windows). Vim is available in Solaris 11 and is installed by default in /usr/bin/vi. The GUI version, gvim, is not installed by default, but is included in package solaris/editor/gvim in Solaris. The old, non-VIM version of vi is in /usr/sunos/bin/vi. For Solaris 10, it is also available from or directly from You may need to add "syntax on" in your $HOME/.vimrc file to enable syntax coloring.

If color output still doesn't appear, for either of these, make sure your terminal emulator supports color (e.g., dtterm, xterm, and gnome-terminal) and that your $TERM is set correctly. To verify you can display color, copy, paste, and execute this line in your shell prompt (you should see the letters "blue" highlighted in blue):
/bin/echo '\033[0m\033[01;34mblue\033[0m'

You can also get color from the tcsh builtin ls, if you use the tcsh shell (included in Solaris 8 and later), by simply doing:
alias ls ls-F ; set color=ls-F
See the tcsh man page for details.

(6.35) How do I move the disk containing Solaris from the ATAPI primary master controller to the secondary controller or slave connector (or both)?

Once Solaris is on the secondary master, you must enable booting to it. Here's three methods:

[Thanks to Michael Wang, Alexander Yu, and Laurent Blume]

(6.36) I've installed Solaris using Sun's brain-dead disk slice defaults. How do I modify my slices?

This is for Solaris 10. Solaris 11 uses ZFS. For Solaris 10, you don't--it's too late now, but you should have read the recommendations on disk partitions and sizes in section 4 of this FAQ. Solaris (unless you're running under Veritas) doesn't support modifying slices without destroying data on the entire slice. Your options are (in order of ease):

Instructions for resizing the Solaris partition and filesystem. These instructions may not be easy and may not succeed. Backup your files and verify the backup first.

[Thanks to John D. Groenveld and Paul Floyd]

(6.37) How do I mirror root with Disksuite when /boot is a separate fdisk partition?

You don't. Disksuite only supports mirroring ufs filesystems, so in order to mirror /boot, it should be part of the root (/) slice inside Sun's fdisk partition. Sun's default install will create a separate 10MB "x86 Boot" fdisk partition which is mounted as pcfs. If you already have Disksuite running the solution is as follows:

Start with all the mirrors in place except for the :boot partition and had identical layouts on both disks.

  1. Back up all my important stuff.
  2. Use metadb to delete the state db's on the Disk 1 and Disk 2 ( I have Disk 3 and Disk 4 for the time being).
  3. Get a tar backup of /boot directory and save it in / (root)
  4. metadetach and metaclear all the Submirror's from the Disksuite db's on disk 2.
  5. Recreate Disk 2 Partition table (using fdisk) to be 100% Solaris and rebuild Solaris Partition(Slice) table (using prtvtoc/fmthard)
  6. Re-mirror Disk 2 So it's almost identical to how it was at the beginning, except the x86 partition table is now one big Solaris partition. I.e., starting at the very beginning of the disk. This is very important, otherwise the bootblock installation won't work.
  7. Untar the boot directory tar file so now i've /boot ufs mirror under the / mount.
  8. Do step 4 on Disk 1.
  9. Do step 5 on Disk 1.
  10. Do step 6 on Disk 1.
  11. Run 'installboot' on Disk 1 and Disk 2 (hint: the man page is ambiguous on this, but a Sunsolve doc says it must be run on slice 2 [it's obvious if you think about it]).
  12. Add state db's using metadb on Disk 1 and Disk 2.
  13. Edit /etc/vfstab and took out the :boot entry because it's now in the / fs.
  14. Reboot with /usr/sbin/shutdown -i6
  15. Test boot in single-user mode from either drive.

[Thanks to "Nick" via John D. Groenveld]

(6.38) Is ISDN supported for Solaris x86?

ISDN is hard to setup and slow compared to cable-modem service or even DSL. However, ISDN is popular and available in Europe. Some old SPARCstations had ISDN support built in. However, there are no Sun-supplied drivers other than for these machines. There are third-party drivers for Solaris x86 from:

I'm sure other drivers exist. Before buying ISDN hardware, check if they have a driver for Solaris first.

(6.39) Is there a substitute available for PRNG /dev/random for Solaris x86?

Yes. /dev/random and /dev/random are pseudo-random number generators (PRNG). /dev/random will wait if the entropy pool of random bits is empty until more bits are available. /dev/urandom will not wait and may repeat bits. PRNGs are used to implement encryption software, such as GPG, OpenSSL, and OpenSSH. The /dev/*random pseudo-devices are available beginning with Solaris 8.

Free PRNG substitutes include egd and prngd. Enthropy Gathering Daemon (egd), a /dev/random replacement, outputs randomness to a socket at ~/.gnupg/entropy. Pseudo Random Number Generator Daemon (prngd), a /dev/urandom replacement, outputs randomness to a socket at /var/run/egd-pool. Source and binary packages for these are available at

(6.40) What are some good, easy-to-use printing solutions for Solaris?

CUPS is now standard on Solaris 11. A writeup by Carl Ehorn, below, provides a good summary of CUPS and other solutions.

I don't know if anyone has the same problems I did, but I recently went looking for a good printing solution that didn't require that I roll my own using Ghostscript and a bunch of scripts. I've done that before, and it gets old fairly quickly.

I have a HP Deskjet 1220C, which is a color wide-carriage printer with fairly high resolution capabilities. It can print at 600x600 DPI color in normal modes, and can support up to 2400x2400 DPI color with HP software. However, that software only works on Win machines, and I don't really need that high a resolution in Solaris, as I do my graphics processing on Win machines anyway.

My printer is hanging on an ethernet print-server box, which allows it to be shared by any machine on the network. This works very well, and has always worked in text modes from Solaris. But I was looking for a Postscript solution, so that I could print PDF files, Postscript files, and take advantage of some of the advanced formatting capabilities that Postscript provides. It's also nice to be able to print from a browser.

So I took a look at what's available on the web. Of course, there is Ghostscript, Gimp-print, and other similar packages, but they require a fair amount of work to make a seamless print solution (at least on Solaris). So I also looked at Vividata's P-Shop, CUPS, and ESP Print Pro. These last three are fairly low-cost solutions for a single server, and I felt that the prices they charge would be acceptable to me, considering the time and effort they would save.

Vividata I tried the Vividata package, and while it works fine, it did not support any of the higher resolution modes the printer was capable of. I should point out that Vividata is the only package I found that had Color profile management available as an option. I didn't try this, but it would be important if you were doing pre-press graphics work. Vividata had a generic driver for my printer, but had not updated it in some years, and does not seem to be interested in providing further development for the more recent printers that have been made. They seem to feel that if a generic PCL driver works, that's good enough. Vividata provides Postscript Level 2 support.

CUPS I then tried the CUPS package, which is free on the web. There is a lot of support for this system from the internet community, including driver generators from the Gimp project. The Gimp drivers have been reported to provide very high quality output compared to the standard drivers, but require that you build and install a lot of dependent packages in order to make use of these better drivers. Again, this was looking like a lot of work to get a good package working, and I wanted to avoid that.

The standard CUPS package had very disappointing output, and a generic install using the recommended driver resulted in solid black pages. Using an older, lower quality driver, I was able to obtain 300 DPI 8-bit output. While this is OK, it's not good. 8-bit color results in a very noticeable dither in both color and grayscale output, and while the 300 DPI text output was fine, I found that some PDF files did not print text very well. There were artifacts, and some aliasing in the outlines of letters. Enabling debug output from the driver resulted in some very confusing data. It appeared that the PS-2-raster conversion was done at 100 DPI, then the raster to PCL was scaled up to 300 DPI. While the support staff for CUPS says that's impossible, it sure looks that way from the debug output, and would also explain the poor text quality from some applications.

CUPS is supported by the newsgroups and some of the same folks who make ESP Print Pro. It supports Postscript Level 3 output.

ESP Print Pro Last of all, I tried the ESP Print Pro package. This is an enhanced product based on CUPS, but has considerably more printer-specific drivers available, including one for my printer. It installs just like CUPS, and also like CUPS, is a replacement for the LP print system that comes with Solaris and other UNIX variants. While I had some misgivings about replacing the LP system, both CUPS and ESP Print Pro installed easily, and with no problems.

I'm pleased to say the ESP Print Pro worked the best of all these packages for me. I was able to set the defaults to 600x600 DPI, using CMYK color modes, and got a very noticeable increase in the print quality. Text is crisp as any 600 DPI laser, and I printed a 24-bit color scan of a photograph that resulted in a very nice print. On plain paper, the colors are not true, but are perfectly acceptable for a draft print. Note that Windows also is unable to print accurate colors on plain paper. This is not a fault of the software, but a limit in the printer technology. Printing to coated photo paper would probably provide a much more accurate print, but I did not bother to test the ESP package in this mode, as I do photo work on Windows. HP-supplied drivers work very well in Windows, and has full support for the 2400 DPI mode.

With ESP Print Pro at 600 DPI, and using the CMKY color model, the supplied Postscript test page printed well, and all signs of dithering were gone, in both color and grayscale areas of the page. Note that CUPS uses the same test page, so these can be compared directly to see the differences between the packages.

I found that the native Imagetool program supplied with Solaris crashed when trying to print my 24-bit TIFF test image, but when I loaded the image into StarOffice's drawing program, it printed perfectly, scaled exactly as it should have been. StarOffice sees the new printing system with no problems, and will print to the default printer without any required setup. While I have not done much testing with StarOffice, I'd be surprised if it had trouble, since the TIFF image printed correctly. As the TIFF image was a 70MB file, this certainly is one of the more stressful ways to test, and I encountered no problems at all.

Both CUPS and ESP Print Pro provide printer and class management using graphic interfaces. CUPS uses Netscape, or any GUI browser, and all administration tasks can be done from the browser, except for editing the daemon config files. ESP uses a supplied program that presents a GUI interface in a compact, simple to understand way, and is also easy to use. Like CUPS (which it is based on), it does require manual editing of the daemon config files. Any text editor will work fine for either package.

Both CUPS and ESP Print Pro provide replacements for 'lpstat' and associated programs, which would very much like the old ones, but tie into the new driver system. Vividata's P-Shop uses the standard lp system, and does not replace the existing native programs. Vividata is the only package that I found that supports printing through SCSI interfaces, so if you have a SCSI printer, you should certainly look at their product first. They also support SCSI scanners, which neither CUPS or ESP Print Pro provide.

Vividata, CUPS, and ESP Print Pro all provide "try & buy" downloads from the web, so you can check out any package you are interested in for a trial period at no cost. Vividata allowed me to download and install their package twice, which was nice of them. They also provide students will the package for free, but don't provide support on the free version. CUPS is also free for download, and support has been handed off to the community through a number of newsgroups. ESP provides support for a fee, which can get expensive in a corporate environment, but is probably in line with any other commercial package that provides similar features.

Each of these packages has it's strong points, but for me the ESP package seems to be the best match with my needs. Your mileage may vary, based on your needs, the interface your printer uses, and the drivers available for your specific printer.

I hope this information will save you time and trouble, and if you have not already installed some kind of printing solution, will encourage you to take advantage of these products. There seems to be something for every budget, and the free packages available, while not perfect, will at least get your printer functioning under Solaris.

(6.41) What is the Solaris Data Encryption Kit?

This is no longer needed. Solaris 11 and all but the earliest Solaris 10 updates come with strong encryption by default (Solaris 10 8/07 or later). It contains kernel modules to support more flavors of encryption for IPsec and Kerberos. Currently, this is AES (192 and 256 bit keys), Blowfish (128 to 448 bit), and ARCFOUR (2048 bit) for IPSec/IKE and GSS-API for Kerberos. Previously, Solaris 10 FCS and earlier came with 128 bit encryption. For early versions of Solaris 10, you could download the strong encryption kit from

(6.42) How do you mount a Solaris ISO image (with UFS filesystems) in Solaris?

It's much easier to just burn the ISO image on a CDROM burner. But if you don't want to go through that trouble or don't have a burner, try this:

To access the first filesystem on the ISO image, you can just mount the ISO image file (specify the ISO filename instead of a device in the mount command). For subsequent filesystems on the ISO image, use the lofiadm(1M) command. This is explained in Philip Brown's note at:   Note that you can only mount SPARC UFS images on SPARC hardware, and Intel UFS images on Intel hardware UFS filesystems, unfortunately, are not architecture (byte sex) independent :-(. To mount DVD, add "set hsfs:nhsnode=7256 to /etc/system to workaround a filesystem driver bug.

[Thanks to Philip Brown]

(6.43) Is noexec_user_stack supported in Solaris x86?

Yes, but only for AMD64 (Opteron and Intel 64) on Solaris 10 or higher. For 32 bit x86, you can set it but it won't do anything. On SPARC and AMD64, it prevents execution of code that was placed on the stack. This is a popular technique used to gain unauthorized root access to systems, locally or remotely, by executing arbitrary code as root. This is possible with poorly-written programs that have missing overflow checks. To enable stack protection, add the following to /etc/system
set noexec_user_stack = 1
set noexec_user_stack_log = 1

and reboot with /usr/sbin/shutdown -i6

Unfortunately the flag is ignored on Intel 32-bit architecture, because it doesn't have the concept of pages having execute permissions. (SPARC and AMD's Opteron and Athlon support it though).

[Thanks to Alan Coopersmith]

(6.44) How do I setup zones with Solaris?

First, you must have Solaris 10+. Solaris Zones (aka Solaris Containers) is partitioning software that's sort of like an enhanced chroot jail—one kernel. It's software-based, not hardware-based, yet lighter-weight than virtualization software, such as VMWare. I find it useful for testing and development as I can easily set up a zone and not worry about destroying my Solaris installation. It's also good for serving several instances of software, say, a web server, each securely running separate from another.

Here's how I setup a zone on Solaris x86. Basically, all I need to setup a zone is a separate filesystem and a new IP address. The Ethernet network device is shared with the root (or "global") zone. I created a dedicated 6GB filesystem for use by the zone by using a loopback file. Loopback filesystems avoids repartitioning or adding disks. Loopback filesystems are inefficient and shouldn't be done for production use: use raw disk instead. If you want to use a etc/sysidcfg file to set the timezone, name service, locale, etc., place it, for this example, in /zones/danszone/etc/sysidcfg The following is from my session log (most output removed):

# mkdir -p /zones/danszone
# mkfile 6g /zones/dansloopbackfile
# lofiadm -a /zones/dansloopbackfile
# newfs /dev/rlofi/1
# mount /dev/lofi/1 /zones/danszone
# chmod go-rwx /zones/danszone
# zonecfg -z danszone
zonecfg:danszone> create
zonecfg:danszone> set zonepath=/zones/danszone
zonecfg:danszone> set autoboot=true
zonecfg:danszone> add net
zonecfg:danszone:net> set address=
zonecfg:danszone:net> set physical=e1000g0
zonecfg:danszone:net> end
zonecfg:danszone> info
zonecfg:danszone> verify
zonecfg:danszone> commit
zonecfg:danszone> exit
# zoneadm -z danszone install
# zoneadm -z danszone boot
# zoneadm list -v
  ID NAME             STATUS         PATH
   0 global           running        /
   2 danszone         running        /zones/danszone
# zlogin -e @ -C danszone
(the first time the zone is booted, it takes you through the
usual setup menus.)
(type "@." to exit zlogin)

If you use a loopbackfile (again not recommended for production use), you need to create a startup script to run lofiadm, mount, and zoneadm boot. If you use a regular filesystem (for production use), zones start automatically.

For more information on zones, see and

(6.45) How to change the audio beep frequency?

If you have a working sound card or supported USB audio output device, add option -audiobell to Xsun. Copy /usr/dt/config/Xservers to /etc/dt/config/Xservers and edit the last line. Use xset b or dtaudio -beep to configure it. Without a supported sound card or for the console, pu, for example, the following lines in some /etc/rc2.d/ startup script:

f=400 # beep frequency in Hz
echo "beep_params+4?W0t$f;.+c?W0t$f" | mdb -kwm

[Thanks to Markus Gyger]

(6.46) Is Adobe Acrobat Reader available for Solaris x86?

Yes. Adobe now has native Acrobat Reader 9 for Solaris x86 (as of March 2009). It's available from It installs in /opt/Adobe/Reader9/bin/acroread

Alternative PDF readers for S86 include Evince, gpdf, ggv, and XPDF. Evince seems to be the best and is included in OpenSolaris. The (old) XPDF viewer is available on the Solaris Companion CD and at The Evince viewer, binary is at and Solaris Express.

(6.47) Are RealPlayer and other audio and video players available for Solaris x86?

Yes. Solaris 10 06/06 and above comes with SUNWrealplayer. The Helix Community at ported RealPlayer 10 to Solaris x86.

For older versions of Solaris, the Unixware RealPlayer 8 is now playable on Solaris x86. For details, see Jürgen Keil's "Using Unixware RealPlayer 8 on Solaris x86" at

Johan Hagman's Solaris Helpers Page at describes other players, such as for MPEG, but seems to have disappeared off the web. Also, some of these players are SPARC-only. Apple QuickTime is available only for Mac and MS Windows.

Macromedia Flash Player comes with Solaris 10. It is also available for Solaris x86 at
(download from Solaris x86 with your preferred browser to ensure you get the correct version). Or check Jürgen's Solaris x86 Flash page at

Windows Video (WMV) GStreamer plugins are available from Fluendo at

[Thanks to Johan Hagman and Jürgen Keil]



I Boot OpenSolaris [Blue Ribbon]   This web page is not associated with Oracle Corporation. [Legal Stuff]


If you have questions or comments, please send a message to Dan Anderson.