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

# XkbChangeMap(3)

Update only partial components of a keyboard description, modify the appropriate fields in the server and map components of a local copy of the keyboard description

## NAME

XkbChangeMap - Update only partial components of a keyboard description, modify the appropriate fields in the server and map components of a local copy of the keyboard description

## SYNOPSIS

**Bool XkbChangeMap** **(Display \****dpy***,** **XkbDescPtr** *xkb***,** **XkbMapChangesPtr** *changes***);**

## ARGUMENTS

- *dpy*

  connection to X server

- *xkb*

  description from which new values are taken

- *changes*

  identifies component parts to update

## DESCRIPTION

To update only partial components of a keyboard description, modify the appropriate fields in the server and map components of a local copy of the keyboard description, then call *XkbChangeMap* with an XkbMapChangesRec structure indicating which components have changed.

*XkbChangeMap* copies any components specified by the *changes* structure from the keyboard description, *xkb,* to the X server specified by *dpy.*

If any components specified by *changes* are not present in the *xkb* parameter, *XkbChangeMap* returns False. Otherwise, it sends a request to the server and returns True.

*XkbChangeMap* can generate BadAlloc, BadLength, and BadValue protocol errors.

## RETURN VALUES

- True

  The XkbChangeMap function returns True if the components specified by *changes* are present in the *xkb* parameter.

- False

  The XkbChangeMap function returns False if the components specified by *changes* are not present in the *xkb* parameter.

## STRUCTURES

Use the XkbMapChangesRec structure to identify and track partial modifications to the mapping components and to reduce the amount of traffic between the server and clients.

```
typedef struct _XkbMapChanges {
    unsigned short   changed;            /* identifies valid components in structure */
    KeyCode          min_key_code;       /* lowest numbered keycode for device */
    KeyCode          max_key_code;       /* highest numbered keycode for device */
    unsigned char    first_type;         /* index of first key type modified */
    unsigned char    num_types;          /* # types modified */
    KeyCode          first_key_sym;      /* first key whose key_sym_map changed */
    unsigned char    num_key_syms;       /* # key_sym_map entries changed */
    KeyCode          first_key_act;      /* first key whose key_acts entry changed */
    unsigned char    num_key_acts;       /* # key_acts entries changed */
    KeyCode          first_key_behavior; /* first key whose behaviors changed */
    unsigned char    num_key_behaviors;  /* # behaviors entries changed */
    KeyCode          first_key_explicit; /* first key whose explicit entry changed */
    unsigned char    num_key_explicit;   /* # explicit entries changed */
    KeyCode          first_modmap_key;   /* first key whose modmap entry changed */
    unsigned char    num_modmap_keys;    /* # modmap entries changed */
    KeyCode          first_vmodmap_key;  /* first key whose vmodmap changed */
    unsigned char    num_vmodmap_keys;   /* # vmodmap entries changed */
    unsigned char    pad1;               /* reserved */
    unsigned short   vmods;              /* mask indicating which vmods changed */
} XkbMapChangesRec,*XkbMapChangesPtr;
```

## DIAGNOSTICS

- **BadAlloc**

  Unable to allocate storage

- **BadLength**

  The length of a request is shorter or longer than that required to minimally contain the arguments

- **BadValue**

  An argument is out of range
