WSL Interoperabiliteit Herstellen
Als je opeens geen Windows-programma’s meer kunt uitvoeren vanuit WSL — zoals explorer.exe ., code . of clip.exe — en je krijgt foutmeldingen als:
-bash: /mnt/c/Windows/System32/cmd.exe: cannot execute binary file: Exec format error
Dan is de oorzaak vaak een ontbrekend binfmt.d-registratiebestand dat de kernel vertelt hoe hij Windows PE-bestanden moet uitvoeren.
De oplossing
Maak het bestand /usr/lib/binfmt.d/WSLInterop.conf aan met de volgende inhoud:
:WSLInterop:M::MZ::/init:PF
sudo mkdir -p /usr/lib/binfmt.d
echo ':WSLInterop:M::MZ::/init:PF' | sudo tee /usr/lib/binfmt.d/WSLInterop.conf
Start daarna de systemd-binfmt service opnieuw op om de wijziging toe te passen:
sudo systemctl restart systemd-binfmt
Wat dit doet
De binfmt_misc-entry vertelt de Linux kernel dat elk bestand dat begint met de magic bytes MZ (de DOS/PE-header die alle Windows .exe- en .dll-bestanden gebruiken) uitgevoerd moet worden via /init — het WSL interop-binaire bestand — met de vlaggen P (preserve argv[0]) en F (fix binary).
Zonder dit bestand weet de kernel niet wat hij met .exe-bestanden moet doen en weigert hij ze uit te voeren.
Waarom het bestand verdwijnt
Dit bestand wordt normaal geleverd als onderdeel van de WSL Linux kernel-pakketten. Het kan verdwijnen na:
- Een distro-upgrade die WSL-specifieke pakketten overschrijft of verwijdert
- Handmatig opruimen van
/usr/lib/binfmt.d/ - Het installeren van een minimale of containergerichte distro-image die het nooit bevatte
Verifiëren
Controleer na het herstarten van systemd-binfmt of de entry actief is:
cat /proc/sys/fs/binfmt_misc/WSLInterop
De uitvoer moet beginnen met enabled. Test het daarna:
explorer.exe .
De huidige map zou moeten openen in Windows Verkenner.