Skip to content
2DeathadderPublic

About

Install Windows 10 dual-boot from Linux without a USB drive — unattended, drivers included, GRUB/systemd-boot/Limine, any distro. Installer Windows 10 depuis Linux sans clé USB.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

Repository files navigation

linwin v1.2

Licence GPL-3.0 Version v1 Site

Installer Windows 10 à côté de Linux, en dual-boot natif, sans clé USB.

English — linwin installs Windows 10 as a native dual-boot from Linux, without a USB drive. It creates the partitions in unallocated space (or shrinks a Btrfs root online), copies the installer to a temporary partition that replaces the USB stick, installs Windows unattended, adds the Intel RST/VMD and Wi-Fi/Ethernet drivers, then adds Windows to GRUB, systemd-boot, Limine or rEFInd. Works on any distribution (Ubuntu, Debian, Fedora, Arch, openSUSE…). Quick start: git clone https://github.com/2Deathadder/linwin.git && cd linwin && sudo ./linwin install && linwin check. English overview: https://2deathadder.github.io/linwin/en/. The manual below is in French.

linwin fait de la place sur le disque, y copie l'installeur Windows, démarre dessus une seule fois, puis remet Linux en premier et ajoute Windows au menu de démarrage. Tout se fait depuis Linux, avec une interface graphique ou en ligne de commande. L'installation peut être entièrement automatique : Windows s'installe, crée ton compte et revient tout seul sous Linux.

⚠️ linwin modifie la table de partitions du disque qui contient Linux. Il est conçu pour être prudent (chaque étape est vérifiée avant la suivante), mais fais une sauvegarde de tes données avant de commencer et garde le chargeur branché pendant les opérations.


Sommaire

  1. Compatibilité
  2. Installation de linwin
  3. Avant de commencer
  4. Utilisation avec l'interface graphique
  5. Utilisation en ligne de commande
  6. D'où vient la place pour Windows ?
  7. Pilotes ajoutés automatiquement
  8. Après l'installation
  9. Désinstaller Windows (annulation)
  10. Dépannage
  11. Fonctionnement détaillé et sécurité
  12. Référence des commandes

1. Compatibilité

Le PC

Exigence Pourquoi
Processeur x86-64 (Intel ou AMD 64 bits) l'installeur Windows 10 x64
Démarrage en UEFI 64 bits (pas en BIOS/Legacy/CSM) l'installeur est lancé par une entrée UEFI à usage unique
Disque en GPT, secteurs de 512 octets Windows en UEFI exige le GPT
Partition EFI montée (/boot/efi, /efi ou /boot) Windows y installe son gestionnaire de démarrage

Windows est installé sur le disque qui porte la partition EFI.

linwin check dit en quelques secondes si ton PC convient.

La distribution

linwin est un script bash et fonctionne sur toutes les distributions courantes. Les outils manquants s'installent automatiquement avec le gestionnaire de paquets :

Gestionnaire Distributions
pacman Arch, Manjaro, EndeavourOS, CachyOS, Omarchy…
apt Debian, Ubuntu, Linux Mint, Pop!_OS, elementary…
dnf / yum Fedora, RHEL, AlmaLinux, Rocky…
zypper openSUSE
xbps Void
apk Alpine
emerge Gentoo
Élément Pris en charge
Chargeur de démarrage GRUB, systemd-boot, Limine, rEFInd (sinon : menu de démarrage UEFI du PC)
Système d'init systemd et OpenRC (finalisation automatique) ; autres : finalisation à lancer à la main
Chiffrement LUKS (la passphrase est demandée si Linux doit être réduit)

Les distributions immuables (Fedora Silverblue/Kinoite, etc.) ne permettent pas d'installer les outils à la volée : linwin indique lesquels ajouter avec rpm-ostree install.

L'interface graphique

Elle demande GTK 4, libadwaita 1.5 ou plus récent et PyGObject :

Distribution Paquets
Arch et dérivées python-gobject gtk4 libadwaita
Debian 13+, Ubuntu 24.04+ python3-gi gir1.2-gtk-4.0 gir1.2-adw-1
Fedora 40+ python3-gobject gtk4 libadwaita
openSUSE Tumbleweed python3-gobject typelib-1_0-Adw-1 typelib-1_0-Gtk-4_0

