'\" t
.TH mtools 5 "28Nov20" MTOOLS MTOOLS
.SH Name
mtools.conf - mtools configuration files
'\" t
.de TQ
.br
.ns
.TP \\$1
..

.tr \(is'
.tr \(if`
.tr \(pd"

.ds St Mtools\ 4.0.26
.PP
.SH Description
.PP
This manual page describes the configuration files for mtools. They 
are called \fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR and \fR\&\f(CW\(if~/.mtoolsrc\(is\fR. If
the environmental variable \fR\&\f(CWMTOOLSRC\fR is set, its contents is used
as the filename for a third configuration file. These configuration
files describe the following items:
.TP
* \ Global\ configuration\ flags\ and\ variables\ 
.TP
* \ Per\ drive\ flags\ and\ variables\ 
.PP
.SS Location\ of\ the\ configuration\ files
.PP
.PP
\&\fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR is the system-wide configuration file,
and \fR\&\f(CW\(if~/.mtoolsrc\(is\fR is the user's private configuration file.
.PP
On some systems, the system-wide configuration file is called
\&\fR\&\f(CW\(if/etc/default/mtools.conf\(is\fR instead.
.PP
.SS \ \ General\ configuration\ file\ syntax
.PP
The configuration files is made up of sections. Each section starts
with a keyword identifying the section followed by a colon.
Then follow variable assignments and flags. Variable assignments take
the following form:
.ft I
.nf
name=value
.fi
.ft R
 
Flags are lone keywords without an equal sign and value following
them.  A section either ends at the end of the file or where the next
section begins.
.PP
Lines starting with a hash (\fR\&\f(CW#\fR) are comments. Newline characters
are equivalent to whitespace (except where ending a comment). The
configuration file is case insensitive, except for item enclosed in
quotes (such as filenames).
.PP
.SS Default\ values
For most platforms, mtools contains reasonable compiled-in defaults for
physical floppy drives.  Thus, you usually don't need to bother with the
configuration file, if all you want to do with mtools is to access your
floppy drives. On the other hand, the configuration file is needed if
you also want to use mtools to access your hard disk partitions and
DOSEMU image files.
.PP
.SS Global\ variables
.PP
Global flags may be set to 1 or to 0.
.PP
The following global flags are recognized:
.TP
\&\fR\&\f(CWMTOOLS_SKIP_CHECK\fR\ 
If this is set to 1, mtools skips most of its sanity checks. This is
needed to read some Atari disks which have been made with the earlier
ROMs, and which would not be recognized otherwise.
.TP
\&\fR\&\f(CWMTOOLS_FAT_COMPATIBILITY\fR\ 
If this is set to 1, mtools skips the fat size checks. Some disks have
a bigger FAT than they really need to. These are rejected if this
option is not set.
.TP
\&\fR\&\f(CWMTOOLS_LOWER_CASE\fR\ 
If this is set to 1, mtools displays all-upper-case short filenames as
lowercase. This has been done to allow a behavior which is consistent
with older versions of mtools which didn't know about the case bits.
.TP
\&\fR\&\f(CWMTOOLS_NO_VFAT\fR\ 
If this is set to 1, mtools won't generate VFAT entries for filenames
which are mixed-case, but otherwise legal dos filenames.  This is useful
when working with DOS versions which can't grok VFAT long names, such as
FreeDOS.
.TP
\&\fR\&\f(CWMTOOLS_DOTTED_DIR\fR\ 
In a wide directory, prints the short name with a dot instead of spaces
separating the basename and the extension.
.TP
\&\fR\&\f(CWMTOOLS_NAME_NUMERIC_TAIL\fR\ 
If this is set to one (default), generate numeric tails for all long
names (~1).  If set to zero, only generate numeric tails if otherwise a
clash would have happened.
.TP
\&\fR\&\f(CWMTOOLS_TWENTY_FOUR_HOUR_CLOCK\fR\ 
If 1, uses the European notation for times (twenty four hour clock),
else uses the UK/US notation (am/pm)
.TP
\&\fR\&\f(CWMTOOLS_LOCK_TIMEOUT\fR\ 
How long, in seconds, to wait for a locked device to become free.
Defaults to 30.
.PP
Example:
Inserting the following line into your configuration file instructs
mtools to skip the sanity checks:
 
.nf
.ft 3
.in +0.3i
  MTOOLS_SKIP_CHECK=1
.fi
.in -0.3i
.ft R
.PP
 
\&\fR
.PP
Global variables may also be set via the environment:
 
.nf
.ft 3
.in +0.3i
  export MTOOLS_SKIP_CHECK=1
.fi
.in -0.3i
.ft R
.PP
 
\&\fR
.PP
Global string variables may be set to any value:
.TP
\&\fR\&\f(CWMTOOLS_DATE_STRING\fR\ 
The format used for printing dates of files.  By default, is dd-mm-yyyy.
.PP
.SS Per\ drive\ flags\ and\ variables
.PP
.SS \ \ General\ information
.PP
Per drive flags and values may be described in a drive section. A
drive section starts with
\&\fR\&\f(CWdrive\fR "\fIdriveletter\fR" :
.PP
Then follow variable-value pairs and flags.
.PP
This is a sample drive description:
 
.nf
.ft 3
.in +0.3i
  drive a:
    file="/dev/fd0" use_xdf=1
.fi
.in -0.3i
.ft R
.PP
 
\&\fR
.PP
.SS \ \ Location\ information
.PP
For each drive, you need to describe where its data is physically
stored (image file, physical device, partition, offset).
.TP
\&\fR\&\f(CWfile\fR\ 
The name of the file or device holding the disk image. This is
mandatory. The file name should be enclosed in quotes.
.TP
\&\fR\&\f(CWpartition\fR\ 
Tells mtools to treat the drive as a partitioned device, and to use the
given partition. Only primary partitions are accessible using this
method, and they are numbered from 1 to 4. For logical partitions, use
the more general \fR\&\f(CWoffset\fR variable. The \fR\&\f(CWpartition\fR variable
is intended for removable media such as Syquest disks, ZIP drives, and
magneto-optical disks. Although traditional DOS sees Syquest disks and
magneto-optical disks as \fR\&\f(CW\(ifgiant floppy disks\(is\fR which are
unpartitioned, OS/2 and Windows NT treat them like hard disks,
i.e. partitioned devices. The \fR\&\f(CWpartition\fR flag is also useful DOSEMU
hdimages. It is not recommended for hard disks for which direct access
to partitions is available through mounting.
.TP
\&\fR\&\f(CWoffset\fR\ 
Describes where in the file the MS-DOS file system starts. This is useful
for logical partitions in DOSEMU hdimages, and for ATARI ram disks. By
default, this is zero, meaning that the file system starts right at the
beginning of the device or file.
.PP
.SS \ \ Disk\ Geometry\ Configuration
.PP
Geometry information describes the physical characteristics about the
disk. Its has three purposes:
.TP
formatting\ 
The geometry information is written into the boot sector of the newly
made disk. However, you may also describe the geometry information on
the command line. See section mformat, for details.
.TP
filtering\ 
On some Unixes there are device nodes which only support one physical
geometry. For instance, you might need a different node to access a disk
as high density or as low density. The geometry is compared to the
actual geometry stored on the boot sector to make sure that this device
node is able to correctly read the disk. If the geometry doesn't match,
this drive entry fails, and the next drive entry bearing the same drive
letter is tried. See section multiple descriptions, for more details on
supplying several descriptions for one drive letter.
.IP
If no geometry information is supplied in the configuration file, all
disks are accepted. On Linux (and on SPARC) there exist device nodes
with configurable geometry (\fR\&\f(CW\(if/dev/fd0\(is\fR, \fR\&\f(CW\(if/dev/fd1\(is\fR etc),
and thus filtering is not needed (and ignored) for disk drives.  (Mtools
still does do filtering on plain files (disk images) in Linux: this is
mainly intended for test purposes, as I don't have access to a Unix
which would actually need filtering).
.IP
If you do not need filtering, but want still a default geometry for
mformatting, you may switch off filtering using the \fR\&\f(CWmformat_only\fR
flag.
.IP
If you want filtering, you should supply the \fR\&\f(CWfilter\fR flag.  If you 
supply a geometry, you must supply one of both flags.
.TP
initial\ geometry\ 
On devices that support it (usually floppy devices), the geometry
information is also used to set the initial geometry. This initial
geometry is applied while reading the boot sector, which contains the
real geometry.  If no geometry information is supplied in the
configuration file, or if the \fR\&\f(CWmformat_only\fR flag is supplied, no
initial configuration is done.
.IP
On Linux, initial geometry is not really needed, as the configurable
devices are able to auto-detect the disk type accurately enough (for
most common formats) to read the boot sector.
.PP
Wrong geometry information may lead to very bizarre errors. That's why I
strongly recommend that you add the \fR\&\f(CWmformat_only\fR flag to your
drive description, unless you really need filtering or initial geometry.
.PP
The following geometry related variables are available:
.TP
\&\fR\&\f(CWcylinders\fR\ 
.TQ
\&\fR\&\f(CWtracks\fR
The number of cylinders. (\fR\&\f(CWcylinders\fR is the preferred form,
\&\fR\&\f(CWtracks\fR is considered obsolete)
.TP
\&\fR\&\f(CWheads\fR\ 
The number of heads (sides).
.TP
\&\fR\&\f(CWsectors\fR\ 
The number of sectors per track.
.PP
Example: the following drive section describes a 1.44M drive:
.PP
 
.nf
.ft 3
.in +0.3i
  drive a:
      file="/dev/fd0H1440"
      fat_bits=12
      cylinders=80 heads=2 sectors=18
      mformat_only
.fi
.in -0.3i
.ft R
.PP
 
\&\fR
.PP
The following shorthand geometry descriptions are available:
.TP
\&\fR\&\f(CW1.44m\fR\ 
high density 3 1/2 disk. Equivalent to:
\&\fR\&\f(CWfat_bits=12 cylinders=80 heads=2 sectors=18\fR
.TP
\&\fR\&\f(CW1.2m\fR\ 
high density 5 1/4 disk. Equivalent to:
\&\fR\&\f(CWfat_bits=12 cylinders=80 heads=2 sectors=15\fR
.TP
\&\fR\&\f(CW720k\fR\ 
double density 3 1/2 disk. Equivalent to:
\&\fR\&\f(CWfat_bits=12 cylinders=80 heads=2 sectors=9\fR
.TP
\&\fR\&\f(CW360k\fR\ 
double density 5 1/4 disk. Equivalent to:
\&\fR\&\f(CWfat_bits=12 cylinders=40 heads=2 sectors=9\fR
.PP
The shorthand format descriptions may be amended. For example,
\&\fR\&\f(CW360k sectors=8\fR
describes a 320k disk and is equivalent to:
\&\fR\&\f(CWfat_bits=12 cylinders=40 heads=2 sectors=8\fR
.PP
.SS \ \ Open\ Flags
.PP
Moreover, the following flags are available:
.TP
\&\fR\&\f(CWsync\fR\ 
All i/o operations are done synchronously
.TP
\&\fR\&\f(CWnodelay\fR\ 
The device or file is opened with the O_NDELAY flag. This is needed on
some non-Linux architectures.
.TP
\&\fR\&\f(CWexclusive\fR\ 
The device or file is opened with the O_EXCL flag. On Linux, this
ensures exclusive access to the floppy drive. On most other
architectures, and for plain files it has no effect at all.
.PP
.SS \ \ General\ Purpose\ Drive\ Variables
.PP
The following general purpose drive variables are available.  Depending
to their type, these variables can be set to a string (precmd) or
an integer (all others)
.TP
\&\fR\&\f(CWfat_bits\fR\ 
The number of FAT bits. This may be 12 or 16. This is very rarely
needed, as it can almost always be deduced from information in the
boot sector. On the contrary, describing the number of fat bits may
actually be harmful if you get it wrong. You should only use it if
mtools gets the auto-detected number of fat bits wrong, or if you want
to mformat a disk with a weird number of fat bits.
.TP
\&\fR\&\f(CWcodepage\fR\ 
Describes the DOS code page used for short filenames. This is a number
between 1 and 999. By default, code page 850 is used. The reason for
this is because this code page contains most of the characters that are
also available in ISO-Latin-1. You may also specify a global code page
for all drives by using the global \fR\&\f(CWdefault_codepage\fR parameter
(outside of any drive description). This parameters exists starting at
version 4.0.0
.TP
\&\fR\&\f(CWprecmd\fR\ 
On some variants of Solaris, it is necessary to call 'volcheck -v'
before opening a floppy device, in order for the system to notice that
there is indeed a disk in the drive. \fR\&\f(CWprecmd="volcheck -v"\fR in the
drive clause establishes the desired behavior.
.TP
\&\fR\&\f(CWblocksize\fR\ 
This parameter represents a default block size to be always used on this
device.  All I/O is done with multiples of this block size,
independently of the sector size registered in the file system's boot
sector.  This is useful for character devices whose sector size is not
512, such as for example CD-ROM drives on Solaris.
.PP
Only the \fR\&\f(CWfile\fR variable is mandatory. The other parameters may
be left out. In that case a default value or an auto-detected value is
used.
.PP
.SS \ \ General\ Purpose\ Drive\ Flags
.PP
A flag can either be set to 1 (enabled) or 0 (disabled). If the value is
omitted, it is enabled.  For example, \fR\&\f(CWscsi\fR is equivalent to
\&\fR\&\f(CWscsi=1\fR
.TP
\&\fR\&\f(CWnolock\fR\ 
Instruct mtools to not use locking on this drive.  This is needed on
systems with buggy locking semantics.  However, enabling this makes
operation less safe in cases where several users may access the same
drive at the same time.
.TP
\&\fR\&\f(CWscsi\fR\ 
When set to 1, this option tells mtools to use raw SCSI I/O instead of
the standard read/write calls to access the device. Currently, this is
supported on HP-UX, Solaris and SunOS.  This is needed because on some
architectures, such as SunOS or Solaris, PC media can't be accessed
using the \fR\&\f(CWread\fR and \fR\&\f(CWwrite\fR system calls, because the OS expects
them to contain a Sun specific "disk label".
.IP
As raw SCSI access always uses the whole device, you need to specify the
"partition" flag in addition
.IP
On some architectures, such as Solaris, mtools needs root privileges to
be able to use the \fR\&\f(CWscsi\fR option.  Thus mtools should be installed
setuid root on Solaris if you want to access Zip/Jaz drives.  Thus, if
the \fR\&\f(CWscsi\fR flag is given, \fR\&\f(CWprivileged\fR is automatically
implied, unless explicitly disabled by \fR\&\f(CWprivileged=0\fR
.IP
Mtools uses its root privileges to open the device, and to issue the
actual SCSI I/O calls.  Moreover, root privileges are only used for
drives described in a system-wide configuration file such as
\&\fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR, and not for those described in
\&\fR\&\f(CW\(if~/.mtoolsrc\(is\fR or \fR\&\f(CW\(if$MTOOLSRC\(is\fR.  
.TP
\&\fR\&\f(CWprivileged\fR\ 
When set to 1, this instructs mtools to use its setuid and setgid
privileges for opening the given drive.  This option is only valid for
drives described in the system-wide configuration files (such as
\&\fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR, not \fR\&\f(CW\(if~/.mtoolsrc\(is\fR or
\&\fR\&\f(CW\(if$MTOOLSRC\(is\fR).  Obviously, this option is also a no op if mtools is
not installed setuid or setgid.  This option is implied by 'scsi=1', but
again only for drives defined in system-wide configuration files.
Privileged may also be set explicitly to 0, in order to tell mtools not
to use its privileges for a given drive even if \fR\&\f(CWscsi=1\fR is set.
.IP
Mtools only needs to be installed setuid if you use the
\&\fR\&\f(CWprivileged\fR or \fR\&\f(CWscsi\fR drive variables.  If you do not use
these options, mtools works perfectly well even when not installed
setuid root.
.TP
\&\fR\&\f(CWvold\fR\ 
.IP
Instructs mtools to interpret the device name as a vold identifier
rather than as a filename.  The vold identifier is translated into a
real filename using the \fR\&\f(CWmedia_findname()\fR and
\&\fR\&\f(CWmedia_oldaliases()\fR functions of the \fR\&\f(CWvolmgt\fR library.  This
flag is only available if you configured mtools with the
\&\fR\&\f(CW--enable-new-vold\fR option before compilation.
.TP
\&\fR\&\f(CWswap\fR\ 
.IP
Consider the media as a word-swapped Atari disk.
.TP
\&\fR\&\f(CWuse_xdf\fR\ 
If this is set to a non-zero value, mtools also tries to access this
disk as an XDF disk. XDF is a high capacity format used by OS/2. This
is off by default. See section XDF, for more details.
.TP
\&\fR\&\f(CWmformat_only\fR\ 
Tells mtools to use the geometry for this drive only for mformatting and 
not for filtering.
.TP
\&\fR\&\f(CWfilter\fR\ 
Tells mtools to use the geometry for this drive both for mformatting and 
filtering.
.TP
\&\fR\&\f(CWremote\fR\ 
Tells mtools to connect to floppyd (see section  floppyd).
.PP
.SS \ \ Supplying\ multiple\ descriptions\ for\ a\ drive
.PP
It is possible to supply multiple descriptions for a drive. In that
case, the descriptions are tried in order until one is found that
fits. Descriptions may fail for several reasons:
.TP
1.\ 
because the geometry is not appropriate,
.TP
2.\ 
because there is no disk in the drive,
.TP
3.\ 
or because of other problems.
.PP
Multiple definitions are useful when using physical devices which are
only able to support one single disk geometry.
Example:
 
.nf
.ft 3
.in +0.3i
  drive a: file="/dev/fd0H1440" 1.44m
  drive a: file="/dev/fd0H720" 720k
.fi
.in -0.3i
.ft R
.PP
 
\&\fR
.PP
This instructs mtools to use /dev/fd0H1440 for 1.44m (high density)
disks and /dev/fd0H720 for 720k (double density) disks. On Linux, this
feature is not really needed, as the /dev/fd0 device is able to handle
any geometry.
.PP
You may also use multiple drive descriptions to access both of your
physical drives through one drive letter:
.PP
 
.nf
.ft 3
.in +0.3i
  drive z: file="/dev/fd0"
  drive z: file="/dev/fd1"
.fi
.in -0.3i
.ft R
.PP
 
\&\fR
.PP
With this description, \fR\&\f(CWmdir z:\fR accesses your first physical
drive if it contains a disk. If the first drive doesn't contain a disk,
mtools checks the second drive.
.PP
When using multiple configuration files, drive descriptions in the files
parsed last override descriptions for the same drive in earlier
files. In order to avoid this, use the \fR\&\f(CWdrive+\fR or \fR\&\f(CW+drive\fR
keywords instead of \fR\&\f(CWdrive\fR. The first adds a description to the
end of the list (i.e. it will be tried last), and the first adds it to
the start of the list.
.PP
.SS Location\ of\ configuration\ files\ and\ parsing\ order
.PP
The configuration files are parsed in the following order:
.TP
1.\ 
compiled-in defaults
.TP
2.\ 
\&\fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR
.TP
3.\ 
\&\fR\&\f(CW\(if~/.mtoolsrc\(is\fR.
.TP
4.\ 
\&\fR\&\f(CW\(if$MTOOLSRC\(is\fR (file pointed by the \fR\&\f(CWMTOOLSRC\fR environmental
variable)
.PP
Options described in the later files override those described in the
earlier files. Drives defined in earlier files persist if they are not
overridden in the later files. For instance, drives A and B may be
defined in \fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR and drives C and D may be
defined in \fR\&\f(CW\(if~/.mtoolsrc\(is\fR However, if \fR\&\f(CW\(if~/.mtoolsrc\(is\fR also
defines drive A, this new description would override the description of
drive A in \fR\&\f(CW\(ifSYSCONFDIRmtools.conf\(is\fR instead of adding to it. If
you want to add a new description to a drive already described in an
earlier file, you need to use either the \fR\&\f(CW+drive\fR or \fR\&\f(CWdrive+\fR
keyword.
.PP
.SS Backwards\ compatibility\ with\ old\ configuration\ file\ syntax
.PP
The syntax described herein is new for version \fR\&\f(CWmtools-3.0\fR. The
old line-oriented syntax is still supported. Each line beginning with a
single letter is considered to be a drive description using the old
syntax. Old style and new style drive sections may be mixed within the
same configuration file, in order to make upgrading easier. Support for
the old syntax will be phased out eventually, and in order to discourage
its use, I purposefully omit its description here.
.PP
.SH See also
mtools
