Skip to content

Latest commit

 

History

109 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vfioctl

🇹🇷 Bir dizüstünün harici ekran kartını (dGPU) Windows misafirine devreden VFIO passthrough kurulumunu kuran, ölçen ve süren CLI aracı. 🇬🇧 CLI tool that installs, checks and drives a VFIO passthrough setup which hands a laptop's discrete GPU to a Windows guest.

Durum: yol uçtan uca çalışıyor, bu makinede ölçülmüş hâliyle. Boş bir diskten, kartı devredilmiş ve Looking Glass'ın o kart üzerinde yakaladığı bir Windows misafirine kadar her adım burada — donanım kapısı (doctor), host kurulumu (install/selftest), misafir inşası ve sürülmesi (guest), ek cihaz devri (inventory, guest usb, guest nvme). Dört fazın dördü de kapandı.

İki belge var: bu dosya ne yapılır sorusunu cevaplar. Neden böyle sorusunun cevabı — elenen yollar, olmayan bayrakların gerekçesi, her kararın önlediği arıza — docs/TASARIM.md'dedir. Bir şeyi değiştirmeden önce orası okunur.


Gereksinimler

libvirt, qemu, edk2-ovmf, swtpm, virtio-win, xorriso, Python 3.11+ (tomllib için). Looking Glass için AUR'dan looking-glass + looking-glass-module-dkms (DKMS çekirdek başlıklarını ister). Secure Boot anahtarlarını kuracaksanız virt-firmware (extra) — yalnız o yol için.

Bu araç paket kurmaz — eksik olanı ölçer ve komutu basar. Python tarafında depo dışı bağımlılık yok. Windows kurulum ISO'su kullanıcının kendisi tarafından sağlanır; bu depo misafire ait hiçbir dosyayı indirmez.

Donanım sınıfı: dGPU + iGPU taşıyan, MUX'lu, dGPU'sunun IOMMU grubu izole olan ASUS dizüstüler. Makinenizin uyup uymadığını vfioctl doctor söyler — tahmin gerekmez. Kapsam dışı: tek GPU'lu makineler, AMD dGPU'ların reset bug'ı. → Kapsam

Kurulum

git clone https://github.com/drpars/vfioctl && cd vfioctl && makepkg -si

makepkg base-devel ister; depends yalnızca python ve libvirt, geri kalan her şey optdepends.

Kurulduktan sonra komut vfioctl (ağaç /usr/lib/vfioctl'e kurulur, /usr/bin/vfioctl ona symlink'tir). Klondan da koşabilirsiniz: ./vfioctl — ikisi aynı şeydir, ama bir istisnayla: install --check'in hükmü kurulu koda göredir, o yüzden doğrulama kurulu komutla yapılır.

Otomatik güncelleme kanalı yoktur. Araç AUR'da değil, yani pacman -Syu onu tazelemez; güncelleme git pull && makepkg -si.

Yeni bir klonda bir kez, sızıntı taramasını bağlamak için:

git config core.hooksPath .githooks

Kullanım — sıfırdan çalışan bir misafire

Bu bölüm tek bir yolu baştan sona anlatır: boş bir NVMe'den başlayıp, ekran kartı devredilmiş, Secure Boot altında açılan, lisanslı ve arındırılmış bir Windows misafirine varmak. Hiç vfioctl kullanmamış biri sırayı yukarıdan aşağı izleyerek bitirebilir — her adım ne yazacağını, ne göreceğini ve nerede durması gerektiğini söyler.

Örnek domain adı win11-nvme, örnek misafir kullanıcısı pars; ikisi de sizin seçiminiz (--name, --user).

Kurulan konfigürasyon:

Ne Nasıl Ne kazandırıyor
sistem diski fiziksel NVMe denetleyicisi (kip 2) misafir diski yerli NVMe olarak görür, bölümlemeyi kendi yapar
boyut --memory 12288 · --vcpu 8 (öntanım) aralığı makineye göre doctor yazar
firmware --secure-boot misafir zorlayıcı Secure Boot altında açılır
kimlik --host-smbios Windows bu makinenin dijital lisansıyla etkinleşir
arındırma --debloat + --disable-defender önyüklü uygulamalar, telemetri, cihaz şifrelemesi, Defender
ekran kartı passthrough + setup dGPU misafire geçer, host iGPU'da kalır

Bu makinede ölçülen süre (2026-09-03): kurulum turu 6 dk 15 sn gözetimsiz, misafir tarafı 8 dk 11 sn; aradaki adımlar saniyeler sürer. Disk silme buna dahil değil (bu denetleyicide birkaç saniye).

Klavyenin başında olmanız gereken iki an var, gerisi gözetimsiz. (1) 5. adımın ilk saniyesinde sudo grafik onay penceresi açılır ve 60 sn sonra dolar; cevaplanmazsa tur hiçbir şey yazmadan durur ve disk el değmeden kalır. (2) 9. adım düz bir VT'den koşulur — sebebi orada yazılı.

Kip 1'i (sistem diski bir qcow2 imajı) arıyorsanız değişen tek şey 5. adımın komut satırıdır: 4. adım düşer, gerisi birebir aynı sırayla yürür. Farkı 5. adımın sonunda duruyor.

0. Elinizde ne olmalı

Başlamadan önce üç şey:

  • Windows 11 kurulum ISO'su. Bu makinede ölçülen medya tr-TR 25H2'dir.

  • Kaybetmeye razı olduğunuz bir NVMe diski. 4. adım onu siler; 5. adım zaten baştan bölümlüyor. Boot diskiniz olmadığından emin olun — 3. adım hangisinin hangisi olduğunu model ve seri numarasıyla söyler.

  • Misafirin parolası bir dosyada. Komut satırına yazılmaz, ps çıktısına düşmesin:

    mkdir -p ~/.images
    (umask 077; cat > ~/.images/win11-nvme.pass)   # parolayı yaz, Ctrl+D ile bitir

    umask 077 dosyayı doğuşundan 0600 yapar, ve parola cat'in girdisinden geçtiği için kabuk geçmişine düşmez. Dosyayı hiç istemiyorsanız 5. adımda --password-file'ı atlayın: araç parolayı sorar (ama o zaman tur gözetimsiz değildir).

1. Bu makine uygun mu

vfioctl doctor

Hiçbir şey yazmaz, her makinede koşar. Çıkış kodu: 0 kapı açık, 1 kapalı, 2 bu makine için profil yok. Profil eşleşmezse donanımı keşfeder ve profil yazmaya değip değmeyeceğini söyler.

