---
name: "XkbGetDeviceInfo"
section: "3"
platform: "linux"
package: "libx11"
version: "1.8.14-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/XkbGetDeviceInfo"
---

# XkbGetDeviceInfo(3)

Determine whether the X server allows Xkb access to particular capabilities of input devices other than the core X keyboard, or to determine the status of indicator maps, indicator names or button actions on a non-KeyClass extension device

## NAME

XkbGetDeviceInfo - Determine whether the X server allows Xkb access to particular capabilities of input devices other than the core X keyboard, or to determine the status of indicator maps, indicator names or button actions on a non-KeyClass extension device

## SYNOPSIS

**XkbDeviceInfoPtr XkbGetDeviceInfo** **(Display \****dpy***,** **unsigned int** *which***,** **unsigned int** *device\_spec***,** **unsigned int** *ind\_class***,** **unsigned int** *ind\_id***);**

## ARGUMENTS

- *dpy*

  connection to X server

- *which*

  mask indicating information to return

- *device\_spec*

  device ID, or XkbUseCoreKbd

- *ind\_class*

  feedback class for indicator requests

- *ind\_id*

  feedback ID for indicator requests

## DESCRIPTION

To determine whether the X server allows Xkb access to particular capabilities of input devices other than the core X keyboard, or to determine the status of indicator maps, indicator names or button actions on a non-KeyClass extension device, use *XkbGetDeviceInfo.*

*XkbGetDeviceInfo* returns information about the input device specified by *device\_spec.* Unlike the *device\_spec* parameter of most Xkb functions, *device\_spec* does not need to be a keyboard device. It must, however, indicate either the core keyboard or a valid X Input Extension device.

The *which* parameter is a mask specifying optional information to be returned. It is an inclusive OR of one or more of the values from Table 1 and causes the returned XkbDeviceInfoRec to contain values for the corresponding fields specified in the table.

```
                         Table 1 XkbDeviceInfoRec Mask Bits
____________________________________________________________________________________
Name                         XkbDeviceInfoRec Value     Capability If Set
                             Fields Effected
____________________________________________________________________________________
XkbXI_KeyboardsMask                           (1L <<0) Clients can use all
                                                       Xkb requests and events
                                                       with KeyClass devices
                                                       supported by the input
                                                       device extension.
XkbXI_ButtonActionsMask       num_btns        (1L <<1) Clients can assign key
                              btn_acts                 actions to buttons
                                                       non-KeyClass input
                                                       extension devices.
XkbXI_IndicatorNamesMask      leds->names     (1L <<2) Clients can assign
                                                       names to indicators on
                                                       non-KeyClass input
                                                       extension devices.
XkbXI_IndicatorMapsMask       leds->maps      (1L <<3) Clients can assign
                                                       indicator maps to
                                                       indicators on
                                                       non-KeyClass input
                                                       extension devices.
XkbXI_IndicatorStateMask      leds->state     (1L <<4) Clients can request
                                                       the status of indicators
                                                       on non-KeyClass input
                                                       extension devices.
XkbXI_IndicatorsMask          sz_leds         (0x1c)   XkbXI_IndicatorNamesMask |
                              num_leds                 XkbXI_IndicatorMapsMask |
                              leds->*                  XkbXI_IndicatorStateMask
XkbXI_UnsupportedFeaturesMask unsupported     (1L <<15)
XkbXI_AllDeviceFeaturesMask   Those selected  (0x1e)   XkbXI_IndicatorsMask |
                              by Value Column          XkbSI_ButtonActionsMask
                              masks
XkbXI_AllFeaturesMask         Those selected  (0x1f)   XkbSI_AllDeviceFeaturesMask |
                              by Value Column          XkbSI_KeyboardsMask
                              masks
XkbXI_AllDetailsMask          Those selected  (0x801f) XkbXI_AllFeaturesMask |
                              by Value column          XkbXI_UnsupportedFeaturesMask
                              masks
```

The XkbDeviceInfoRec returned by *XkbGetDeviceInfo* always has values for *name* (may be a null string, ""), *type, supported, unsupported, has\_own\_state, dflt\_kbd\_fd,* and *dflt\_kbd\_fb.* Other fields are filled in as specified by *which.*

Upon return, the *supported* field will be set to the inclusive OR of zero or more bits from Table 1; each bit set indicates an optional Xkb extension device feature supported by the server implementation, and a client may modify the associated behavior.

If the XkbButtonActionsMask bit is set in *which,* the XkbDeviceInfoRec returned will have the button actions *(btn\_acts* field) filled in for all buttons.

If *which* includes one of the bits in XkbXI\_IndicatorsMask, the feedback class of the indicators must be specified in *ind\_class,* and the feedback ID of the indicators must be specified in *ind\_id.* If the request does not include any of the bits in XkbXI\_IndicatorsMask, the *ind\_class* and *ind\_id* parameters are ignored. The class and ID can be obtained via the input device extension *XListInputDevices* request.

If any of the XkbXI\_IndicatorsMask bits are set in *which,* the XkbDeviceInfoRec returned will have filled in the portions of the *leds* structure corresponding to the indicator feedback identified by *ind\_class* and *ind\_id.* The *leds* vector of the XkbDeviceInfoRec is allocated if necessary and *sz\_leds* and *num\_leds* filled in. The *led\_class, led\_id* and *phys\_indicators* fields of the *leds* entry corresponding to *ind\_class* and *ind\_id* are always filled in. If *which* contains XkbXI\_IndicatorNamesMask, the *names\_present* and *names* fields of the *leds* structure corresponding to *ind\_class* and *ind\_id* are returned. If *which* contains XkbXI\_IndicatorStateMask, the corresponding *state* field is updated. If *which* contains XkbXI\_IndicatorMapsMask, the *maps\_present* and *maps* fields are updated.

Xkb provides convenience functions to request subsets of the information available via *XkbGetDeviceInfo.* These convenience functions mirror some of the mask bits. The functions all take an XkbDeviceInfoPtr as an input argument and operate on the X Input Extension device specified by the *device\_spec* field of the structure. Only the parts of the structure indicated in the function description are updated. The XkbDeviceInfoRec structure used in the function call can be obtained by calling *XkbGetDeviceInfo* or can be allocated by calling *XkbAllocDeviceInfo.*

## STRUCTURES

Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure:

```
typedef struct {
    char *               name;          /* name for device */
    Atom                 type;          /* name for class of devices */
    unsigned short       device_spec;   /* device of interest */
    Bool                 has_own_state; /* True=>this device has its own state */
    unsigned short       supported;     /* bits indicating supported capabilities */
    unsigned short       unsupported;   /* bits indicating unsupported capabilities */
    unsigned short       num_btns;      /* number of entries in btn_acts */
    XkbAction *          btn_acts;      /* button actions */
    unsigned short       sz_leds;       /* total number of entries in LEDs vector */
    unsigned short       num_leds;      /* number of valid entries in LEDs vector */
    unsigned short       dflt_kbd_fb;   /* input extension ID of default (core kbd) indicator */
    unsigned short       dflt_led_fb;   /* input extension ID of default indicator feedback */
    XkbDeviceLedInfoPtr  leds;          /* LED descriptions */
} XkbDeviceInfoRec, *XkbDeviceInfoPtr;
```

## SEE ALSO

[**XkbAllocDeviceInfo**(3)](/XkbAllocDeviceInfo/3.md), [**XListInputDevices**(3)](/XListInputDevices/3.md)