Elle utilise pkexec (polkit) pour les étapes qui demandent les droits root. Sur un système plus ancien (Debian 12, Ubuntu 22.04…), utilise la ligne de commande : elle fait exactement la même chose.


2. Installation de linwin

Debian, Ubuntu et dérivées : télécharge le paquet .deb de la dernière version, puis :

sudo apt install ./linwin_*_all.deb

Toutes distributions :

git clone https://github.com/2Deathadder/linwin.git
cd linwin
sudo ./linwin install        # ou : sudo make install

install copie linwin dans /usr/local/lib/linwin (propriété de root, non modifiable par ton utilisateur), crée les commandes linwin et linwin-gui dans /usr/local/bin et ajoute linwin au menu des applications.

Pourquoi cette copie ? Les étapes lancées en root n'exécutent jamais un fichier que ton utilisateur pourrait modifier : sinon, n'importe quel programme de ta session pourrait le changer puis attendre que tu tapes ton mot de passe. Si tu modifies le script, relance sudo ./linwin install (l'interface le propose d'elle-même).


3. Avant de commencer

  1. Sauvegarde tes données importantes.

  2. Branche le chargeur : linwin refuse de modifier le disque sur batterie.

  3. Télécharge l'ISO de Windows 10 (64 bits) : linwin iso essaie de la télécharger chez Microsoft. Si Microsoft refuse (protection anti-robot, fréquente), ouvre https://www.microsoft.com/software-download/windows10ISO depuis Linux : la page propose directement l'ISO. Choisis Windows 10 (multi-edition ISO), ta langue, puis 64-bit Download.

  4. Vérifie la compatibilité :

    linwin check

    Tu y vois le disque choisi, la place disponible, le chargeur détecté, les cartes réseau et le contrôleur de stockage.

  5. Licence : si le PC a été vendu avec Windows, la licence est dans le firmware (check l'indique). Choisis alors l'édition Famille (Home) : Windows s'activera tout seul. Sinon, tu activeras Windows avec ta propre clé.


4. Utilisation avec l'interface graphique

Lance linwin depuis le menu des applications (ou linwin-gui).

La fenêtre montre :

  • Cette machine : système, disque de Windows, place disponible, partition EFI, contrôleur VMD, cartes réseau, licence, alimentation.
  • Réglages : image ISO (bouton Choisir…), taille de Windows en Gio, partitionnement prévu (déplie la ligne pour le détail), pilote VMD (automatique par défaut).
  • Installation sans intervention : active Zéro intervention, choisis l'édition, le nom du compte Windows et son mot de passe (facultatif).
  • Étapes : chacune se débloque quand la précédente est faite.
Étape Ce qu'elle fait
1. Préparer le disque crée les partitions de Windows (tape OUI pour confirmer ; passphrase LUKS si Linux doit être réduit)
2. Copier l'installeur formate la partition WINSETUP, y copie l'ISO, ajoute les pilotes et les réponses automatiques
3. Démarrer l'installeur programme un démarrage unique sur l'installeur, puis propose de redémarrer
4. Installer Windows automatique (20 à 40 min) ou guidé, voir ci-dessous
5. Finaliser automatique au retour sous Linux en mode sans intervention ; sinon, clique Finaliser

Une barre de progression en bas de la fenêtre indique l'avancement et le temps restant, et le journal affiche tout ce que fait linwin. Si tu fermes la fenêtre pendant une opération, elle continue ; rouvre l'application pour la suivre.

Installation sans intervention (recommandé)

Après le redémarrage, ne touche à rien : l'installeur repère la partition Windows à l'octet près, installe Windows dessus et nulle part ailleurs, crée ton compte local, ouvre une première session, puis redémarre sous Linux. linwin finalise alors tout seul au démarrage.

Si la partition n'est pas reconnue avec certitude, l'installeur bascule par sécurité en mode manuel (voir ci-dessous).

Installation manuelle (guidée)

Dans l'installeur Windows :

  1. Je n'ai pas de clé de produit si tu n'en as pas, puis choisis l'édition.
  2. Type d'installation : Personnalisée.
  3. Sélectionne uniquement la partition indiquée par linwin (taille choisie, « Windows »), clique Formater si demandé, puis Suivant. Ne supprime ni ne formate aucune autre partition.
  4. Si aucun disque n'apparaît (contrôleur Intel VMD) : Charger un pilote → Parcourir → WINSETUP\$WinPEDriver$\vmd.

Une fois Windows installé, reviens sous Linux (menu de démarrage UEFI : F8, F11 ou F12 selon le PC) et clique Finaliser.


5. Utilisation en ligne de commande

Le même parcours, étape par étape :

linwin check                          # compatibilité et place disponible
linwin plan --size 100G               # ce qui va être fait (ne modifie rien)
sudo linwin prepare --size 100G       # crée les partitions
sudo linwin stage --iso ~/Downloads/Win10_22H2_French_x64v1.iso \
                  --edition Home --user moi --password-stdin
sudo linwin boot                      # démarrage unique sur l'installeur
sudo reboot
# … Windows s'installe et revient sous Linux …
sudo linwin finish                    # automatique en mode sans intervention
  • Sans --edition ni --user, l'installation est manuelle (voir §4).
  • --password-stdin lit le mot de passe Windows sur l'entrée standard (une ligne vide = pas de mot de passe) : printf 'MonMotDePasse\n' | sudo linwin stage --iso … --edition Pro --user moi --password-stdin
  • Les commandes root se relancent toutes seules avec sudo si besoin.
  • Si prepare annonce que le noyau n'a pas pu relire la table de partitions, redémarre puis continue avec stage : ce n'est pas une erreur.

6. D'où vient la place pour Windows ?

linwin cherche la place sur le disque de la partition EFI, dans cet ordre :

  1. Espace non alloué (mode free) : si une zone libre d'un seul tenant suffit (taille de Windows + 8 Gio pour l'installeur + 16 Mio), les partitions y sont créées. Aucune partition existante n'est modifiée. Fonctionne quel que soit le système de fichiers de Linux.
  2. Réduction de Linux (mode shrink) : si la racine est en Btrfs (même chiffrée avec LUKS), linwin la réduit à chaud, puis réduit LUKS, puis la partition, chaque étape étant vérifiée avant la suivante. Il garde au moins 20 Gio libres dans Btrfs.

