---
name: "xxkb"
section: "1"
platform: "linux"
package: "xxkb"
version: "1.11.1-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/xxkb"
---

# xxkb(1)

switches and indicates a current keyboard layout.

## NAME

xxkb - switches and indicates a current keyboard layout.

## SYNOPSIS

**xxkb**

## DESCRIPTION

The **xxkb** program shows the current keyboard layout (an XKB group) and allows to switch it with a mouse click. It has some additional features. The **xxkb** remembers the layout for each application window and changes the keyboard state accordingly when the window gets a focus. The **xxkb** can place an additional button on a window title bar and that button is a switcher and an indicator for that separate window. If the keyboard map has more than two layouts the **xxkb** can simplify a switching using a **two\_state** mode. In this mode the **xxkb** allows to choose two layouts, one as a base layout and another one as an alternative layout and then switch the keyboard state between them only. Also the **xxkb** supports applications lists which allow to tune its behavior for some separate applications.\
   The **xxkb** works with any window manager.

## USAGE

Working as an indicator the **xxkb** shows a current XKB layout using one of four pixmaps and changes the pixmap when you change a layout with the keyboard (using the key or the key combination specified in the config file as an XKB group switcher) or using any other application which able to change the XKB group. Also the **xxkb** shows the similar pixmaps on each application window title bar which are indicators for separate windows. Since the global indicator and the per window indicators duplicates each other you can hide the global indicator or all per window indicators using configure options.\
   Also you can use the **xxkb** as a layout switcher using a mouse button click on the main **xxkb** window or one of the per window indicators. In last case you switch the layout for the chosen application.

- **MouseButton1**

  The first button acts as a layout switcher. If the **two\_state** mode is active the button click switches the current layout between two selected layouts (XKB groups). Otherwise it selects all possible layouts in cycle.

- **MouseButton3**

  When the **two\_state** mode is switched on the third button allows to choose an alternative layout. It selects all possible layouts in cycle and the layout you stop on becomes the alternative layout. Without the **two\_state** mode this button action is the same as the first button action.

- **MouseButton2**

  The second (middle) button action depends on the place where you click. The click on the main indicator terminates the **xxkb**. But the click on one of the per window indicators simply removes the indicator from the title bar and excludes that application from a set of managed applications. Also the second button allows you to add an application into one of three lists of the applications which should be ignored (see the **Applications lists options** below). Clicking on the per window indicator when the **Control** key is pressed you add this application to the **wm\_class\_class** list. If the **Shift** key is pressed the button click adds the application to the **wm\_name** list. If both keys are pressed the click adds the application to the **wm\_class\_name** list. In all cases the updated lists will be saved in a per user config file *~/.xxkbrc*.

## CONFIGURE OPTIONS

The **xxkb** reads all configure options from two files *app-defaults/XXkb* and *~/.xxkbrc*.

## Common options

- **XXkb.xpm.path**

  The directory where the **xxkb** searches pixmap files.

## Main window options

- **XXkb.mainwindow.enable**

  switch on the **xxkb** main window (yes by default). If a *per window* *button* mode switched on some users prefer to hide the main window of the **xxkb**.

- **XXkb.mainwindow.appicon**

  run **xxkb** as an animated icon. It is useful for window managers which allow 'to dock' applications.

- **XXkb.mainwindow.in\_tray**

  allow to dock **xxkb** into a system tray. A value is either true or false.

- **XXkb.mainwindow.geometry**

  the geometry ( WIDTHxHEIGHT{+-}XOFF{+-}YOFF ) of the main window. Please read the **GEOMETRY SPECIFICATIONS** section of [X(7)](/X/7.md) for details.

- **XXkb.mainwindow.border.color**

  color to be used when drawing window border.

- **XXkb.mainwindow.border.width**

  border width in pixels.

- **XXkb.mainwindow.xpm.N**

  pixmap file names for each indicated group N. If your symbols map has less than four groups the unused group icons can be omitted. If the file name begins from '/' it means full path for the file. Otherwise it means the relative path beginning from the **XXkb.xpm.path** value.

- **XXkb.mainwindow.label.enable**

  enable labels to be printed instead of images. Group descriptions will be used if not overwritten by **XXkb.mainwindow.label.text.N** (where N is 1..4, group number) options.

- **XXkb.mainwindow.label.text.N**

  label for the specified group N.

- **XXkb.mainwindow.label.background**

  - **XXkb.mainwindow.label.foreground**

  colors used to draw background and label text respectively.

- **XXkb.mainwindow.label.font**

  font to be used when drawing labels.

## Operation mode options

Since the **xxkb** can keep the keyboard state for each application and restore the state when the focus is changed there are group of options which controls how the **xxkb** finds the application windows.

