WM_Sn
La sélection de l'ICCCM 2.0, une par écran, dont un gestionnaire de fenêtres prend la propriété à son démarrage — pour qu'un autre puisse lui succéder proprement avec --replace au lieu de le tuer.
Qu'il ne puisse y avoir qu'un gestionnaire de fenêtres par écran, c'est le serveur X lui-même qui y veille : un seul client peut sélectionner SubstructureRedirect sur la fenêtre racine, et le suivant reçoit BadAccess et le célèbre « another window manager is already running ». Ce verrou ne dit toutefois rien de qui tourne et n'offre aucun moyen de changer sans tuer. En 1994, l'ICCCM 2.0 a emprunté un outil au presse-papiers : les sélections. Un gestionnaire qui démarre prend la propriété de la sélection WM_S0 pour l'écran 0, WM_S1 pour le suivant, avec XSetSelectionOwner sur une fenêtre invisible qui lui appartient. S'il y a déjà un propriétaire, le nouveau venu s'arrête — sauf s'il a été lancé avec --replace. Il prend alors la sélection de force, l'ancien propriétaire reçoit un SelectionClear, libère ses fenêtres dans l'ordre et se retire.
C'est le mécanisme derrière compiz --replace, la commande que la moitié du monde Linux a tapée en 2006 pour échanger Metacity contre un cube tournant, et derrière le même drapeau dans Openbox, KWin et xfwm4. Le schéma a ensuite servi pour tout ce qui ne doit exister qu'une fois : _NET_WM_CM_Sn pour le compositeur, _NET_SYSTEM_TRAY_Sn pour la zone de notification et _XSETTINGS_Sn pour le démon de réglages. Détenir la sélection ne garantit pas que le propriétaire sache faire quoi que ce soit en particulier — c'est le rôle de _NET_SUPPORTING_WM_CHECK — mais cela établit sans ambiguïté qu'un gestionnaire existe et à quelle fenêtre adresser les requêtes. Les gestionnaires qui n'ont jamais pris la peine du rituel existent encore, et il faut les tuer à l'ancienne.