xen-vtpm

title: xen-vtpm(7)

text:
# xen-vtpm(7)

## NAME
xen-vtpm - Xen virtual Trusted Platform Module (vTPM) subsystem

## RUBRIC
Copyright (c) 2010-2012 United States Government, as represented by the Secretary of Defense. All rights reserved. November 12 2012 Authors: Matthew Fioravante (JHUAPL), Daniel De Graaf (NSA)

This document describes the virtual Trusted Platform Module (vTPM) subsystem for Xen. The reader is assumed to have familiarity with building and installing Xen, Linux, and a basic understanding of the TPM and vTPM concepts.

## INTRODUCTION
The goal of this work is to provide a TPM functionality to a virtual guest operating system (a DomU). This allows programs to interact with a TPM in a virtual system the same way they interact with a TPM on the physical system. Each guest gets its own unique, emulated, software TPM. However, each of the vTPM's secrets (Keys, NVRAM, etc) are managed by a vTPM Manager domain, which seals the secrets to the Physical TPM. If the process of creating each of these domains (manager, vTPM, and guest) is trusted, the vTPM subsystem extends the chain of trust rooted in the hardware TPM to virtual machines in Xen. Each major component of vTPM is implemented as a separate domain, providing secure separation guaranteed by the hypervisor. The vTPM domains are implemented in mini-os to reduce memory and processor overhead.

This mini-os vTPM subsystem was built on top of the previous vTPM work done by IBM and Intel corporation.

## DESIGN OVERVIEW
The architecture of vTPM is described below:

```
    +------------------+
    |    Linux DomU    | ...
    |       |  ^       |
    |       v  |       |
    |   xen-tpmfront   |
    +------------------+
            |  ^
            v  |
    +------------------+
    | mini-os/tpmback  |
    |       |  ^       |
    |       v  |       |
    |  vtpm-stubdom    | ...
    |       |  ^       |
    |       v  |       |
    | mini-os/tpmfront |
    +------------------+
            |  ^
            v  |
    +------------------+
    | mini-os/tpmback  |
    |       |  ^       |
    |       v  |       |
    | vtpmmgr-stubdom  |
    |       |  ^       |
    |       v  |       |
    | mini-os/tpm_tis  |
    +------------------+
            |  ^
            v  |
    +------------------+
    |   Hardware TPM   |
    +------------------+
```

Linux DomU

The Linux based guest that wants to use a vTPM. There many be more than one of these.

xen-tpmfront.ko

Linux kernel virtual TPM frontend driver. This driver provides vTPM access to a para-virtualized Linux based DomU.

mini-os/tpmback

Mini-os TPM backend driver. The Linux frontend driver connects to this backend driver to facilitate communications between the Linux DomU and its vTPM. This driver is also used by vtpmmgr-stubdom to communicate with vtpm-stubdom.

vtpm-stubdom

A mini-os stub domain that implements a vTPM. There is a one to one mapping between running vtpm-stubdom instances and logical vtpms on the system. The vTPM Platform Configuration Registers (PCRs) are all initialized to zero.

mini-os/tpmfront

Mini-os TPM frontend driver. The vTPM mini-os domain vtpm-stubdom uses this driver to communicate with vtpmmgr-stubdom. This driver could also be used separately to implement a mini-os domain that wishes to use a vTPM of its own.

vtpmmgr-stubdom

A mini-os domain that implements the vTPM manager. There is only one vTPM manager and it should be running during the entire lifetime of the machine. This domain regulates access to the physical TPM on the system and secures the persistent state of each vTPM.

mini-os/tpm_tis

Mini-os TPM version 1.2 TPM Interface Specification (TIS) driver. This driver used by vtpmmgr-stubdom to talk directly to the hardware TPM. Communication is facilitated by mapping hardware memory pages into vtpmmgr-stubdom.

Hardware TPM

The physical TPM that is soldered onto the motherboard.

## INSTALLATION

### Prerequisites:
You must have an x86 machine with a TPM on the motherboard. The only extra software requirement for compiling vTPM is cmake. You must use libxl to manage domains with vTPMs; 'xm' is deprecated and does not support vTPMs.

### Compiling the Xen tree:
Compile and install the Xen tree as usual; be sure that the vTPM domains are enabled when you run configure.

### Compiling the LINUX dom0 kernel:
Because the TPM manager uses direct access to the physical TPM, it may interfere with access to the TPM by dom0. The simplest solution for this is to prevent dom0 from accessing the physical TPM by compiling the kernel without a driver or blacklisting the module. If dom0 needs a TPM but does not need to use it during the boot process (i.e. it is not using IMA), a virtual TPM can be attached to dom0 after the system is booted.

Access to the physical TPM may be required in order to manage the NVRAM or to perform other advanced operations where the vTPM is insufficient. In order to prevent interference, the TPM Manager and dom0 should use different values for the TPM's locality; since Linux always uses locality 0, using locality 2 for the TPM Manager is recommended. If both Linux and the TPM Manager attempt to access the TPM at the same time, the TPM device will return a busy status; some applications will consider this a fatal error instead of retrying the command at a later time. If a vTPM gets an error when loading its key, it will currently generate a fresh vTPM image (with a new EK, SRK, and blank NVRAM).

### Compiling the LINUX domU kernel:
The domU kernel used by domains with vtpms must include the xen-tpmfront.ko driver. It can be built directly into the kernel or as a module; however, some features such as IMA require the TPM to be built in to the kernel.

```
    CONFIG_TCG_TPM=y
    CONFIG_TCG_XEN=y
```

## VTPM MANAGER SETUP

### Manager disk image setup:
The vTPM Manager requires a disk image to store its encrypted data. The image does not require a filesystem and can live anywhere on the host disk. The image is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image but can support more than 20,000 vTPMs.

### Manager config file:
The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen virtual machine and requires a config file. The manager requires a disk image for storage and permission to access the hardware memory pages for the TPM. The disk must be presented as "hda", and the TPM memory pages are passed using the iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per locality) that start at physical address 0xfed40000. By default, the TPM manager uses locality 0 (so only the page at 0xfed40 is needed); this can be changed on the domain's command line. For full functionality in deep quotes, using locality 2 is required to manipulate PCR 20-22.

### Starting and stopping the manager:
The vTPM manager should be started at boot; you may wish to create an init script to do this. If a domain builder is used, the TPM Manager should be started by the domain builder to minimize the trusted computing base for the vTPM manager's secrets.

Once initialization is complete you should see the following:

```
    INFO[VTPM]: Waiting for commands from vTPM's:
```

The TPM Manager does not respond to shutdown requests; use the destroy command to shut it down.

## VTPM AND LINUX PVM SETUP

### vTPM disk image setup:
The vTPM requires a disk image to store its persistent data (RSA keys, NVRAM, etc). The image does not require a filesystem. The image does not need to be large; 2 Mb should be sufficient.

### vTPM config file:
The vTPM domain requires a configuration file like any other domain. The vTPM requires a disk image for storage and a TPM frontend driver to communicate with the manager. You are required to generate a uuid for this vtpm, which is specified on the "vtpm=" line that describes its connection to the vTPM Manager. The uuidgen application may be used to generate a uuid, or one from the output of the "manage-vtpmmgr.pl vtpm-add" command may be used to create a vTPM belonging to a specific group.

If you wish to clear the vTPM data you can either recreate the disk image or change the uuid.

### Linux Guest config file:
The Linux guest config file needs to be modified to include the Linux tpmfront driver. Add the following line:

```
    vtpm=["backend=domu-vtpm"]
```

Currently only Linux guests are supported (PV or HVM with PV drivers).

While attaching a vTPM after a guest is booted (using xl vtpm-attach) is supported, the attached vTPM will not have a record of the boot of the attached guest. Furthermore, if the vTPM has been freshly created, a malicious guest could then extend any values into PCRs, potentially forging its boot configuration. Attaching a vTPM to a running domain should only be used for trusted domains or when measurements have already been sent to the vTPM from another source.

### Using the vTPM in the guest:
If xen-tpmfront was compiled as a module, it must be loaded it in the guest.

```
    # modprobe xen-tpmfront
```

After the Linux domain boots and the xen-tpmfront driver is loaded, you should see the following on the vtpm console:

```
    Info: VTPM attached to Frontend X/Y
```

You can quickly test the vTPM by using the sysfs interface:

```
    # cat /sys/devices/vtpm-0/pubek
    # cat /sys/devices/vtpm-0/pcrs
```

If you have trousers and tpm_tools installed on the guest, the tpm_version command should return the following:

The version command should return the following:

```
    TPM 1.2 Version Info:
    Chip Version:        1.2.0.7
    Spec Level:          2
    Errata Revision:     1
    TPM Vendor ID:       ETHZ
    TPM Version:         01010000
    Manufacturer Info:   4554485a
```

You should also see the command being sent to the vtpm console as well as the vtpm saving its state. You should see the vtpm key being encrypted and stored on the vtpmmgr console.

You may wish to write a script to start your vtpm and guest together and to destroy the vtpm when the guest shuts down.

## INTEGRATION WITH PV-GRUB
The vTPM currently starts up with all PCRs set to their default values (all zeros for the lower 16). This means that any decisions about the trustworthiness of the created domain must be made based on the environment that created the vTPM and the domU; for example, a system that only constructs images using a trusted configuration and guest kernel be able to provide guarantees about the guests and any measurements done that kernel (such as the IMA TCB log). Guests wishing to use a custom kernel in such a secure environment are often started using the pv-grub bootloader as the kernel, which then can load the untrusted kernel without needing to parse an untrusted filesystem and kernel in dom0. If the pv-grub stub domain succeeds in connecting to a vTPM, it will extend the hash of the kernel that it boots into PCR #4, and will extend the command line and initrd into PCR #5 before booting so that a domU booted in this way can attest to its early boot state.

## MORE INFORMATION
See <xen-vtpmmgr(7)> for more details about how the manager domain works, how to use it, and its command line parameters.

## VTPM DOMAIN OPERATION
The vtpm-stubdom is a mini-OS domain that emulates a TPM for the guest OS to use. It is a small wrapper around the Berlios TPM emulator version 0.7.4. Commands are passed from the linux guest via the mini-os TPM backend driver. vTPM data is encrypted and stored via a disk image provided to the virtual machine. The key used to encrypt the data along with a hash of the vTPM's data is sent to the vTPM manager for secure storage and later retrieval. The vTPM domain communicates with the manager using a mini-os tpm front/back device pair.

## VTPM DOMAIN COMMAND LINE ARGUMENTS
Command line arguments are passed to the domain via the 'extra' parameter in the VM config file. Each parameter is separated by white space. For example:

```
    extra="foo=bar baz"
```

### List of Arguments:
loglevel=<LOG>

Controls the amount of logging printed to the console. The possible values for <LOG> are:

- error

- info (default)

- debug

clear

Start the Berlios emulator in "clear" mode. (default)

save

Start the Berlios emulator in "save" mode.

deactivated

Start the Berlios emulator in "deactivated" mode. See the Berlios TPM emulator documentation for details about the startup mode. For all normal use, always use clear which is the default. You should not need to specify any of these.

maintcmds=<1|0>

Enable to disable the TPM maintenance commands. These commands are used by tpm manufacturers and thus open a security hole. They are disabled by default.

hwinitpcr=<PCRSPEC>

Initialize the virtual Platform Configuration Registers (PCRs) with PCR values from the hardware TPM. Each pcr specified by <PCRSPEC> will be initialized with the value of that same PCR in TPM once at startup. By default all PCRs are zero initialized. Possible values of <PCRSPEC> are:

- all: copy all pcrs

- none: copy no pcrs (default)

- <N>: copy pcr n

- <X-Y>: copy pcrs x to y (inclusive)

These can also be combined by comma separation, for example: "hwinitpcrs=5,12-16" will copy pcrs 5, 12, 13, 14, 15, and 16.

## REFERENCES
Berlios TPM Emulator: <https://github.com/PeterHuewe/tpm-emulator>


xen-vtpmmgr

package: xen

title: xen-vtpmmgr(7)

summary: Xen virtual TPM stubdomain

text:
# xen-vtpmmgr(7)

## NAME
xen-vtpmgr - Xen virtual TPM stubdomain

## Authors
Daniel De Graaf <dgdegra@tycho.nsa.gov>

Quan Xu <quan.xu@intel.com>

This document describes the operation and command line interface of vtpmmgr-stubdom. See xen-vtpm(7) for details on the vTPM subsystem as a whole.

## Overview
The TPM Manager has three primary functions:

1. Securely store the encryption keys for vTPMs

2. Provide a single controlled path of access to the physical TPM

3. Provide evidence (via TPM Quotes) of the current configuration

When combined with a platform that provides a trusted method for creating domains, the TPM Manager provides assurance that the private keys in a vTPM are only available in specific trusted configurations.

The manager accepts commands from the vtpm-stubdom domains via the mini-os TPM backend driver. The vTPM manager communicates directly with hardware TPM using the mini-os tpm_tis driver.

## Boot Configurations and TPM Groups
The TPM Manager's data is secured by using the physical TPM's seal operation, which allows data to be bound to specific PCRs. These PCRs are populated in the physical TPM during the boot process, either by the firmware/BIOS or by a dynamic launch environment such as TBOOT. In order to provide assurance of the system's security, the PCRs used to seal the TPM manager's data must contain measurements for domains used to bootstrap the TPM Manager and vTPMs.

Because these measurements are based on hashes, they will change any time that any component of the system is upgraded. Since it is not possible to construct a list of all possible future good measurements, the job of approving configurations is delegated to a third party, referred to here as the system approval agent (SAA). The SAA is identified by its public (RSA) signature key, which is used to sign lists of valid configurations. A single TPM manager can support multiple SAAs via the use of vTPM groups. Each group is associated with a single SAA; this allows the creation of a multi-tenant environment where tenants may not all choose to trust the same SAA.

Each vTPM is bound to a vTPM group at the time of its creation. Each vTPM group has its own AIK in the physical TPM for quotes of the hardware TPM state; when used with a conforming Privacy CA, this allows each group on the system to form the basis of a distinct identity.

## Initial Provisioning
When the TPM Manager first boots up, it will create a stub vTPM group along with entries for any vTPMs that communicate with it. This stub group must be provisioned with an SAA and a boot configuration in order to survive a reboot.

When a vTPM is connected to the TPM Manager using a UUID that is not recognized, a slot will be created in group 0 for it. In the future, this auto-creation may be restricted to specific UUIDs (such as the all-zero UUID) to enforce the use of the TPM manager as the generator of the UUID. The first vTPM to be connected is given administrative privileges for the TPM Manager, and should be attached to dom0 or a control domain in order to send provisioning commands.

Provisioning a vTPM group for the system requires the public key of the SAA and privacy CA data used to certify the AIK (see the TPM spec for details). Once the group is created, a signed list of boot measurements can be installed. The initial group controls the ability to boot the system as a whole, and cannot be deleted once provisioned.

## Command Line Arguments
Command line arguments are passed to the domain via the 'extra' parameter in the VM config file. Each parameter is separated by white space. For example:

```
    extra="foo=bar baz"
```

Valid arguments:

owner_auth=<AUTHSPEC>

srk_auth=<AUTHSPEC>

Set the owner and SRK authdata for the TPM. If not specified, the default is 160 zero bits (the well-known auth value). Valid values of <AUTHSPEC> are:

well-known

Use the well known auth (default)

hash:<HASH>

Use the given 40-character ASCII hex string

text:<STR>

Use sha1 hash of <STR>.

tpmdriver=<DRIVER>

Choose the driver used for communication with the hardware TPM. Values other than tpm_tis should only be used for testing. The possible values of <DRIVER> are:

tpm_tis

Direct communication with a hardware TPM 1.2. The domain must have access to TPM IO memory. (default)

tpmfront

Use the Xen tpmfront interface to talk to another domain which provides access to the TPM.

The following options only apply to the tpm_tis driver:

tpmiomem=<ADDR>

The base address of the hardware memory pages of the TPM. The default is 0xfed40000, as defined by the TCG's PC Client spec.

tpmirq=<IRQ>

The irq of the hardware TPM if using interrupts. A value of "probe" can be set to probe for the irq. A value of 0 disables interrupts and uses polling (default 0).

tpmlocality=<LOC>

Attempt to use locality <LOC> of the hardware TPM. For full functionality of the TPM Manager, this should be set to "2".

## Platform Security Assumptions
While the TPM Manager has the ability to check the hash of the vTPM requesting a key, there is currently no trusted method to inform the TPM Manager of the hash of each new domain. Because of this, the TPM Manager trusts the UUID key in Xenstore to identify a vTPM in a trusted manner. The XSM policy may be used to strengthen this assumption if the creation of vTPM-labeled domains is more constrained (for example, only permitted to a domain builder service): the only grants mapped by the TPM Manager should belong to vTPM domains, so restricting the ability to map other domain's granted pages will prevent other domains from directly requesting keys from the TPM Manager. The TPM Manager uses the hash of the XSM label of the attached vTPM as the kernel hash, so vTPMs with distinct labels may be further partitioned using vTPM groups.

A domain with direct access to the hardware TPM will be able to decrypt the TPM Manager's disk image if the haredware TPM's PCR values are in a permitted configuration. To protect the TPM Manager's data, the list of permitted configurations should be chosen to include PCRs that measure the hypervisor, domain 0, the TPM Manager, and other critical configuration such as the XSM policy. If the TPM Manager is configured to use locality 2 as recommended, it is safe to permit the hardware domain to access locality 0 (the default in Linux), although concurrent use of the TPM should be avoided as it can result in unexpected busy errors from the TPM driver. The ability to access locality 2 of the TPM should be enforced using IO memory labeling in the XSM policy; the physical address 0xFED42xxx is always locality 2 for TPMs using the TIS driver.

## Appendix: unsecured migration process for vtpmmgr domain upgrade
There is no direct upgrade supported from previous versions of the vtpmmgr domain due to changes in the on-disk format and the method used to seal data. If a vTPM domain supports migration, this feature should be used to migrate the vTPM's data; however, the vTPM packaged with Xen does not yet support migration.

If adding migration support to the vTPM is not desired, a simpler migration domain usable only for local migration can be constructed. The migration process would look like the following:

1. Start the old vtpmmgr

2. Start the vTPM migration domain

3. Attach the vTPM migration domain's vtpm/0 device to the old vtpmmgr

4. Migration domain executes vtpmmgr_LoadHashKey on vtpm/0

5. Start the new vtpmmgr, possibly shutting down the old one first

6. Attach the vTPM migration domain's vtpm/1 device to the new vtpmmgr

7. Migration domain executes vtpmmgr_SaveHashKey on vtpm/1

This requires the migration domain to be added to the list of valid vTPM kernel hashes. In the current version of the vtpmmgr domain, this is the hash of the XSM label, not the kernel.

## Appendix B: vtpmmgr on TPM 2.0

### Manager disk image setup:
The vTPM Manager requires a disk image to store its encrypted data. The image does not require a filesystem and can live anywhere on the host disk. The image is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image but can support more than 20,000 vTPMs.

```
    dd if=/dev/zero of=/home/vtpm2/vmgr bs=16M count=1
```

### Manager config file:
The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen virtual machine and requires a config file. The manager requires a disk image for storage and permission to access the hardware memory pages for the TPM. The disk must be presented as "hda", and the TPM memory pages are passed using the iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per locality) that start at physical address 0xfed40000. By default, the TPM manager uses locality 0 (so only the page at 0xfed40 is needed).

Add:

```
     extra="tpm2=1"
```

extra option to launch vtpmmgr-stubdom domain on TPM 2.0, and ignore it on TPM 1.x. for example:

```
    kernel="/usr/lib/xen/boot/vtpmmgr-stubdom.gz"
    memory=128
    disk=["file:/home/vtpm2/vmgr,hda,w"]
    name="vtpmmgr"
    iomem=["fed40,5"]
    extra="tpm2=1"
```

### Key Hierarchy

```
    +------------------+
    |  vTPM's secrets  | ...
    +------------------+
            |  ^
            |  |(Bind / Unbind)
- - - - -  -v  |- - - - - - - - TPM 2.0
    +------------------+
    |        SK        +
    +------------------+
            |  ^
            v  |
    +------------------+
    |       SRK        |
    +------------------+
            |  ^
            v  |
    +------------------+
    | TPM 2.0 Storage  |
    |   Primary Seed   |
    +------------------+
```

Now the secrets for the vTPMs are only being bound to the presence of thephysical TPM 2.0. Since using PCRs to seal the data can be an important security feature that users of the vtpmmgr rely on. I will replace TPM2_Bind/TPM2_Unbind with TPM2_Seal/TPM2_Unseal to provide as much security as it did for TPM 1.2 in later series of patch.

### Design Overview
The architecture of vTPM subsystem on TPM 2.0 is described below:

```
    +------------------+
    |    Linux DomU    | ...
    |       |  ^       |
    |       v  |       |
    |   xen-tpmfront   |
    +------------------+
            |  ^
            v  |
    +------------------+
    | mini-os/tpmback  |
    |       |  ^       |
    |       v  |       |
    |  vtpm-stubdom    | ...
    |       |  ^       |
    |       v  |       |
    | mini-os/tpmfront |
    +------------------+
            |  ^
            v  |
    +------------------+
    | mini-os/tpmback  |
    |       |  ^       |
    |       v  |       |
    | vtpmmgr-stubdom  |
    |       |  ^       |
    |       v  |       |
    | mini-os/tpm2_tis |
    +------------------+
            |  ^
            v  |
    +------------------+
    | Hardware TPM 2.0 |
    +------------------+
```

Linux DomU

The Linux based guest that wants to use a vTPM. There many be more than one of these.

xen-tpmfront.ko

Linux kernel virtual TPM frontend driver. This driver provides vTPM access to a para-virtualized Linux based DomU.

mini-os/tpmback

Mini-os TPM backend driver. The Linux frontend driver connects to this backend driver to facilitate communications between the Linux DomU and its vTPM. This driver is also used by vtpmmgr-stubdom to communicate with vtpm-stubdom.

vtpm-stubdom

A mini-os stub domain that implements a vTPM. There is a one to one mapping between running vtpm-stubdom instances and logical vtpms on the system. The vTPM Platform Configuration Registers (PCRs) are all initialized to zero.

mini-os/tpmfront

Mini-os TPM frontend driver. The vTPM mini-os domain vtpm-stubdom uses this driver to communicate with vtpmmgr-stubdom. This driver could also be used separately to implement a mini-os domain that wishes to use a vTPM of its own.

vtpmmgr-stubdom

A mini-os domain that implements the vTPM manager. There is only one vTPM manager and it should be running during the entire lifetime of the machine. This domain regulates access to the physical TPM on the system and secures the persistent state of each vTPM.

mini-os/tpm2_tis

Mini-os TPM version 2.0 TPM Interface Specification (TIS) driver. This driver used by vtpmmgr-stubdom to talk directly to the hardware TPM 2.0. Communication is facilitated by mapping hardware memory pages into vtpmmgr-stubdom.

Hardware TPM 2.0

The physical TPM 2.0 that is soldered onto the motherboard.

Noted:

functionality for a virtual guest operating system (a DomU) is still TPM 1.2.


xl-numa-placement

title: xl-numa-placement(7)

text:
# xl-numa-placement(7)

## NAME
xl-numa-placement - Guest Automatic NUMA Placement in libxl and xl

## DESCRIPTION

### Rationale
NUMA (which stands for Non-Uniform Memory Access) means that the memory accessing times of a program running on a CPU depends on the relative distance between that CPU and that memory. In fact, most of the NUMA systems are built in such a way that each processor has its local memory, on which it can operate very fast. On the other hand, getting and storing data from and on remote memory (that is, memory local to some other processor) is quite more complex and slow. On these machines, a NUMA node is usually defined as a set of processor cores (typically a physical CPU package) and the memory directly attached to the set of cores.

NUMA awareness becomes very important as soon as many domains start running memory-intensive workloads on a shared host. In fact, the cost of accessing non node-local memory locations is very high, and the performance degradation is likely to be noticeable.

For more information, have a look at the Xen NUMA Introduction <https://wiki.xenproject.org/wiki/Xen_on_NUMA_Machines> page on the Wiki.

### Xen and NUMA machines: the concept of node-affinity
The Xen hypervisor deals with NUMA machines throughout the concept of node-affinity. The node-affinity of a domain is the set of NUMA nodes of the host where the memory for the domain is being allocated (mostly, at domain creation time). This is, at least in principle, different and unrelated with the vCPU (hard and soft, see below) scheduling affinity, which instead is the set of pCPUs where the vCPU is allowed (or prefers) to run.

Of course, despite the fact that they belong to and affect different subsystems, the domain node-affinity and the vCPUs affinity are not completely independent. In fact, if the domain node-affinity is not explicitly specified by the user, via the proper libxl calls or xl config item, it will be computed basing on the vCPUs' scheduling affinity.

Notice that, even if the node affinity of a domain may change on-line, it is very important to "place" the domain correctly when it is fist created, as the most of its memory is allocated at that time and can not (for now) be moved easily.

### Placing via pinning and cpupools
The simplest way of placing a domain on a NUMA node is setting the hard scheduling affinity of the domain's vCPUs to the pCPUs of the node. This also goes under the name of vCPU pinning, and can be done through the "cpus=" option in the config file (more about this below). Another option is to pool together the pCPUs spanning the node and put the domain in such a cpupool with the "pool=" config option (as documented in our Wiki <https://wiki.xenproject.org/wiki/Cpupools_Howto>).

In both the above cases, the domain will not be able to execute outside the specified set of pCPUs for any reasons, even if all those pCPUs are busy doing something else while there are others, idle, pCPUs.

So, when doing this, local memory accesses are 100% guaranteed, but that may come at he cost of some load imbalances.

### NUMA aware scheduling
If using the credit1 scheduler, and starting from Xen 4.3, the scheduler itself always tries to run the domain's vCPUs on one of the nodes in its node-affinity. Only if that turns out to be impossible, it will just pick any free pCPU. Locality of access is less guaranteed than in the pinning case, but that comes along with better chances to exploit all the host resources (e.g., the pCPUs).

Starting from Xen 4.5, credit1 supports two forms of affinity: hard and soft, both on a per-vCPU basis. This means each vCPU can have its own soft affinity, stating where such vCPU prefers to execute on. This is less strict than what it (also starting from 4.5) is called hard affinity, as the vCPU can potentially run everywhere, it just prefers some pCPUs rather than others. In Xen 4.5, therefore, NUMA-aware scheduling is achieved by matching the soft affinity of the vCPUs of a domain with its node-affinity.

In fact, as it was for 4.3, if all the pCPUs in a vCPU's soft affinity are busy, it is possible for the domain to run outside from there. The idea is that slower execution (due to remote memory accesses) is still better than no execution at all (as it would happen with pinning). For this reason, NUMA aware scheduling has the potential of bringing substantial performances benefits, although this will depend on the workload.

Notice that, for each vCPU, the following three scenarios are possbile:

- a vCPU is pinned to some pCPUs and does not have any soft affinity In this case, the vCPU is always scheduled on one of the pCPUs to which it is pinned, without any specific peference among them.

- a vCPU has its own soft affinity and is not pinned to any particular pCPU. In this case, the vCPU can run on every pCPU. Nevertheless, the scheduler will try to have it running on one of the pCPUs in its soft affinity;

- a vCPU has its own vCPU soft affinity and is also pinned to some pCPUs. In this case, the vCPU is always scheduled on one of the pCPUs onto which it is pinned, with, among them, a preference for the ones that also forms its soft affinity. In case pinning and soft affinity form two disjoint sets of pCPUs, pinning "wins", and the soft affinity is just ignored.

### Guest placement in xl
If using xl for creating and managing guests, it is very easy to ask for both manual or automatic placement of them across the host's NUMA nodes.

Note that xm/xend does a very similar thing, the only differences being the details of the heuristics adopted for automatic placement (see below), and the lack of support (in both xm/xend and the Xen versions where that was the default toolstack) for NUMA aware scheduling.

### Placing the guest manually
Thanks to the "cpus=" option, it is possible to specify where a domain should be created and scheduled on, directly in its config file. This affects NUMA placement and memory accesses as, in this case, the hypervisor constructs the node-affinity of a VM basing right on its vCPU pinning when it is created.

This is very simple and effective, but requires the user/system administrator to explicitly specify the pinning for each and every domain, or Xen won't be able to guarantee the locality for their memory accesses.

That, of course, also mean the vCPUs of the domain will only be able to execute on those same pCPUs.

It is is also possible to have a "cpus_soft=" option in the xl config file, to specify the soft affinity for all the vCPUs of the domain. This affects the NUMA placement in the following way:

- if only "cpus_soft=" is present, the VM's node-affinity will be equal to the nodes to which the pCPUs in the soft affinity mask belong;

- if both "cpus_soft=" and "cpus=" are present, the VM's node-affinity will be equal to the nodes to which the pCPUs present both in hard and soft affinity belong.

### Placing the guest automatically
If neither "cpus=" nor "cpus_soft=" are present in the config file, libxl tries to figure out on its own on which node(s) the domain could fit best. If it finds one (some), the domain's node affinity get set to there, and both memory allocations and NUMA aware scheduling (for the credit scheduler and starting from Xen 4.3) will comply with it. Starting from Xen 4.5, this also means that the mask resulting from this "fitting" procedure will become the soft affinity of all the vCPUs of the domain.

It is worthwhile noting that optimally fitting a set of VMs on the NUMA nodes of an host is an incarnation of the Bin Packing Problem. In fact, the various VMs with different memory sizes are the items to be packed, and the host nodes are the bins. As such problem is known to be NP-hard, we will be using some heuristics.

The first thing to do is find the nodes or the sets of nodes (from now on referred to as 'candidates') that have enough free memory and enough physical CPUs for accommodating the new domain. The idea is to find a spot for the domain with at least as much free memory as it has configured to have, and as much pCPUs as it has vCPUs. After that, the actual decision on which candidate to pick happens accordingly to the following heuristics:

- candidates involving fewer nodes are considered better. In case two (or more) candidates span the same number of nodes,

- candidates with a smaller number of vCPUs runnable on them (due to previous placement and/or plain vCPU pinning) are considered better. In case the same number of vCPUs can run on two (or more) candidates,

- the candidate with with the greatest amount of free memory is considered to be the best one.

Giving preference to candidates with fewer nodes ensures better performance for the guest, as it avoid spreading its memory among different nodes. Favoring candidates with fewer vCPUs already runnable there ensures a good balance of the overall host load. Finally, if more candidates fulfil these criteria, prioritizing the nodes that have the largest amounts of free memory helps keeping the memory fragmentation small, and maximizes the probability of being able to put more domains there.

### Guest placement in libxl
xl achieves automatic NUMA placement because that is what libxl does by default. No API is provided (yet) for modifying the behaviour of the placement algorithm. However, if your program is calling libxl, it is possible to set the "numa_placement" build info key to "false" (it is "true" by default) with something like the below, to prevent any placement from happening:

```
    libxl_defbool_set(&domain_build_info->numa_placement, false);
```

Also, if "numa_placement" is set to "true", the domain's vCPUs must not be pinned (i.e., "domain_build_info->cpumap" must have all its bits set, as it is by default), or domain creation will fail with "ERROR_INVAL".

Starting from Xen 4.3, in case automatic placement happens (and is successful), it will affect the domain's node-affinity and not its vCPU pinning. Namely, the domain's vCPUs will not be pinned to any pCPU on the host, but the memory from the domain will come from the selected node(s) and the NUMA aware scheduling (if the credit scheduler is in use) will try to keep the domain's vCPUs there as much as possible.

Besides than that, looking and/or tweaking the placement algorithm search "Automatic NUMA placement" in libxl_internal.h.

Note this may change in future versions of Xen/libxl.

### Xen < 4.5
The concept of vCPU soft affinity has been introduced for the first time in Xen 4.5. In 4.3, it is the domain's node-affinity that drives the NUMA-aware scheduler. The main difference is soft affinity is per-vCPU, and so each vCPU can have its own mask of pCPUs, while node-affinity is per-domain, that is the equivalent of having all the vCPUs with the same soft affinity.

### Xen < 4.3
As NUMA aware scheduling is a new feature of Xen 4.3, things are a little bit different for earlier version of Xen. If no "cpus=" option is specified and Xen 4.2 is in use, the automatic placement algorithm still runs, but the results is used to pin the vCPUs of the domain to the output node(s). This is consistent with what was happening with xm/xend.

On a version of Xen earlier than 4.2, there is not automatic placement at all in xl or libxl, and hence no node-affinity, vCPU affinity or pinning being introduced/modified.

### Limitations
Analyzing various possible placement solutions is what makes the algorithm flexible and quite effective. However, that also means it won't scale well to systems with arbitrary number of nodes. For this reason, automatic placement is disabled (with a warning) if it is requested on a host with more than 16 NUMA nodes.


wlog

title: wlog(7)

summary: WinPR logging facility

text:
# wlog(7)

## NAME
wLog - WinPR logging facility

## DESCRIPTION
wLog is a configurable and flexible logging system used throughout WinPR and FreeRDP.

The primary concept is to have a hierarchy of loggers that can be be configured independently.

## Appenders
WLog uses different appenders that define where the log output should be written to. If the application doesn't explicitly configure the appenders the below described variable WLOG_APPENDER can be used to choose one appender.

The following kind of appenders are available:

Binary

Write the log data into a binary format file.

Console

The console appender writes to the console. Depending of the operating system the application runs on, the output might be handled differently. For example on android log print would be used.

File

The file appender writes the textual output to a file.

Udp

This appender sends the logging messages to a pre-defined remote host via UDP. If no target is set the default one 127.0.0.1:20000 is used. To receive the log messages one can use netcat. To receive the default target the following command can be used: nc -u 127.0.0.1 -p 20000 -l

Syslog

Use syslog for outputting the debug messages.

Journald

This appender outputs messages to journald.

## Levels
The WLog are complementary, the higher level always includes the lower ones. The level list below is top down. Top the highest level.

TRACE

print everything including packets dumps

DEBUG

debug messages

INFO

general information

WARN

warnings

ERROR

errors

FATAL

fatal problems

OFF

completely disable the wlog output

## Formats
The format a logger prints has the following possible options:

lv

log level

mn

module name

fl

file name

fn

function

ln

line number

pid

process id

tid

thread id

yr

year

mo

month

dw

day of week

hr

hour

mi

minute

se

second

ml

millisecond

A maximum of 16 options can be used per format string.

An example that generally sets the WLOG_PREFIX for xfreerdp would look like: WLOG_PREFIX="pid=%pid:tid=%tid:fn=%fn -" xfreerdp /v:xxx

## ENVIRONMENT
WLOG_APPENDER

The kind of appender, the accepted values are: CONSOLE, FILE, BINARY, SYSLOG, JOURNALD or UDP

WLOG_PREFIX

configure the prefix used for outputting the message (see Format for more details and examples)

WLOG_LEVEL

the level to output messages for

WLOG_FILTER

sets a filter for WLog messages. Only the filtered messages are printed. The format of the filter is a series of <logger name>:<level> separated by comas example: WLOG_FILTER=core.channel:DEBUG,dummy:TRACE will display debug messages for the core.channel logger and trace level for the dummy logger

WLOG_FILEAPPENDER_OUTPUT_FILE_PATH

When using the file appender it may contains the output log file's path

WLOG_FILEAPPENDER_OUTPUT_FILE_NAME

When using the file appender it may contains the output log file's name

WLOG_JOURNALD_ID

