10f8248bfSmrg<?xml version="1.0" encoding="UTF-8" ?> 20f8248bfSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" 30f8248bfSmrg "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> 4eb411b4bSmrg<chapter id='Overview'> 5e9fcaa8aSmrg<title>Overview</title> 6e9fcaa8aSmrg 7e9fcaa8aSmrg<para> 8e9fcaa8aSmrgThe X Keyboard Extension provides capabilities that are lacking or are 9e9fcaa8aSmrgcumbersome in the core X protocol. 10e9fcaa8aSmrg</para> 11e9fcaa8aSmrg 12eb411b4bSmrg<sect1 id='Core_X_Protocol_Support_for_Keyboards'> 13e9fcaa8aSmrg<title>Core X Protocol Support for Keyboards</title> 14e9fcaa8aSmrg 15e9fcaa8aSmrg<para> 16e9fcaa8aSmrgThe core X protocol specifies the ways that the 170f8248bfSmrg<symbol>Shift</symbol>, 180f8248bfSmrg<symbol>Control</symbol>, and 190f8248bfSmrg<symbol>Lock</symbol> 20e9fcaa8aSmrgmodifiers and the modifiers bound to the 210f8248bfSmrg<keysym>Mode_switch</keysym> or 220f8248bfSmrg<keysym>Num_Lock</keysym> 23e9fcaa8aSmrgkeysyms interact to generate keysyms and characters. The core protocol also 24e9fcaa8aSmrgallows users to specify that a key affects one or more modifiers. This behavior 25e9fcaa8aSmrgis simple and fairly flexible, but it has a number of limitations that make it 26e9fcaa8aSmrgdifficult or impossible to properly support many common varieties of keyboard 27e9fcaa8aSmrgbehavior. The limitations of core protocol support for keyboards include: 28e9fcaa8aSmrg</para> 29e9fcaa8aSmrg 30e9fcaa8aSmrg<itemizedlist> 31e9fcaa8aSmrg <listitem> 32e9fcaa8aSmrg <para> 33e9fcaa8aSmrgUse of a single, uniform, four-symbol mapping for all keyboard keys makes it 34e9fcaa8aSmrgdifficult to properly support keyboard overlays, PC-style break keys, or 35e9fcaa8aSmrgkeyboards that comply with ISO9995, or a host of other national and 36e9fcaa8aSmrginternational standards. 37e9fcaa8aSmrg </para> 38e9fcaa8aSmrg </listitem> 39e9fcaa8aSmrg <listitem> 40e9fcaa8aSmrg <para> 41e9fcaa8aSmrgA second keyboard group may be specified using a modifier, but this has side 42e9fcaa8aSmrgeffects that wreak havoc with client grabs and X toolkit translations. 43e9fcaa8aSmrgFurthermore, this approach limits the number of keyboard groups to two. 44e9fcaa8aSmrg </para> 45e9fcaa8aSmrg </listitem> 46e9fcaa8aSmrg <listitem> 47e9fcaa8aSmrg <para> 48e9fcaa8aSmrgPoorly specified locking key behavior requires X servers to look for a few 490f8248bfSmrg<quote>magic</quote> keysyms to determine that keys should lock when pressed. This leads to 50e9fcaa8aSmrgincompatibilities between X servers with no way for clients to detect 51e9fcaa8aSmrgimplementation differences. 52e9fcaa8aSmrg </para> 53e9fcaa8aSmrg </listitem> 54e9fcaa8aSmrg <listitem> 55e9fcaa8aSmrg <para> 56e9fcaa8aSmrgPoorly specified capitalization and control behavior requires modifications to 57e9fcaa8aSmrgX library source code to support new character sets or locales and can lead to 58e9fcaa8aSmrgincompatibilities between system wide and X library capitalization behavior. 59e9fcaa8aSmrg </para> 60e9fcaa8aSmrg </listitem> 61e9fcaa8aSmrg <listitem> 62e9fcaa8aSmrg <para> 63e9fcaa8aSmrgLimited interactions between modifiers specified by the core protocol make many 64e9fcaa8aSmrgcommon keyboard behaviors difficult or impossible to implement. For example, 65e9fcaa8aSmrgthere is no reliable way to indicate whether or not the shift modifier should 660f8248bfSmrg<quote>cancel</quote> the lock modifier. 67e9fcaa8aSmrg </para> 68e9fcaa8aSmrg </listitem> 69e9fcaa8aSmrg <listitem> 70e9fcaa8aSmrg <para> 71e9fcaa8aSmrgThe lack of any explicit descriptions for indicators, most modifiers, and other 72e9fcaa8aSmrgaspects of the keyboard appearance requires clients that wish to clearly 73e9fcaa8aSmrgdescribe the keyboard to a user to resort to a mish-mash of prior knowledge and 74e9fcaa8aSmrgheuristics. 75e9fcaa8aSmrg </para> 76e9fcaa8aSmrg </listitem> 77e9fcaa8aSmrg</itemizedlist> 78e9fcaa8aSmrg 79e9fcaa8aSmrg</sect1> 80eb411b4bSmrg<sect1 id='Xkb_Keyboard_Extension_Support_for_Keyboards'> 81e9fcaa8aSmrg<title>Xkb Keyboard Extension Support for Keyboards</title> 82e9fcaa8aSmrg 83e9fcaa8aSmrg<para> 84e9fcaa8aSmrgThe X Keyboard Extension makes it possible to clearly and explicitly specify 85e9fcaa8aSmrgmost aspects of keyboard behavior on a per-key basis. It adds the notion of a 86e9fcaa8aSmrgkeyboard group to the global keyboard state and provides mechanisms to more 87e9fcaa8aSmrgclosely track the logical and physical state of the keyboard. For 88e9fcaa8aSmrgkeyboard-control clients, Xkb provides descriptions and symbolic names for many 89e9fcaa8aSmrgaspects of keyboard appearance and behavior. 90e9fcaa8aSmrg</para> 91e9fcaa8aSmrg 92e9fcaa8aSmrg<para> 93e9fcaa8aSmrgIn addition, the X Keyboard Extension includes additional keyboard controls 94e9fcaa8aSmrgdesigned to make keyboards more accessible to people with movement impairments. 95e9fcaa8aSmrg</para> 96e9fcaa8aSmrg 97e9fcaa8aSmrg</sect1> 98e9fcaa8aSmrg 99eb411b4bSmrg<sect1 id='Xkb_Extension_Components'> 100e9fcaa8aSmrg<title>Xkb Extension Components</title> 101e9fcaa8aSmrg 102e9fcaa8aSmrg<para> 103e9fcaa8aSmrgThe Xkb extension is composed of two parts: a server extension, and a 104e9fcaa8aSmrgclient-side X library extension. These consist of a loadable module that may be 105e9fcaa8aSmrgactivated when an X server is started and a modified version of Xlib. Both 106e9fcaa8aSmrgserver and Xlib versions must be at least X11 R6. 107e9fcaa8aSmrg</para> 108e9fcaa8aSmrg 109e9fcaa8aSmrg 110e9fcaa8aSmrg<para> 1110f8248bfSmrg<link linkend="figure1.1">Figure 1.1</link> shows the overall structure of the Xkb extension: 112e9fcaa8aSmrg</para> 113e9fcaa8aSmrg 1140f8248bfSmrg<figure id='figure1.1'> 1150f8248bfSmrg <title>Overall Xkb Structure</title> 1160f8248bfSmrg <mediaobject> 1170f8248bfSmrg <imageobject> 1180f8248bfSmrg <imagedata format="SVG" fileref="XKBlib-1.svg"/> 1190f8248bfSmrg </imageobject> 1200f8248bfSmrg </mediaobject> 1210f8248bfSmrg</figure> 122e9fcaa8aSmrg 123e9fcaa8aSmrg 1240f8248bfSmrg<para id="keyboard_description"> 125e9fcaa8aSmrgThe server portion of the Xkb extension encompasses a database of named 126e9fcaa8aSmrgkeyboard components, in unspecified format, that may be used to configure a 1270f8248bfSmrgkeyboard. Internally, the server maintains a 1280f8248bfSmrg<firstterm>keyboard description</firstterm> 1290f8248bfSmrg<indexterm significance="preferred" zone="keyboard_description"> 1300f8248bfSmrg<primary>keyboard description</primary></indexterm> 1310f8248bfSmrgthat includes the keyboard state and configuration (mapping). By 1320f8248bfSmrg<quote>keyboard</quote> we 133e9fcaa8aSmrgmean the logical keyboard device, which includes not only the physical keys, 134e9fcaa8aSmrgbut also potentially a set of up to 32 indicators (usually LEDs) and bells. 135e9fcaa8aSmrg</para> 136e9fcaa8aSmrg 137e9fcaa8aSmrg 138e9fcaa8aSmrg<para> 139e9fcaa8aSmrgThe keyboard description is a composite of several different data structures, 140e9fcaa8aSmrgeach of which may be manipulated separately. When manipulating the server 141e9fcaa8aSmrgcomponents, the design allows partial components to be transmitted between the 1420f8248bfSmrgserver and a client. The individual components are shown in <link linkend="figure1.1">Figure 1.1</link>. 143e9fcaa8aSmrg</para> 144e9fcaa8aSmrg 145e9fcaa8aSmrg<variablelist> 146e9fcaa8aSmrg <varlistentry> 1470f8248bfSmrg <term><link linkend="Xkb_Client_Keyboard_Mapping">Client Map</link></term> 148e9fcaa8aSmrg <listitem> 149e9fcaa8aSmrg <para> 150e9fcaa8aSmrgThe key mapping information needed to convert arbitrary keycodes to symbols. 151e9fcaa8aSmrg </para> 152e9fcaa8aSmrg </listitem> 153e9fcaa8aSmrg </varlistentry> 154e9fcaa8aSmrg <varlistentry> 1550f8248bfSmrg <term><link linkend="Xkb_Server_Keyboard_Mapping">Server Map</link></term> 156e9fcaa8aSmrg <listitem> 157e9fcaa8aSmrg <para> 158e9fcaa8aSmrgThe key mapping information categorizing keys by functionality (which keys are 159e9fcaa8aSmrgmodifiers, how keys behave, and so on). 160e9fcaa8aSmrg </para> 161e9fcaa8aSmrg </listitem> 162e9fcaa8aSmrg </varlistentry> 163e9fcaa8aSmrg <varlistentry> 1640f8248bfSmrg <term><link linkend="Keyboard_Controls">Controls</link></term> 165e9fcaa8aSmrg <listitem> 166e9fcaa8aSmrg <para> 167e9fcaa8aSmrgClient configurable quantities effecting how the keyboard behaves, such as 168e9fcaa8aSmrgrepeat behavior and modifications for people with movement impairments. 169e9fcaa8aSmrg </para> 170e9fcaa8aSmrg </listitem> 171e9fcaa8aSmrg </varlistentry> 172e9fcaa8aSmrg <varlistentry> 1730f8248bfSmrg <term><link linkend="Indicators">Indicators</link></term> 174e9fcaa8aSmrg <listitem> 175e9fcaa8aSmrg <para> 176e9fcaa8aSmrgThe mapping of behavior to indicators. 177e9fcaa8aSmrg </para> 178e9fcaa8aSmrg </listitem> 179e9fcaa8aSmrg </varlistentry> 180e9fcaa8aSmrg <varlistentry> 1810f8248bfSmrg <term><link linkend="Keyboard_Geometry">Geometry</link></term> 182e9fcaa8aSmrg <listitem> 183e9fcaa8aSmrg <para> 184e9fcaa8aSmrgA complete description of the physical keyboard layout, sufficient to draw a 185e9fcaa8aSmrgrepresentation of the keyboard. 186e9fcaa8aSmrg </para> 187e9fcaa8aSmrg </listitem> 188e9fcaa8aSmrg </varlistentry> 189e9fcaa8aSmrg <varlistentry> 1900f8248bfSmrg <term><link linkend="Symbolic_Names">Names</link></term> 191e9fcaa8aSmrg <listitem> 192e9fcaa8aSmrg <para> 193e9fcaa8aSmrgA mapping of names to various aspects of the keyboard such as individual 194e9fcaa8aSmrgvirtual modifiers, indicators, and bells. 195e9fcaa8aSmrg </para> 196e9fcaa8aSmrg </listitem> 197e9fcaa8aSmrg </varlistentry> 198e9fcaa8aSmrg <varlistentry> 1990f8248bfSmrg <term><link linkend="The_Xkb_Compatibility_Map">Compatibility Map</link></term> 200e9fcaa8aSmrg <listitem> 201e9fcaa8aSmrg <para> 202e9fcaa8aSmrgThe definition of how to map core protocol keyboard state to Xkb keyboard state. 203e9fcaa8aSmrg </para> 204e9fcaa8aSmrg </listitem> 205e9fcaa8aSmrg </varlistentry> 206e9fcaa8aSmrg</variablelist> 207e9fcaa8aSmrg 208e9fcaa8aSmrg<para> 209e9fcaa8aSmrgA client application interrogates and manipulates the keyboard by reading and 210e9fcaa8aSmrgwriting portions of the server description for the keyboard. In a typical 211e9fcaa8aSmrgsequence a client would fetch the current information it is interested in, 212e9fcaa8aSmrgmodify it, and write it back. If a client wishes to track some portion of the 213e9fcaa8aSmrgkeyboard state, it typically maintains a local copy of the portion of the 214e9fcaa8aSmrgserver keyboard description dealing with the items of interest and updates this 215e9fcaa8aSmrglocal copy from events describing state transitions that are sent by the server. 216e9fcaa8aSmrg</para> 217e9fcaa8aSmrg 218e9fcaa8aSmrg<para> 219e9fcaa8aSmrgA client may request the server to reconfigure the keyboard either by sending 220e9fcaa8aSmrgexplicit reconfiguration instructions to it, or by telling it to load a new 221e9fcaa8aSmrgconfiguration from its database of named components. Partial reconfiguration 222e9fcaa8aSmrgand incremental reconfiguration are both supported. 223e9fcaa8aSmrg</para> 224e9fcaa8aSmrg 225eb411b4bSmrg<sect2 id='Groups_and_Shift_Levels'> 226e9fcaa8aSmrg<title>Groups and Shift Levels</title> 227e9fcaa8aSmrg 228e9fcaa8aSmrg<para> 229e9fcaa8aSmrgThe graphic characters or control functions that may be accessed by one key are 2300f8248bfSmrglogically arranged in groups and levels. See <link linkend="Notation_and_Terminology">section 14.1</link> for a complete 231e9fcaa8aSmrgdescription of groups and levels. 232e9fcaa8aSmrg</para> 233e9fcaa8aSmrg 234e9fcaa8aSmrg 235e9fcaa8aSmrg</sect2> 236eb411b4bSmrg<sect2 id='Radio_Groups'> 237e9fcaa8aSmrg<title>Radio Groups</title> 238e9fcaa8aSmrg 239e9fcaa8aSmrg<para> 2400f8248bfSmrg<indexterm significance="preferred" zone="Radio_Groups"> 2410f8248bfSmrg<primary>radio group</primary></indexterm> 2420f8248bfSmrg<indexterm significance="preferred" zone="Radio_Groups"> 2430f8248bfSmrg<primary>group</primary><secondary>radio</secondary></indexterm> 2440f8248bfSmrgA <firstterm>radio group</firstterm> 2450f8248bfSmrgis a set of keys whose behavior simulates a set of radio buttons. 246e9fcaa8aSmrgOnce a key in a radio group is pressed, it stays logically depressed until 247e9fcaa8aSmrganother key in the group is pressed, at which point the previously depressed 248e9fcaa8aSmrgkey is logically released. Consequently, at most one key in a radio group can 249e9fcaa8aSmrgbe logically depressed at one time. A radio group is defined by a radio group 2500f8248bfSmrgindex, an optional name, and by assigning each key in the radio group 2510f8248bfSmrg<symbol>XkbKB_RadioGroup</symbol> 2520f8248bfSmrgbehavior and the radio group index. 253e9fcaa8aSmrg</para> 254e9fcaa8aSmrg 255e9fcaa8aSmrg</sect2> 256e9fcaa8aSmrg</sect1> 257e9fcaa8aSmrg 258eb411b4bSmrg<sect1 id='Client_Types'> 259e9fcaa8aSmrg<title>Client Types</title> 260e9fcaa8aSmrg 261e9fcaa8aSmrg<para> 262e9fcaa8aSmrgThis specification differentiates between three different classes of client 263e9fcaa8aSmrgapplications: 264e9fcaa8aSmrg</para> 265e9fcaa8aSmrg 266e9fcaa8aSmrg<itemizedlist> 267e9fcaa8aSmrg <listitem> 268e9fcaa8aSmrg <para> 269e9fcaa8aSmrgXkb-aware applications 270e9fcaa8aSmrg </para> 271e9fcaa8aSmrg <para> 272e9fcaa8aSmrgThese applications make specific use of Xkb functionality and APIs not present 273e9fcaa8aSmrgin the core protocol. 274e9fcaa8aSmrg </para> 275e9fcaa8aSmrg </listitem> 276e9fcaa8aSmrg <listitem> 277e9fcaa8aSmrg <para> 278e9fcaa8aSmrgXkb-capable applications 279e9fcaa8aSmrg </para> 280e9fcaa8aSmrg <para> 281e9fcaa8aSmrgThese applications make no use of Xkb extended functionality and Application 282e9fcaa8aSmrgProgramming Interfaces (APIs) directly. However, they are linked with a version 283e9fcaa8aSmrgof Xlib that includes Xkb and indirectly benefit from some of Xkb’s 284e9fcaa8aSmrgfeatures. 285e9fcaa8aSmrg </para> 286e9fcaa8aSmrg </listitem> 287e9fcaa8aSmrg <listitem> 288e9fcaa8aSmrg <para> 289e9fcaa8aSmrgXkb-unaware applications 290e9fcaa8aSmrg </para> 291e9fcaa8aSmrg <para> 292e9fcaa8aSmrgThese applications make no use of Xkb extended functionality or APIs and 293e9fcaa8aSmrgrequire Xkb’s functionality to be mapped to core Xlib functionality to 294e9fcaa8aSmrgoperate properly. 295e9fcaa8aSmrg </para> 296e9fcaa8aSmrg </listitem> 297e9fcaa8aSmrg</itemizedlist> 298e9fcaa8aSmrg 299e9fcaa8aSmrg</sect1> 300e9fcaa8aSmrg 301eb411b4bSmrg<sect1 id='Compatibility_With_the_Core_Protocol'> 302e9fcaa8aSmrg<title>Compatibility With the Core Protocol</title> 303e9fcaa8aSmrg 304e9fcaa8aSmrg<para> 305e9fcaa8aSmrgBecause the Xkb extension allows a keyboard to be configured in ways not 306e9fcaa8aSmrgforeseen by the core protocol, and because Xkb-unaware clients are allowed to 307e9fcaa8aSmrgconnect to a server using the Xkb extension, there must be a means of 308e9fcaa8aSmrgconverting between the Xkb domain and the core protocol. The Xkb server 309e9fcaa8aSmrgextension maintains a compatibility map as part of its keyboard description; 310e9fcaa8aSmrgthis map controls the conversion of Xkb generated events to core protocol 311e9fcaa8aSmrgevents and the results of core protocol requests to appropriate Xkb state and 312e9fcaa8aSmrgconfiguration. 313e9fcaa8aSmrg</para> 314e9fcaa8aSmrg 315e9fcaa8aSmrg 316e9fcaa8aSmrg</sect1> 317eb411b4bSmrg<sect1 id='Additional_Protocol_Errors'> 318e9fcaa8aSmrg<title>Additional Protocol Errors</title> 319e9fcaa8aSmrg 320e9fcaa8aSmrg<para> 3210f8248bfSmrgThe Xkb extension adds a single protocol error, 3220f8248bfSmrg<errorname>BadKeyboard</errorname>, 3230f8248bfSmrgto the core protocol error set. See <link linkend="Protocol_Errors">section 2.6</link> for a discussion of the 3240f8248bfSmrg<errorname>BadKeyboard</errorname> 3250f8248bfSmrgprotocol error. 326e9fcaa8aSmrg</para> 327e9fcaa8aSmrg 328e9fcaa8aSmrg 329e9fcaa8aSmrg</sect1> 330eb411b4bSmrg<sect1 id='Extension_Library_Functions'> 331e9fcaa8aSmrg<title>Extension Library Functions</title> 332e9fcaa8aSmrg 333e9fcaa8aSmrg<para> 334e9fcaa8aSmrgThe X Keyboard Extension replaces the core protocol definition of a keyboard 335e9fcaa8aSmrgwith a more comprehensive one. The X Keyboard Extension library interfaces are 336e9fcaa8aSmrgincluded in Xlib.<footnote><para> 3370f8248bfSmrgX11R6.1 is the first release by the X Consortium, Inc., that includes the X 338e9fcaa8aSmrgKeyboard Extension in Xlib. X11R6 included work in progress on this extension 339e9fcaa8aSmrgas nonstandard additions to the library. 340e9fcaa8aSmrg</para> 341e9fcaa8aSmrg</footnote> 342e9fcaa8aSmrg</para> 343e9fcaa8aSmrg 344e9fcaa8aSmrg<para> 345e9fcaa8aSmrgXlib detects the presence of the X Keyboard server extension and uses Xkb 346e9fcaa8aSmrgprotocol to replace some standard X library functions related to the keyboard. 347e9fcaa8aSmrgIf an application uses only standard X library functions to examine the 348e9fcaa8aSmrgkeyboard or process key events, it should not need to be modified when linked 349e9fcaa8aSmrgwith an X library containing the X keyboard extension. All of the 350e9fcaa8aSmrgkeyboard-related X library functions have been modified to automatically use 351e9fcaa8aSmrgXkb protocol when the server extension is present. 352e9fcaa8aSmrg</para> 353e9fcaa8aSmrg 354e9fcaa8aSmrg<para> 355e9fcaa8aSmrgThe Xkb extension adds library interfaces to allow a client application to 356e9fcaa8aSmrgdirectly manipulate the new capabilities. 357e9fcaa8aSmrg</para> 358e9fcaa8aSmrg 359e9fcaa8aSmrg 360eb411b4bSmrg<sect2 id='Error_Indications'> 361e9fcaa8aSmrg<title>Error Indications</title> 3620f8248bfSmrg<indexterm zone="Error_Indications"><primary>errors</primary></indexterm> 363e9fcaa8aSmrg 364e9fcaa8aSmrg<para> 365e9fcaa8aSmrgXkb functions that communicate with the X server check to be sure the Xkb 366e9fcaa8aSmrgextension has been properly initialized prior to doing any other operations. If 367e9fcaa8aSmrgthe extension has not been properly initialized or the application, library, 368e9fcaa8aSmrgand server versions are incompatible, these functions return an error 3690f8248bfSmrgindication as shown in <link linkend="table1.1">Table 1.1</link>. 3700f8248bfSmrgBecause of this test, 3710f8248bfSmrg<errorname>BadAccess</errorname> 3720f8248bfSmrgand 3730f8248bfSmrg<errorname>BadMatch</errorname> 3740f8248bfSmrg(due to incompatible versions) protocol errors should normally not be 375e9fcaa8aSmrggenerated. 376e9fcaa8aSmrg</para> 377e9fcaa8aSmrg 3780f8248bfSmrg<table id='table1.1' frame='topbot'> 379e9fcaa8aSmrg<!-- <caption>Function Error Returns Due to Extension Problems</caption> --> 380e9fcaa8aSmrg<title>Function Error Returns Due to Extension Problems</title> 381eb411b4bSmrg<?dbfo keep-together="always" ?> 382eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 383eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 384eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 385e9fcaa8aSmrg<thead> 386eb411b4bSmrg <row rowsep='1'> 387e9fcaa8aSmrg <entry>Functions return type</entry> 388e9fcaa8aSmrg <entry>Return value</entry> 389e9fcaa8aSmrg </row> 390e9fcaa8aSmrg</thead> 391e9fcaa8aSmrg<tbody> 392eb411b4bSmrg <row> 393e9fcaa8aSmrg <entry>pointer to a structure</entry> 3940f8248bfSmrg <entry><symbol>NULL</symbol></entry> 395e9fcaa8aSmrg </row> 396eb411b4bSmrg <row> 397e9fcaa8aSmrg <entry>Bool</entry> 3980f8248bfSmrg <entry><symbol>False</symbol></entry> 399e9fcaa8aSmrg </row> 400eb411b4bSmrg <row> 401e9fcaa8aSmrg <entry>Status</entry> 4020f8248bfSmrg <entry><errorname>BadAccess</errorname></entry> 403e9fcaa8aSmrg </row> 404e9fcaa8aSmrg</tbody> 405e9fcaa8aSmrg</tgroup> 406e9fcaa8aSmrg</table> 407e9fcaa8aSmrg 408e9fcaa8aSmrg<para> 409e9fcaa8aSmrgMany Xkb functions do not actually communicate with the X server; they only 410e9fcaa8aSmrgrequire processing in the client-side portion of the library. Furthermore, some 411e9fcaa8aSmrgapplications may never actually need to communicate with the server; they 412e9fcaa8aSmrgsimply use the Xkb library capabilities. The functions that do not communicate 413e9fcaa8aSmrgwith the server return either a pointer to a structure, a Bool, or a Status. 414e9fcaa8aSmrgThese functions check that the application has queried the Xkb library version 4150f8248bfSmrgand return the values shown in <link linkend="table1.1">Table 1.1</link> 4160f8248bfSmrgif it has not. 417e9fcaa8aSmrg</para> 418e9fcaa8aSmrg</sect2> 419e9fcaa8aSmrg</sect1> 420e9fcaa8aSmrg</chapter> 421