Skip to content

Instantly share code, notes, and snippets.

@CaseOf
Last active June 27, 2025 14:22
Show Gist options
  • Save CaseOf/00ebe7119226b7204e33dc7de274fe79 to your computer and use it in GitHub Desktop.
Save CaseOf/00ebe7119226b7204e33dc7de274fe79 to your computer and use it in GitHub Desktop.
Installation d’un conteneur LXC pour utiliser keymapp de ZSA sans compiler webkit-gtk sur Gentoo

Installation de LXC

Tout d’abord, j’ai suivi le wiki de Gentoo pour installer LXC. Pensez à activer le use man c’est très utile.

Configuration du noyau

J’ai simplement appliqué la configuration indiquée sur le wiki.

Configuration de l’hôte pour le conteneur

Choix des privilèges

J’ai fais personnellement le choix d’un conteneur sans privilèges, ce qui implique quelques configurations.

Premièrement, il est impératif de vérifier la présence de subuid et subgid dans les fichiers idoines et de les ajouter si nécessaire.

Ensuite, j’ai ajouté les instructions lxc.idmap dans ~/.config/lxc/default.

Choix de la configuration réseau

J’ai choisi une configuration avec des interfaces veth.

J’ai préféré ne pas défaire les réglages de mes interfaces réseau physiques donc j’ai fais un NAT sur le bridge.

iptables -t nat -A POSTROUTING -o <interface> -j MASQUERADE
iptables -P FORWARD DROP
iptables -A FORWARD -i br0 -j ACCEPT
iptables -A FORWARD -o br0 -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

Configuration du conteneur

Choix du système

J’ai en premier choisi un template à télécharger pour ne pas passer trop de temps sur ce point.

J’ai tenté différentes options :

  • Alpine : échec, keymapp requiert glibc.
  • Debian : j’ai rencontré un problème pour basculer d’utilisateur avec su - <user> dont je n’ai pas compris l’origine. Peut-être un effet de bord d’utiliser un conteneur systemd sur un système hôte sur OpenRC.
  • Devuan : cette fois ci, je n’ai pas rencontré de difficultés.

Droits d’accès à X11

Cela m’a demandé un peu de recherches. J’ai donc installé x11-apps/xhost qu’il convient de lancer avec xhost +local: pour l’activer et xhost -local: pour le désactiver. Il sert notamment à partager l’accès de la session X11 hote avec le conteneur.

Ensuite, j’ai lié l’accès au serveur via une option de montage :

lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir,ro

Bien indiquer les variables d’environnement dans le conteneur pour que cela fonctionne : export DISPLAY=:0

Droits sur les accès aux claviers via USB de l’hote

Là, aussi ce n’était pas simple. J’ai fais du test catch and retry jusqu’à trouver quelque chose de fonctionnel.

Je dispose déjà des règles udev de ZSA actives.

J’ai finis par simplement donner beaucoup d’accès à /dev du fait que lors de la déconnexion et reconnexion, le clavier change d’identifiant sur le bus quand le firmware est flashé.

Voici la liste :

lxc.mount.entry = /dev/ignition_dfu dev/ignition_dfu none bind,optional,create=file
lxc.mount.entry = /dev/hidraw1 dev/hidraw1 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw2 dev/hidraw2 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw3 dev/hidraw3 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw4 dev/hidraw4 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw5 dev/hidraw5 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw6 dev/hidraw6 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw7 dev/hidraw7 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw8 dev/hidraw8 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw9 dev/hidraw9 none bind,optional,create=file
lxc.mount.entry = /dev/bus/usb dev/bus/usb none bind,optional,create=dir

Connexion au conteneur

Pour ouvrir un terminal sur le conteneur, j’ai constaté qu’avec lxc-attach, le conteneur hérite de l’environnement de l’hôte, ce qui créé des dysfonctionnements. Avec l’option --clear-env il manque également des variables d’environnement indispensables. J’ai donc déterminé qu’il faut ouvrir un terminal de la façon suivante : lxc-attach --clear-env -n <conteneur> -- su - <utilisateur>. Cela permet de charger l’environnement du système du conteneur.

Petite indication pour lancer directement keymapp :

lxc-attach --clear-env -n <conteneur> -- su -c 'env DISPLAY=:0 ./keymapp' - <utilisateur>

Conclusion

Après toutes ces étapes j’ai pu flasher le firmware sur mon clavier.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment