Aller au contenu
← Retour aux projets

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.

HTTPS · CloudflareWebSocket sortantWake-on-LANApplication AndroidKotlin · ComposeServeur UbuntuKtor · conteneur DockerPC WindowsAgent Compose Desktop
Les deux flèches de droite partent dans des sens opposés, et c'est tout l'intérêt : le PC ouvre lui-même sa connexion, le serveur ne fait que le réveiller.

Les décisions qui comptent

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Aperçu

Capture à venir
Capture à venir