PC Controller
Piloter un PC Windows depuis son téléphone, sans ouvrir un port.
- Année
- 2026
- Statut
- En production
- Stack
- KotlinJetpack ComposeKtorCompose DesktopWebSocketSQLiteDocker
Le problème
Je voulais allumer et éteindre mon PC depuis mon téléphone, où que je sois. La solution évidente — ouvrir un port sur la box et parler directement au PC — revient à exposer sa machine personnelle à Internet en permanence. J'ai cherché une architecture où ça n'arrive jamais.
L'architecture
Trois composants, et une règle : le téléphone ne parle jamais directement au PC. Tout transite par un serveur intermédiaire, et c'est le PC qui va vers le serveur, jamais l'inverse.
Les décisions qui comptent
- 01
Une connexion sortante plutôt qu'un port ouvert
L'agent Windows établit lui-même un WebSocket sécurisé vers le serveur et le garde ouvert. Le PC n'a donc aucun port en écoute : pour l'atteindre depuis l'extérieur, il faudrait d'abord compromettre le serveur. Le même principe protège le serveur, qui sort vers Cloudflare au lieu d'accepter des connexions entrantes.
- 02
Allumer une machine éteinte
Un PC éteint ne peut évidemment pas maintenir de connexion. L'allumage passe donc par le Wake-on-LAN : le serveur émet un paquet magique sur le réseau local. Ça impose au conteneur de tourner en mode réseau hôte — en réseau Docker classique, la diffusion ne sort jamais de la machine, détail qui m'a coûté un certain temps.
- 03
Confirmer plutôt que supposer
Le serveur ne considère pas le PC allumé parce qu'il a envoyé le paquet, mais parce que l'agent a recommencé à donner signe de vie dans les 90 secondes. L'interface affiche donc un état vérifié, pas une intention.
- 04
Un secret qui ne traîne jamais en clair
Le jeton de l'agent est chiffré par Windows lui-même, lié au compte utilisateur de la machine. Même en lisant le disque, on n'en fait rien depuis un autre poste.