Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Windows Subsystem for Linux