- **XXkb.controls.add\_when\_start**

  If this mode is switched on (default) the **xxkb** at start time tries to find all application already run.

- **XXkb.controls.add\_when\_create**

  In this mode the **xxkb** gets a new application window at time when the application creates it. It is the base mode but I can't guaranty it works with all window managers.

- **XXkb.controls.add\_when\_change**

  In this mode the **xxkb** doesn't catch the windows at their creation but adds windows to the managed windows list if the keyboard state changes when the window is focused. It's an additional mode (not recommended) and may be useful only if the **add\_when\_create** mode for some reason doesn't work.

- **XXkb.controls.focusout**

  It makes the **xxkb** reset the keyboard group when the focus leaves the window. The mode makes sense with the **add\_when\_change** mode only.

- **XXkb.controls.button\_delete**

  This mode (switched on by default) allows user to remove the per window button using a mouse middle button click. Although the **xxkb** tries to ignore the windows where the keyboard layout switching doesn't make sense, such windows can still appear. Or there are windows where an user for some reason doesn't want to have the button.

- **XXkb.controls.button\_delete\_and\_forget**

  This mode in addition to previous one makes **xxkb** to forget the window which button is deleted.  It means the **xxkb**will not remember the keyboard state changes in this window and restore this state when the window will be focused.

- **XXkb.controls.two\_state**

  Switching between two chosen keyboard layouts only. If the XKB symbols map has more than two groups and not all of them are needed for each application the **xxkb** allows to skip unneeded layouts at the layout switching. You can select one group as a base group and another one as an alternative group and then switch between these two groups only. The base group is common for all applications (usually it contains ASCII) but the alternative group can be chosen for each application window separately. In this mode a mouse right button allows to select the alternative group and a mouse left button as well as the key which configured as the layout switcher change the current state between two selected layouts only.\
     This mode uses two additional config options:

- **XXkb.group.base**

  the base group (integer 1..4).

- **XXkb.group.alt**

  the default alternative group (integer 1..4).

## The application window button options

All these options make sense if the **XXkb.button.enable** switched on.

- **XXkb.button.enable**

  If turned on, the **xxkb** adds an additional button to a title bar of each managed window which is the indicator and the layout switcher for that particular window. These buttons are not usual window manager buttons but windows (with a pixmap) owned by the **xxkb** itself. It means that in some cases a user needs to tune the button size and the position for the button look like a window manager decoration element.

- **XXkb.button.geometry**

  the button geometry ( WIDTHxHEIGHT{+-}XOFF{+-}YOFF ).

- **XXkb.button.xpm.N**

  the pixmap file names (the same as for the **XXkb.mainwindow.xpm.\*** options).

- **XXkb.button.label.enable**

  - **XXkb.button.label.text.N**

  - **XXkb.button.label.background**

  - **XXkb.button.label.foreground**

  - **XXkb.button.label.font**

  - **XXkb.button.border.color**

  - **XXkb.button.border.width**

  see description of their main window counterparts.

## Bell options

- **XXkb.bell.enable**

  enables the keyboard bell when the layout changes.

- **XXkb.bell.percent**

  an argument value for the XBell call.

## Applications lists options

The **xxkb** allows to specify lists of applications that requires some special actions. The applications can be specified using their **WM\_CLASS** or **WM\_NAME** properties.\
   A common form of such option is

**XXkb.app\_list.***property***.***action***:** *an applications list*

  The *action* here can be one of **ignore**, **start\_alt** or **alt\_group***n*. The **ignore** action means that the **xxkb** must ignore the windows of those applications and doesn't add them to the managed windows set. The **start\_alt** action means that the **xxkb** must set the keyboard state to the alternative layout when the application starts. And the **alt\_group1,** **alt\_group2, alt\_group3** or **alt\_group4** actions allow to specify the alternative layout for some applications if this layout should be different from the common alternative layout specified in the **XXkb.group.alt** option.\
   The *property* can be one of **wm\_class\_class, wm\_class\_name** or **wm\_name**. The **xxkb** can identify an application using its window properties **WM\_CLASS** or **WM\_NAME**. The **WM\_CLASS** property actually consists of two parts - a **res\_class** and a **res\_name**. Thus the *property* field specifies what property or part of property should be considered for the application identification.\
   By default all these lists are empty. A not empty list is a sequence of words separated by space/tab. The **xxkb** accepts an asterisk as a part of word. Long lists can be continued to the next line using a backslash as the last char in the line.\
   For example:\
   XXkb.app\_list.wm\_name.ignore: Fvwm\* \*clock \\\
\
                                 Xman

- **XXkb.ignore.reverse**

  This option changes a meaning of the **Xxkb.\*.ignore**  list. If the option switched on the **ignore** list becomes the list of windows which should be managed but all other should be ignored.

## AUTHOR

Ivan Pascal
