= syslinux-cli(1) =
:doctype: manpage
:revdate: 2012-11-10
:author: H. Peter Anvin
:author-email: hpa@zytor.com
:editor1: Gene Cumm
:editor1-email: gene.cumm@gmail.com
:editor1-revlast: 2012-11-10
:data-uri:

== NAME ==
syslinux-cli - *Syslinux* boot prompt/command line interface


== DESCRIPTION ==
*Syslinux*'s boot prompt provides a very simplistic command line
interface for loading modules and booting kernels.


== BOOT PROMPT ==
=== COMMAND LINE KEYSTROKES ===
The command line prompt supports the following keystrokes:

  <Enter>		boot specified command line
  <BackSpace>		erase one character
  <Ctrl-U>		erase the whole line
  <Ctrl-V>		display the current Syslinux version
  <Ctrl-W>		erase one word
  <Ctrl-X>		force text mode
  <Tab>			list matching labels
  <F1>..<F12>		help screens (if configured)
  <Ctrl-F><digit>	equivalent to F1..F10
  <Ctrl-C>		interrupt boot in progress
  <Esc>			interrupt boot in progress
  <Ctrl-N>		display network information (PXELINUX only; 3.50-4.06)


=== WORKING DIRECTORY ===
At start, the initial working directory for *SYSLINUX*/*ISOLINUX* will
be the directory containing the initial configuration file.  If no
configuration file is found, *SYSLINUX* should default to the
install-time working directory, however this is a known issue with some
versions including 4.06.

At start, the initial working directory for *PXELINUX* will be the
parent directory of pxelinux.0 unless overridden with DHCP option 210. 
If no configuration file is found, *PXELINUX* will start a timer to
reboot the system in an attempt to restart the boot process and resolve
a possible transient issue.


=== ALTERNATE FILENAMES ===
For kernel-like file names given on the command line, *Syslinux* will
attempt to append file name extensions to the specified file name when
the file is not found in the following order: .0[*PXELINUX* only],
.bin[*ISOLINUX* only], .bs[*SYSLINUX* only], .bss[*SYSLINUX* only],
.c32, .cbt[Up to 4.06], .com[Up to 4.06] and .img[*ISOLINUX* 1.65-4.04 only].

// Is this true of file names specified in a config?  As of when?


=== PATH RULES ===

The current working directory is *always* searched first, before PATH,
when attempting to open a filename. The current working directory is
not affected when specifying a file with an absolute path. For
example, given the following file system layout,

....
/boot/
	/bin/
		ls.c32
		libls.c32
	/foo/
		libls.c32
....

assuming that the current working directory is /boot/foo, and assuming
that libls.c32 is a dependency of ls.c32, executing /boot/bin/ls.c32
will cause /boot/foo/libls.c32 to be loaded, not /boot/bin/libls.c32,
even if /boot/bin is specified in the PATH directive of a config file.

The reason that things work this way is that typically a user will
install all library files in the Syslinux installation directory, as
specified with the --directory installer option. This method allows
the user to omit the PATH directive from their config file and still
have things work correctly.


== AUTHOR ==
This AsciiDoc derived document is a modified version of the original
*SYSLINUX* documentation by {author} <{author-email}>.  The conversion
to an AsciiDoc was made by {editor1} <{editor1-email}>
