]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* commands/i386/pc/sendkey.c (options): Remove "keep" from all
authorColin Watson <cjwatson@ubuntu.com>
Thu, 19 Aug 2010 23:05:14 +0000 (00:05 +0100)
committerColin Watson <cjwatson@ubuntu.com>
Thu, 19 Aug 2010 23:05:14 +0000 (00:05 +0100)
status flag options; simply omitting the option is equivalent and
simpler.  Rename "wait" to "pause".  Rename "sysreq" to "sysrq".
(keysym_table): Rename "num5numlock" to "numlock".
(grub_cmd_sendkey): Reinitialise `andmask' and `ormask', so that we
can uniformly say that only the last of multiple `sendkey'
invocations has any effect.
* docs/grub.texi (sendkey): New section.

ChangeLog
commands/i386/pc/sendkey.c
docs/grub.texi

index 0eba757db4c2803a0a06ecc588a26a021e59a046..a8f4c6f472ab5a0518e8ab0d5bc12ccb7d9b416e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-08-20  Colin Watson  <cjwatson@ubuntu.com>
+
+       * commands/i386/pc/sendkey.c (options): Remove "keep" from all
+       status flag options; simply omitting the option is equivalent and
+       simpler.  Rename "wait" to "pause".  Rename "sysreq" to "sysrq".
+       (keysym_table): Rename "num5numlock" to "numlock".
+       (grub_cmd_sendkey): Reinitialise `andmask' and `ormask', so that we
+       can uniformly say that only the last of multiple `sendkey'
+       invocations has any effect.
+       * docs/grub.texi (sendkey): New section.
+
 2010-08-19  Colin Watson  <cjwatson@ubuntu.com>
 
        * commands/i386/pc/sendkey.c (options): Fix three typos.
index 60cb5c9020a37acf5e0af136e3bd523fdd43190e..32e0e2551d4ca6dc0c045dae6d0151a8f785f6b7 100644 (file)
@@ -33,22 +33,22 @@ static int keylen = 0;
 static int noled = 0;
 static const struct grub_arg_option options[] =
   {
-    {"num", 'n', 0, "set numlock mode", "[keep|on|off]", ARG_TYPE_STRING},
-    {"caps", 'c', 0, "set capslock mode", "[keep|on|off]", ARG_TYPE_STRING},
-    {"scroll", 's', 0, "set scrolllock mode", "[keep|on|off]", ARG_TYPE_STRING},
-    {"insert", 0, 0, "set insert mode", "[keep|on|off]", ARG_TYPE_STRING},
-    {"wait", 0, 0, "set wait mode", "[keep|on|off]", ARG_TYPE_STRING},
-    {"left-shift", 0, 0, "press left shift", "[keep|on|off]", ARG_TYPE_STRING},
-    {"right-shift", 0, 0, "press right shift", "[keep|on|off]", ARG_TYPE_STRING},
-    {"sysreq", 0, 0, "press sysreq", "[keep|on|off]", ARG_TYPE_STRING},
-    {"numkey", 0, 0, "press NumLock key", "[keep|on|off]", ARG_TYPE_STRING},
-    {"capskey", 0, 0, "press CapsLock key", "[keep|on|off]", ARG_TYPE_STRING},
-    {"scrollkey", 0, 0, "press ScrollLock key", "[keep|on|off]", ARG_TYPE_STRING},
-    {"insertkey", 0, 0, "press Insert key", "[keep|on|off]", ARG_TYPE_STRING},
-    {"left-alt", 0, 0, "press left alt", "[keep|on|off]", ARG_TYPE_STRING},
-    {"right-alt", 0, 0, "press right alt", "[keep|on|off]", ARG_TYPE_STRING},
-    {"left-ctrl", 0, 0, "press left ctrl", "[keep|on|off]", ARG_TYPE_STRING},
-    {"right-ctrl", 0, 0, "press right ctrl", "[keep|on|off]", ARG_TYPE_STRING},
+    {"num", 'n', 0, "set numlock mode", "[on|off]", ARG_TYPE_STRING},
+    {"caps", 'c', 0, "set capslock mode", "[on|off]", ARG_TYPE_STRING},
+    {"scroll", 's', 0, "set scrolllock mode", "[on|off]", ARG_TYPE_STRING},
+    {"insert", 0, 0, "set insert mode", "[on|off]", ARG_TYPE_STRING},
+    {"pause", 0, 0, "set pause mode", "[on|off]", ARG_TYPE_STRING},
+    {"left-shift", 0, 0, "press left shift", "[on|off]", ARG_TYPE_STRING},
+    {"right-shift", 0, 0, "press right shift", "[on|off]", ARG_TYPE_STRING},
+    {"sysrq", 0, 0, "press SysRq", "[on|off]", ARG_TYPE_STRING},
+    {"numkey", 0, 0, "press NumLock key", "[on|off]", ARG_TYPE_STRING},
+    {"capskey", 0, 0, "press CapsLock key", "[on|off]", ARG_TYPE_STRING},
+    {"scrollkey", 0, 0, "press ScrollLock key", "[on|off]", ARG_TYPE_STRING},
+    {"insertkey", 0, 0, "press Insert key", "[on|off]", ARG_TYPE_STRING},
+    {"left-alt", 0, 0, "press left alt", "[on|off]", ARG_TYPE_STRING},
+    {"right-alt", 0, 0, "press right alt", "[on|off]", ARG_TYPE_STRING},
+    {"left-ctrl", 0, 0, "press left ctrl", "[on|off]", ARG_TYPE_STRING},
+    {"right-ctrl", 0, 0, "press right ctrl", "[on|off]", ARG_TYPE_STRING},
     {"no-led", 0, 0, "don't update LED state", 0, 0},
     {0, 0, 0, 0, 0, 0}
   };
@@ -144,7 +144,7 @@ static struct keysym keysym_table[] =
   {"num9",             "numpgup",              '9',    0,      0x49},
   {"numminus",         0,              '-',    0,      0x4a},
   {"num4",             "numleft",              '4',    0,      0x4b},
-  {"num5",             "num5numlock",          '5',    0,      0x4c},
+  {"num5",             "numlock",              '5',    0,      0x4c},
   {"num6",             "numright",             '6',    0,      0x4d},
   {"numplus",          0,              '-',    0,      0x4e},
   {"num1",             "numend",               '1',    0,      0x4f},
@@ -325,6 +325,9 @@ grub_cmd_sendkey (grub_extcmd_t cmd, int argc, char **args)
       return 0;
     }
 
+  andmask = 0xffffffff;
+  ormask = 0;
+
   {
     int i;
 
index 583cf98cba6d2e236cfd2f389ce0fcaedb4a88f9..725807c560c76af5b18f6f9f5bfd077df0ca5bb1 100644 (file)
@@ -2094,6 +2094,7 @@ you forget a command, you can run the command @command{help}
 * pxe_unload::                  Unload the PXE environment
 * reboot::                      Reboot your computer
 * search::                      Search devices by file, label, or UUID
+* sendkey::                     Emulate keystrokes
 * set::                         Set an environment variable
 * unset::                       Unset an environment variable
 * uppermem::                    Set the upper memory size
@@ -2604,6 +2605,154 @@ commands are aliases for @samp{search --file}, @samp{search --label}, and
 @end deffn
 
 
+@node sendkey
+@subsection sendkey
+
+@deffn Command sendkey @
+ [@option{--num}|@option{--caps}|@option{--scroll}|@option{--insert}|@
+@option{--pause}|@option{--left-shift}|@option{--right-shift}|@
+@option{--sysrq}|@option{--numkey}|@option{--capskey}|@option{--scrollkey}|@
+@option{--insertkey}|@option{--left-alt}|@option{--right-alt}|@
+@option{--left-ctrl}|@option{--right-ctrl} @
+ @samp{on}|@samp{off}]@dots{} @
+ [@option{no-led}] @
+ keystroke
+Insert keystrokes into the keyboard buffer when booting.  Sometimes an
+operating system or chainloaded boot loader requires particular keys to be
+pressed: for example, one might need to press a particular key to enter
+"safe mode", or when chainloading another boot loader one might send
+keystrokes to it to navigate its menu.  
+
+You may provide up to 16 keystrokes (the length of the BIOS keyboard
+buffer).  Keystroke names may be upper-case or lower-case letters, digits,
+or taken from the following table:
+
+@c Please keep this table in the same order as in
+@c commands/i386/pc/sendkey.c, for ease of maintenance.
+@c Exception: The function and numeric keys are sorted, for aesthetics.
+
+@multitable @columnfractions .4 .5
+@headitem Name @tab Key
+@item escape @tab Escape
+@item exclam @tab !
+@item at @tab @@
+@item numbersign @tab #
+@item dollar @tab $
+@item percent @tab %
+@item caret @tab ^
+@item ampersand @tab &
+@item asterisk @tab *
+@item parenleft @tab (
+@item parenright @tab )
+@item minus @tab -
+@item underscore @tab _
+@item equal @tab =
+@item plus @tab +
+@item backspace @tab Backspace
+@item tab @tab Tab
+@item bracketleft @tab [
+@item braceleft @tab @{
+@item bracketright @tab ]
+@item braceright @tab @}
+@item enter @tab Enter
+@item control @tab press and release Control
+@item semicolon @tab ;
+@item colon @tab :
+@item quote @tab '
+@item doublequote @tab "
+@item backquote @tab `
+@item tilde @tab ~
+@item shift @tab press and release left Shift
+@item backslash @tab \
+@item bar @tab |
+@item comma @tab ,
+@item less @tab <
+@item period @tab .
+@item greater @tab >
+@item slash @tab /
+@item question @tab ?
+@item rshift @tab press and release right Shift
+@item alt @tab press and release Alt
+@item space @tab space bar
+@item capslock @tab Caps Lock
+@item F1 @tab F1
+@item F2 @tab F2
+@item F3 @tab F3
+@item F4 @tab F4
+@item F5 @tab F5
+@item F6 @tab F6
+@item F7 @tab F7
+@item F8 @tab F8
+@item F9 @tab F9
+@item F10 @tab F10
+@item F11 @tab F11
+@item F12 @tab F12
+@item num1 @tab 1 (numeric keypad)
+@item num2 @tab 2 (numeric keypad)
+@item num3 @tab 3 (numeric keypad)
+@item num4 @tab 4 (numeric keypad)
+@item num5 @tab 5 (numeric keypad)
+@item num6 @tab 6 (numeric keypad)
+@item num7 @tab 7 (numeric keypad)
+@item num8 @tab 8 (numeric keypad)
+@item num9 @tab 9 (numeric keypad)
+@item num0 @tab 0 (numeric keypad)
+@item numperiod @tab . (numeric keypad)
+@item numend @tab End (numeric keypad)
+@item numdown @tab Down (numeric keypad)
+@item numpgdown @tab Page Down (numeric keypad)
+@item numleft @tab Left (numeric keypad)
+@item numlock @tab Num Lock (numeric keypad)
+@item numright @tab Right (numeric keypad)
+@item numhome @tab Home (numeric keypad)
+@item numup @tab Up (numeric keypad)
+@item numpgup @tab Page Up (numeric keypad)
+@item numinsert @tab Insert (numeric keypad)
+@item numdelete @tab Delete (numeric keypad)
+@item numasterisk @tab * (numeric keypad)
+@item numminus @tab - (numeric keypad)
+@item numplus @tab + (numeric keypad)
+@item numslash @tab / (numeric keypad)
+@item numenter @tab Enter (numeric keypad)
+@item delete @tab Delete
+@item insert @tab Insert
+@item home @tab Home
+@item end @tab End
+@item pgdown @tab Page Down
+@item pgup @tab Page Up
+@item down @tab Down
+@item up @tab Up
+@item left @tab Left
+@item right @tab Right
+@end multitable
+
+As well as keystrokes, the @command{sendkey} command takes various options
+that affect the BIOS keyboard status flags.  These options take an @samp{on}
+or @samp{off} parameter, specifying that the corresponding status flag be
+set or unset; omitting the option for a given status flag will leave that
+flag at its initial state at boot.  The @option{--num}, @option{--caps},
+@option{--scroll}, and @option{--insert} options emulate setting the
+corresponding mode, while the @option{--numkey}, @option{--capskey},
+@option{--scrollkey}, and @option{--insertkey} options emulate pressing and
+holding the corresponding key.  The other status flag options are
+self-explanatory.
+
+If the @option{--no-led} option is given, the status flag options will have
+no effect on keyboard LEDs.
+
+If the @command{sendkey} command is given multiple times, then only the last
+invocation has any effect.
+
+Since @command{sendkey} manipulates the BIOS keyboard buffer, it may cause
+hangs, reboots, or other misbehaviour on some systems.  If the operating
+system or boot loader that runs after GRUB uses its own keyboard driver
+rather than the BIOS keyboard functions, then @command{sendkey} will have no
+effect.
+
+This command is only available on PC BIOS systems.
+@end deffn
+
+
 @node set
 @subsection set