--mode free ou --mode shrink impose l'une ou l'autre.

Racine en ext4, XFS ou LVM sans espace libre : ces systèmes ne peuvent pas être réduits pendant que Linux tourne. Libère d'abord de l'espace non alloué (par exemple en réduisant une partition avec GParted depuis un système live), puis relance linwin : il utilisera cet espace.

Partitions créées :

Partition Taille Rôle
MSR 16 Mio réservée par Windows
Windows celle choisie (32 Gio minimum, 64+ conseillés) le système Windows (C:)
WINSETUP 8 Gio joue le rôle de la clé USB ; supprimée à la fin, son espace est rendu à C:

7. Pilotes ajoutés automatiquement

Windows 10 n'a pas de pilote pour beaucoup de matériels récents. linwin les ajoute à l'installeur :

  • Contrôleur de stockage Intel VMD/RST : sans lui, l'installeur ne verrait pas le SSD. linwin utilise le pilote Intel RST 20.2.6.1025 (téléchargé chez Intel, empreintes vérifiées) pour les contrôleurs de 12e à 14e génération et Core Ultra, sinon le pilote du catalogue Microsoft Update. Rien à changer dans le BIOS. Un autre pilote : --vmd-driver DOSSIER.
  • Cartes réseau (Ethernet et Wi-Fi), tous fabricants : pour chaque carte, linwin cherche dans le catalogue Microsoft Update le pilote Windows 10 64 bits le plus récent qui déclare cette carte, vérifie son empreinte SHA-1 publiée par Microsoft, puis l'ajoute. Windows contrôle ensuite lui-même sa signature. Tu as ainsi le réseau dès le premier démarrage, donc Windows Update. Désactivable avec --no-net-drivers.