Rapor üç bölümdür: sert ölçütler (kapıyı belirler), yumuşak ölçütler, ve seans yarısı — grafik oturumunuzun dGPU'ya dokunup dokunmadığı. Sonuncusu kapıyı etkilemez ama devri belirler; geçmiyorsa doctor ne gerektiğini ve nereye kurulacağını basar. Bu yarıyı vfioctl yazmaz, sahibi sizin masaüstü yapılandırmanızdır. → Seans yarısı

Yeni bir makine eklemek: profiles/ altındaki .toml'u kopyalayın, DMI dizgelerini ve PCI kimliklerini değiştirin, doctor koşun. Zorunlu iki şey: kartın IOMMU grubunda kartından başka bir şey olmaması, ve host'un ekranını taşıyacak ikinci bir GPU bulunması.

2. Host tarafını kur

vfioctl install --check    # önce: /etc ile aranda ne fark var
vfioctl install            # dokuz parçayı yaz, sonra makineyi okuyup doğrula

Yazılan sekiz dosya: iGPU'ya kararlı ad veren udev kuralı, dGPU'yu seat envanterinden çıkaran kural, X greeter'ını karttan uzak tutan Xorg anahtarı (X sunucusu başlatmayan bir greeter'da — greetd+tuigreet — okunmaz, yine de yazılır), devir hook'u + vfio.conf, ve Looking Glass'ın host yarısı (kvmfr'nin modules-load/modprobe/udev üçlüsü). Dokuzuncu parça qemu.conf'un cgroup_device_acl satırı — üretilen değil düzenlenen tek yer.

Araç root koşmaz; yetki yazma anında, komut başına alınır. Looking Glass eksikse kurmaz — ölçer ve kurulum komutunu basıp durur.

install --check tek seferlik bir doğrulama değil, kalıcı bir araçtır: /etc kayar, paket güncellemesi dosya geri koyar. Sorusu şu — bu makine hâlâ kurduğumuz şey mi?install

install bittiğinde makineyi kendisi okuyup doğrular: udev kurallarını tazeler ve tetikler, kvmfr'nin yüklü olup olmadığına ve boyutuna bakar, koşan Xorg'da NVIDIA GPU screen'i kaldı mı diye sorar. Yeniden başlatma gerekiyorsa bunu size o söyler — körlemesine reboot etmeniz gerekmez.

3. Neyi devredeceğine karar ver

vfioctl inventory

PCI ve USB cihazlarını, her birinin host'a bedeliyle listeler. Yalnızca rapordur, hiçbir şey uygulamaz. İşaretler: ölçülen bedel yok · ! bedeli var, yine de devredilir · reddedilir.

Sistem diski olacak denetleyicinin PCI adresini buradan alırsınız. NVMe satırları kimliği de taşır, çünkü 5. adım o adreste ne bulursa onu bölümlüyor ve onayında diski model + seriyle adlandırıyor — seçtiğiniz satır aynı kimliği taşımazsa iki cümleyi ancak disk gittikten sonra karşılaştırabilirsiniz:

  ✓ 0000:02:00.0  c0a9:540a  grup 15  nvme
      NVMe depolama
      disk: CT1000P3PSSD8 2306E6A91DBB
  ✗ 0000:05:00.0  1e0f:0033  grup 18  nvme
      NVMe depolama
      disk: KIOXIA-EXCERIA PLUS G4 SSD 4FFKF07TZ2V4
      host'un depolaması: nvme0n1p1 → /efi (bağlı, fstab); nvme0n1p2 → / (bağlı, fstab)

Kimlik satırı denetleyici vfio-pci'ye geçtiğinde susar — okunacak nvme düğümü kalmaz, ve isim vermemek hatırlanmış bir isim vermekten dürüsttür.

"boş" demek değildir. Araç disk içeriğini hiç okumaz; veri dolu ama bağlı olmayan bir disk de alır. Kip 2'nin EVET onayı tam da bu yüzden var. → inventory

4. Diski sıfırla

Bu adım vfioctl'in işi değil, sizin adımınız — ve bilerek: "sil" komutu yalnız imzayı mı, namespace'i mi, yoksa biçimlendirmeyi mi kastettiğinize göre başka başka şeyler demek. 5. adım diski zaten baştan bölümlüyor, yani sıfırlama zorunlu değil; üstünde eski bir Windows, BitLocker meta verisi ya da tanımadığınız bölümler varsa temiz bir sayfayla başlamak teşhisi kolaylaştırır.

Aşağıdaki yol bu denetleyicide ölçüldü. Önce ne desteklediğini sorun:

sudo nvme id-ctrl /dev/nvme1 | grep -E '^(sn|mn|fna|oacs)'

fna'nın 2. biti (0x4) kriptografik silmenin desteklendiğini söyler. Bu diskte fna = 0x1, yani desteklenmiyor--ses 2 reddedilir, kalan yol --ses 1 (User Data Erase):

sudo nvme format /dev/nvme1 --ses 1 --force

⚠ Hedefi denetleyiciden doğrulayın, lsblk'in numarasından değil. nvmeN numarası keşif sırasına göre dağıtılır ve disk eklenince kayar. Bağlayıcı eşleme sysfs'te:

for c in /sys/class/nvme/nvme*; do
  printf '%s  pci=%s  %s %s\n' "$(basename $c)" \
    "$(basename $(readlink -f $c/device))" "$(cat $c/model)" "$(cat $c/serial)"
done
  1. adımın verdiği PCI adresi burada hangi nvmeN'e düşüyorsa hedef odur.

Silme bittikten sonra iki şey yapılır:

sudo blkid -p /dev/nvme1        # rc=2 ve çıktı yok = imza kalmadı
sudo blockdev --rereadpt /dev/nvme1

İkincisi atlanmaz. Format medyayı siler ama çekirdeğin bölüm tablosu bayat kalır: lsblk silinmiş bölümleri göstermeye devam eder ve silme başarısız olmuş gibi görünür. --rereadpt'ten sonra disk tek satıra iner.

blkid'i root olarak çağırın: yetkisiz blkid diski sondalamaz, /run/blkid/blkid.tab önbelleğinden rc=0 ile eski bir cevap verir — bir kez verdi (aynı bölüm, aynı dakika: ntfsBitLocker). -p yetkisiz koşuda rc=2 + "Erişim engellendi" ile açıkça düşer, temiz bir olumsuz üretmez.

5. Misafiri kur

Bu bölümün kurduğu tur tek komuttur — adres 3. adımdan, parola dosyası 0. adımdan gelir:

vfioctl guest --name win11-nvme build \
  --system-nvme 0000:02:00.0 \
  --memory 12288 \
  --secure-boot --host-smbios --debloat --disable-defender \
  --win-iso ~/İndirilenler/win11.iso \
  --user pars --password-file ~/.images/win11-nvme.pass \
  --confirm-wipe

Gerisi gözetimsizdir: cevap dosyasını üretir, domain'i tanımlar, Secure Boot anahtarlarını varstore'a kurar, Windows'u kurar, virtio sürücülerini ve qemu-guest-agent'ı yerleştirir, misafiri arındırır, Defender'ı kapatır.

Turun içindeki sıra sabittir ve size yalnız ilk saniyede ihtiyacı var: sudo cat (seri + UUID) → diskin geri okuması → tanım → SMBIOS geri okuması → Secure Boot anahtarları → ilk başlatma. sudo penceresi cevaplanmadan hiçbir şey yazılmaz ve disk el değmeden kalır.

Ne göreceksiniz. Bu makinede ölçülen tur — 6 dk 15 sn, rc=0 (2026-09-03, r106.g78c5488-1, tr-TR 25H2 medyası). Kırpılmış hâli:

[19:19:05] boyut: 12288 MiB RAM (üst sınır 23711; host'a 15519 MiB kalıyor) · 8 / 16 işlemci
[19:19:05] $ sudo cat /sys/class/dmi/id/product_serial /sys/class/dmi/id/product_uuid
[19:19:09] sistem diski olacak: CT1000P3PSSD8 2306E6A91DBB (c0a9:540a) @ 0000:02:00.0
[19:19:09]   BU TUR O DİSKE KURAR: cevap dosyası DiskID 0'ı baştan bölümlüyor, üstünde ne varsa gider.
[19:19:10] Secure Boot kuruldu: PK+KEK+db kurulu, SecureBootEnable açık
[19:19:12] CD istemi için 15 sn ENTER gönderiliyor
[19:19:27] ajan bekleniyor (en fazla 45 dk) -- her 2 dk'da ekran görüntüsü
[19:24:25] ajan yanıt verdi -- 4 dk 58 sn
[19:25:08] TUR GEÇTİ -- ajan ulaşılabilir, konsol oturumu şu an açık, autologon yeniden yazıldı.
[19:25:10] ===== debloat raporu: win11-nvme
[19:25:10]   kaldırma: 63 adım -- 38 removed, 0 not removed, 25 not installed
[19:25:10]   registry: 71 yazma, 71 doğrulandı, 0 tutmadı
[19:25:12]   specialize süresi: 66 sn (kurulum toplamının içinde)
[19:25:14]     PE | --- diskpart / --- apply / --- bcdboot
[19:25:20]     NOW | açılışta WinDefend Start=0x4 servis=1/4 tamper=False -> Defender KAPALI
[19:25:20]   sıradaki: vfioctl guest --name win11-nvme setup

Okumanın anahtarı iki satır. 0 not removed — seçicilerin hiçbiri denenip başarısız olmadı; 25 not installed bir kusur değil, o paketler bu 25H2 imajında zaten yok. Ve registry: 71 yazma, 71 doğrulandı — her yazma geri okundu.

Bittiğinde misafir koşuyor bırakılır. Durumu tek komutla doğrulayın:

vfioctl guest --name win11-nvme status

Bu turda dönen hâli — üç satır da bu bölümün üç bayrağının kanıtıdır:

domain : win11-nvme -> running
SB     : anahtarlı | kayıt 2026-09-03 -- PK+KEK+db kurulu, SecureBootEnable açık
SMBIOS : ASUSTeK COMPUTER INC. ROG Strix G513RM_G513RM | BIOS G513RM.327 | seri …XXXX UUID …XXXX -- host'la eşleşiyor
         misafir: ASUSTeK COMPUTER INC. ROG Strix G513RM_G513RM, BIOS G513RM.327 -- tanımla eşleşiyor
         lisans : etkin (LicenseStatus=1: etkin; Windows(R), Professional edition)
ajan   : yanıt veriyor
LG     : istemci B7 | misafir ?  (karşılaştırılamadı)

LG satırının misafir yarısı burada ? olmalı — Looking Glass'ın misafir yarısını 9. adım kuruyor. Şimdi dolu olması beklenmez.

Bayrakların hiçbiri zorunlu değil ve öntanımları kapalıdır; ne yaptıkları ve ölçümleri aşağıda tek tek yazılı.

⚠ Kip 2 diski baştan bölümlüyor. Komut diski model + seri ile yazar ve EVET yazmanızı bekler; --confirm-wipe o soruyu geçer. Terminal yoksa tur reddedilir — sorulacak kimse olmaması onay değildir.

Gözetimsiz koşarken sorulan her soru için ayrı bir bayrak var, ve bu bilerek böyle — bir soru için yazılan onay başka bir soruyu cevaplamasın diye. Terminal yoksa ilgili bayrak verilmedikçe komut reddeder; sorulacak kimse olmaması onay sayılmaz.

Soru Soran komut Geçen bayrak
bu fiziksel disk baştan bölümlensin mi build --system-nvme --confirm-wipe
sistemi fiziksel diskte olan domain'in tanımı kaldırılsın mı clean, build --force --confirm-undefine
domain hâlâ cevap dosyası ISO'su taşıyor, ikinci disk takılsın mı nvme --attach --confirm-unattended
kart devri düz VT yerine masaüstünden koşsun mu setup, selftest --yes
BitLocker/PCR7 uyarısı okundu mu secureboot --yes

build'in --yes'i yok, ve bu bilerek — onayları --confirm-wipe ve --confirm-undefine diye ayrı ayrı adlandırıldı, çünkü tek bir --yes bir soru için yazılıp başka bir soruyu cevaplardı. → TASARIM.md, build bölümü.

Secure Boot: --secure-boot (öntanımlı kapalı). Domain tanımlandıktan sonra, misafir ilk kez başlatılmadan önce Microsoft anahtarlarını varstore'a yazar. virt-firmware (extra) ister; yoksa tur başında reddedilir, sessizce atlanmaz. Var olan bir domain için ayrı komut: vfioctl guest --name <ad> secureboot (misafir kapalı olmalı; varstore'un yedeğini alır, boot girdilerini korur). Durum guest status'ün SB satırında:

SB     : anahtarlı | kayıt 2026-09-01 -- PK+KEK+db kurulu, SecureBootEnable açık

⚠ NVRAM silinirse Secure Boot sessizce kapanırguest clean, build --force, virsh undefine --nvram. Hata yok, çıkış kodu 0, misafir açılıyor; XML de söylemez. Gördüğünüz tek yer status'ün ÇELİŞKİ satırıdır. Neden ikinci bir sinyal tutulduğu, kancanın neden tam o pencerede olduğu ve sondanın kapsamı → TASARIM.md, --secure-boot bölümü.

⚠ BitLocker. Secure Boot durumu değişince PCR7 değişir; disk BitLocker'lı ise Windows açılışta kurtarma anahtarı isteyebilir ve anahtar elde değilse misafir açılmaz. --adopt turu ve secureboot komutu bunu uyarır. Diske root sondasıyla bakın: sudo blkid -p <bölüm>. Yetkisiz düz blkid diski sondalamaz, önbellekten rc=0 ile eski bir cevap verebilir — bir kez verdi (aynı bölüm, aynı dakika: ntfsBitLocker).

Hangi misafir şifreleniyor, ölçüldü: yalnız kip 2 (sistem diski fiziksel NVMe). Orada --debloat'suz bir kurulum, kurulum bitişinden ~6 dk sonra OOBE'de kendiliğinden BitLocker açıyor — koruyucusu clear key, yani bugün PCR7 riski yok ama koruma da yok. qcow2 misafir Secure Boot altında da şifrelemiyor. Riski kapatmanın yolu --debloat (yukarıda).

Host kimliği (SMBIOS): --host-smbios (öntanımlı kapalı). Misafir öntanımlı olarak QEMU'nun tablolarını görür ve öyle kurulan bir Windows bu makinenin dijital lisansıyla etkinleşmez (ölçüldü: LicenseStatus=5). Bayrak, host'un type 0 ve type 1 tablolarını /sys/class/dmi/id'den okuyup domain'e yazar; misafir kendini bu dizüstü olarak görür ve lisansı bulur. Seri ve UUID root ister: tur başında tek bir sudo cat, okunamazsa tur reddedilir. Değerler yalnız libvirt'in tanımına gider — hiçbir günlüğe, ekran çıktısına (maskeli basılır) ya da bu depoya girmez.

Lisans sorusunu cevaplar, gizlenme sorusunu değil: hypervisor CPUID biti, KVM imzası, Hyper-V vendor_id ve ACPI OEM kimlikleri olduğu gibi kalır.

Var olan bir domain için: vfioctl guest --name <ad> smbios (misafir kapalı olmalı; --off kaldırır, misafir QEMU'nun tablolarına döner). Durum guest status'ün SMBIOS satırında, üç okuma alt alta — tanım ne yazıyor ve host'la eşleşiyor mu, misafir ne görüyor, Windows kendini lisanslı sayıyor mu:

SMBIOS : ASUSTeK COMPUTER INC. ROG Strix G513RM_G513RM | BIOS G513RM.327 | seri …XXXX UUID …XXXX -- host'la eşleşiyor
         misafir: ASUSTeK COMPUTER INC. ROG Strix G513RM_G513RM, BIOS G513RM.327 -- tanımla eşleşiyor
         lisans : etkin (LicenseStatus=1: etkin; Windows(R), Professional edition)

⚠ Dize değişirse lisans gider. Araç host'un tablolarını "sadık" değil etkinleşen biçimde yazar (virgül atılmış, alanlar sabit sırada) ve turdan tura bayt bayt aynı tutar; dijital lisans Microsoft tarafında bu dizelerin hash'iyle duruyor. Misafir tabloları ancak yeniden başlatınca görür — smbios tanıma yazar, koşan misafire değil. Ölçüm (iki biçim, tek değişken), neden <qemu:commandline> ve neden libvirt'in <sysinfo>'su değil → TASARIM.md, --host-smbios bölümü.

Boyut ve diğer bayraklar

--memory (MiB) ve --vcpu misafirin boyunu verir; ikisi de öntanımlı (8192 / 8), yani yazmasanız da tur koşar. Kabul edilen aralığı araç söylerdoctor alt ve üst sınırı basar, guest build kullandığı değeri aynı tavanın yanında:

$ vfioctl doctor
Kapasite : 27807 MiB RAM · 16 işlemci
           misafire: --memory 4096–23711 MiB — host'a 4096 MiB kalır, bellek paylaşılmaz
                     --vcpu 2–16 (çift) — işlemci paylaşılır, üstü kabul edilir ama uyarır

Bellekte üst sınır red, işlemcide uyarı — ayrımın sebebi ve ölçümü, tavanın nereden geldiği, ve aracın neden sizin yerinize bir sayı önermediği → TASARIM.md, --memory ve --vcpu bölümü.

⚠ Büyük misafir, host'un hazırda bekletilmesini kapatır. Misafir belleği pinlenir — 4 GiB'lik bir misafirde VmLck ≈ 4,12 GiB ölçüldü (2026-08-18, bu makine, kart devredilmişken), yani tanımlının tamamı. Pinli sayfa hem hazırda bekletme için "gerekene" eklenir hem "mevcuttan" düşer, o yüzden marj misafir RAM'inin her +1 GiB'inde ~2 GiB kapanır (ölçüldü: 4 GiB misafirle marj 2,18 GiB, misafirsiz 8,59 GiB). Bu bölümün seçtiği 12288 MiB, misafir koşarken host'u hazırda bekletme yolunu kapatır; sınır swap değil RAM'dir, swap büyütmek açmaz. Misafir kapalıyken kısıt yok, ve kart devri etkilenmiyor.

Diğerleri: --size (qcow2 boyu, öntanımlı 64G, yalnız kip 1), --locale (öntanımlı tr-TR), --timezone, --virtio-iso, --force (tanımlıysa önce temizle), --setup (tur bitince adım 9'u da koş), --adopt (kurulu bir diski sahiplen — kurmaz). Tamamı için vfioctl guest build --help.

Misafiri arındırmak: --debloat ve --disable-defender

İkisi de öntanımlı kapalı, ve ayrı bayraklar çünkü ayrı anlara yazıyorlar.

--debloat specialize'da koşar — çalışan Windows'un içinden: önyüklü uygulamaları bir katalogdan kaldırır, Başlat'ın sabitlenmiş ızgarasını boşaltır, telemetriyi kısar, SmartScreen/SAC'ı kapatır, cihaz şifrelemesini engeller (PreventDeviceEncryption), özellik güncellemelerini erteler. Kataloğun bugünkü boyunu turun kendi raporu basar (5. adımda: 46 paket + 15 capability + 2 feature = 63 adım); buraya bir sayı yazılmıyor, çünkü bir kez yazıldı ve seçici eklenince altı ayrı yerde dondu. Her adım misafirde C:\Users\Public\vfioctl-debloat.jsonl'e yazılır ve her registry yazması geri okunur; tur sonunda özetlenir, sonradan vfioctl guest --name <ad> debloat yeniden okur.

Izgara neden ayrıca sayılıyor. Bir uygulamayı kaldırmak sabitlemesini kaldırmaz: döşeme "Store'dan indir" güdüğü olarak kalır, ve misafir her şey silinmişken el değmemiş görünür. Bir tur bu yüzden yanlış okundu.

Şifreleme engeli yalnız kip 2'de bir şey ifade eder — ölçüldü. qcow2 misafir Secure Boot altında da, host SMBIOS kimliğiyle de zaten hiç şifrelemiyor; şifreleyen tek konfigürasyon fiziksel NVMe, ve orada --debloat'suz bir kurulum OOBE'de (kurulum bitişinden ~6 dk sonra) clear key'li BitLocker doğuruyor. Bayrakla kurulan aynı konfigürasyon +17 dk'da hâlâ şifresiz.

--disable-defender kurucuyu değiştirir — imajı Windows Setup değil vfioctl uygular (WinPE'de diskpart + dism /Apply-Image + bcdboot), sonra Defender'ı offline kovanda kapatır. Sebebi tek cümle: Defender çalışan bir Windows'un içinden kapatılamaz, ve Setup imajın offline olduğu anı hiç vermez.

vfioctl guest --name win11-test build --debloat --disable-defender \
  --win-iso ~/İndirilenler/win11.iso \
  --user pars --password-file ~/.images/win11-test.pass

--debloat tek başına Defender'ı kapatamaz. Çalışan Windows'un içinden yazar, ve Tamper Protection o yazmayı reddeder (ölçüldü: rc=1, WinDefend Start 2'de kaldı). SmartScreen ve SAC — Defender servisi değiller — yine kapanır. Tepsiyi gizleyip bildirimleri susturan anahtarlar yalnız Defender gerçekten kapalıysa yazılır: açık ama sessiz bir Defender en kötü durumdur.

--disable-defender'ın etki alanı büyüktür — imajı bu araç uyguluyor, ve bir hata kurulumu yarıda bırakır. pe-install.cmd'nin her adımı denetlenir ve hata durdurur: ekran açık kalır, günlük hedefe kopyalanır, reboot edilmez. Yani turun yeniden başlaması tek başına "adımlar geçti" demektir.

Tur sonunda kanıt iki bağımsız kanaldan basılır: WinPE günlüğü ve açılmış sistemdeki WinDefend servisi — "kapalı" ancak ikisi birden söylüyorsa yazılır. Üç kolun üçü de bu makinede ölçüldü (kip 1 SB'siz, kip 1 SB'li, kip 2 dört bayrak birlikte); mekanizma, ölçümler ve süre karşılaştırması → TASARIM.md, --debloat ve --disable-defender bölümü.

Kip 1 farkı — sistem diski bir qcow2 imajı

Bu bölümün geri kalanı ikisinde de aynıdır; değişen yalnız bu komut. 4. adım (disk silme) düşer, --confirm-wipe gerekmez, --size yalnız burada geçerlidir:

vfioctl guest --name win11-nvme --disk ~/.images/win11-nvme.qcow2 build \
  --size 64G --memory 12288 \
  --secure-boot --host-smbios --debloat --disable-defender \
  --win-iso ~/İndirilenler/win11.iso \
  --user pars --password-file ~/.images/win11-nvme.pass

İki kip birbirini dışlar: --system-nvme ile --disk/--size aynı satırda verilmez.

--debloat'ın cihaz şifrelemesi engeli kip 1'de bir şey ifade etmez — ölçüldü: qcow2 misafir Secure Boot altında da, host SMBIOS kimliğiyle de hiç şifrelemiyor. Öteki üç bayrak iki kipte de aynı işi yapar.

Ölçülen süreler

Hepsi bu makinede, elle adım olmadan:

Tur Süre
kip 2 + dört bayrak, --memory 12288 (2026-09-03) 6 dk 15 sn
kip 2 + dört bayrak, öntanım bellek (2026-09-03) 6 dk 49 sn
kip 2, bayraksız 8 dk 34 sn
kip 2, ilk ölçüm 8 dk 8 sn
kip 1, bayraksız 7 dk 33 sn

Dört bayrak turu kısaltıyor, uzatmıyor: --debloat'ın specialize'ı ~66 sn ekliyor ama --disable-defender'ın dism /Apply-Image yolu Windows Setup'ın kendi imaj uygulamasından hızlı. Her satır n=1.

6. Kurulum ortamını çıkar

Misafiri kapatın, sonra:

virsh -c qemu:///system shutdown win11-nvme
until [ "$(virsh -c qemu:///system domstate win11-nvme)" = "shut off" ]; do sleep 2; done
vfioctl guest --name win11-nvme eject --all

virsh shutdown işi zamanlar, yapmaz — çıkış 0 ile hemen döner, misafir hâlâ koşuyordur. Beklemeden çağrılan eject "domain kapalı değil" der. Ölçüt domstate, komutun çıkış kodu değil.

Bu adım atlanmaz. build cevap dosyası ISO'sunu takıyor ve kendisi çıkarmıyor; kalırsa sonraki açılış gözetimsiz Setup'ı yeniden koşturabilir — ve cevap dosyası DiskID 0'ı siliyor. Varsayılan yalnız cevap dosyasını çıkarır; --all kurulum ISO'sunu ve virtio-win'i de çıkarır. Hiçbir dosya silinmez, ISO'lar yerinde durur.

Domain kapalı olmalı ve bu aracın işaretini taşımalı — build'in tanımlamadığı bir domain'e dokunmaz.

Boş sürücüler kalır, ve bu varsayılan bilerek böyle: ortam gider, <disk device='cdrom'> durur. Misafirin içinde bu üç boş CD sürücüsü olarak görünür (D:, E:, F:) ve harfleri tutar. İstemiyorsanız:

vfioctl guest --name win11-nvme eject --all --drives

--drives sürücüleri de söker. --all ile birlikte verilir — sürücü giderken ortamı da götürür, ve "kurulum ISO'su da gitsin mi" --all'ın sorusudur. Aynı veriyolunda cdrom olmayan bir disk varsa reddeder: sürücüyü sökmek altındaki birimleri yeniden numaralar ve kurulmuş bir misafir sürücü harflerini hatırlar. Bu araç kurduğu hiçbir kipte oraya disk koymuyor (kip 2'de sistem diski devredilmiş NVMe, kip 1'de virtio), yani pratikte hep geçer.

Ölçüldü (2026-09-03, kip 2): üçü de sökülünce geriye tek boot order NVMe hostdev'inde kaldı, misafir açıldı, Secure Boot yerinde, ve içeride Win32_CDROMDrive 0C: tek mantıksal disk. Geri istenirse virsh edit ile bir <disk device='cdrom'> bloğu; yeni bir build zaten kendi sürücülerini yazar.

7. Konsol oturumunu aç

virsh -c qemu:///system start win11-nvme

# ajan hazır olana kadar bekleyin -- bu makinede 8 sn sürdü
until virsh -c qemu:///system qemu-agent-command win11-nvme \
        '{"execute":"guest-ping"}' >/dev/null 2>&1; do sleep 2; done

vfioctl guest --name win11-nvme autologon \
  --user pars --password-file ~/.images/win11-nvme.pass

Bekleme döngüsü ölçüt olarak ajanın kendi cevabını kullanır; virsh start işi zamanlar, yapmaz — çıkışı 0 döndüğünde misafir henüz açılmamıştır. autologon ajan gelmeden çağrılırsa "ajanı yanıt vermiyor" der ve düşer.

Bu adım da atlanmaz, ve sebebi Windows'tur: 11 25H2'nin OOBE temizliği bir sonraki oturum kapanışında yeniden koşuyor ve AutoAdminLogon'u siliyor — misafir kilit ekranında oturur. build'in "autologon kalıcı" çıktısı kendi yaptığı yeniden başlatmayı ölçer, tam bir kapat/aç turunu ölçmez.

Looking Glass bir oturumu yakalar; açık konsol oturumu yoksa yakalanacak bir şey de yoktur. Etkisi bir sonraki açılışta görünür.

8. Kartı domain'e ver

Önce misafiri kapatın. 7. adım onu koşar hâlde bıraktı ve bu komut koşan bir domain'i reddeder — ölçüldü: 'win11-nvme' şu an 'running' -- kart yalnızca kapalı bir domain'e eklenir (rc=1, hiçbir şey yazılmadan).

virsh -c qemu:///system shutdown win11-nvme
until [ "$(virsh -c qemu:///system domstate win11-nvme)" = "shut off" ]; do sleep 3; done

vfioctl guest --name win11-nvme passthrough        # geri almak: --off

Yalnızca kapalı bir domain'i düzenler ve managed='no' yazar — kartı libvirt değil, devir hook'u taşır (tek yazar).

Neden bu adım 7'den sonra: kart takılı olmayan bir açılışta yapılan autologon kartsız bir provadır, yani riskli an tek bir yere — 9. adıma — toplanır. Sıra tersine çevrilirse konsol oturumunu açan ilk açılış aynı zamanda devrin yapıldığı açılış olur.

Kart iki tanımda birden duruyorsa komut bunu bildirir, reddetmez (günlük misafir + test misafiri sırayla başlatılır); ikisi aynı anda koşamaz, ikincisi başlatmada reddedilir. Bu turda basılan hâli:

[19:27:39] 'win11-nvme' aldığı PCI işlevleri: 0000:01:00.0 0000:01:00.1 0000:02:00.0
[19:27:39]   DİKKAT: aynı cihazı isteyen başka tanım var: win11
[19:27:39]     iki tanımda birden duran işlevler: 0000:01:00.0 0000:01:00.1
[19:27:39] Bundan sonrası düz VT'den koşulur: vfioctl guest --name win11-nvme setup --start

Başlatmadan önce ucuz ve yan etkisiz bir sonda:

virsh -c qemu:///system dumpxml win11-nvme \
  | VFIO_HOOK_CHECK=1 /etc/libvirt/hooks/qemu.d/50-vfio-handover

Bu turda dönen hâli:

configured: 0000:01:00.0 0000:01:00.1
hostdev:    0000:01:00.0 0000:01:00.1 0000:02:00.0
nvme audit: 0000:02:00.0 ok -- CT1000P3PSSD8 2306E6A91DBB
result:     handover

result: handover (rc 0) = hook devri üstlenecek. HOST-MOUNTED satırı görünüyorsa başlatmayın. result: unconfigured (rc 2) hook'un yapılandırılmadığını söyler. nvme audit satırı 5. adımda kaydedilen disk kimliğinin adreste hâlâ durduğunu doğrular — disk takası adresleri kaydırdığı için bu her başlatmada yeniden sorulur.

9. Devri koş ve misafir tarafını kur

⚠ Devir turu düz bir VT'den koşulur (Ctrl+Alt+F3), ya da başka bir makineden ssh ile. Sebep: aradığınız arıza grafik oturumunu öldüren arızadır, o oturumun içindeki bir kabuk onunla birlikte ölür.

vfioctl guest --name win11-nvme setup --start

--start domain'i başlatır (kartı hook devreder), ajanı bekler, sonra misafir betiklerini sırayla sürer: NVIDIA sürücüsü → sanal ekran (VDD) → Looking Glass → tek ekran topolojisi. Sıra bir bağımlılıktır, keyfi değil.

Domain zaten kartla koşuyorsa riskli an geçmiştir; --start olmadan masaüstünden de koşabilirsiniz. Günlük: $XDG_STATE_HOME/vfioctl/setup.log (öntanımlı ~/.local/state/vfioctl/).

Bittiğini nereden bilirsiniz. Son satır KURULUM GEÇTİ olur, ve onun üstündeki Sonuç ölçümü bloğu turun kanıtını sayıyla basar — hangi bağdaştırıcı hangi çözünürlüğü sürüyor, LG'nin iki yarısı aynı sürüm mü, ve kartın sorun kodu:

[19:53:59] Sonuç ölçümü
[19:54:01]   Virtual Display Driver: 2560x1440 @ 60 Hz
[19:54:01]   Microsoft Basic Display Adapter: 1280x800 @ 1 Hz
[19:54:01]   NVIDIA GeForce RTX 3060 Laptop GPU: mod yok (hiçbir ekranı sürmüyor)
[19:54:03]   NVIDIA GeForce RTX 3060 Laptop GPU: sorun kodu 0 (OK)
[19:54:04]   LG sürümü: misafirde B7 = istemci B7
[19:54:04]   LG yakalama: 'NVIDIA GeForce RTX 3060 Laptop GPU' -- VDD'ye verilen bağdaştırıcı
[19:54:04] KURULUM GEÇTİ -- VDD ekranı var, LG host çalışıyor, misafir tek ekranda.

Kartın "mod yok" demesi doğrudur, kusur değil: kart hiçbir ekranı sürmüyor, VDD'yi render ediyor — çizimi kart yapar, modu sanal ekran taşır. Aradığınız iki şey sorun kodu 0 ve VDD'nin çözünürlüğü.

Tur sırasında problem=10 görürseniz paniklemeyin: sürücü gelmeden okunan değer odur ve tur onu kendisi bekler. Sürücüden sonra hâlâ 10 ise adım düşer ve bunu söyler.

Bu makinede ölçüldü: 7 dk 20 sn, kart kod 10 → kod 0, VDD 2560x1440 kartın üstünde render ediyor, LG host servisi çalışıyor. Yeniden 2026-09-02, zorlayıcı Secure Boot altındaki kip 2 misafirinde: 9 dk 37 sn (NVIDIA sürücüsü bu turda indirildi), kart CM_PROB_NONE. Bu bölümün turunda (2026-09-03, dört bayrak + 12288 MiB): 8 dk 11 sn, devir üç işlevi de aldı (nvidia/snd_hda_intel/nvmevfio-pci, host'ta nvidia modülü yüklü değil), ajan 10 sn'de geldi, kart sorun kodu 0, VDD 2560x1440 @ 60 Hz, LG B7 = B7, konsol oturumu turun kendi onarımıyla geri geldi. → setup

10. Ekranı aç

Misafir koşarken, ana makinenin grafik oturumundan:

looking-glass-client app:shmFile=/dev/kvmfr0 win:fullScreen=yes

Bu makinede ölçülen çağrı biçimi budur. Seçenekler pozisyonel yazılır (modül:ad=değer), kısa bayrak olarak değil: LG'nin kısa bool bayrakları değer atamaz, mevcut değeri tersine çevirir — yani -F yes diye bir şey yoktur ve sessizce yanlış sonucu verir.

Kalıcı ayar için ~/.config/looking-glass/client.ini. Kaçış tuşuna bakın: LG'nin varsayılanı Scroll Lock, ve birçok dizüstü klavyesinde o tuş fiziksel olarak yoktur — o hâlde yakalama modundan çıkamazsınız. [input] bölümüne klavyenizde var olan bir tuş yazın (ör. escapeKey=KEY_INSERT).

Ses için ana makinede yapılacak bir şey yok, ve paylaşılan bir sisteme de gerek yok. Looking Glass görüntüyü paylaşımlı bellekten (kvmfr) taşır; ses ondan bağımsız olarak SPICE'tan gider — misafirdeki emüle ich9 HD Audio → hda-duplex → SPICE → LG'nin dahili istemcisi → ana makinenin PipeWire'ı. Windows o cihaza kendi inbox sürücüsünü bağlar, yani misafirin içine kurulacak bir sürücü de yok. Devredilen kartın ses fonksiyonu ayrı bir yoldur ve kartın konektörlerine ekran takılı olmadığı sürece uçlarının hepsi NOTPRESENT kalır; ses oradan gelmez.

r78'den önce tanımlanmış domain'lerde emüle ses cihazı yoktur ve belirti sessizliktir: tanım <audio> taşır (libvirt onu SPICE grafiğinden kendi üretir) ama bağlanacak bir cihaz yoktur. Bakmanın yolu tanımı okumak değil, ne kurulacağını okumaktır:

virsh -c qemu:///system domxml-to-native --format qemu-argv \
  --domain win11-nvme | tr ' ' '\n' | grep -E 'hda|audiodev'

ich9-intel-hda ve hda-duplex görünmüyorsa domain'e <sound model='ich9'/> eklenir (virsh edit); adres, <codec> ve <audio> yazılmaz — üçünü de libvirt türetir. Yeni kurulan misafirler bunu şablondan alır.

Hangi adım domain'i hangi durumda bırakır

Sırayı takip ederken en çok tökezleten şey budur: domain durumu üç kez değişir, ve her komut onu şart koşar. Yanlış durumda çağrılan komut hiçbir şey yazmadan rc=1 ile düşer ve hangi durumu istediğini söyler — yani hata zararsızdır, ama sebebi görünmez olabilir.

Adım Başlarken ister Bırakırken
5 build tanım yok (ya da --force) koşuyor
6 eject kapalı ← kendiniz kapatın kapalı
7 start + autologon kapalı → başlatır koşuyor
8 passthrough kapalı ← kendiniz kapatın kapalı
9 setup --start kapalı → kendisi başlatır koşuyor, kartla

Yani 6 ve 8'den önce misafiri siz kapatırsınız; komutların hiçbiri kendiliğinden kapatmaz. Kapatma her iki yerde de aynı iki satırdır ve adımların içinde yazılı — ölçüt domstate, virsh shutdown'ın çıkış kodu değil: o komut işi zamanlar, yapmaz.


Kurulumu sınamak

vfioctl selftest --preflight --domain win11-nvme   # yalnızca okuma
vfioctl selftest --domain win11-nvme               # 5 tur art arda
vfioctl selftest --rounds 1 --domain win11-nvme    # hızlı bakış

Gerçek bir devri, gerçek bir misafirle, art arda beş kez koşar ve yargılar. Düz VT'den koşulur. Bu makinede ölçüldü (2026-08-18): 5/5 temiz, yoklayıcı boyunca canlı, journal'da tek bir non-zero usage count yok.

Yoklayıcı testin parçasıdır: kartı saniyede bir açan kısa ömürlü bir süreç (bu makinede waybar'ın gputemp modülü) devri zar atışına çeviriyordu, ve düzeltmenin işe yaradığı ancak öyle bir süreç canlıyken ölçülebilir. selftest yoklayıcı durmuşsa koşmayı reddeder. --no-poller sessiz taban çizgisi içindir, kabul turu değildir.

--domain zorunludur, öntanımlı değeri yoktur. Verilmezse komut hiçbir şey yapmadan çıkar (rc 2), tanımlı domain'leri listeler ve eksik bayrağı eklenmiş çağrıyı basar. Eskiden win11'e öntanımlıydı; bu makinenin misafiri win11-nvme olunca eski ad çözünmeye devam etti, yani argümansız çağrı hata vermeden başka bir misafirde koşup sonucu kabul ölçütü diye raporlardı.

Günlük kullanım

vfioctl guest --name win11-nvme status                       # domain + ajan
vfioctl guest --name win11-nvme usb --attach 8087:0032       # aygıt ödünç ver
vfioctl guest --name win11-nvme usb --detach 8087:0032       # geri al
vfioctl guest --name win11-nvme screenshot                   # ekran görüntüsü

usb koşan bir misafire aygıt (Bluetooth radyosu, oyun kolu, bellek, fare alıcısı) ödünç verir. Kalıcı hiçbir şey yazılmaz — yalnızca --live: misafiri kapatmak her zaman tam bir geri almadır.

Misafire ikinci bir disk vermek için (sistem diski değil):

vfioctl guest --name win11-nvme nvme --attach 0000:02:00.0   # domain kapalıyken
vfioctl guest --name win11-nvme nvme --detach 0000:02:00.0

Denetleyiciyi bütün olarak verir; misafir diski kendi kuyrukları ve kendi NVMe ad alanıyla görür, bölümlemeyi misafir yapar. Bağlı, fstab'da duran ya da takas alan bir diski reddeder ve bunun bayrağı yoktur.

--detach yalnız bu aracın bıraktığı satırı siler. Sistem diskini mutlak reddeder — kip 2 ile kurulmuş bir denetleyici domain'den ancak domain'le birlikte ayrılır (clean).

Geri alma

vfioctl guest --name win11-test passthrough --off   # kartı domain'den çıkar
vfioctl guest --name win11-test clean               # domain + çalışma dizini sil
vfioctl uninstall                                   # host tarafını geri al

Örnekteki ad win11-test, ve bu bilerek: clean yıkıcı komuttur, örneği okuyup adı değiştirmeden yapıştıran biri deneme misafirini kaybetmelidir, günlük olanı değil.

clean fiziksel diske dokunmaz — kip 2 ile kurulmuş bir diski kimliğiyle raporlar ve bırakır. Ama tanımı kaldırır, ve kip 2'de tanım o diskteki sistemi adıyla anan tek şeydir; o yüzden sistem diski fiziksel olan bir domain'de clean önce onay sorar — diskin modeli ve serisi basılır, EVET beklenir, terminal yoksa reddedilir. Gözetimsiz koşu için --confirm-undefine (yalnız tanımı kapsar; clean hiçbir kipte diske yazmaz). Kip 1'de soru sorulmaz: orada domain ile imaj aynı nesnedir ve ikisini birlikte silmek komutun amacıdır.

Üstünde çalışan bir Windows kalan diski daha sonra geri almak için:

vfioctl guest --name win11-nvme build --adopt --system-nvme 0000:02:00.0

Domain'i diskin etrafında tanımlar, kurmaz: diske hiç yazmaz, ortam takmaz, misafiri başlatmaz. Ölçüldü (2026-08-19): sahiplenilen domain 12 saniyede açıldı, taze NVRAM'e rağmen. → --adopt

uninstall dosyaları siler, ACL satırını geri alır, driver_override'ı temizler — ama kartı nvidia'ya canlı döndürmez (o yol makineyi kilitliyor; reboot bedavaya yapıyor). Kart vfio-pci'deyken reddeder. Yedekler (.bak) silinmez, listelenir.


Komutlar

Komut Ne yapar Yazar mı
doctor makineyi ölçer, kapıyı açar/kapatır hayır
profiles tanınan makineleri listeler hayır
inventory devredilebilir cihazlar + host'a bedeli hayır
install [--check] host tarafının dokuz parçası /etc
uninstall kurulanı geri alır /etc
selftest N tur gerçek devir, yargılanmış hayır (günlük)
guest build boş diskten kurulu Windows'a domain + imaj
guest build --debloat kurulumda uygulama kataloğu + telemetri + tweak'leri kırpar misafir (specialize)
guest build --disable-defender imajı WinPE'de kendisi uygular, Defender'ı offline kovanda kapatır misafir (windowsPE)
guest build --adopt kurulu bir diski sahiplenir yalnız domain
guest debloat son --debloat turunun raporunu geri okur hayır
guest setup misafir betiklerini sürer (NVIDIA/VDD/LG) misafir
guest passthrough kartı domain'e verir/alır domain tanımı
guest nvme NVMe denetleyicisi verir/alır domain tanımı
guest usb koşan misafire aygıt ödünç verir hayır (canlı)
guest secureboot varstore'a Secure Boot anahtarlarını kurar NVRAM + domain kaydı
guest smbios host'un SMBIOS kimliğini domain'e yazar / --off kaldırır domain tanımı
guest eject kurulum ortamını sürücüden çıkarır (--drives sürücüyü de söker) domain tanımı
guest autologon konsol oturumunu açar misafir kaydı
guest status / screenshot durum / ekran görüntüsü hayır
guest clean domain + çalışma dizini siler siler (sistem diski fiziksel ise önce onay sorar)

Her komutun kendi yardımı var: vfioctl <komut> --help, vfioctl guest <komut> --help.


Bilinen sorunlar

USB Bluetooth radyosu misafirde Kod 10 veriyor — kök sebebi bulundu, ve kapatılabilir. Radyo misafire devredilince doğru adıyla görünüyor ama başlamıyor (CM_PROB_FAILED_START / 0xC0000001); host tarafında btusb hiç düşmüyor. Kusur libusb'nin libusb_wrap_sys_device() yolunda — issue #1925 —, düzeltme PR #1926 olarak onaylandı (henüz birleşmedi). Yamalı libusb ile libvirt'in varsayılan hostdevice= kipi çalışıyor; ölçüldü (2026-08-31, üç kol, tek değişken libusb).

Yamasız libusb'de çıkış yolu domain tanımına tek satır — <qemu:del capability='usb-host.hostdevice'/> — ve vfioctl ikisini de yazmaz: satır elle yazılır, yama dağıtımın paketidir. Her USB devri bunu istemiyor: aynı makinede bir fare alıcısı varsayılan kipte sorunsuz devredildi.

Kod 10 geri gelirse ilk soru koşan libusb'nin yamalı olup olmadığıdır — yama bir paket güncellemesiyle sessizce gidebilir, yetenek satırı da sessizce etkisizleşebilir; iki arıza kipinin semptomu aynı. Ölçüt, üç kollu ölçüm, mekanizma, elenen beş açıklama ve teşhis sırası → docs/bluetooth-code10.md.

Yol haritası

Fazlar kapandıktan sonra guest build'e dört bayrak girdi (--secure-boot, --host-smbios, --debloat, --disable-defender); dördü de bu makinede uçtan uca ölçüldü. Faz tablosu, neyin ne zaman kapandığı ve açık kalanlar → docs/YOL-HARITASI.md.

Sırlar

Kişisel hiçbir değer bu depoya girmez: hesap adı, parola, yerel ayar ve ISO yolu çalışma anında verilir. Üretilen autounattend.xml ve yardımcı ISO ~/.images/<domain>-unattend/ altında 0700 dizinde, makine-yerel kalır. Depoya giren şablondur.

Lisans

MIT. Kullanın, değiştirin, dağıtın; telif satırını koruyun.

Garanti yoktur: bu araç /etc'e yazar ve bir grafik oturumunu bozabilir — önce doctor, sonra install --check.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages