# Touches mortes sous Linux : retrouver le comportement Windows

> Sous Linux, deux accents graves coûtent quatre frappes, deux sous Windows. Comprendre les tables Compose et rétablir le comportement Windows avec ~/.XCompose.

- URL : https://blog.xreveillon.eu/fr-FR/blog/dead-keys-linux
- Date : 2026-08-28T00:00:00.000Z
- Langue : fr-FR
- Tags : tooling, linux

---

Vous écrivez du Markdown sur un clavier à touches mortes ? Alors vous connaissez le supplice de la clôture de code. Sur ma Debian, ouvrir un bloc avec trois accents graves demande **six frappes**. Sous Windows : trois, plus une espace. Le coupable n'est ni votre bureau, ni votre distribution — ce sont les tables **Compose**.

## Le problème en chiffres

Avec une disposition à touches mortes, la touche accent grave n'insère rien par elle-même : elle attend le caractère suivant. Accent + voyelle = voyelle accentuée. Accent + espace = l'accent seul. Jusque-là, tout va bien.

> **Note :** le nom vient de la machine à écrire. La touche « morte » imprimait l'accent **sans faire avancer le chariot** — pas d'espacement, donc pas de caractère à elle seule. La lettre suivante se surimprimait à la même place, formant `é` encre sur encre. L'informatique a hérité du terme : X11 nomme littéralement ces touches `dead_grave`, `dead_acute`…

| À produire | Linux (défaut) | Windows |
|---|---|---|
| Un accent grave | 2 frappes | 2 frappes |
| Deux accents graves | **4 frappes** | **2 frappes** |
| Une clôture `` ``` `` | **6 frappes** | **4 frappes** (3 + espace) |

Sous Windows, taper deux fois une touche morte émet le caractère deux fois. Sous Linux, chaque paire de frappes ne produit qu'**un seul** caractère. D'où la facture double pour ` `` ` et ` ``` `.

## La cause : les tables Compose

Sous Linux, la résolution des touches mortes est définie par les tables **Compose** — historiquement X11, aujourd'hui implémentées aussi par libxkbcommon. La table de votre locale vit sous `/usr/share/X11/locale/`. Pour une locale `en_US.UTF-8` :

```bash
grep "<dead_grave>" /usr/share/X11/locale/en_US.UTF-8/Compose
```

```text
<dead_grave> <space>      : "`"
<dead_grave> <dead_grave> : "`"
```

Voilà le coupable : la seconde ligne mappe **deux** frappes de la touche morte sur **un seul** accent grave. C'est la convention X11, et elle est partout : GNOME, KDE Plasma, MATE et XFCE résolvent les touches mortes via les mêmes tables, que ce soit à travers GTK, Qt, IBus ou fcitx — tous implémentent la même spécification. Windows et macOS sont les exceptions : chez eux, la touche morte doublée émet le caractère deux fois.

Changer d'environnement graphique ne vous sauvera donc pas. Surcharger la table, si.

## Le correctif : `~/.XCompose`

La table se surcharge au niveau utilisateur, dans `~/.XCompose` :

```text
# ~/.XCompose — surcharges personnelles
# Conserve toute la table système (accents morts, Multi_key, etc.)
include "%L"

# Comportement « Windows » : une touche morte doublée émet le caractère deux fois
<dead_grave> <dead_grave> : "``"

# La même astuce pour les autres touches mortes, si besoin :
# <dead_acute> <dead_acute>           : "''"
# <dead_circumflex> <dead_circumflex> : "^^"
# <dead_tilde> <dead_tilde>           : "~~"
```

La directive `include "%L"` inclut la table système de votre locale (`%L` est remplacé par son chemin) ; la ligne suivante la surcharge.

> **Attention :** sans l'`include`, `~/.XCompose` **remplace** la table système entière — adieu è, à, ù et toutes les autres compositions (lettres avec accent "manuel" aussi).

## L'activer

La table est chargée au démarrage de la session et des applications :

- **IBus tourne** (le cas sous GNOME, et bien souvent ailleurs) : `ibus restart` dans un terminal de votre session, puis fermez et rouvrez vos applications.
- **Sinon** : déconnexion, reconnexion.
- **Sous Wayland**, GTK et Qt s'appuient sur libxkbcommon, qui lit le même `~/.XCompose` au lancement de chaque application — redémarrer l'application suffit généralement.

Le mécanisme n'est donc pas spécifique à X11 : X11 ou Wayland, même table, même correctif.

## Vérifier que tout marche

| Frappe | Résultat attendu |
|---|---|
| Accent grave puis `e` | `è` — les accents n'ont pas bougé |
| Accent grave puis espace | `` ` `` — inchangé |
| Accent grave × 2 | ` `` ` — 2 frappes au lieu de 4 |
| Accent grave × 3 puis espace | ` ``` ` — parité Windows |

## Pour aller plus loin

- La page de manuel `Compose(5)` documente le format complet : inclusions, `Multi_key`, séquences longues.
- Le [wiki Arch sur XCompose](https://wiki.archlinux.org/title/Xcompose) recense les pièges connus par toolkit.
- Le même principe s'applique à toutes les touches mortes : circonflexe, tréma, tilde — lignes prêtes, commentées, dans le fichier ci-dessus.

## Conclusion

Six frappes pour une clôture de code, ce n'était pas une fatalité — juste une convention de table Compose, surchargeable en trois lignes. Mon `~/.XCompose` me permet maintenant d'économiser des frappes, et l'écriture de mes blocs Markdown est simplifiée.
