setcd - set various flags to control the behaviour of your cdrom
device.
setcd [-hirs] [-ceflot 0|1] [-dx
arg] [device ...]
Setcd is a program that allows you to control the behaviour
of your Linux cdrom device. There are a number of ways you can control the
behaviour of your cdrom drive: should it try to close the tray upon mounting
a cdrom when your happened to have left the tray open, or should it eject
the tray (or caddy) upon unmounting the cdrom? Should it lock the door when
some process uses the cdrom or not? Should the kernel try to ensure that
there actually is a cd in the drive, and that it is of the right type (i.e.,
a data cd in case of a mount, or an audio cd in case of a play
operation)?
Setcd can also inform you on the current configuration of
the drive, and can give information on the status of the drive; whether or
not a cd is loaded, what the type is (audio/data), and some basic
information of the disc (total playing time for audio / volume name for
data). Setcd can list/probe/configure several cdrom devices at once,
independent of their low-level implementation. Finally, setcd can
select a disc in a multi-disc cdrom player (juke-box), and set the operating
speed of the player.
Options come in three flavours: without arguments, with one
boolean type argument and with a numeric argument. For boolean type
arguments, 0 means `clear option,' and 1 means `set option.'
Several options may be given at the same time. Following the options, a list
of cdrom device names can be given, for which the operations will take
place. If no device is given, the default value /dev/cdrom will be
used.
- -c 0|1
- Clear/set auto-close flag. If the cdrom device is opened for data access
(e.g., using mount(1) ) and the tray is found open, an attempt is
made to close the tray. This is considered `desired' behaviour but people
with old cd player programs may disagree. A cd player that opens the
device at regular intervals would have problems leaving the tray ejected,
if there were no special arrangements taken to support cd player programs.
In the new interface they can specify in their open(2) call that
they wish to open the device just for issuing ioctl(2) calls.
Instead of clearing this option, consider upgrading your cd player
program.
- -d drive
- Selects the cd in slot number drive in case the cdrom player is a
juke-box model.
- -e 0|1
- Clear/set EJECT_SW flag. This is basically identical to
controlling the auto-close and auto-open flags simultaneously. The
EJECT_SW flag enables closing the tray upon mounting a cdrom, and opening
the tray upon unmounting it again. The option is included to support the
old-style cdrom behaviour (many low-level driver have implemented the
ioctl-command connected to this flag).
- -f 0|1
- Clear/set use-fflags flag. The new cdrom interface specifies a special
interpretation of the O_NONBLOCK option in the open(2) call for
cdrom devices. When this option is used, and the use-fflags option is set,
the cdrom driver will not attempt to do anything to make the open() call
more successful; the tray is not closed upon opening, no cd type checking
is performed, in fact the open() call will always succeed. This
allows user-level programs to issue ioctl() commands regardless of the
state in which the drive is. Setting this option is the preferred state.
Users may wish to clear this option in case they have an old cd player
program that does not support the O_NONBLOCK option, but have a new style
cdrom driver (i.e., IDE, SCSI or cm206).
- -h
- Print copyright information and terse help.
- -i
- Give information on the cdrom drive. The status of the drive is checked,
possible outcome is (a) no disc inserted, (b) tray is open, (c) drive is
not ready, (d) disc is found. In the last case, an attempt is made to
determine the type of disc (audio or one of 4 types of data disc), and for
both "audio" and "data disc type 1|2" some additional
information is given. Currently for data discs this is the volume name,
publisher and data preparer. For audio discs the extra information is very
terse, you may enjoy a full-fledged audio cd player program better.
- -l 0|1
- Clear/set locking flag. When this flag is set, the drive door is locked
while the cdrom devices is opened, e.g., when a cdrom is mounted. Not
locking the door is undesired behaviour, because this may lead to file
system corruption if a cdrom is removed while being mounted.
- -o 0|1
- Clear/set auto-open flag. When this flag is set, and the last process that
uses the cdrom device closes the device, an attempt is made to eject the
tray. Care is taken, that processes that used the O_NONBLOCK option in
opening the device, will not cause such an auto-eject. Yet, we consider
this auto-eject behaviour undesired. In most cases, this behaviour is
combined with the auto-close behaviour, in which case the option
"-e" is the preferred usage.
- -r
- Resets all options to a default behaviour. Using this option is equivalent
to "-c1 -f1 -l1 -o0 -t1", i.e., all options set in a way we
consider `desired.' For the current development kernel, this is identical
to the default settings apart from the type-checking flag, because this
flag relies on a very modern kernel, libc and cdrom players.
- -s
- Gives the current status of the option flags. Information on the following
flag settings is giver, one per line: (a) auto-close, (b) auto-open, (c)
use-fflags, (d) tray-locking, (e) type-checking.
- -t 0|1
- Clear/set cd type checking flag. When this option is set, the kernel will
check the type of cd upon various operations. A system error "Wrong
medium type" is given if the generic cdrom driver receives an
open-for-data call while an audio cd is inside the drive, or a playing
command is received while a data disc is in the drive. This behaviour is
considered superior over kernel time-outs and other
implementation-dependent behaviour found on the old-style cdrom interface.
However, this feature is relatively new, and requires kernel version
2.1.27 or later, and libc-5.4.24 or later. Moreover, if you use an audio
cd player program, it must use the O_NONBLOCK open flag (see option
"-f"). These stringent constraints made the current kernels to
have this option turned off, while people using setcd are
considered modern and progressive enough to have this option selected by
default using the "-r" option.
- -x speed
- Sets the head-rate of the cdrom player to speed times 150 KB/sec,
or speed times real-time audio playback. The special value 0
is interpreted as auto-selection: data cd's are read at maximum head-rate,
while audio cd's are played at normal speed. There are a few reasons for
having the speed to be selectable. Badly pressed cdroms may benefit from
less-than-maximum head rate. Modern cdrom drives can obtain very high head
rates, but these drives tend to make an annoyingly loud noise. A lower
speed may reduce this.
Traditionally, up to the 2.0 Linux kernel line, the behaviour of
the cdrom access was determined by the low-level driver implementation,
which varied between different brands of drives. Since kernel 1.3.late, an
extra interface layer has been defined between the kernel and user level
programs, that makes the behaviour of the cdrom drive independent of the
low-level driver. The first driver to respect the new interface was,
surprisingly, the outdated Philips/LMS cm206 in kernel 2.0. Nowadays, all
new cdrom drives are either IDE or SCSI, and these drivers support the new
cdrom interface in the kernel 2.1 line. We hope that the other `old' cdrom
divers will eventually support the new interface, so that the behaviour of
Linux cdrom drives is truly uniform.
The new cdrom interface level was actually inspired after writing
a volume daemon that automatically mounts a cdrom at the location
/cdrom/volume upon insertion of the disc. I then found out that there
was a need for finding out the status of the drive without trying to read
data, and that the uniformity of cdrom drivers was a mess. The volume daemon
has not been finished yet, but progress has been made in convincing the
Linux cdrom driver community to comply to the proposed standard.
Setting or clearing an option will result in a message indicating
the new status of that option. Operations not supported by the underlying
hardware, e.g., disc selection, will result in an error condition. Several
other ioctls may result an error condition if the low-level drivers don't
support that particular ioctl.
/dev/cdrom
The default cdrom device. In most installations, this is
a symbolic link to the only cdrom device on the system. In multi cdrom
systems, the cdrom devices have to be explicitly named on the command
line.
/usr/include/linux/ucdrom.h
The header file for the new cdrom interface. Please
consult this file first if you want to use ioctl calls in your program to
control the cdrom drives. Maybe you can get want you want by controlling the
behaviour of the cdrom, instead of issuing direct commands. At any rate, use
the O_NONBLOCK option if you open the device for ioctl-commanding.
/usr/include/fcntl.h
Location where O_NONBLOCK is defined.
/usr/src/linux/Documentation/cdrom/cdrom-standard.tex
A piece of proza originally written for cdrom driver
developers. However, cd player program developers may benefit from the
explanation of new ioctls defined in the new cdrom interface. You can view the
documentation by issuing
latex cdrom-standard.tex
xdvi cdrom-standard
I am sorry that you'll have to install TeX, latex and xdvi first, but you may
have success in reading the plain latex source; after all, it is
ASCII.
Long-style options are not supported.
CD medium catalog number could be given for audio cd's. However,
not many cd's bare that kind of information.
Somehow convince the `old-style' cdrom driver developers to adapt
their drivers to the new interface, it shouldn't be that much work.
Write texinfo documentation.
Setcd is written by David A. van Leeuwen
<david@elseware.nl>, the author of the earlier mentioned new cdrom
interface and the cm206 cdrom driver.