Aracılığıyla paylaş


WSL Eklentileri

Windows uygulamaları artık WSL eklentileriyle Linux için Windows Alt Sistemi'nin (WSL) içinde çalışan Linux işlemleri oluşturabilir ve bunlarla etkileşimde bulunabilir. Bu makalede, bunların nasıl çalıştığına ve bunları kullanmaya nasıl başladıklarına genel bir bakış verilmektedir.

Eklenti işlevselliğini anlama

WSL eklentileri şu temel işlevleri sağlar:

  • Uygulamaların WSL sanal makinesi başlatıldığında başlatılan bir Windows yürütülebilir dosyası belirtmesine izin verir
  • Windows yürütülebilir dosyası, WSL'nin içinde Linux işlemleri oluşturabilir ve sanallaştırılmış yuva kullanarak doğrudan bunlarla iletişim kurabilir

Windows uygulamaları bunları kullanarak WSL deneyimlerini temel alabilir ve Linux için Windows Alt Sistemi ile ilgili ek işlevler sağlayabilir.

Eklenti Yükleme

WSL eklentisi oluşturucusu olarak, eklentinizin DLL dosyasına işaret eden bir kayıt defteri anahtarı ayarlayarak eklentinizi bir makineye yükleyebilirsiniz.

Bir WSL kullanıcısı olarak, kullandığınız tüm uygulamalar WSL eklentilerini normal yükleme işlemlerinin bir parçası olarak otomatik olarak yükler.

Kendi Eklentinizi oluşturma

Eklenti projesi başlatmak için win32 dll oluşturmanız gerekir. Bunu ayarlamanın en basit yolu, WSL eklenti örneği projemizi denemektir. Bunu yapmak için WSL eklentisi örnek deposunu ile git clone yerel bir klasöre kopyalayıp Visual Studio'da açabilirsiniz.

Projeyi açtığınızda lütfen dosyaya dllmain.cpp gidin ve WSL eklentilerinin kullanabileceği işlevlerin listesini görürsünüz.

Daha sonra "Derle" sekmesine basabilir ve projenizi derleyebilirsiniz. Bu, büyük olasılıkla altında wsl-plugin-sample\x64\Debug\WSLPluginSample.dllkullanıma hazır bir DLL çıkışı oluşturur.

Eklentinizi test etme

WSL eklentileri yalnızca dijital olarak imzalıysa çalışır. Bunu test etmek için makinenizde test imzalamayı etkinleştirmeniz gerekir.

Test imzalamayı etkinleştirme ve test sertifikası oluşturma

Yükseltilmiş bir PowerShell Penceresi açın ve şu komutu çalıştırarak test imzalamayı etkinleştirin :

## If this command results in "The value is protected by Secure Boot policy and cannot be modified or deleted"
## Then reboot the PC, go into BIOS settings, and disable Secure Boot. BitLocker may also affect your ability to modify this setting.
Bcdedit.exe -set TESTSIGNING ON

Test imzalama etkinleştirildikten sonra (Yeniden başlatma gerekebilir), yukarıda oluşturulan WSLPluginSample.dll dosyanızın dizininde yer alan yükseltilmiş bir PowerShell komut isteminde bir WSL test sertifikası oluştururuz:

# Create the cert
$certname = "WSLPluginTestCert"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256 -Type CodeSigningCert

# Export it to a local path
Export-Certificate -Cert $cert -FilePath ".\$certname.cer"

# Sign the DLL file
Set-AuthenticodeSignature -FilePath "C:\dev\Path\To\Your\WSLPlugin.dll" -Certificate $cert

Sertifikayı son olarak Güvenilen Kök Sertifika Yetkilisine aktarın:

Import-Certificate -FilePath ".\$certname.cer" -CertStoreLocation Cert:\LocalMachine\Root"

Daha fazla bilgi için otomatik olarak imzalanan sertifika belgeleri oluşturma sayfasına bakın.

Eklentiyi yükleme

Aynı yükseltilmiş PowerShell penceresinde, eklentiyi yüklemek için aşağıdaki komutu çalıştırın ve eklenti DLL'sinin yolunu mevcut yolunuzla değiştirdiğinizden emin olun:

Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Value "C:\Path\to\plugin.dll" -Force

Eklentiyi kullanmak için aşağıdakiler aracılığıyla wsl hizmetini yeniden başlatın:

Stop-Service -Name "wslservice" -Force
wsl.exe echo "test"

Eklentiniz artık yüklenmiş olmalıdır. Eklenti yüklenemediyse daha fazla bilgi için Sorun giderme ve ek bilgiler bölümüne bakın.

İşiniz bittiğinde eklentiyi kaldırmak için bu komutu çalıştırabilirsiniz (Etkili olması için WSL hizmetini yeniden başlatmanız gerekeceğini lütfen unutmayın):

Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Force

Sorun giderme ve ek bilgiler

Yaygın hata kodları:

  • Wsl/Service/CreateInstance/CreateVm/Plugin/ERROR_MOD_NOT_FOUND -> Eklenti DLL'i yüklenemedi. Eklenti kayıt yolunun doğru olup olmadığını denetleyin
  • Wsl/Service/CreateInstance/CreateVm/Plugin/TRUST_E_NOSIGNATURE -> Eklenti DLL'si imzalı değil veya imzasına bilgisayar tarafından güvenilmiyor
  • Wsl/Service/CreateInstance/CreateVm/Plugin/* -> Eklenti DLL'i WSLPLUGINAPI_ENTRYPOINTV1 veya OnVmStarted() içinde bir hata döndürdü
  • Wsl/Service/CreateInstance/Plugin/* -> Eklenti DLL'i OnDistributionStarted() içinde bir hata döndürdü

Eklentiler Linux kullanıcı alanı

ExecuteBinary() aracılığıyla oluşturulan Linux işlemleri WSL2 Sanal Makinesi'nin kök ad alanında çalıştırılır. Bu ad alanı herhangi bir dağıtımla ilişkili değildir ve çok az Mariner tabanlı kök dosya sistemine sahiptir.

Bu dosya sistemi yazılabilir bir tmpfs'dir, yani WSL2 Sanal Makinesi kapatıldığında bu sistemde yapılan tüm değişiklikler bırakılır.

WSL çalışırken çalıştırarak wsl --debug-shell kök ad alanının içeriğini inceleyebilirsiniz.

Dikkat edilmesi gereken ek noktalar

  • Tüm WSL eklenti kancaları zaman uyumlu, yani WSL devam etmeden önce eklenti kancalarının tamamlanmasını bekler.
  • Bir eklenti tarafından döndürülen tüm hatalar WSL tarafından önemli olarak kabul edilir (kullanıcının dağıtımının başlatılmayacağı anlamına gelir)
  • Eklenti kodu WSL hizmetiyle aynı adres alanında çalışır. Eklentideki herhangi bir kilitlenme WSL hizmetinin tamamını kilitler ve veri kaybına neden olur