When using the systemd journal appender, this variable contains the id used with the journal (by default the executable's name)

WLOG_UDP_TARGET

target to use for the UDP appender in the format host:port

## BUGS
Please report any bugs using the bug reporting form on the FreeRDP web site

## SEE ALSO
Additional information and the latest version is available at the web site: http://www.freerdp.com

## AUTHOR
David Fort <contact@hardening-consulting.com> wrote this manpage from materials written by Bernhard Miklautz <bernhard.miklautz@thincast.com>.


xkeyboard-config

package: xkeyboard-config

title: xkeyboard-config(7)

summary: XKB data description files

text:
# xkeyboard-config(7)

## NAME
xkeyboard-config - XKB data description files

## DESCRIPTION
xkeyboard-config provides the description files for the X Keyboard Extension (XKB) and for libxkbcommon. Typically it is the task of the desktop environment to apply the requested configuration. Users running an X server can also use the setxkbmap(1) tool to apply keyboard configuration at runtime or configure XKB settings in the xorg.conf(5).

## XKB DATA FILES LOAD PATHS
xkeyboard-config provides the XKB data files installed in /usr/share/X11/xkb. User-specific data files may be elsewhere but it depends on the tool whether those files are loaded. For example, the libxkbcommon library will by default load XKB data files from the user's home directory. See the libxkbcommon documentation for details.

## THE CUSTOM LAYOUT
The "custom" layout is a layout that is listed as available to tools reading the data files but is not actually provided by xkeyboard-config. A user may save a layout specification in the /usr/share/X11/xkb/symbols/custom file and that layout will be available to most tools interacting with the xkeyboard-config data files. This is primarily aimed at systems running X where additional lookup paths cannot easily be added.

Because the "custom" layout is merely listed as available but not provided by xkeyboard-config, the layout will not be overwritten on updates.

## MODELS
Model

Description

pc86

Generic 86-key PC

pc101

Generic 101-key PC

pc102

Generic 102-key PC

pc104

Generic 104-key PC

pc104alt

Generic 104-key PC with L-shaped Enter key

pc105

Generic 105-key PC

dell101

Dell 101-key PC

latitude

Dell Latitude laptop

dellm65

Dell Precision M65 laptop

everex

Everex STEPnote

flexpro

Keytronic FlexPro

microsoft

Microsoft Natural

omnikey101

Northgate OmniKey 101

winbook

Winbook Model XP5

pc98

PC-98

a4techKB21

A4Tech KB-21

a4techKBS8

A4Tech KBS-8

a4_rfkb23

A4Tech Wireless Desktop RFKB-23

airkey

Acer AirKey V

azonaRF2300

Azona RF2300 Wireless Internet

scorpius

Advance Scorpius KI

brother

Brother Internet

btc5113rf

BTC 5113RF Multimedia

btc5126t

BTC 5126T

btc6301urf

BTC 6301URF

btc9000

BTC 9000

btc9000a

BTC 9000A

btc9001ah

BTC 9001AH

btc5090

BTC 5090

btc9019u

BTC 9019U

btc9116u

BTC 9116U Mini Wireless Internet and Gaming

cherryblue

Cherry Blue Line CyBo@rd

cherryblueb

Cherry CyMotion Master XPress

cherrybluea

Cherry Blue Line CyBo@rd (alt.)

cherrycyboard

Cherry CyBo@rd USB-Hub

cherrycmexpert

Cherry CyMotion Expert

cherrybunlim

Cherry B.UNLIMITED

chicony

Chicony Internet

chicony0108

Chicony KU-0108

chicony0420

Chicony KU-0420

chicony9885

Chicony KB-9885

compaqeak8

Compaq Easy Access

compaqik7

Compaq Internet (7 keys)

compaqik13

Compaq Internet (13 keys)

compaqik18

Compaq Internet (18 keys)

cymotionlinux

Cherry CyMotion Master Linux

armada

Compaq Armada laptop

presario

Compaq Presario laptop

ipaq

Compaq iPaq

dell

Dell

dellsk8125

Dell SK-8125

dellsk8135

Dell SK-8135

dellusbmm

Dell USB Multimedia

inspiron

Dell Inspiron 6000/8000 laptop

precision_m

Dell Precision M laptop

dexxa

Dexxa Wireless Desktop

diamond

Diamond 9801/9802

dtk2000

DTK2000

ennyah_dkb1008

Ennyah DKB-1008

fscaa1667g

Fujitsu-Siemens Amilo laptop

genius

Genius Comfy KB-16M/Multimedia KWD-910

geniuscomfy

Genius Comfy KB-12e

geniuscomfy2

Genius Comfy KB-21e-Scroll

geniuskb19e

Genius KB-19e NB

geniuskkb2050hs

Genius KKB-2050HS

gyration

Gyration

kinesis

Kinesis

logitech_base

Logitech

logitech_g15

Logitech G15 extra keys via G15daemon

hpi6

Hewlett-Packard Internet

hp250x

Hewlett-Packard NEC SK-2500 Multimedia

hpxe3gc

Hewlett-Packard Omnibook XE3 GC

hpxe3gf

Hewlett-Packard Omnibook XE3 GF

hpxt1000

Hewlett-Packard Omnibook XT1000

hpdv5

Hewlett-Packard Pavilion dv5

hpzt11xx

Hewlett-Packard Pavilion ZT1100

hp500fa

Hewlett-Packard Omnibook 500 FA

hp5xx

Hewlett-Packard Omnibook 500

hpnx9020

Hewlett-Packard nx9020

hp6000

Hewlett-Packard Omnibook 6000/6100

honeywell_euroboard

Honeywell Euroboard

hpmini110

Hewlett-Packard Mini 110 laptop

rapidaccess

IBM Rapid Access

rapidaccess2

IBM Rapid Access II

thinkpad

IBM ThinkPad 560Z/600/600E/A22E

thinkpad60

IBM ThinkPad R60/T60/R61/T61

thinkpadz60

IBM ThinkPad Z60m/Z60t/Z61m/Z61t

ibm_spacesaver

IBM Space Saver

logiaccess

Logitech Access

logiclx300

Logitech Cordless Desktop LX-300

logii350

Logitech Internet 350

logimel

Logitech Internet 350

logicd

Logitech Cordless Desktop

logicd_it

Logitech Cordless Desktop iTouch

logicd_nav

Logitech Cordless Desktop Navigator

logicd_opt

Logitech Cordless Desktop Optical

logicda

Logitech Cordless Desktop (alt.)

logicdpa2

Logitech Cordless Desktop Pro (2nd alt.)

logicfn

Logitech Cordless Freedom/Desktop Navigator

logicdn

Logitech Cordless Desktop Navigator

logiitc

Logitech iTouch Cordless Y-RB6

logiik

Logitech Internet

itouch

Logitech iTouch

logicink

Logitech Internet Navigator

logiex110

Logitech Cordless Desktop EX110

logiinkse

Logitech iTouch Internet Navigator SE

logiinkseusb

Logitech iTouch Internet Navigator SE USB

logiultrax

Logitech Ultra-X

logiultraxc

Logitech Ultra-X Cordless Media Desktop

logidinovo

Logitech diNovo

logidinovoedge

Logitech diNovo Edge

mx1998

Memorex MX1998

mx2500

Memorex MX2500 EZ-Access

mx2750

Memorex MX2750

microsoft4000

Microsoft Natural Ergonomic 4000

microsoft7000

Microsoft Natural Wireless Ergonomic 7000

microsoftinet

Microsoft Internet

microsoftpro

Microsoft Natural Pro/Internet Pro

microsoftprousb

Microsoft Natural Pro USB/Internet Pro

microsoftprooem

Microsoft Natural Pro OEM

vsonku306

ViewSonic KU-306 Internet

microsoftprose

Microsoft Internet Pro (Swedish)

microsoftoffice

Microsoft Office Keyboard

microsoftmult

Microsoft Wireless Multimedia 1.0A

microsoftsurface

Microsoft Surface

microsoftelite

Microsoft Natural Elite

microsoftccurve2k

Microsoft Comfort Curve 2000

oretec

Ortek Multimedia/Internet MCK-800

propeller

Propeller Voyager KTEZ-1000

qtronix

QTronix Scorpius 98N+

samsung4500

Samsung SDM 4500P

samsung4510

Samsung SDM 4510P

sanwaskbkg3

Sanwa Supply SKB-KG3

sk1300

NEC SK-1300

sk2500

NEC SK-2500

sk6200

NEC SK-6200

sk7100

NEC SK-7100

sp_inet

Super Power Multimedia

sven

SVEN Ergonomic 2500

sven303

SVEN Slim 303

symplon

Symplon PaceBook tablet

toshiba_s3000

Toshiba Satellite S3000

trust

Trust Wireless Classic

trustda

Trust Direct Access

trust_slimline

Trust Slimline

tm2020

TypeMatrix EZ-Reach 2020

tm2030PS2

TypeMatrix EZ-Reach 2030 PS2

tm2030USB

TypeMatrix EZ-Reach 2030 USB

tm2030USB-102

TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)

tm2030USB-106

TypeMatrix EZ-Reach 2030 USB (106:JP mode)

yahoo

Yahoo! Internet

macbook78

MacBook/MacBook Pro

macbook79

MacBook/MacBook Pro (intl.)

macintosh

Macintosh

macintosh_old

Macintosh Old

macintosh_hhk

Happy Hacking for Mac

acer_c300

Acer C300

acer_ferrari4k

Acer Ferrari 4000

acer_laptop

Acer laptop

asus_laptop

Asus laptop

apple

Apple

apple_laptop

Apple laptop

applealu_ansi

Apple Aluminium (ANSI)

applealu_iso

Apple Aluminium (ISO)

applealu_jis

Apple Aluminium (JIS)

silvercrest

Silvercrest Multimedia Wireless

emachines

eMachines m6800 laptop

benqx

BenQ X-Touch

benqx730

BenQ X-Touch 730

benqx800

BenQ X-Touch 800

hhk

Happy Hacking

classmate

Classmate PC

olpc

OLPC

sun_type7_usb

Sun Type 7 USB

sun_type7_euro_usb

Sun Type 7 USB (European)

sun_type7_unix_usb

Sun Type 7 USB (Unix)

sun_type7_jp_usb

Sun Type 7 USB (Japanese)/Japanese 106-key

sun_type6_usb

Sun Type 6/7 USB

sun_type6_euro_usb

Sun Type 6/7 USB (European)

sun_type6_unix_usb

Sun Type 6 USB (Unix)

sun_type6_jp_usb

Sun Type 6 USB (Japanese)

sun_type6_jp

Sun Type 6 (Japanese)

targa_v811

Targa Visionary 811

unitekkb1925

Unitek KB-1925

compalfl90

FL90

creativedw7000

Creative Desktop Wireless 7000

teck227

Truly Ergonomic 227

teck229

Truly Ergonomic 229

apex300

SteelSeries Apex 300 (Apex RAW)

chromebook

Chromebook

ppkb

PinePhone Keyboard

## LAYOUTS
Layout(Variant)

Description

us

English (US)

us(chr)

Cherokee

us(haw)

Hawaiian

us(euro)

English (US, euro on 5)

us(intl)

English (US, intl., with dead keys)

us(alt-intl)

English (US, alt. intl.)

us(colemak)

English (Colemak)

us(colemak_dh)

English (Colemak-DH)

us(colemak_dh_iso)

English (Colemak-DH ISO)

us(dvorak)

English (Dvorak)

us(dvorak-intl)

English (Dvorak, intl., with dead keys)

us(dvorak-alt-intl)

English (Dvorak, alt. intl.)

us(dvorak-l)

English (Dvorak, left-handed)

us(dvorak-r)

English (Dvorak, right-handed)

us(dvorak-classic)

English (classic Dvorak)

us(dvp)

English (programmer Dvorak)

us(dvorak-mac)

English (Dvorak, Macintosh)

us(symbolic)

English (US, Symbolic)

us(rus)

Russian (US, phonetic)

us(mac)

English (Macintosh)

us(altgr-intl)

English (intl., with AltGr dead keys)

us(olpc2)

English (the divide/multiply toggle the layout)

us(hbs)

Serbo-Croatian (US)

us(norman)

English (Norman)

us(workman)

English (Workman)

us(workman-intl)

English (Workman, intl., with dead keys)

af

Dari

af(ps)

Pashto

af(uz)

Uzbek (Afghanistan)

af(ps-olpc)

Pashto (Afghanistan, OLPC)

af(fa-olpc)

Dari (Afghanistan, OLPC)

af(uz-olpc)

Uzbek (Afghanistan, OLPC)

ara

Arabic

ara(azerty)

Arabic (AZERTY)

ara(azerty_digits)

Arabic (AZERTY, Eastern Arabic numerals)

ara(digits)

Arabic (Eastern Arabic numerals)

ara(qwerty)

Arabic (QWERTY)

ara(qwerty_digits)

Arabic (QWERTY, Eastern Arabic numerals)

ara(buckwalter)

Arabic (Buckwalter)

ara(olpc)

Arabic (OLPC)

ara(mac)

Arabic (Macintosh)

al

Albanian

al(plisi)

Albanian (Plisi)

al(veqilharxhi)

Albanian (Veqilharxhi)

am

Armenian

am(phonetic)

Armenian (phonetic)

am(phonetic-alt)

Armenian (alt. phonetic)

am(eastern)

Armenian (eastern)

am(western)

Armenian (western)

am(eastern-alt)

Armenian (alt. eastern)

at

German (Austria)

at(nodeadkeys)

German (Austria, no dead keys)

at(mac)

German (Austria, Macintosh)

au

English (Australian)

az

Azerbaijani

az(cyrillic)

Azerbaijani (Cyrillic)

by

Belarusian

by(legacy)

Belarusian (legacy)

by(latin)

Belarusian (Latin)

by(ru)

Russian (Belarus)

by(intl)

Belarusian (intl.)

by(phonetic)

Belarusian (phonetic)

be

Belgian

be(oss)

Belgian (alt.)

be(oss_latin9)

Belgian (Latin-9 only, alt.)

be(iso-alternate)

Belgian (ISO, alt.)

be(nodeadkeys)

Belgian (no dead keys)

be(wang)

Belgian (Wang 724 AZERTY)

bd

Bangla

bd(probhat)

Bangla (Probhat)

in

Indian

in(ben)

Bangla (India)

in(ben_probhat)

Bangla (India, Probhat)

in(ben_baishakhi)

Bangla (India, Baishakhi)

in(ben_bornona)

Bangla (India, Bornona)

in(ben_gitanjali)

Bangla (India, Gitanjali)

in(ben_inscript)

Bangla (India, Baishakhi InScript)

in(eeyek)

Manipuri (Eeyek)

in(guj)

Gujarati

in(guru)

Punjabi (Gurmukhi)

in(jhelum)

Punjabi (Gurmukhi Jhelum)

in(kan)

Kannada

in(kan-kagapa)

Kannada (KaGaPa, phonetic)

in(mal)

Malayalam

in(mal_lalitha)

Malayalam (Lalitha)

in(mal_enhanced)

Malayalam (enhanced InScript, with rupee)

in(ori)

Oriya

in(ori-bolnagri)

Oriya (Bolnagri)

in(ori-wx)

Oriya (Wx)

in(olck)

Ol Chiki

in(tamilnet)

