🇹🇷 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.
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
git clone https://github.com/drpars/vfioctl && cd vfioctl && makepkg -simakepkg 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 .githooksBu 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
sudografik 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.
Başlamadan önce üç şey:
-
Windows 11 kurulum ISO'su. Bu makinede ölçülen medya
tr-TR25H2'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 077dosyayı doğuşundan0600yapar, ve parolacat'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).
vfioctl doctorHiç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ı.
vfioctl install --check # önce: /etc ile aranda ne fark var
vfioctl install # dokuz parçayı yaz, sonra makineyi okuyup doğrulaYazı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.
vfioctl inventoryPCI 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'ninEVETonayı tam da bu yüzden var. → inventory
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.nvmeNnumarası 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
- 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: ntfs ↔ BitLocker). -p yetkisiz koşuda
rc=2 + "Erişim engellendi" ile açıkça düşer, temiz bir olumsuz üretmez.
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-wipeGerisi 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 statusBu 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
EVETyazmanızı bekler;--confirm-wipeo 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ır —
guest clean,build --force,virsh undefine --nvram. Hata yok, çıkış kodu 0, misafir açılıyor; XML de söylemez. Gördüğünüz tek yerstatus'ü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-bootbö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.
--adoptturu vesecurebootkomutu bunu uyarır. Diske root sondasıyla bakın:sudo blkid -p <bölüm>. Yetkisiz düzblkiddiski sondalamaz, önbellektenrc=0ile eski bir cevap verebilir — bir kez verdi (aynı bölüm, aynı dakika:ntfs↔BitLocker).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 —
smbiostanı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-smbiosbölümü.
--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öyler — doctor 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.
İ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⚠
--debloattek başına Defender'ı kapatamaz. Çalışan Windows'un içinden yazar, ve Tamper Protection o yazmayı reddeder (ölçüldü: rc=1,WinDefend Start2'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ü.
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.
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.
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 shutdownişi zamanlar, yapmaz — çıkış 0 ile hemen döner, misafir hâlâ koşuyordur. Beklemeden çağrılaneject"domain kapalı değil" der. Ölçütdomstate, 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 0 — C: 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.
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.passBekleme 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.
Ö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: --offYalnı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-handoverBu 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.
⚠ Devir turu düz bir VT'den koşulur (
Ctrl+Alt+F3), ya da başka bir makinedensshile. 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/nvme → vfio-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
Misafir koşarken, ana makinenin grafik oturumundan:
looking-glass-client app:shmFile=/dev/kvmfr0 win:fullScreen=yesBu 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-hdavehda-duplexgö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.
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.
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.
--domainzorunludur, ö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. Eskidenwin11'e öntanımlıydı; bu makinenin misafiriwin11-nvmeolunca 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ı.
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.0Denetleyiciyi 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).
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.0Domain'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.
| 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.
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.
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.
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.
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.