866 lines
25 KiB
XML
866 lines
25 KiB
XML
<chapter id='Global_Keyboard_Controls'>
|
||
<title>Global Keyboard Controls</title>
|
||
|
||
<para>
|
||
The X Keyboard Extension supports a number of <emphasis>
|
||
global key controls</emphasis>
|
||
, which affect the way that XKB handles the keyboard as a whole. Many of these
|
||
controls make the keyboard more accessible to the physically impaired and are
|
||
based on the AccessDOS package<footnote><para>
|
||
AccessDOS provides access to the DOS operating system for people with physical
|
||
impairments and was developed by the Trace R&D Center at the University of
|
||
Wisconsin. For more information on AccessDOS, contact the Trace R&D Center,
|
||
Waisman Center and Department of Industrial Engineering, University of
|
||
Wisconsin-Madison WI 53705-2280. Phone: 608-262-6966. e-mail:
|
||
info@trace.wisc.edu.</para></footnote>.
|
||
</para>
|
||
|
||
<sect1 id='The_RepeatKeys_Control'>
|
||
<title>The RepeatKeys Control</title>
|
||
|
||
<para>
|
||
The core protocol only allows control over whether or not the entire keyboard
|
||
or individual keys should autorepeat when held down. The <emphasis>
|
||
RepeatKeys</emphasis>
|
||
control extends this capability by adding control over the delay until a key
|
||
begins to repeat and the rate at which it repeats. <emphasis>
|
||
RepeatKeys</emphasis>
|
||
is also coupled with the core autorepeat control; changes to one are always
|
||
reflected in the other.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
RepeatKeys</emphasis>
|
||
control has two parameters. The <emphasis>
|
||
autorepeat delay</emphasis>
|
||
specifies the delay between the initial press of an autorepeating key and the
|
||
first generated repeat event in milliseconds. The <emphasis>
|
||
autorepeat interval</emphasis>
|
||
specifies the delay between all subsequent generated repeat events in
|
||
milliseconds.
|
||
</para>
|
||
|
||
|
||
<sect2 id='The_PerKeyRepeat_Control'>
|
||
<title>The PerKeyRepeat Control</title>
|
||
|
||
<para>
|
||
When <emphasis>
|
||
RepeatKeys</emphasis>
|
||
are active, the <emphasis>
|
||
PerKeyRepeat</emphasis>
|
||
control specifies whether or not individual keys should autorepeat when held
|
||
down. XKB provides the <emphasis>
|
||
PerKeyRepeat</emphasis>
|
||
for convenience only, and it always parallels the <emphasis>
|
||
auto-repeats</emphasis>
|
||
field of the core protocol <emphasis>
|
||
GetKeyboardControl</emphasis>
|
||
request — changes to one are always reflected in the other.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Detectable_Autorepeat'>
|
||
<title>Detectable Autorepeat</title>
|
||
|
||
<para>
|
||
The X server usually generates both press and release events whenever an
|
||
autorepeating key is held down. If an XKB-aware client enables the <emphasis>
|
||
DetectableAutorepeat</emphasis>
|
||
per-client option for a keyboard, the server sends that client a key release
|
||
event only when the key is <emphasis>
|
||
physically</emphasis>
|
||
released. For example, holding down a key to generate three characters without
|
||
detectable autorepeat yields:
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
Press <emphasis>-></emphasis> Release <emphasis>-></emphasis> Press <emphasis>-></emphasis> Release <emphasis>-></emphasis> Press <emphasis>-></emphasis> Release
|
||
</literallayout>
|
||
|
||
<para>
|
||
If detectable autorepeat is enabled, the client instead receives:
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
Press<emphasis>-></emphasis> Press <emphasis>-></emphasis> Press <emphasis>-></emphasis> Release
|
||
</literallayout>
|
||
|
||
<para>
|
||
Note that only clients that request detectable autorepeat are affected; other
|
||
clients continue to receive both press and release events for autorepeating
|
||
keys. Also note that support for detectable autorepeat is optional; servers are
|
||
not required to support detectable autorepeat, but they must correctly report
|
||
whether or not it is supported.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
<link linkend='Querying_and_Changing_Per_Client_Flags'>Querying and Changing Per-Client
|
||
Flags</link> describes the <emphasis>
|
||
XkbPerClientFlags</emphasis>
|
||
request, which reports or changes values for all of the per-client flags, and
|
||
which lists the per-client flags that are supported.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
</sect1>
|
||
<sect1 id='The_SlowKeys_Control'>
|
||
<title>The SlowKeys Control</title>
|
||
|
||
<para>
|
||
Some users often bump keys accidentally while moving their hand or typing stick
|
||
toward the key they want. Usually, the keys that are bumped accidentally are
|
||
hit only for a very short period of time. The <emphasis>
|
||
SlowKeys</emphasis>
|
||
control helps filter these accidental bumps by telling the server to wait a
|
||
specified period, called the <emphasis>
|
||
SlowKeys acceptance delay</emphasis>
|
||
, before delivering key events. If the key is released before this period
|
||
elapses, no key events are generated. The user can then bump any number of keys
|
||
on their way to the one they want without generating unwanted characters. Once
|
||
they have reached the key they want, they can then hold it long enough for
|
||
<emphasis>
|
||
SlowKeys</emphasis>
|
||
to accept it.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
SlowKeys</emphasis>
|
||
control has one parameter; the <emphasis>
|
||
slow keys delay</emphasis>
|
||
specifies the length of time, in milliseconds, that a key must be held down
|
||
before it is accepted.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When <emphasis>
|
||
SlowKeys</emphasis>
|
||
are active, the X Keyboard Extension reports the initial press, acceptance,
|
||
rejection or release of any key to interested clients using <emphasis>
|
||
AccessXNotify</emphasis>
|
||
events. The <emphasis>
|
||
AccessXNotify</emphasis>
|
||
event is described in more detail in <link linkend='Events'>Events</link>.
|
||
</para>
|
||
|
||
</sect1>
|
||
<sect1 id='The_BounceKeys_Control'>
|
||
<title>The BounceKeys Control</title>
|
||
|
||
<para>
|
||
Some people with physical impairments accidentally "bounce" on a key when they
|
||
press it. That is, they press it once, then accidentally press it again
|
||
immediately. The <emphasis>
|
||
BounceKeys</emphasis>
|
||
control temporarily disables a key after it has been pressed, effectively
|
||
"debouncing" the keyboard.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
BounceKeys</emphasis>
|
||
has a single parameter. The <emphasis>
|
||
BounceKeys delay</emphasis>
|
||
specifies the period of time, in milliseconds, that the key is disabled after
|
||
it is pressed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When <emphasis>
|
||
BounceKeys</emphasis>
|
||
are active, the server reports the acceptance or rejection of any key to
|
||
interested clients by sending an <emphasis>
|
||
AccessXNotify</emphasis>
|
||
event. The <emphasis>
|
||
AccessXNotify</emphasis>
|
||
event is described in more detail in <link linkend='Events'>Events</link>.
|
||
</para>
|
||
|
||
</sect1>
|
||
<sect1 id='The_StickyKeys_Control'>
|
||
<title>The StickyKeys Control</title>
|
||
|
||
<para>
|
||
Some people find it difficult or impossible to press two keys at once. The
|
||
<emphasis>
|
||
StickyKeys</emphasis>
|
||
control makes it easier for them to type by changing the behavior of the
|
||
modifier keys. When <emphasis>
|
||
StickyKeys</emphasis>
|
||
are enabled, a modifier is latched when the user presses it just once, so the
|
||
user can first press a modifier, release it, then press another key. For
|
||
example, to get an exclamation point (!) on a PC-style keyboard, the user can
|
||
press the <emphasis>
|
||
Shift</emphasis>
|
||
key, release it, then press the <emphasis>
|
||
1</emphasis>
|
||
key.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
By default, <emphasis>
|
||
StickyKeys</emphasis>
|
||
also allows users to lock modifier keys without requiring special locking
|
||
keys. The user can press a modifier twice in a row to lock it, and then unlock
|
||
it by pressing it one more time.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Modifiers are automatically unlatched when the user presses a non-modifier key.
|
||
For instance, to enter the sequence <emphasis>
|
||
Shift</emphasis>
|
||
+<emphasis>
|
||
Ctrl</emphasis>
|
||
+<emphasis>
|
||
Z</emphasis>
|
||
the user could press and release the <emphasis>
|
||
Shift</emphasis>
|
||
key to latch the <emphasis>
|
||
Shift</emphasis>
|
||
modifier, then press and release the <emphasis>
|
||
Ctrl</emphasis>
|
||
key to latch the <emphasis>
|
||
Control</emphasis>
|
||
modifier — the <emphasis>
|
||
Ctrl</emphasis>
|
||
key is a modifier key, so pressing it does not unlatch the <emphasis>
|
||
Shift</emphasis>
|
||
modifier, but leaves both the <emphasis>
|
||
Shift</emphasis>
|
||
and <emphasis>
|
||
Control</emphasis>
|
||
modifiers latched, instead. When the user presses the <emphasis>
|
||
Z</emphasis>
|
||
key, it will be as though the user pressed <emphasis>
|
||
Shift</emphasis>
|
||
+<emphasis>
|
||
Ctrl</emphasis>
|
||
+<emphasis>
|
||
Z</emphasis>
|
||
simultaneously. The <emphasis>
|
||
Z</emphasis>
|
||
key is not a modifier key, so the <emphasis>
|
||
Shift</emphasis>
|
||
and <emphasis>
|
||
Control</emphasis>
|
||
modifiers are unlatched after the event is generated.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
A locked a modifier remains in effect until the user unlocks it. For example,
|
||
to enter the sequence ("XKB") on a PC-style keyboard with a typical US/ASCII
|
||
layout, the user could press and release the <emphasis>
|
||
Shift</emphasis>
|
||
key twice to lock the <emphasis>
|
||
Shift</emphasis>
|
||
modifier. Then, when the user presses the <emphasis>
|
||
9</emphasis>
|
||
, <emphasis>
|
||
‘</emphasis>
|
||
, <emphasis>
|
||
x</emphasis>
|
||
, <emphasis>
|
||
k</emphasis>
|
||
, <emphasis>
|
||
b</emphasis>
|
||
, <emphasis>
|
||
‘</emphasis>
|
||
, and <emphasis>
|
||
0</emphasis>
|
||
keys in sequence, it will generate ("XKB"). To unlock the <emphasis>
|
||
Shift</emphasis>
|
||
modifier, the user can press and release the <emphasis>
|
||
Shift</emphasis>
|
||
key.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Two option flags modify the behavior of the <emphasis>
|
||
StickyKeys</emphasis>
|
||
control:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>If the <emphasis>
|
||
XkbAX_TwoKeys</emphasis>
|
||
flag is set, XKB automatically turns <emphasis>
|
||
StickyKeys</emphasis>
|
||
off if the user presses two or more keys at once. This serves to automatically
|
||
disable StickyKeys when a user who does not require sticky keys is using the
|
||
keyboard.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
XkbAX_LatchToLock</emphasis>
|
||
controls the locking behavior of <emphasis>
|
||
StickyKeys</emphasis>
|
||
; the <emphasis>
|
||
StickyKeys</emphasis>
|
||
control only locks modifiers as described above if the <emphasis>
|
||
XkbAX_LatchToLock</emphasis>
|
||
flag is set.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
</sect1>
|
||
<sect1 id='The_MouseKeys_Control'>
|
||
<title>The MouseKeys Control</title>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
MouseKeys</emphasis>
|
||
control lets a user control all the mouse functions from the keyboard. When
|
||
<emphasis>
|
||
MouseKeys</emphasis>
|
||
are enabled, all keys with <emphasis>
|
||
MouseKeys</emphasis>
|
||
actions bound to them generate core pointer events instead of normal key press
|
||
and release events.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
MouseKeys</emphasis>
|
||
control has a single parameter, the <emphasis>
|
||
mouse keys default button</emphasis>
|
||
, which specifies the core pointer button to be used by mouse keys actions that
|
||
do not explicitly specify a button.
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='The_MouseKeysAccel_Control'>
|
||
<title>The MouseKeysAccel Control</title>
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
MouseKeysAccel</emphasis>
|
||
control is enabled, the effect of a pointer motion action changes as a key is
|
||
held down. The <emphasis>
|
||
mouse keys delay</emphasis>
|
||
specifies the amount of time between the initial key press and the first
|
||
repeated motion event. The <emphasis>
|
||
mouse keys interval</emphasis>
|
||
specifies the amount of time between repeated mouse keys events. The <emphasis>
|
||
steps to maximum acceleration</emphasis>
|
||
field specifies the total number of events before the key is travelling at
|
||
maximum speed. The <emphasis>
|
||
maximum acceleration</emphasis>
|
||
field specifies the maximum acceleration. The <emphasis>
|
||
curve</emphasis>
|
||
parameter controls the ramp used to reach maximum acceleration.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When <emphasis>
|
||
MouseKeys</emphasis>
|
||
are active and a <emphasis>
|
||
SA_MovePtr</emphasis>
|
||
key action (see <link linkend='Key_Actions'>Key
|
||
Actions</link>) is activated, a pointer motion event is generated immediately.
|
||
If <emphasis>
|
||
MouseKeysAccel</emphasis>
|
||
is enabled and if acceleration is enabled for the key in question, a second
|
||
event is generated after <emphasis>
|
||
mouse keys delay </emphasis>
|
||
milliseconds, and additional events are generated every <emphasis>
|
||
mouse keys interval</emphasis>
|
||
milliseconds for as long as the key is held down.
|
||
</para>
|
||
|
||
|
||
<sect2 id='Relative_Pointer_Motion'>
|
||
<title>Relative Pointer Motion</title>
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
SA_MovePtr</emphasis>
|
||
action specifies relative motion, events are generated as follows: The initial
|
||
event always moves the cursor the distance specified in the action; after
|
||
<emphasis>
|
||
steps to maximum acceleration</emphasis>
|
||
events have been generated, all subsequent events move the pointer the
|
||
distance specified in the action times the <emphasis>
|
||
maximum acceleration.</emphasis>
|
||
Events after the first but before maximum acceleration has been achieved are
|
||
accelerated according to the formula:
|
||
</para>
|
||
|
||
<mediaobject>
|
||
<imageobject>
|
||
<imagedata format="SVG" fileref="XKBproto-1.svg"/>
|
||
</imageobject>
|
||
</mediaobject>
|
||
|
||
|
||
<para>
|
||
Where <emphasis>
|
||
action_delta</emphasis>
|
||
is the offset specified by the mouse keys action, <emphasis>
|
||
max_accel </emphasis>
|
||
and <emphasis>
|
||
steps_to_max</emphasis>
|
||
are parameters to the <emphasis>
|
||
MouseKeysAccel</emphasis>
|
||
ctrl, and the curveFactor is computed using the <emphasis>
|
||
MouseKeysAccel</emphasis>
|
||
<emphasis>
|
||
curve</emphasis>
|
||
parameter as follows:
|
||
</para>
|
||
|
||
<mediaobject>
|
||
<imageobject> <imagedata format="SVG" fileref="XKBproto-2.svg"/>
|
||
</imageobject>
|
||
</mediaobject>
|
||
|
||
|
||
<para>
|
||
With the result that a <emphasis>
|
||
curve</emphasis>
|
||
of <emphasis>
|
||
0</emphasis>
|
||
causes the distance moved to increase linearly from <emphasis>
|
||
action_delta</emphasis>
|
||
to <mediaobject>
|
||
<imageobject> <imagedata format="SVG" fileref="XKBproto-3.svg"/>
|
||
</imageobject>
|
||
</mediaobject>
|
||
|
||
, and the minimum legal <emphasis>
|
||
curve</emphasis>
|
||
of -<emphasis>
|
||
1000</emphasis>
|
||
causes all events after the first move at <emphasis>
|
||
max_accel</emphasis>
|
||
. A negative <emphasis>
|
||
curve</emphasis>
|
||
causes an initial sharp increase in acceleration which tapers off, while a
|
||
positive curve yields a slower initial increase in acceleration followed by a
|
||
sharp increase as the number of pointer events generated by the action
|
||
approaches <emphasis>
|
||
steps_to_max</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Absolute_Pointer_Motion'>
|
||
<title>Absolute Pointer Motion</title>
|
||
|
||
<para>
|
||
If an <emphasis>
|
||
SA_MovePtr</emphasis>
|
||
action specifies an absolute position for one of the coordinates but still
|
||
allows acceleration, all repeated events contain any absolute coordinates
|
||
specified in the action.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
</sect1>
|
||
<sect1 id='The_AccessXKeys_Control'>
|
||
<title>The AccessXKeys Control</title>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
AccessXKeys</emphasis>
|
||
is enabled many controls can also be turned on or off from the keyboard by
|
||
entering the following standard key sequences:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Holding down a shift key by itself for eight seconds toggles the
|
||
<emphasis>
|
||
SlowKeys</emphasis>
|
||
control.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Pressing and releasing a shift key five times in a row without any
|
||
intervening key events and with less than 30 seconds delay between consecutive
|
||
presses toggles the state of the <emphasis>
|
||
StickyKeys</emphasis>
|
||
control.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Simultaneously operating two or more modifier keys deactivates the
|
||
<emphasis>
|
||
StickyKeys</emphasis>
|
||
control.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
Some of these key sequences optionally generate audible feedback of the change
|
||
in state, as described in <link linkend='The_AccessXFeedback_Control'>The
|
||
AccessXFeedback Control</link>, or cause <emphasis>
|
||
XkbAccessXNotify</emphasis>
|
||
events as described in <link linkend='Events'>Events</link>.
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='The_AccessXTimeout_Control'>
|
||
<title>The AccessXTimeout Control</title>
|
||
|
||
<para>
|
||
In environments where computers are shared, features such as <emphasis>
|
||
SlowKeys</emphasis>
|
||
present a problem: if <emphasis>
|
||
SlowKeys</emphasis>
|
||
is on, the keyboard can appear to be unresponsive because keys have no effect
|
||
unless they are held for a certain period of time. To help address this
|
||
problem, XKB provides an <emphasis>
|
||
AccessXTimeout</emphasis>
|
||
control to automatically change the value of any global controls or AccessX
|
||
options if the keyboard is idle for a specified period of time.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The AccessXTimeout control has a number of parameters which affect the duration
|
||
of the timeout and the features changed when the timeout expires.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
AccessX Timeout</emphasis>
|
||
field specifies the number of seconds the keyboard must be idle before the
|
||
global controls and AccessX options are modified. The <emphasis>
|
||
AccessX Options Mask</emphasis>
|
||
field specifies which values in the <emphasis>
|
||
AccessX Options</emphasis>
|
||
field are to be changed, and the <emphasis>
|
||
AccessX Options Values</emphasis>
|
||
field specifies the new values for those options. The <emphasis>
|
||
AccessX Controls Mask</emphasis>
|
||
field specifies which controls are to be changed in the global set of
|
||
<emphasis>
|
||
enabled controls</emphasis>
|
||
, and the <emphasis>
|
||
AccessX Controls Values</emphasis>
|
||
field specifies the new values for those controls.
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='The_AccessXFeedback_Control'>
|
||
<title>The AccessXFeedback Control</title>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
AccessXFeedback</emphasis>
|
||
is enabled, special beep-codes indicate changes in keyboard controls (or some
|
||
key events when <emphasis>
|
||
SlowKeys</emphasis>
|
||
or <emphasis>
|
||
StickyKeys</emphasis>
|
||
are active). Many beep codes sound as multiple tones, but XKB reports a single
|
||
<emphasis>
|
||
XkbBellNotify</emphasis>
|
||
event for the entire sequence of tones.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
All feedback tones are governed by the <emphasis>
|
||
AudibleBell</emphasis>
|
||
control. Individual feedback tones can be explicitly enabled or disabled using
|
||
the <emphasis>
|
||
accessX options mask</emphasis>
|
||
or set to deactivate after an idle period using the <emphasis>
|
||
accessX timeout options mask</emphasis>
|
||
. XKB defines the following feedback tones:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='4' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='1.5*'/>
|
||
<colspec colname='c3' colwidth='1.5*'/>
|
||
<colspec colname='c4' colwidth='1.5*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Feedback Name</entry>
|
||
<entry>Bell Name</entry>
|
||
<entry>Default Sound</entry>
|
||
<entry>Indicates</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>FeatureFB</entry>
|
||
<entry>AX_FeatureOn</entry>
|
||
<entry>rising tone</entry>
|
||
<entry>Keyboard control enabled</entry>
|
||
</row>
|
||
<row>
|
||
<entry> </entry>
|
||
<entry>AX_FeatureOff</entry>
|
||
<entry>falling tone</entry>
|
||
<entry>Keyboard control disabled</entry>
|
||
</row>
|
||
<row>
|
||
<entry> </entry>
|
||
<entry>AX_FeatureChange</entry>
|
||
<entry>two tones</entry>
|
||
<entry>Several controls changed state</entry>
|
||
</row>
|
||
<row>
|
||
<entry>IndicatorFB</entry>
|
||
<entry>AX_IndicatorOn</entry>
|
||
<entry>high tone</entry>
|
||
<entry>Indicator Lit</entry>
|
||
</row>
|
||
<row>
|
||
<entry> </entry>
|
||
<entry>AX_IndicatorOff</entry>
|
||
<entry>low tone</entry>
|
||
<entry>Indicator Extinguished</entry>
|
||
</row>
|
||
<row>
|
||
<entry> </entry>
|
||
<entry>AX_IndicatorChange</entry>
|
||
<entry>two high tones</entry>
|
||
<entry>Several indicators changed state</entry>
|
||
</row>
|
||
<row>
|
||
<entry>SlowWarnFB</entry>
|
||
<entry>AX_SlowKeysWarning</entry>
|
||
<entry>three high tones</entry>
|
||
<entry>Shift key held for four seconds</entry>
|
||
</row>
|
||
<row>
|
||
<entry>SKPressFB</entry>
|
||
<entry>AX_SlowKeyPress</entry>
|
||
<entry>single tone</entry>
|
||
<entry>Key press while <emphasis>
|
||
SlowKeys</emphasis>
|
||
are on</entry>
|
||
</row>
|
||
<row>
|
||
<entry>SKReleaseFB</entry>
|
||
<entry>AX_SlowKeyRelease</entry>
|
||
<entry>single tone</entry>
|
||
<entry>Key release while <emphasis>
|
||
SlowKeys</emphasis>
|
||
are on</entry>
|
||
</row>
|
||
<row>
|
||
<entry>SKAcceptFB</entry>
|
||
<entry>AX_SlowKeyAccept</entry>
|
||
<entry>single tone</entry>
|
||
<entry>Key event accepted by <emphasis>
|
||
SlowKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>SKRejectFB</entry>
|
||
<entry>AX_SlowKeyReject</entry>
|
||
<entry>low tone</entry>
|
||
<entry>Key event rejected by <emphasis>
|
||
SlowKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>StickyKeysFB</entry>
|
||
<entry>AX_StickyLatch</entry>
|
||
<entry>low tone then high tone</entry>
|
||
<entry>Modifier latched by <emphasis>
|
||
StickyKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry> </entry>
|
||
<entry>AX_StickyLock</entry>
|
||
<entry>high tone</entry>
|
||
<entry>Modifier locked by <emphasis>
|
||
StickyKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry> </entry>
|
||
<entry>AX_StickyUnlock</entry>
|
||
<entry>low tone</entry>
|
||
<entry>Modifier unlocked by <emphasis>
|
||
StickyKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>BKRejectFB</entry>
|
||
<entry>AX_BounceKeysReject</entry>
|
||
<entry>low tone</entry>
|
||
<entry>Key event rejected by <emphasis>
|
||
BounceKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Implementations that cannot generate continuous tones may generate multiple
|
||
beeps instead of falling and rising tones; for example, they can generate a
|
||
high-pitched beep followed by a low-pitched beep instead of a continuous
|
||
falling tone.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the physical keyboard bell is not very capable, attempts to simulate a
|
||
continuous tone with multiple bells can sound horrible. Set the <emphasis>
|
||
DumbBellFB</emphasis>
|
||
AccessX option to inform the server that the keyboard bell is not very capable
|
||
and that XKB should use only simple bell combinations. Keyboard capabilities
|
||
vary wildly, so the sounds generated for the individual bells when the
|
||
<emphasis>
|
||
DumbBellFB</emphasis>
|
||
option is set are implementation specific.
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='The_Overlay1_and_Overlay2_Controls'>
|
||
<title>The Overlay1 and Overlay2 Controls</title>
|
||
|
||
<para>
|
||
A keyboard overlay allows some subset of the keyboard to report alternate
|
||
keycodes when the overlay is enabled. For example a keyboard overlay can be
|
||
used to simulate a numeric or editing keypad on keyboard that does not actually
|
||
have one by generating alternate of keycodes for some keys when the overlay is
|
||
enabled. This technique is very common on portable computers and embedded
|
||
systems with small keyboards.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
XKB includes direct support for two keyboard overlays, using the <emphasis>
|
||
Overlay1</emphasis>
|
||
and <emphasis>
|
||
Overlay2</emphasis>
|
||
controls. When <emphasis>
|
||
Overlay1</emphasis>
|
||
is enabled, all of the keys that are members of the first keyboard overlay
|
||
generate an alternate keycode. When <emphasis>
|
||
Overlay2</emphasis>
|
||
is enabled, all of the keys that are members of the second keyboard overlay
|
||
generate an alternate keycode.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
To specify the overlay to which a key belongs and the alternate keycode it
|
||
should generate when that overlay is enabled, assign it either the <emphasis>
|
||
KB_Overlay1</emphasis>
|
||
or <emphasis>
|
||
KB_Overlay2</emphasis>
|
||
key behaviors, as described in <link linkend='Key_Behavior'>
|
||
Key Behavior</link>.
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='Boolean_Controls_and_The_EnabledControls_Control'>
|
||
<title>"Boolean" Controls and The EnabledControls Control</title>
|
||
|
||
<para>
|
||
All of the controls described above, along with the <emphasis>
|
||
AudibleBell</emphasis>
|
||
control (described in <link linkend='Disabling_Server_Generated_Bells'>Disabling
|
||
Server Generated Bells</link>) and the <emphasis>
|
||
IgnoreGroupLock</emphasis>
|
||
control (described in <link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>Server
|
||
Internal Modifiers and Ignore Locks Behavior</link>) comprise the <emphasis>
|
||
boolean controls</emphasis>
|
||
. In addition to any parameters listed in the descriptions of the individual
|
||
controls, the boolean controls can be individually enabled or disabled by
|
||
changing the value of the <emphasis>
|
||
EnabledControls</emphasis>
|
||
control.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The following <emphasis>
|
||
non-boolean</emphasis>
|
||
controls are always active and cannot be changed using the <emphasis>
|
||
EnabledControls</emphasis>
|
||
control or specified in any context that accepts only boolean controls:
|
||
<emphasis>
|
||
GroupsWrap</emphasis>
|
||
(<link linkend='Computing_Effective_Modifier_and_Group'>Computing Effective Modifier and
|
||
Group</link>), <emphasis>
|
||
EnabledControls</emphasis>
|
||
, <emphasis>
|
||
InternalMods</emphasis>
|
||
(<link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>Server Internal Modifiers and
|
||
Ignore Locks Behavior</link>), and <emphasis>
|
||
IgnoreLockMods</emphasis>
|
||
(<link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>Server Internal Modifiers and
|
||
Ignore Locks Behavior</link>) and <emphasis>
|
||
PerKeyRepeat</emphasis>
|
||
(<link linkend='The_RepeatKeys_Control'>The RepeatKeys Control</link>)
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='Automatic_Reset_of_Boolean_Controls'>
|
||
<title>Automatic Reset of Boolean Controls</title>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
auto-reset controls</emphasis>
|
||
are a per-client value which consist of two masks that can contain any of the
|
||
boolean controls (see <link linkend='Boolean_Controls_and_The_EnabledControls_Control'>"Boolean"
|
||
Controls and The EnabledControls Control</link>). Whenever the client exits
|
||
for any reason, any boolean controls specified in the <emphasis>
|
||
auto-reset mask</emphasis>
|
||
are set to the corresponding value from the <emphasis>
|
||
auto-reset values</emphasis>
|
||
mask. This makes it possible for clients to "clean up after themselves"
|
||
automatically, even if abnormally terminated.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
For example, a client that replace the keyboard bell with some other audible
|
||
cue might want to turn off the <emphasis>
|
||
AudibleBell</emphasis>
|
||
control (<link linkend='Disabling_Server_Generated_Bells'>Disabling Server
|
||
Generated Bells</link>) to prevent the server from also generating a sound and
|
||
thus avoid cacophony. If the client were to exit without resetting the
|
||
<emphasis>
|
||
AudibleBell </emphasis>
|
||
control, the user would be left without any feedback at all. Setting <emphasis>
|
||
AudibleBell</emphasis>
|
||
in both the auto-reset mask and auto-reset values guarantees that the audible
|
||
bell will be turned back on when the client exits.
|
||
</para>
|
||
</sect1>
|
||
</chapter>
|