Tamil (TamilNet '99)

in(tamilnet_tamilnumbers)

Tamil (TamilNet '99 with Tamil numerals)

in(tamilnet_TAB)

Tamil (TamilNet '99, TAB encoding)

in(tamilnet_TSCII)

Tamil (TamilNet '99, TSCII encoding)

in(tam)

Tamil (InScript, with Arabic numerals)

in(tam_tamilnumbers)

Tamil (InScript, with Tamil numerals)

in(tel)

Telugu

in(tel-kagapa)

Telugu (KaGaPa, phonetic)

in(tel-sarala)

Telugu (Sarala)

in(urd-phonetic)

Urdu (phonetic)

in(urd-phonetic3)

Urdu (alt. phonetic)

in(urd-winkeys)

Urdu (Windows)

in(bolnagri)

Hindi (Bolnagri)

in(hin-wx)

Hindi (Wx)

in(hin-kagapa)

Hindi (KaGaPa, phonetic)

in(san-kagapa)

Sanskrit (KaGaPa, phonetic)

in(mar-kagapa)

Marathi (KaGaPa, phonetic)

in(eng)

English (India, with rupee)

in(iipa)

Indic IPA

in(marathi)

Marathi (enhanced InScript)

ba

Bosnian

ba(alternatequotes)

Bosnian (with guillemets)

ba(unicode)

Bosnian (with Bosnian digraphs)

ba(unicodeus)

Bosnian (US, with Bosnian digraphs)

ba(us)

Bosnian (US)

br

Portuguese (Brazil)

br(nodeadkeys)

Portuguese (Brazil, no dead keys)

br(dvorak)

Portuguese (Brazil, Dvorak)

br(nativo)

Portuguese (Brazil, Nativo)

br(nativo-us)

Portuguese (Brazil, Nativo for US keyboards)

br(nativo-epo)

Esperanto (Brazil, Nativo)

br(thinkpad)

Portuguese (Brazil, IBM/Lenovo ThinkPad)

bg

Bulgarian

bg(phonetic)

Bulgarian (traditional phonetic)

bg(bas_phonetic)

Bulgarian (new phonetic)

bg(bekl)

Bulgarian (enhanced)

dz

Berber (Algeria, Latin)

dz(azerty-deadkeys)

Kabyle (AZERTY, with dead keys)

dz(qwerty-gb-deadkeys)

Kabyle (QWERTY, UK, with dead keys)

dz(qwerty-us-deadkeys)

Kabyle (QWERTY, US, with dead keys)

dz(ber)

Berber (Algeria, Tifinagh)

dz(ar)

Arabic (Algeria)

ma

Arabic (Morocco)

ma(french)

French (Morocco)

ma(tifinagh)

Berber (Morocco, Tifinagh)

ma(tifinagh-alt)

Berber (Morocco, Tifinagh alt.)

ma(tifinagh-alt-phonetic)

Berber (Morocco, Tifinagh phonetic, alt.)

ma(tifinagh-extended)

Berber (Morocco, Tifinagh extended)

ma(tifinagh-phonetic)

Berber (Morocco, Tifinagh phonetic)

ma(tifinagh-extended-phonetic)

Berber (Morocco, Tifinagh extended phonetic)

ma(rif)

Tarifit

cm

English (Cameroon)

cm(french)

French (Cameroon)

cm(qwerty)

Cameroon Multilingual (QWERTY, intl.)

cm(azerty)

Cameroon (AZERTY, intl.)

cm(dvorak)

Cameroon (Dvorak, intl.)

cm(mmuock)

Mmuock

mm

Burmese

mm(zawgyi)

Burmese Zawgyi

mm(shn)

Shan

mm(zgt)

Shan (Zawgyi Tai)

mm(mnw)

Mon

mm(mnw-a1)

Mon (A1)

ca

French (Canada)

ca(fr-dvorak)

French (Canada, Dvorak)

ca(fr-legacy)

French (Canada, legacy)

ca(multix)

Canadian (CSA)

ca(ike)

Inuktitut

ca(eng)

English (Canada)

cd

French (Democratic Republic of the Congo)

cn

Chinese

cn(mon_trad)

Mongolian (Bichig)

cn(mon_trad_todo)

Mongolian (Todo)

cn(mon_trad_xibe)

Mongolian (Xibe)

cn(mon_trad_manchu)

Mongolian (Manchu)

cn(mon_trad_galik)

Mongolian (Galik)

cn(mon_todo_galik)

Mongolian (Todo Galik)

cn(mon_manchu_galik)

Mongolian (Manchu Galik)

cn(tib)

Tibetan

cn(tib_asciinum)

Tibetan (with ASCII numerals)

cn(ug)

Uyghur

cn(altgr-pinyin)

Hanyu Pinyin Letters (with AltGr dead keys)

hr

Croatian

hr(alternatequotes)

Croatian (with guillemets)

hr(unicode)

Croatian (with Croatian digraphs)

hr(unicodeus)

Croatian (US, with Croatian digraphs)

hr(us)

Croatian (US)

cz

Czech

cz(bksl)

Czech (with <> key)

cz(qwerty)

Czech (QWERTY)

cz(qwerty_bksl)

Czech (QWERTY, extended backslash)

cz(qwerty-mac)

Czech (QWERTY, Macintosh)

cz(ucw)

Czech (UCW, only accented letters)

cz(dvorak-ucw)

Czech (US, Dvorak, UCW support)

cz(rus)

Russian (Czech, phonetic)

dk

Danish

dk(nodeadkeys)

Danish (no dead keys)

dk(winkeys)

Danish (Windows)

dk(mac)

Danish (Macintosh)

dk(mac_nodeadkeys)

Danish (Macintosh, no dead keys)

dk(dvorak)

Danish (Dvorak)

nl

Dutch

nl(us)

Dutch (US)

nl(mac)

Dutch (Macintosh)

nl(std)

Dutch (standard)

bt

Dzongkha

ee

Estonian

ee(nodeadkeys)

Estonian (no dead keys)

ee(dvorak)

Estonian (Dvorak)

ee(us)

Estonian (US)

ir

Persian

ir(pes_keypad)

Persian (with Persian keypad)

ir(azb)

Azerbaijani (Iran)

ir(ku)

Kurdish (Iran, Latin Q)

ir(ku_f)

Kurdish (Iran, F)

ir(ku_alt)

Kurdish (Iran, Latin Alt-Q)

ir(ku_ara)

Kurdish (Iran, Arabic-Latin)

iq

Iraqi

iq(ku)

Kurdish (Iraq, Latin Q)

iq(ku_f)

Kurdish (Iraq, F)

iq(ku_alt)

Kurdish (Iraq, Latin Alt-Q)

iq(ku_ara)

Kurdish (Iraq, Arabic-Latin)

fo

Faroese

fo(nodeadkeys)

Faroese (no dead keys)

fi

Finnish

fi(winkeys)

Finnish (Windows)

fi(classic)

Finnish (classic)

fi(nodeadkeys)

Finnish (classic, no dead keys)

fi(smi)

Northern Saami (Finland)

fi(mac)

Finnish (Macintosh)

fr

French

fr(nodeadkeys)

French (no dead keys)

fr(oss)

French (alt.)

fr(oss_latin9)

French (alt., Latin-9 only)

fr(oss_nodeadkeys)

French (alt., no dead keys)

fr(latin9)

French (legacy, alt.)

fr(latin9_nodeadkeys)

French (legacy, alt., no dead keys)

fr(bepo)

French (BEPO)

fr(bepo_latin9)

French (BEPO, Latin-9 only)

fr(bepo_afnor)

French (BEPO, AFNOR)

fr(dvorak)

French (Dvorak)

fr(mac)

French (Macintosh)

fr(azerty)

French (AZERTY)

fr(afnor)

French (AZERTY, AFNOR)

fr(bre)

Breton (France)

fr(oci)

Occitan

fr(geo)

Georgian (France, AZERTY Tskapo)

fr(us)

French (US)

gh

English (Ghana)

gh(generic)

English (Ghana, multilingual)

gh(akan)

Akan

gh(ewe)

Ewe

gh(fula)

Fula

gh(ga)

Ga

gh(hausa)

Hausa (Ghana)

gh(avn)

Avatime

gh(gillbt)

English (Ghana, GILLBT)

gn

N'Ko (AZERTY)

ge

Georgian

ge(ergonomic)

Georgian (ergonomic)

ge(mess)

Georgian (MESS)

ge(ru)

Russian (Georgia)

ge(os)

Ossetian (Georgia)

de

German

de(deadacute)

German (dead acute)

de(deadgraveacute)

German (dead grave acute)

de(nodeadkeys)

German (no dead keys)

de(e1)

German (E1)

de(e2)

German (E2)

de(T3)

German (T3)

de(us)

German (US)

de(ro)

Romanian (Germany)

de(ro_nodeadkeys)

Romanian (Germany, no dead keys)

de(dvorak)

German (Dvorak)

de(neo)

German (Neo 2)

de(mac)

German (Macintosh)

de(mac_nodeadkeys)

German (Macintosh, no dead keys)

de(dsb)

Lower Sorbian

de(dsb_qwertz)

Lower Sorbian (QWERTZ)

de(qwerty)

German (QWERTY)

de(tr)

Turkish (Germany)

de(ru)

Russian (Germany, phonetic)

de(deadtilde)

German (dead tilde)

gr

Greek

gr(simple)

Greek (simple)

gr(extended)

Greek (extended)

gr(nodeadkeys)

Greek (no dead keys)

gr(polytonic)

Greek (polytonic)

hu

Hungarian

hu(standard)

Hungarian (standard)

hu(nodeadkeys)

Hungarian (no dead keys)

hu(qwerty)

Hungarian (QWERTY)

hu(101_qwertz_comma_dead)

Hungarian (QWERTZ, 101-key, comma, dead keys)

hu(101_qwertz_comma_nodead)

Hungarian (QWERTZ, 101-key, comma, no dead keys)

hu(101_qwertz_dot_dead)

Hungarian (QWERTZ, 101-key, dot, dead keys)

hu(101_qwertz_dot_nodead)

Hungarian (QWERTZ, 101-key, dot, no dead keys)

hu(101_qwerty_comma_dead)

Hungarian (QWERTY, 101-key, comma, dead keys)

hu(101_qwerty_comma_nodead)

Hungarian (QWERTY, 101-key, comma, no dead keys)

hu(101_qwerty_dot_dead)

Hungarian (QWERTY, 101-key, dot, dead keys)

hu(101_qwerty_dot_nodead)

Hungarian (QWERTY, 101-key, dot, no dead keys)

hu(102_qwertz_comma_dead)

Hungarian (QWERTZ, 102-key, comma, dead keys)

hu(102_qwertz_comma_nodead)

Hungarian (QWERTZ, 102-key, comma, no dead keys)

hu(102_qwertz_dot_dead)

Hungarian (QWERTZ, 102-key, dot, dead keys)

hu(102_qwertz_dot_nodead)

Hungarian (QWERTZ, 102-key, dot, no dead keys)

hu(102_qwerty_comma_dead)

Hungarian (QWERTY, 102-key, comma, dead keys)

hu(102_qwerty_comma_nodead)

Hungarian (QWERTY, 102-key, comma, no dead keys)

hu(102_qwerty_dot_dead)

Hungarian (QWERTY, 102-key, dot, dead keys)

hu(102_qwerty_dot_nodead)

Hungarian (QWERTY, 102-key, dot, no dead keys)

is

Icelandic

is(mac_legacy)

Icelandic (Macintosh, legacy)

is(mac)

Icelandic (Macintosh)

is(dvorak)

Icelandic (Dvorak)

il

Hebrew

il(lyx)

Hebrew (lyx)

il(phonetic)

Hebrew (phonetic)

il(biblical)

Hebrew (Biblical, Tiro)

it

Italian

it(nodeadkeys)

Italian (no dead keys)

it(winkeys)

Italian (Windows)

it(mac)

Italian (Macintosh)

it(us)

Italian (US)

it(geo)

Georgian (Italy)

it(ibm)

Italian (IBM 142)

it(intl)

Italian (intl., with dead keys)

it(scn)

Sicilian

it(fur)

Friulian (Italy)

jp

Japanese

jp(kana)

Japanese (Kana)

jp(kana86)

Japanese (Kana 86)

jp(OADG109A)

Japanese (OADG 109A)

jp(mac)

Japanese (Macintosh)

jp(dvorak)

Japanese (Dvorak)

kg

Kyrgyz

kg(phonetic)

Kyrgyz (phonetic)

kh

Khmer (Cambodia)

kz

Kazakh

kz(ruskaz)

Russian (Kazakhstan, with Kazakh)

kz(kazrus)

Kazakh (with Russian)

kz(ext)

Kazakh (extended)

kz(latin)

Kazakh (Latin)

la

Lao

la(stea)

Lao (STEA)

latam

Spanish (Latin American)

latam(nodeadkeys)

Spanish (Latin American, no dead keys)

latam(deadtilde)

Spanish (Latin American, dead tilde)

latam(dvorak)

Spanish (Latin American, Dvorak)

latam(colemak)

Spanish (Latin American, Colemak)

lt

Lithuanian

lt(std)

Lithuanian (standard)

lt(us)

Lithuanian (US)

lt(ibm)

Lithuanian (IBM LST 1205-92)

lt(lekp)

Lithuanian (LEKP)

lt(lekpa)

Lithuanian (LEKPa)

lt(sgs)

Samogitian

lt(ratise)

Lithuanian (Ratise)

lv

Latvian

lv(apostrophe)

Latvian (apostrophe)

lv(tilde)

Latvian (tilde)

lv(fkey)

Latvian (F)

lv(modern)

Latvian (modern)

lv(ergonomic)

Latvian (ergonomic, ŪGJRMV)

lv(adapted)

Latvian (adapted)

mao

Maori

me

Montenegrin

me(cyrillic)

Montenegrin (Cyrillic)

me(cyrillicyz)

Montenegrin (Cyrillic, ZE and ZHE swapped)

me(latinunicode)

Montenegrin (Latin, Unicode)

me(latinyz)

Montenegrin (Latin, QWERTY)

me(latinunicodeyz)

Montenegrin (Latin, Unicode, QWERTY)

me(cyrillicalternatequotes)

Montenegrin (Cyrillic, with guillemets)

me(latinalternatequotes)

Montenegrin (Latin, with guillemets)

mk

Macedonian

mk(nodeadkeys)

Macedonian (no dead keys)

mt

Maltese

mt(us)

Maltese (US)

mt(alt-us)

Maltese (US, with AltGr overrides)

mt(alt-gb)

Maltese (UK, with AltGr overrides)

mn

Mongolian

no

Norwegian

no(nodeadkeys)

Norwegian (no dead keys)

no(winkeys)

Norwegian (Windows)

no(dvorak)

Norwegian (Dvorak)

no(smi)

Northern Saami (Norway)

no(smi_nodeadkeys)

Northern Saami (Norway, no dead keys)

no(mac)

Norwegian (Macintosh)

no(mac_nodeadkeys)

Norwegian (Macintosh, no dead keys)

no(colemak)

Norwegian (Colemak)

pl

Polish

pl(legacy)

Polish (legacy)

pl(qwertz)

Polish (QWERTZ)

pl(dvorak)

Polish (Dvorak)

pl(dvorak_quotes)

Polish (Dvorak, with Polish quotes on quotemark key)

pl(dvorak_altquotes)

Polish (Dvorak, with Polish quotes on key 1)

pl(csb)

Kashubian

pl(szl)

Silesian

pl(ru_phonetic_dvorak)

Russian (Poland, phonetic Dvorak)

pl(dvp)

Polish (programmer Dvorak)

pt

Portuguese

pt(nodeadkeys)

Portuguese (no dead keys)

pt(mac)

Portuguese (Macintosh)

pt(mac_nodeadkeys)

Portuguese (Macintosh, no dead keys)

pt(nativo)

Portuguese (Nativo)

pt(nativo-us)

Portuguese (Nativo for US keyboards)

pt(nativo-epo)

Esperanto (Portugal, Nativo)

ro

Romanian

ro(std)

Romanian (standard)

ro(winkeys)

Romanian (Windows)

ru

Russian

ru(phonetic)

Russian (phonetic)

ru(phonetic_winkeys)

Russian (phonetic, Windows)

ru(phonetic_YAZHERTY)

Russian (phonetic, YAZHERTY)

ru(typewriter)

Russian (typewriter)

ru(ruchey_ru)

Russian (engineering, RU)

ru(ruchey_en)

Russian (engineering, EN)

ru(legacy)

Russian (legacy)

ru(typewriter-legacy)

Russian (typewriter, legacy)

ru(tt)

Tatar

ru(os_legacy)

Ossetian (legacy)

ru(os_winkeys)

Ossetian (Windows)

ru(cv)

Chuvash

ru(cv_latin)

Chuvash (Latin)

ru(udm)

Udmurt

ru(kom)

Komi

ru(sah)

Yakut

ru(xal)

Kalmyk

ru(dos)

Russian (DOS)

ru(mac)

Russian (Macintosh)

ru(srp)

Serbian (Russia)

ru(bak)

Bashkirian

ru(chm)

Mari

ru(phonetic_azerty)

Russian (phonetic, AZERTY)

ru(phonetic_dvorak)

Russian (phonetic, Dvorak)

ru(phonetic_fr)

Russian (phonetic, French)

ru(ab)

Abkhazian (Russia)

rs

Serbian

rs(yz)

Serbian (Cyrillic, ZE and ZHE swapped)

rs(latin)

Serbian (Latin)

rs(latinunicode)

Serbian (Latin, Unicode)

rs(latinyz)

Serbian (Latin, QWERTY)

rs(latinunicodeyz)

Serbian (Latin, Unicode, QWERTY)

rs(alternatequotes)

Serbian (Cyrillic, with guillemets)

rs(latinalternatequotes)

Serbian (Latin, with guillemets)

rs(rue)

Pannonian Rusyn

si

Slovenian

si(alternatequotes)

Slovenian (with guillemets)

si(us)

Slovenian (US)

sk

Slovak

sk(bksl)

Slovak (extended backslash)

sk(qwerty)

Slovak (QWERTY)

sk(qwerty_bksl)

Slovak (QWERTY, extended backslash)

es

Spanish

es(nodeadkeys)

Spanish (no dead keys)

es(winkeys)

Spanish (Windows)

es(deadtilde)

Spanish (dead tilde)

es(dvorak)

Spanish (Dvorak)

es(ast)

Asturian (Spain, with bottom-dot H and L)

es(cat)

Catalan (Spain, with middle-dot L)

es(mac)

Spanish (Macintosh)

se

Swedish

se(nodeadkeys)

Swedish (no dead keys)

se(dvorak)

Swedish (Dvorak)

se(rus)

Russian (Sweden, phonetic)

se(rus_nodeadkeys)

Russian (Sweden, phonetic, no dead keys)

se(smi)

Northern Saami (Sweden)

se(mac)

Swedish (Macintosh)

se(svdvorak)

Swedish (Svdvorak)

se(us_dvorak)

Swedish (Dvorak, intl.)

se(us)

Swedish (US)

se(swl)

Swedish Sign Language

ch

German (Switzerland)

ch(legacy)

German (Switzerland, legacy)

ch(de_nodeadkeys)

German (Switzerland, no dead keys)

ch(fr)

French (Switzerland)

ch(fr_nodeadkeys)

French (Switzerland, no dead keys)

ch(fr_mac)

French (Switzerland, Macintosh)

ch(de_mac)

German (Switzerland, Macintosh)

sy

Arabic (Syria)

sy(syc)

Syriac

sy(syc_phonetic)

Syriac (phonetic)

sy(ku)

Kurdish (Syria, Latin Q)

sy(ku_f)

Kurdish (Syria, F)

sy(ku_alt)

Kurdish (Syria, Latin Alt-Q)

tj

Tajik

tj(legacy)

Tajik (legacy)

lk

Sinhala (phonetic)

lk(tam_unicode)

Tamil (Sri Lanka, TamilNet '99)

lk(tam_TAB)

Tamil (Sri Lanka, TamilNet '99, TAB encoding)

lk(us)

Sinhala (US)

th

Thai

th(tis)

Thai (TIS-820.2538)

th(pat)

Thai (Pattachote)

tr

Turkish

tr(f)

Turkish (F)

tr(e)

Turkish (E)

tr(alt)

Turkish (Alt-Q)

tr(ku)

Kurdish (Turkey, Latin Q)

tr(ku_f)

Kurdish (Turkey, F)

tr(ku_alt)

Kurdish (Turkey, Latin Alt-Q)

tr(intl)

Turkish (intl., with dead keys)

tr(ot)

Ottoman (Q)

tr(otf)

Ottoman (F)

tr(otk)

Old Turkic

tr(otkf)

Old Turkic (F)

tw

Taiwanese

tw(indigenous)

Taiwanese (indigenous)

tw(saisiyat)

Saisiyat (Taiwan)

ua

Ukrainian

ua(phonetic)

Ukrainian (phonetic)

ua(typewriter)

Ukrainian (typewriter)

ua(winkeys)

Ukrainian (Windows)

ua(macOS)

Ukrainian (macOS)

ua(legacy)

Ukrainian (legacy)

ua(rstu)

Ukrainian (standard RSTU)

ua(rstu_ru)

Russian (Ukraine, standard RSTU)

ua(homophonic)

Ukrainian (homophonic)

ua(crh)

Crimean Tatar (Turkish Q)

ua(crh_f)

Crimean Tatar (Turkish F)

ua(crh_alt)

Crimean Tatar (Turkish Alt-Q)

gb

English (UK)

gb(extd)

English (UK, extended, Windows)

gb(intl)

English (UK, intl., with dead keys)

gb(dvorak)

English (UK, Dvorak)

gb(dvorakukp)

English (UK, Dvorak, with UK punctuation)

gb(mac)

English (UK, Macintosh)

gb(mac_intl)

English (UK, Macintosh, intl.)

gb(colemak)

English (UK, Colemak)

gb(colemak_dh)

English (UK, Colemak-DH)

gb(pl)

Polish (British keyboard)

gb(gla)

Scottish Gaelic

uz

Uzbek

uz(latin)

Uzbek (Latin)

vn

Vietnamese

vn(us)

Vietnamese (US)

vn(fr)

Vietnamese (France)

kr

Korean

kr(kr104)

Korean (101/104-key compatible)

ie

Irish

ie(CloGaelach)

CloGaelach

ie(UnicodeExpert)

Irish (UnicodeExpert)

ie(ogam)

Ogham

ie(ogam_is434)

Ogham (IS434)

pk

Urdu (Pakistan)

pk(urd-crulp)

Urdu (Pakistan, CRULP)

pk(urd-nla)

Urdu (Pakistan, NLA)

pk(ara)

Arabic (Pakistan)

pk(snd)

Sindhi

mv

Dhivehi

za

English (South Africa)

epo

Esperanto

epo(legacy)

Esperanto (legacy)

np

Nepali

ng

English (Nigeria)

ng(igbo)

Igbo

ng(yoruba)

Yoruba

ng(hausa)

Hausa (Nigeria)

et

Amharic

sn

Wolof

brai

Braille

brai(left_hand)

Braille (left-handed)

brai(left_hand_invert)

Braille (left-handed inverted thumb)

brai(right_hand)

Braille (right-handed)

brai(right_hand_invert)

Braille (right-handed inverted thumb)

tm

Turkmen

tm(alt)

Turkmen (Alt-Q)

ml

Bambara

ml(fr-oss)

French (Mali, alt.)

ml(us-mac)

English (Mali, US, Macintosh)

ml(us-intl)

English (Mali, US, intl.)

tz

Swahili (Tanzania)

tg

French (Togo)

ke

Swahili (Kenya)

ke(kik)

Kikuyu

bw

Tswana

ph

Filipino

ph(qwerty-bay)

Filipino (QWERTY, Baybayin)

ph(capewell-dvorak)

Filipino (Capewell-Dvorak, Latin)

ph(capewell-dvorak-bay)

Filipino (Capewell-Dvorak, Baybayin)

ph(capewell-qwerf2k6)

Filipino (Capewell-QWERF 2006, Latin)

ph(capewell-qwerf2k6-bay)

Filipino (Capewell-QWERF 2006, Baybayin)

ph(colemak)

Filipino (Colemak, Latin)

ph(colemak-bay)

Filipino (Colemak, Baybayin)

ph(dvorak)

Filipino (Dvorak, Latin)

ph(dvorak-bay)

Filipino (Dvorak, Baybayin)

md

Moldavian

md(gag)

Moldavian (Gagauz)

id

Indonesian (Latin)

id(javanese)

Javanese

id(melayu-phonetic)

Indonesian (Arab Melayu, phonetic)

id(melayu-phoneticx)

Indonesian (Arab Melayu, extended phonetic)

id(pegon-phonetic)

Indonesian (Arab Pegon, phonetic)

my

Malay (Jawi, Arabic Keyboard)

my(phonetic)

Malay (Jawi, phonetic)

custom

A user-defined custom Layout

## OPTIONS

### Switching to another layout
Option

Description

grp:switch

Right Alt (while pressed)

grp:lswitch

Left Alt (while pressed)

grp:lwin_switch

Left Win (while pressed)

grp:rwin_switch

Right Win (while pressed)

grp:win_switch

Any Win (while pressed)

grp:menu_switch

Menu (while pressed), Shift+Menu for Menu

grp:caps_switch

Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action

grp:rctrl_switch

Right Ctrl (while pressed)

grp:toggle

Right Alt

grp:lalt_toggle

Left Alt

grp:caps_toggle

Caps Lock

grp:shift_caps_toggle

Shift+Caps Lock

grp:caps_select

Caps Lock to first layout; Shift+Caps Lock to second layout

grp:win_menu_select

Left Win to first layout; Right Win/Menu to second layout

grp:ctrl_select

Left Ctrl to first layout; Right Ctrl to second layout

grp:alt_caps_toggle

Alt+Caps Lock

grp:shifts_toggle

Both Shifts together

grp:alts_toggle

Both Alts together

grp:alt_altgr_toggle

Both Alts together; AltGr alone chooses third level

grp:ctrls_toggle

Both Ctrls together

grp:ctrl_shift_toggle

Ctrl+Shift

grp:lctrl_lshift_toggle

Left Ctrl+Left Shift

grp:rctrl_rshift_toggle

Right Ctrl+Right Shift

grp:ctrl_alt_toggle

Alt+Ctrl

grp:alt_shift_toggle

Alt+Shift

grp:lalt_lshift_toggle

Left Alt+Left Shift

grp:ralt_rshift_toggle

Right Alt+Right Shift

grp:menu_toggle

Menu

grp:lwin_toggle

Left Win

grp:alt_space_toggle

Alt+Space

grp:win_space_toggle

Win+Space

grp:ctrl_space_toggle

Ctrl+Space

grp:rwin_toggle

Right Win

grp:lshift_toggle

Left Shift

grp:rshift_toggle

Right Shift

grp:lctrl_toggle

Left Ctrl

grp:rctrl_toggle

Right Ctrl

grp:sclk_toggle

Scroll Lock

grp:lctrl_lwin_rctrl_menu

Ctrl+Left Win to first layout; Ctrl+Menu to second layout

grp:lctrl_lwin_toggle

Left Ctrl+Left Win

### Key to choose the 2nd level
Option

Description

lv2:lsgt_switch

The "< >" key

### Key to choose the 3rd level
Option

Description

lv3:switch

Right Ctrl

lv3:menu_switch

Menu

lv3:win_switch

Any Win

lv3:lwin_switch

Left Win

lv3:rwin_switch

Right Win

lv3:alt_switch

Any Alt

lv3:lalt_switch

Left Alt

lv3:ralt_switch

Right Alt

lv3:ralt_switch_multikey

Right Alt; Shift+Right Alt as Compose

lv3:ralt_alt

Right Alt never chooses 3rd level

lv3:enter_switch

Enter on keypad

lv3:caps_switch

Caps Lock

lv3:bksl_switch

Backslash

lv3:lsgt_switch

The "< >" key

lv3:caps_switch_latch

Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser

lv3:bksl_switch_latch

Backslash; acts as onetime lock when pressed together with another 3rd level chooser

lv3:lsgt_switch_latch

The "< >" key; acts as onetime lock when pressed together with another 3rd level chooser

### Ctrl position
Option

Description

ctrl:nocaps

Caps Lock as Ctrl

ctrl:lctrl_meta

Left Ctrl as Meta

ctrl:swapcaps

Swap Ctrl and Caps Lock

ctrl:hyper_capscontrol

Caps Lock as Ctrl, Ctrl as Hyper

ctrl:ac_ctrl

To the left of "A"

ctrl:aa_ctrl

At the bottom left

ctrl:rctrl_ralt

Right Ctrl as Right Alt

ctrl:menu_rctrl

Menu as Right Ctrl

ctrl:swap_lalt_lctl

Swap Left Alt with Left Ctrl

ctrl:swap_lwin_lctl

Swap Left Win with Left Ctrl

ctrl:swap_rwin_rctl

Swap Right Win with Right Ctrl

ctrl:swap_lalt_lctl_lwin

Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt

### Use keyboard LED to show alternative layout
Option

Description

grp_led:num

Num Lock

grp_led:caps

Caps Lock

grp_led:scroll

Scroll Lock

### Use keyboard LED to indicate modifiers
Option

Description

mod_led:compose

Compose

### Layout of numeric keypad
Option

Description

keypad:legacy

Legacy

keypad:oss

Unicode arrows and math operators

keypad:future

Unicode arrows and math operators on default level

keypad:legacy_wang

Legacy Wang 724

keypad:oss_wang

Wang 724 keypad with Unicode arrows and math operators

keypad:future_wang

Wang 724 keypad with Unicode arrows and math operators on default level

keypad:hex

Hexadecimal

keypad:atm

Phone and ATM style

### Numeric keypad Delete behavior
Option

Description

kpdl:dot

Legacy key with dot

kpdl:comma

Legacy key with comma

kpdl:dotoss

Four-level key with dot

kpdl:dotoss_latin9

Four-level key with dot, Latin-9 only

kpdl:commaoss

Four-level key with comma

kpdl:momayyezoss

Four-level key with momayyez

kpdl:kposs

Four-level key with abstract separators

kpdl:semi

Semicolon on third level

### Caps Lock behavior
Option

Description

caps:internal

Caps Lock uses internal capitalization; Shift "pauses" Caps Lock

caps:internal_nocancel

Caps Lock uses internal capitalization; Shift does not affect Caps Lock

caps:shift

Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock

caps:shift_nocancel

Caps Lock acts as Shift with locking; Shift does not affect Caps Lock

caps:capslock

Caps Lock toggles normal capitalization of alphabetic characters

caps:shiftlock

Caps Lock toggles Shift Lock (affects all keys)

caps:swapescape

Swap Esc and Caps Lock

caps:escape

Make Caps Lock an additional Esc

caps:escape_shifted_capslock

Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock

caps:backspace

Make Caps Lock an additional Backspace

caps:super

Make Caps Lock an additional Super

caps:hyper

Make Caps Lock an additional Hyper

caps:menu

Make Caps Lock an additional Menu key

caps:numlock

Make Caps Lock an additional Num Lock

caps:ctrl_modifier

Make Caps Lock an additional Ctrl

caps:none

Caps Lock is disabled

### Alt and Win behavior
Option

Description

altwin:menu

Add the standard behavior to Menu key

altwin:menu_win

Menu is mapped to Win

altwin:meta_alt

Alt and Meta are on Alt

altwin:alt_win

Alt is mapped to Win and the usual Alt

altwin:ctrl_win

Ctrl is mapped to Win and the usual Ctrl

altwin:ctrl_rwin

Ctrl is mapped to Right Win and the usual Ctrl

altwin:ctrl_alt_win

Ctrl is mapped to Alt, Alt to Win

altwin:meta_win

Meta is mapped to Win

altwin:left_meta_win

Meta is mapped to Left Win

altwin:hyper_win

Hyper is mapped to Win

altwin:alt_super_win

Alt is mapped to Right Win, Super to Menu

altwin:swap_lalt_lwin

Left Alt is swapped with Left Win

altwin:swap_alt_win

Alt is swapped with Win

altwin:prtsc_rwin

Win is mapped to PrtSc and the usual Win

### Position of Compose key
Option

Description

compose:ralt

Right Alt

compose:lwin

Left Win

compose:lwin-altgr

3rd level of Left Win

compose:rwin

Right Win

compose:rwin-altgr

3rd level of Right Win

compose:menu

Menu

compose:menu-altgr

3rd level of Menu

compose:lctrl

Left Ctrl

compose:lctrl-altgr

3rd level of Left Ctrl

compose:rctrl

Right Ctrl

compose:rctrl-altgr

3rd level of Right Ctrl

compose:caps

Caps Lock

compose:caps-altgr

3rd level of Caps Lock

compose:102

The "< >" key

compose:102-altgr

3rd level of the "< >" key

compose:paus

Pause

compose:ins

Insert

compose:prsc

PrtSc

compose:sclk

Scroll Lock

### Compatibility options
Option

Description

numpad:pc

Default numeric keypad keys

numpad:mac

Numeric keypad always enters digits (as in macOS)

numpad:microsoft

Num Lock on: digits; Shift for arrows. Num Lock off: arrows (as in Windows)

numpad:shift3

Shift does not cancel Num Lock, chooses 3rd level instead

srvrkeys:none

Special keys (Ctrl+Alt+<key>) handled in a server

apple:alupckeys

Apple Aluminium emulates Pause, PrtSc, Scroll Lock

shift:breaks_caps

Shift cancels Caps Lock

misc:typo

Enable extra typographic characters

misc:apl

Enable APL overlay characters

shift:both_capslock

Both Shifts together enable Caps Lock

shift:both_capslock_cancel

Both Shifts together enable Caps Lock; one Shift key disables it

shift:both_shiftlock

Both Shifts together enable Shift Lock

keypad:pointerkeys

Shift + Num Lock enables PointerKeys

grab:break_actions

Allow breaking grabs with keyboard actions (warning: security risk)

grab:debug

Allow grab and window tree logging

### Currency signs
Option

Description

eurosign:e

Euro on E

eurosign:2

Euro on 2

eurosign:4

Euro on 4

eurosign:5

Euro on 5

rupeesign:4

Rupee on 4

### Key to choose 5th level
Option

Description

lv5:caps_switch

Caps Lock chooses 5th level

lv5:lsgt_switch

The "< >" key chooses 5th level

lv5:ralt_switch

Right Alt chooses 5th level

lv5:menu_switch

Menu chooses 5th level

lv5:rctrl_switch

Right Ctrl chooses 5th level

lv5:lsgt_switch_lock

The "< >" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser

lv5:ralt_switch_lock

Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser

lv5:lwin_switch_lock

Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser

lv5:rwin_switch_lock

Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser

### Non-breaking space input
Option

Description

nbsp:none

Usual space at any level

nbsp:level2

Non-breaking space at the 2nd level

nbsp:level3

Non-breaking space at the 3rd level

nbsp:level3n

Non-breaking space at the 3rd level, thin non-breaking space at the 4th level

nbsp:level4

Non-breaking space at the 4th level

nbsp:level4n

Non-breaking space at the 4th level, thin non-breaking space at the 6th level

nbsp:level4nl

Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)

nbsp:zwnj2

Zero-width non-joiner at the 2nd level

nbsp:zwnj2zwj3

Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level

nbsp:zwnj2zwj3nb4

Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level

nbsp:zwnj2nb3

Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level

nbsp:zwnj2nb3zwj4

Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level

nbsp:zwnj2nb3nnb4

Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level

nbsp:zwnj3zwj4

Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level

### Japanese keyboard options
Option

Description

japan:kana_lock

Kana Lock key is locking

japan:nicola_f_bs

NICOLA-F style Backspace

japan:hztg_escape

Make Zenkaku Hankaku an additional Esc

### Korean Hangul/Hanja keys
Option

Description

korean:ralt_hangul

Make right Alt a Hangul key

korean:rctrl_hangul

Make right Ctrl a Hangul key

korean:ralt_hanja

Make right Alt a Hanja key

korean:rctrl_hanja

Make right Ctrl a Hanja key

### Esperanto letters with superscripts
Option

Description

esperanto:qwerty

At the corresponding key in a QWERTY layout

esperanto:dvorak

At the corresponding key in a Dvorak layout

esperanto:colemak

At the corresponding key in a Colemak layout

### Old Solaris keycodes compatibility
Option

Description

solaris:sun_compat

Sun key compatibility

### Key sequence to kill the X server
Option

Description

terminate:ctrl_alt_bksp

Ctrl+Alt+Backspace

## FILES
/usr/share/X11/xkb/compat

/usr/share/X11/xkb/compiled

/usr/share/X11/xkb/geometry

/usr/share/X11/xkb/keycodes

/usr/share/X11/xkb/keymap

/usr/share/X11/xkb/rules

/usr/share/X11/xkb/semantics

/usr/share/X11/xkb/symbols

/usr/share/X11/xkb/types

## SEE ALSO
setxkbmap(1)


Consortium

package: xorg-docs

title: Consortium(7)

summary: X Consortium information

text:
# Consortium(7)

## NAME
XConsortium - X Consortium information

## SYNOPSIS
Releases 6.0 through 6.3 of X Version 11 were brought to you by the X Consortium, Inc.

## DESCRIPTION
The X Consortium was an independent, not-for-profit Delaware membership corporation. It was formed in 1993 as the successor to the MIT X Consortium. The purpose of the X Consortium was to foster the development, evolution, and maintenance of the X Window System, a comprehensive set of vendor-neutral, system-architecture neutral, network-transparent windowing and user interface standards.

The X Window System was created in the mid-1980s at the Massachusetts Institute of Technology. In 1988, MIT formed a member-funded consortium to provide the technical and administrative leadership necessary to support further development of the X Window System. In 1992, MIT and the membership decided it was in their best interests to move the consortium out of MIT and create an independent, stand-alone organization. All rights to the X Window System were assigned by MIT to X Consortium, Inc. on January 1, 1994. X Consortium, Inc. closed its doors on December 31, 1996. All rights to the X Window System have been assigned to the Open Software Foundation.

The X Consortium was financially self-supporting through membership fees. There are no license fees associated with the use of X Window System standards and code developed by the X Consortium. Membership in the X Consortium was open to any organization willing to execute a membership agreement.

The X Consortium was a highly participative body. Members were encouraged to actively cooperate with the staff and other members in the design and review of proposed specifications, and in the design, coding and testing of sample implementations of those specifications.

The X Consortium accomplished most of its work using electronic mail over the Internet, with individual mailing lists for working groups. Internet electronic mail connectivity was viewed as a requirement for useful participation in X Consortium activities. Meetings were held as necessary, often in conjunction with industry conferences and trade shows.

## STAFF

```
President:
Bob Scheifler
Office Manager:
Janet O'Halloran
Director of Marketing:
Paul Lavallee
Director of Engineering:
Jim Fournier
Manager, X Window System:
Matt Landau, emeritus
Technical Director, X Window System:
Ralph Swick
Technical Staff, X Window System:
Donna Converse, emeritus
Stephen Gildea, emeritus
Kaleb Keithley
Arnaud Le Hors
Ralph Mor, emeritus
Ray Tice
Dave Wiggins, emeritus
Managers, CDE Development:
Giora Guth
Peter Bohnert, emeritus
Manager, CDE Quality Engineering:
David Brooks
CDE Architects:
Kevin Samborn
Daniel Dardailler, emeritus
Technical Staff, CDE Development:
Art Barstow
Pascale Dardailler
David Kaelbling
Mitch Greess
Robert Seacord
Technical Staff, CDE Quality Engineering:
Chris Burleson
Tom Cavin
Sami Mohammed
Mark Schuldenfrei
Manager, Systems Administration:
Kevin Ethier
Technical Staff, Systems Administration:
Mike Donati
Amy Rich, emeritus
Anne Salemme
```

## BOARD OF DIRECTORS
The X Consortium's activities and affairs were managed under the direction and oversight of a Board of Directors, elected annually by the Members. The Board was responsible for reviewing the achievements of the Consortium, approving planned work, appointing a President and other officers of the Consortium, and setting membership dues. The last Directors were:

```
Robert W. Scheifler, President, X Consortium
Dr. Forest Baskett, Senior VP of R&D, Silicon Graphics Computer Systems
Harold D. Blair, Apogee International Corp.
Roger S. Gourd, Gourd & Associates
Dr. Robin Hillyard, Chairman and Chief Technical Officer, Novasoft Systems
Don McGovern, General Operations Manager and Executive Dir., Hewlett Packard
Peter J. Shaw, Senior VP, NetManage
Michael Tobias, President, Tech-Source, Inc.
```

## ADDRESS
To reach the X Consortium public Wide World Web server, use the URL: http://www.x.org/

To reach the X Consortium public ftp machine, use anonymous ftp to: ftp.x.org

## FULL MEMBERS

```
Adobe Systems Inc.
Cray Research, Inc.
Digital Equipment Corp.
Fujitsu Limited
Hewlett-Packard Company
Hitachi Ltd.
IBM Corporation
Megatek Corp.
Motorola, Inc.
NEC Corporation
Novell, Inc.
Oki Electric Industry Co., Ltd.
OMRON Corporation
SCO, Inc.
Siemens Nixdorf Informationssysteme AG
Silicon Graphics, Inc.
Sony Corporation
Sun Microsystems, Inc.
Tektronix, Inc.
```

## ASSOCIATE MEMBERS

```
Boundless Technologies
Hummingbird Communications Ltd.
Insignia Solutions, Ltd.
Mercury Interactive Corp.
NetManage, Inc.
Network Computing Devices
VisiCom Laboratories, Inc.
Walker Richer & Quinn, Inc.
```

## END USERS

```
Hughes Aircraft Company
```

## AFFILIATE MEMBERS

```
ASTEC, Inc.
BARCO Chromatics, Inc.
CenterLine Software, Inc.
CliniComp, Intl.
Component Integration Laboratories, Inc.
Draper Laboratory.
Electronic Book Technologies, Inc.
Gallium Software, Inc.
Georgia Institute of Technology
Human Designed Systems, Inc.
INRIA - Institut National de Recherche en Informatique et en Automatique
Integrated Computer Solutions, Inc.
Investment Management Services, Inc.
Jupiter Systems
KL Group Inc.
Massachusetts Institute of Technology
Metheus Corporation
Metro Link, Inc.
Object Management Group, Inc.
Open Software Foundation
Performance Awareness Corp.
Peritek Corp.
Petrotechnical Open Software Corp.
Point Technologies, Inc.
Shiman Associates, Inc.
Smithsonian Astrophysical Observatory.
Software Development Corp.
SOUM Corporation
Spectragraphics Corp.
Tech-Source, Inc.
TriTeal Corp.
White Pine Software, Inc.
World Wide Web Consortium.
The XFree86 Project, Inc.
X Inside, Inc.
```


Standards

title: Standards(7)

text:
# Standards(7)

## NAME
XStandards - X Window System Standards and Specifications

## DESCRIPTION
The major goal of the X Consortium was to promote cooperation within the computer industry in the creation of standard software interfaces at all layers in the X Window System environment. The X Consortium produced standards - documents which defined network protocols, programming interfaces, and other aspects of the X environment. These standards continue to exist in the X.Org Foundation releases. The X.Org Foundation also produces specifications. Like X Window System Standards, these are documents which define network protocols, programming interfaces, and other aspects of the X environment. Under the aegis of The Open Group, X Window System standards, X.Org Foundation specifications, and other specifications are the basis for portions of The Open Group's various CAE specifications.

The status of various standards, specifications, and the software in the X11R7.0 distribution, is explained below.

## STANDARDS
The following documents are X Window System standards:

```
X Window System Protocol
X Version 11, Release 7.0
Robert W. Scheifler
Xlib - C Language X Interface
X Version 11, Release 7.0
James Gettys, Robert W. Scheifler, Ron Newman
X Toolkit Intrinsics - C Language Interface
X Version 11, Release 7.0
Joel McCormack, Paul Asente, Ralph R. Swick, Donna Converse
Bitmap Distribution Format
Version 2.1
X Version 11, Release 7.0
Inter-Client Communication Conventions Manual
Version 2.0
X Version 11, Release 7.0
David Rosenthal, Stuart W. Marks
Compound Text Encoding
Version 1.1
X Version 11, Release 7.0
Robert W. Scheifler
X Logical Font Description Conventions
Version 1.5
X Version 11, Release 7.0
Jim Flowers, Stephen Gildea
X Display Manager Control Protocol
Version 1.1
X Version 11, Release 7.0
Keith Packard
X11 Nonrectangular Window Shape Extension
Version 1.0.1
X Version 11, Release 7.0
Keith Packard
X11 Input Extension Protocol Specification
Version 1.0
X Version 11, Release 7.0
George Sachs, Mark Patrick
X11 Input Extension Library Specification
X Version 11, Release 7.0
Mark Patrick, George Sachs
The X Font Service Protocol
Version 2.0
X Version 11, Release 7.0
Jim Fulton
Inter-Client Exchange (ICE) Protocol
Version 1.0
X Version 11, Release 7.0
Robert Scheifler, Jordan Brown
Inter-Client Exchange (ICE) Library
Version 1.0
X Version 11, Release 7.0
Ralph Mor
X Session Management Protocol
Version 1.0
X Version 11, Release 7.0
Mike Wexler
X Session Management Library
Version 1.0
X Version 11, Release 7.0
Ralph Mor
The Input Method Protocol
Version 1.0
X Version 11, Release 7.0
Masahiko Narita, Hideki Hiura
X Synchronization Extension
Version 3.0
X Version 11, Release 7.0
Tim Glauert, Dave Carver, Jim Gettys, David P. Wiggins
XTEST Extension
Version 2.2
Kieron Drake
Big Requests Extension
Version 2.0
X Version 11, Release 7.0
Bob Scheifler
XC-MISC Extension
Version 1.1
X Version 11, Release 7.0
Bob Scheifler, Dave Wiggins
Double Buffer Extension
Version 1.0
Ian Elliott, David P. Wiggins
Record Extension Protocol
Version 1.13
Martha Zimet, Stephen Gildea
Record Extension Library
Version 1.13
Martha Zimet, Stephen Gildea
X Keyboard Extension Protocol
X Version 11, Release 7.0
Erik Fortune
X Keyboard Extension Library
X Version 11, Release 7.0
Amber J. Benson, Gary Aitken, Erik Fortune, Donna Converse,
George Sachs, and Will Walker
X Print Extension Protocol
X Version 11, Release 7.0
X Print Extension Library
X Version 11, Release 7.0
X Application Group Extension Protocol and Library
Version 1.0
X Version 11, Release 7.0
Kaleb Keithley
X Security Extension Protocol and Library
Version 4.0
X Version 11, Release 7.0
Dave Wiggins
X Proxy Manager Protocol
X Version 11, Release 7.0
Ralph Swick
LBX Extension Protocol and Library
X Version 11, Release 7.0
Keith Packard, Dave Lemke, Donna Converse, Ralph Mor, Ray Tice
Remote Execution MIME Type
Version 1.0
X Version 11, Release 7.0
Arnaud Le Hors
```

## SPECIFICATIONS
The following documents are X Project Team specifications:

```
Colormap Utilization Policy and Extension
Version 1.0
Kaleb Keithley
Extended Visual Information Extension
Version 1.0
Peter Daifuku
X Display Power Management (DPMS) Extension Protocol and Library
Version 1.0
Rob Lembree
```

## INCLUDE FILES
The following include files are part of the Xlib standard.

```
<X11/cursorfont.h>
<X11/keysym.h>
<X11/keysymdef.h>
<X11/X.h>
<X11/Xatom.h>
<X11/Xcms.h>
<X11/Xlib.h>
<X11/Xlibint.h>
<X11/Xproto.h>
<X11/Xprotostr.h>
<X11/Xresource.h>
<X11/Xutil.h>
<X11/X10.h>
```

The following include files are part of the X Toolkit Intrinsics standard.

```
<X11/Composite.h>
<X11/CompositeP.h>
<X11/Constraint.h>
<X11/ConstrainP.h>
<X11/Core.h>
<X11/CoreP.h>
<X11/Intrinsic.h>
<X11/IntrinsicP.h>
<X11/Object.h>
<X11/ObjectP.h>
<X11/RectObj.h>
<X11/RectObjP.h>
<X11/Shell.h>
<X11/ShellP.h>
<X11/StringDefs.h>
<X11/Vendor.h>
<X11/VendorP.h>
```

The following include file is part of the Nonrectangular Window Shape Extension standard.

```
<X11/extensions/shape.h>
```

The following include files are part of the X Input Extension standard.

```
<X11/extensions/XI.h>
<X11/extensions/XInput.h>
<X11/extensions/XIproto.h>
```

The following include files are part of the ICElib standard.

```
<X11/ICE/ICE.h>
<X11/ICE/ICEconn.h>
<X11/ICE/ICElib.h>
<X11/ICE/ICEmsg.h>
<X11/ICE/ICEproto.h>
<X11/ICE/ICEutil.h>
```

The following include files are part of the SMlib standard.

```
<X11/SM/SM.h>
<X11/SM/SMlib.h>
<X11/SM/SMproto.h>
```

The following include file is part of the Synchronization standard.

```
<X11/extensions/sync.h>
```

The following include file is part of the XTEST standard.

```
<X11/extensions/XTest.h>
```

The following include file is part of the Double Buffer Extension standard.

```
<X11/extensions/Xdbe.h>
```

The following include file is part of the Record Library standard.

```
<X11/extensions/record.h>
```

The following include files are part of the X Keyboard Extension Library standard.

```
<X11/XKBlib.h>
<X11/extensions/XKB.h>
<X11/extensions/XKBproto.h>
<X11/extensions/XKBstr.h>
<X11/extensions/XKBgeom.h>
```

The following include files are part of the X Print Extension Library standard.

```
<X11/extensions/Print.h>
<X11/extensions/Printstr.h>
```

The following include files are part of the X Application Group Extension Library standard.

```
<X11/extensions/Xag.h>
<X11/extensions/Xagstr.h>
```

The following include files are part of the X Security Extension Library standard.

```
<X11/extensions/security.h>
<X11/extensions/securstr.h>
```

The following include files are part of the LBX Extension library standard.

```
<X11/extensions/XLbx.h>
<X11/extensions/lbxbuf.h>
<X11/extensions/lbxbufstr.h>
<X11/extensions/lbxdeltastr.h>
<X11/extensions/lbximage.h>
<X11/extensions/lbxopts.h>
<X11/extensions/lbxstr.h>
<X11/extensions/lbxzlib.h>
```

The following include files are part of the Colormap Utilization Policy and Extension specification.

```
<X11/extensions/Xcup.h>
<X11/extensions/Xcupstr.h>
```

The following include files are part of the Extended Visual Information specification.

```
<X11/extensions/XEVI.h>
<X11/extensions/XEVIstr.h>
```

The following include files are part of the X Display Management Signaling Extension specification.

```
<X11/extensions/dpms.h>
<X11/extensions/dpmsstr.h>
```

## NON STANDARDS
The X11R7.0 distribution contains sample implementations, not reference implementations. Although much of the code is believed to be correct, the code should be assumed to be in error wherever it conflicts with the specification.

The only X Window System standards are the ones listed above. No other documents, include files, or software in X11R7.0 carry special status within the X Window System. For example, none of the following are standards: internal interfaces of the sample server; the MIT-SHM extension; the Athena Widget Set; the Xmu library; the Xau library; the RGB database; the X Locale database; the fonts distributed with X11R7.0; the applications distributed with X11R7.0; the include files <X11/XWDFile.h>, <X11/Xfuncproto.h>, <X11/Xfuncs.h>, <X11/Xosdefs.h>, <X11/Xos.h>, <X11/Xos_r.h>, <X11/Xwinsock.h>, and <X11/Xthreads.h>; the bitmap files in <X11/bitmaps>.

The Multi-Buffering extension was a draft standard of the X Consortium but has been superseded by DBE as a standard.

## X REGISTRY
The X.Org Foundation maintains a registry of certain X-related items, to aid in avoiding conflicts and to aid in sharing of such items.

The registry is published as part of the X Window System software release. The latest version may also be found at

```
	ftp://ftp.x.org/pub/DOCS/registry
```

The X Registry and the names in it are not X Window System standards.