Le Bluetooth et les autres périphériques sont installés ensuite par Windows Update.

Windows déjà installé sans réseau ?

sudo linwin drivers

(ou le bouton Copier du groupe Pilotes dans l'interface) copie les pilotes réseau sur C:. Sous Windows, double-clique sur C:\linwin\installer-pilotes.cmd et accepte la demande d'administrateur.


8. Après l'installation

  • Choisir Windows : dans le menu de ton chargeur (GRUB, systemd-boot, Limine ou rEFInd). Sinon : menu de démarrage UEFI du PC (F8, F11 ou F12). linwin réaffiche le menu de GRUB ou de systemd-boot s'il était masqué.
  • Linux reste le choix par défaut.
  • En mode sans intervention, linwin a déjà réglé côté Windows : horloge en UTC (l'heure reste juste entre les deux systèmes), démarrage rapide et hibernation désactivés (ils verrouillent les partitions), pas de chiffrement automatique du disque. En installation manuelle, finish affiche les commandes à lancer.
  • Activation : automatique avec la licence du firmware en édition Famille ; sinon, Paramètres → Activation.

9. Désinstaller Windows (annulation)

sudo linwin cancel

(ou Annuler l'installation dans l'interface) fonctionne à n'importe quelle étape, même une fois Windows installé :

  • retire les entrées de démarrage de Windows et de l'installeur, et Windows du menu du chargeur ;
  • supprime les partitions créées par linwin (Windows et tout son contenu) ;
  • en mode shrink, rend l'espace à Linux (partition, LUKS et Btrfs agrandis à chaud) ; en mode free, l'espace redevient non alloué.

Avant d'agir, linwin vérifie que chaque partition à supprimer est bien la sienne (numéro, type et position enregistrés) ; au moindre doute, il s'arrête sans rien toucher. Le gestionnaire de démarrage de Windows n'est supprimé que si aucun autre Windows n'est présent.

Si linwin demande de redémarrer (code de sortie 3), redémarre puis relance sudo linwin cancel.


10. Dépannage

Problème Solution
Linux a démarré en mode BIOS active l'UEFI dans le firmware ; linwin ne gère pas le mode Legacy
pas assez de place choisis une taille plus petite, ou libère de l'espace non alloué (§6)
l'ordinateur est sur batterie branche le chargeur
partition EFI introuvable monte-la (/boot/efi, /efi ou /boot)
Microsoft refuse le téléchargement de l'ISO télécharge-la à la main (§3)
Le noyau n'a pas relu la table de partitions redémarre, puis passe à l'étape suivante
L'installeur ne voit aucun disque contrôleur VMD : Charger un pilote → WINSETUP\$WinPEDriver$\vmd ; ou fournis un pilote avec --vmd-driver
L'installeur a démarré en mode manuel la partition n'a pas été reconnue avec certitude : installe sur la partition indiquée (§4). Le journal est dans WINSETUP\linwin.log
Windows absent du menu de démarrage menu UEFI du PC (F8, F11, F12) ; avec GRUB : sudo update-grub (ou grub-mkconfig -o …)
impossible de monter … Windows n'est pas complètement arrêté sous Windows, en administrateur : powercfg /h off, puis redémarre vers Linux
Pas de réseau sous Windows sudo linwin drivers (§7)
Linux a démarré au milieu de l'installation de Windows rien à faire : linwin relance Windows pour qu'il termine. En manuel, finish refuse tant que Windows n'a pas fini (finish --force pour passer outre)
Le menu GRUB reste caché linwin ajoute /etc/default/grub.d/99-linwin.cfg (Debian, Ubuntu) ou modifie /etc/default/grub ; relance sudo update-grub si besoin
L'interface demande libadwaita 1.5 utilise la ligne de commande

Pour tout autre souci, le journal de l'interface (ou la sortie de la commande) indique l'étape et la raison exacte. linwin status donne l'état complet en JSON.


11. Fonctionnement détaillé et sécurité

  • Démarrage unique : boot crée une entrée UEFI vers WINSETUP et la programme en BootNext : le PC démarre une seule fois dessus, puis reprend son ordre normal.
  • Installation sans intervention : l'installeur Windows (WinPE) lance un script qui charge le pilote de stockage, cherche le disque dont une partition commence exactement au bon octet, puis lance setup.exe avec un fichier de réponses qui n'autorise que cette partition. Au premier démarrage, Windows installe les pilotes réseau, supprime WINSETUP, étend C:, efface les copies du fichier de réponses (le mot de passe y est encodé) et redémarre sous Linux.
  • Finalisation : un service (systemd ou OpenRC) lance linwin finish --auto au démarrage de Linux tant que l'installation est en cours, puis se retire. Il ne finalise que lorsque Windows a réellement terminé son installation (état lu dans Windows\Setup\State\State.ini). Si Linux démarre avant (firmware qui n'a pas suivi l'ordre de démarrage), il relance Windows pour qu'il termine, trois fois au plus.
  • Numérotation des partitions : l'installeur Windows compte les partitions dans leur ordre physique sur le disque, pas par numéro d'entrée GPT. linwin calcule ce rang, et répare l'entrée UEFI de Windows si celui-ci y a écrit un mauvais numéro de partition EFI (cas des tables qui ne sont pas dans l'ordre du disque).
  • Prudence : la table de partitions d'origine est sauvegardée dans /var/lib/linwin/ptable-before.sfdisk ; les signatures existantes ne sont jamais effacées lors des redimensionnements ; une seule opération à la fois (verrou) ; chaque réduction est vérifiée avant la suivante.
  • Téléchargements : ISO chez Microsoft, pilote RST chez Intel (empreintes SHA-256 épinglées), pilotes réseau depuis le catalogue Microsoft Update (SHA-1 publié par Microsoft, puis contrôle de signature par Windows).

Fichiers utilisés :

Chemin Contenu
/usr/local/lib/linwin/ copie de confiance de linwin (root:root)
/var/lib/linwin/state état de l'installation en cours (state.done une fois finie)
/var/lib/linwin/ptable-before.sfdisk sauvegarde de la table de partitions
/run/linwin.log sortie de l'opération en cours
~/.config/linwin/gui.json réglages de l'interface

12. Référence des commandes

linwin [--progress] <commande> [options]

  install                        installe une copie root:root dans /usr/local/lib/linwin
  check                          compatibilité du PC, place disponible, chargeur, pilotes
  status                         état complet en JSON
  plan    --size 100G            partitionnement prévu (ne modifie rien)
  iso     [--lang French]        télécharge l'ISO Windows 10 22H2 dans ~/Downloads
  prepare --size 100G            crée MSR + Windows + WINSETUP (root)
          [--stage-size 8G] [--mode free|shrink] [--yes] [--key-stdin]
  stage   --iso FICHIER          copie l'installeur sur WINSETUP (root)
          [--vmd-driver DOSSIER] [--no-net-drivers]
          [--edition Home|Pro|Education --user NOM [--password-stdin]]
  boot                           démarre l'installeur au prochain redémarrage (root)
  finish  [--force]              nettoyage + Windows dans le menu du chargeur, une fois
                                 l'installation de Windows terminée (root)
  drivers                        copie les pilotes réseau sur un Windows déjà installé (root)
  cancel  [--yes] [--key-stdin]  supprime Windows et rend l'espace (root)
  --version                      affiche la version

--key-stdin lit la passphrase LUKS sur l'entrée standard ; --yes saute la confirmation OUI.


Licence

linwin est un logiciel libre distribué sous licence GNU GPL version 3 ou ultérieure : tu peux l'utiliser, l'étudier, le modifier et le redistribuer, à condition que les versions modifiées restent sous la même licence. Il est fourni sans aucune garantie.


linwin n'est affilié ni à Microsoft ni à Intel. Windows est une marque de Microsoft Corporation. Utilisation à tes propres risques : sauvegarde d'abord.

About

Install Windows 10 dual-boot from Linux without a USB drive — unattended, drivers included, GRUB/systemd-boot/Limine, any distro. Installer Windows 10 depuis Linux sans clé USB.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages