QFreeRDP platform QPA

Premier billet de 2026, je vous souhaite tous mes meilleurs vœux pour cette nouvelle année.
Dans ce billet, je vais parler d'un vieux projet que je trouve très intéressant et qui n'a pas perdu une ride depuis ses plus de 10 ans d'existence: qfreerdp_platform. J'ai fait quelques amélioration intéressantes sur ce projet récemment, et je vais donc en parler un peu.
Fonctionnement interne de Qt

Le framework Qt fonctionne avec une abstraction de la plateforme sur laquelle il tourne: en gros on a des classes indépendantes qui implémentent les widgets, le scripting QML, le rendu, etc. Mais toute la partie qui doit vraiment interagir avec le système, comme par exemple envoyer du contenu à la carte graphique ou bien collecter les signaux des périphériques d'entrée (clavier, souris ou touchscreen), est implémentée par des QPA (Qt Platform Abstraction). Par exemple, quand on lance une application Qt sous Linux, il va y avoir un système d'heuristique qui va soit charger le QPA pour X11 (xcb) ou bien le QPA wayland.
J'en parlais déjà en 2013 dans ce billet, une chose intéressante est qu'on peut forcer le QPA qui va être utilisé par une application, celà se
fait en passant le paramètre -platform <nom du qpa> lors de l'appel du programme Qt (c'est pour ça qu'il
faut passer les paramètres de ligne de commande à la QApplication, c'est pour que Qt puisse sélectionner
les arguments qui lui sont destinés). La chose vraiment surprenante est que le programme Qt sans recompilation
peut tourner à la fois sous X11 et Wayland, ou bien sur un QPA qu'on lui dit d'utiliser...
Ces derniers temps, j'ai pas mal exploré des sujets de FreeRDP avec remote credential guard, Kerberos et NLA, je fais donc
un petit billet sur comment kerberossiser sa partie serveur de FreeRDP. 


Une petite astuce que j'ai découvert il y a quelque temps: l'outil
J'ai fais quelque modifications dans winPR pour corriger un bug dans les timers avec completion, et
je suis tombé sur un soucis qui pourrait intéresser d'autres personnes que moi.