Windows
Instalação
Gerar um USB de instalação
Você pode baixar o Windows 10 diretamente do site da Microsoft. Selecione um pendrive de pelo menos 8GB para a ferramenta formatar e gerar um instalador bootável.
Se o erro 715-123130 aparecer, tente trocar de browser ou fazer o download através de uma VPN nos EUA.
Se baixar o ISO, verifique o hash:
PS > Get-FileHash .\Win11_22H2_EnglishInternational_x64v1.iso
Algorithm Hash
--------- ----
SHA256 F115CD6B31734BC091BC94B964D5AD43984285BF229503481E2F7EF94AB7140E
Recomendo o Rufus para gravar a imagem. Ele tem algumas funcionalidades bem interessantes.
Particionamento
Uma instalação típica do Windows cria 4 partições:
- EFI: 100 MB
- MSR: 16 MB
- Windows
- Recovery: 500 MB a 650 MB
O valor que você deve digitar no instalador gráfico é a soma de todas essas partições. Se você
quiser que seu C: mostre exatamente 250 GB, você deve usar algo um pouco maior que 256616 MB
(100 + 16 + 250 * 1024 + 500).
Para ter mais controle sobre os tamanhos, você pode particionar o disco por linha de comando.
Pressione Shift + F10 e use o diskpart:
diskpart
list disk
select disk 0
clean
convert gpt
create partition efi size=1024
format quick fs=fat32 label="System"
assign letter="S"
create partition msr size=16
create partition primary size=256000
format quick fs=ntfs label="Windows"
assign letter="W"
create partition primary size=700
format quick fs=ntfs label="Recovery"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit
Neste exemplo são criadas uma partição EFI com 1 GB e uma Recovery com 700 MB.
Uma EFI com pelo menos 300 MB é recomendada para quem faz dual boot. O Linux monta essa partição
como /boot e armazena os arquivos utilizados pelo bootloader, incluindo versões comprimidas do
kernel e drivers (vmlinuz).
Se você já tiver uma partição EFI formatada em FAT32 antes de iniciar a instalação, o Windows irá utilizá-la em vez de criar uma nova.
Se você perceber que precisa aumentar a partição EFI depois que o Windows já está instalado, dê uma olhada no Partition Expert da Macrorit. A versão gratuita portable é capaz de redimensionar e mover as partições facilmente.
A partição MSR (Microsoft Reserved) de 16MB pode ser restaurada pelo próprio Windows
(create partition msr) ou pelo código 0c01 no cgdisk.
Opções de privacidade
Uma tela de privacidade aparece no primeiro boot. Desmarque Find my device, Inking & Typing,
Advertising ID, Diagnostic data, Tailored experiences e o que mais tiver para desmarcar
durante a instalação.
Após iniciar o sistema, vá em Settings » Privacy. Eu desmarco quase todas as opções. O único app
que precisa acessar minha câmera (que fica coberta) é o Skype.
Group Policy Editor
Execute o gpedit.msc.
-
Web search
Entre em
Local Computer Policy » Computer Configuration » Administrative Templates » Windows Components » Searche marque a opção “Do not allow web search” como Enabled. -
BitLocker com PIN
Navegue até
Computer Configuration»Administrative Templates»Windows Components»BitLocker Drive Encryption»Operating System Drivese ativeRequire Additional Authentication at StartupeAllow enhanced PINs for startup. -
Desativar o Meet Now do Skype
Entre em
User Configuration»Administrative templates»Start Menu and Taskbare ative a policyRemove the Meet Now icon.
Regedit
-
Desativa Cortana e Bing
Navegue até
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Searche crie uma nova DWORD chamadaConnectedSearchUseWebe atribua valor 0.Navegue até
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Searche crie duas novas DWORDs com valor 0:AllowSearchToUseLocationeBingSearchEnabled. -
Usar UTC no relógio (útil para dual-booting)
Navegue até
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformatione crie uma nova DWORD chamadaRealTimeIsUniversalcom valor 1. -
Mostrar/Esconder ícones no desktop
Isso pode ser feito pela interface gráfica, portanto não recomendo fazer pelo regedit.
Computer: {20D04FE0-3AEA-1069-A2D8-08002B30309D} User Files: {59031a47-3f72-44a7-89c5-5595fe6b30ee} Control Panel: {5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0} Network: {F02C1A0D-BE21-4350-88B0-7367FC96EF3C} Recycle Bin: {645FF040-5081-101B-9F08-00AA002F954E}Exemplo:
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /V {20D04FE0-3AEA-1069-A2D8-08002B30309D} /T REG_DWORD /D 0x0 /Freg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu /V {20D04FE0-3AEA-1069-A2D8-08002B30309D} /T REG_DWORD /D 0x0 /Freg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /V {20D04FE0-3AEA-1069-A2D8-08002B30309D} /T REG_DWORD /D 0x0 /Freg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu /V {20D04FE0-3AEA-1069-A2D8-08002B30309D} /T REG_DWORD /D 0x0 /F -
Não mostra arquivos recentes
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer /V ShowRecent /T REG_DWORD /D 0x0 /F -
Mostrar pasta do usuário na navegação do File Explorer (quick access)
reg add HKCU\SOFTWARE\Classes\CLSID\{59031a47-3f72-44a7-89c5-5595fe6b30ee} /V System.IsPinnedToNameSpaceTree /T REG_DWORD /D 0x1 /F
Nome do computador
Navegue até Control Panel\System and Security\System. Na linha com o nome do computador, clique em
Change settings e troque o nome do computador.
Windows Update
Atualize tudo e reinicie o computador.
Talvez a última atualização ainda não esteja disponível pelo Windows Update, mas pode ser instalada manualmente: https://www.microsoft.com/en-us/software-download/windows10.
Drivers
- Kensington Works
- Nvidia
- Site do fabricante
Criptografia
-
BitLocker
Depois de atualizar o Windows. Ative o BitLocker no driver C:/. Salve a chave de recuperação em algum lugar seguro (que não seja o próprio computador, claro).
-
VeraCrypt
É uma alternativa open source que pode ser usada para criptografar partições inteiras ou criar containers. Mais para frente eu mostro como instalar com o Chocolatey.
Windows Features
Entre em Control Panel\Programs » Turn Windows features on or off.
- Ative “Virtual Machine Platform”
- Ative “Windows Hypervisor Platform” (precisa para o Docker).
- Ative “Windows Sandbox”
- Ative “Windows Subsystem for Linux”
- Ative “Hyper-V” (para máquinas virtuais)
Power
Navegue até Control Panel\Hardware and Sound\Power Options\Create a Power Plan e crie um power
plan baseado no High Performance com as seguintes opções (em advanced power settings):
- Turn off hard disk after
- On battery: 30 Minutes
- Plugged in: Never
- Sleep
- Sleep after
- On battery: 300 Minutes
- Plugged in: Never
- Sleep after
- Power buttons and lid
- Lid close action
- On battery: Do nothing
- Plugged in: Do nothing
- Power button action
- On battery: Sleep
- Plugged in: Do nothing
- Lid close action
- Display
- Turn off display after
- On battery: 20 Minutes
- Plugged in: 30 Minutes
- Turn off display after
Em Control Panel\Hardware and Sound\Power Options\System Settings, desmarque a opção
Turn on fast start-up.
Bloqueio por inatividade
- Screen Saver settings » Blank » 3 min » On resume, display log-on screen
Desinstale programas desnecessários
Em Add or Remove programs, desinstale o que não for usar.
Desative mensagens chatas
Entre em
Control Panel\System and Security\Security and Maintenance\Change Security and Maintenance settings.
Desmarque a opção de receber mensagens sobre Windows Backup.
Chocolatey
Instale conforme as instruções mais atuais em https://chocolatey.org/install.
No PowerShell como Admin:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install -y `
7zip `
calibre `
discord `
ditto `
Firefox `
git `
GoogleChrome `
greenshot `
jellyfin-media-player `
nerd-fonts-Hack `
obs-studio `
slack `
spotify `
steam `
telegram `
transgui `
vlc `
vscode `
wireguard
choco install -y `
ack `
bleachbit `
clonespy `
Cmder `
curl `
darktable `
dbeaver `
digikam `
docker-desktop `
eartrumpet `
Everything `
FreeDownloadManager `
gimp `
gnupg `
google-drive-file-stream `
imagemagick `
irfanview `
jre8 `
mariadb `
microsoft-teams `
miniconda3 `
neovim `
nerd-fonts-CascadiaCode `
nerd-fonts-FiraCode `
nodejs `
notepadplusplus `
okular `
postman `
powershell-core `
powertoys `
restic `
rsync `
sourcetree `
sql-server-management-studio `
thunderbird `
transmission `
treesizefree `
vb-cable `
vcxsrv `
veracrypt `
voicemeeter-banana `
winscp
Atualizar Chocolatey
-
Liste os pacotes desatualizados:
choco outdated -
Atualize o Chocolatey antes:
choco upgrade chocolatey -
Atualize todos os pacotes:
choco upgrade all -y
PowerShell
O Windows 10 e 11 vêm com a versão 5.1 instalada, mas a versão mais nova está disponível no GitHub e pode ser instalada pelo Chocolatey ou winget.
Pelo Winget:
winget search Microsoft.PowerShell
winget install --id Microsoft.Powershell --source winget
> $PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 4 1
Execution Policy
O PowerShell possui as seguintes opções para restringir a execução de scripts:
Restricted: Não executa scripts. Usa o PowerShell apenas no modo interativo.AllSigned: Executa apenas scripts assinados por um editor confiável.RemoteSigned: Scripts baixados precisam ser assinados.Unrestricted: Todos os scripts podem ser executados.
Vou configurar usando a opção RemoteSigned:
Set-ExecutionPolicy RemoteSigned
Oh My Posh
O Oh My Posh é um tema para o Terminal, que é especialmente bom para o PowerShell.
O jeito mais fácil de instalar é com o Winget:
winget install JanDeDobbeleer.OhMyPosh -s winget
Depois configure o PowerShell para iniciar o Oh My Posh:
notepad $PROFILE
E cole o seguinte:
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/powerlevel10k_lean.omp.json" | Invoke-Expression
Set-PSReadlineOption -EditMode vi -BellStyle None
Esses comandos irão configurar o PowerShell para usar o tema powerlevel10k_lean em vi mode.
Outros temas podem ser previstos com o comando Get-PoshThemes e no
site oficial.
O comando notepad $PROFILE edita o $profile.currentusercurrenthost. Se quiser configurar para
outros hosts e usuários, edite o arquivo adequado:
$profile.currentusercurrenthost
C:\Users\Julio\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
$profile.currentuserallhosts
C:\Users\Julio\Documents\PowerShell\profile.ps1
$profile.alluserscurrenthost
C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
$profile.allusersallhosts
C:\Program Files\PowerShell\7\profile.ps1
Office
Eu divido uma assinatura do Microsoft 365 Family com outras 5 pessoas. Considero que vale muito a
pena, porque além do Office cada um também tem 1 TB de OneDrive.
Além disso, frequentemente encontramos promoções de 1 ano pré-pago do Personal, que pode ser
convertido em 9 meses do Family.
O instalador com todos os programas do Office 365 pode ser baixado da sua conta Microsoft. Lá você escolhe o idioma e a versão (32 ou 64-bit).
Também é possível instalar cada programa separadamente pela Microsoft Store, porém eu não recomendo.
E-mails
Eu gosto de usar o Thunderbird como cliente de e-mails.
- Para economizar espaço, desmarque a opção de sincronizar as pastas. Assim, apenas os headers serão baixados;
- Configure para minimizar para o taskbar;
- Cadastre sua chave PGP para assinar e-mails;
- Use uma master password para proteger as senhas e chaves salvas no Thunderbird (arquivo
key4.db):Tools » Options » Privacy & Security » use a master password.
Para configurar e-mails que usam Two-factor authentication, você pode usar uma senha específica para o app ou fazer a configuração inicial sem senha e depois alterá-la para OAuth2.
Calendário
Para a maioria das pessoas, deixar a aba de e-mail aberta no browser e ativar as notificações deve ser o suficiente, mas eu uso múltiplos calendários e gosto de acompanhá-los no mesmo lugar e receber alertas de eventos no desktop.
O aplicativo padrão do Windows é totalmente integrado com o sistema e permite visualizar os eventos direto na barra de tarefas e receber notificações nativas, mas como eu já uso o Thunderbird para e-mails prefiro também configurá-lo para sincronizar meus calendários.
Apenas exibir o calendário (view only)
O link para seu calendário Google pode ser obtido da seguinte forma:
- Entre nas configurações do Google Calendar (https://calendar.google.com/calendar/u/0/r/settings);
- Settings for my calendars
- Selecione o calendário;
- Integrate calendar;
- Secret address in iCal format
Cole esse link no Thunderbird: File » New » Calendar » On the Network » iCalendar (ICS).
O calendário será marcado como somente leitura.
Para ver os eventos na tela principal: View » Today Pane » Show Today Pane.
Sincronizar bidirecionalmente (view & edit)
Os add-ons Lightning e Provider for Google possuem essa funcionalidade, porém é possível configurar o Thunderbird para usar CalDav da seguinte forma:
- Google: crie uma senha específica em https://myaccount.google.com/apppasswords.
- Zoho: 1. Crie uma senha específica em Zoho Accounts » Security » App Passwords »
Application-Specific Passwords » Generate New Password. 2. Ative o CalDav em Settings » Calendar
» Synchronize » CalDAV. 3. Pegue o Calendar ID em Settings » Calendars » My Calendars No
Thunderbird, navegue até
File » New » Calendar » On the Network » CalDAV. - Username: seu@email.com
- Location Google:
https://www.google.com/calendar/dav/seu@email.com/events - Location Zoho:
https://calendar.zoho.com/caldav/**Calendar ID**/events
Linguagens
Gosto de deixar meu notebook em inglês, porém é bom adicionar outras linguagens como Português.
Settings » Languages » Preferred Languages » Add a preferred language.
Adicionar/remover linguagens pelo PowerShell
PS > $langs = Get-WinUserLanguageList
PS > $langs
LanguageTag : en-GB
Autonym : English (United Kingdom)
EnglishName : English
LocalizedName : English (United Kingdom)
ScriptName : Latin
InputMethodTips : {0809:00020409}
Spellchecking : True
Handwriting : False
PS > $langs.Add('de-DE')
PS > $langs
LanguageTag : en-GB
Autonym : English (United Kingdom)
EnglishName : English
LocalizedName : English (United Kingdom)
ScriptName : Latin
InputMethodTips : {0809:00020409}
Spellchecking : True
Handwriting : False
LanguageTag : de-DE
Autonym : Deutsch (Deutschland)
EnglishName : German
LocalizedName : German (Germany)
ScriptName : Latin
InputMethodTips : {0407:00000407}
Spellchecking : True
Handwriting : False
PS > Set-WinUserLanguageList $langs -Force
PS > $langs.Remove(($langs | Where-Object LanguageTag -like 'de-DE'))
True
PS > $langs
LanguageTag : en-GB
Autonym : English (United Kingdom)
EnglishName : English
LocalizedName : English (United Kingdom)
ScriptName : Latin
InputMethodTips : {0809:00020409}
Spellchecking : True
Handwriting : False
PS > Set-WinUserLanguageList $langs -Force
Bug do teclado fantasma
Mesmo na Alemanha eu uso English (United Kingdom) como linguagem do sistema e formatação. Por
algum motivo desconhecido, o Windows insiste em adicionar o teclado alemão à lista de teclados.
Para piorar, ele não aparece no Regedit (Computer\HKEY_USERS\.DEFAULT\Keyboard Layout\Preload) nem
nas opções de linguagem e região.
É necessário adicionar manualmente só para poder remover o teclado alemão da lista.
Isso também pode ser feito pelo PowerShell:
$langs = Get-WinUserLanguageList
$langs[0].InputMethodTips.Add('0809:00000407')
Set-WinUserLanguageList $langs -Force
$langs[0].InputMethodTips.Remove('0809:00000407')
Set-WinUserLanguageList $langs -Force
Verifique o código no Regedit (
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language).
| ID | Tag | Linguagem | Local |
|---|---|---|---|
| 0x0416 | pt-BR | Português | Brasil |
| 0x0816 | pt-PT | Português | Portugal |
| 0x0409 | en-US | Inglês | Estados Unidos |
| 0x0809 | en-GB | Inglês | Reino Unido |
| 0x0c0A | es-ES | Espanhol | Espanha |
| 0x0407 | de-DE | Alemão | Alemanha |
| 0x1000 | en-150 | Inglês | Europa |
| 0x1000 | en-DE | Inglês | Alemanha |
Tabela completa: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c
Relógio adicional
Tenho me comunicado bastante com pessoas da Austrália e Noruega. Como o fuso horário é bem diferente, gosto de ter um relógio adicional.
Entre em Date & Time » Add clocks for different time zones e configure o novo relógio.
Personalização
-
Papel de parede
Em
Settings » Personalization, escolha um background. Eu costumo deixar Solid colour preto. -
Cores
Default app mode: Dark
-
Lock screen
Desative mostrar apps na lock screen e background na tela de sign-in.
-
Fontes
Instale uma Nerd Font.
Recomendo a Hack NF. Descompacte o pacote, selecione todas as fontes “Windows Compatible”, clique com o botão direito e escolha a opção Install ou Install for all users.Instale as Google Noto Fonts para não ter problemas com caracteres indisponíveis (exibidos como retângulos). Prefira a versão hinted.
-
Mostrar/Esconder ícones na área de trabalho
Temas » Desktop Icon Settings. Eu gosto de deixar Meu computador, Lixeira e pasta do Usuário. -
Taskbar
Remova todo o lixo da taskbar. Esconda a search bar.
-
Desative programas que iniciam com o sistema
Abra o task manager e desative os programas que iniciam com o sistema.
-
File Explorer
Abra o File Explorer. Selecione
View » Options » Change folder and search options. Na tab View, marque/desmarque as opções:- Always show menus
- Display de full path in the title bar
- Show hidden files, folders, and drives
- Hide extensions for known file types
- Hide protected operating system files
-
Remover OneDrive do quick access
[HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}] "System.IsPinnedToNameSpaceTree"=dword:00000000[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}] "System.IsPinnedToNameSpaceTree"=dword:00000000 -
Default Apps
- Music player: VLC
- Photo viewer: IrfanView
- Video player: VLC
- Web browser: Firefox
Também gosto de associar programas a extensões:
.txt→ Notepad++
-
Chrome e Firefox
Sincronize os browsers. Copie as configurações de extensões como o uMatrix, se tiver.
-
Trocar Esc com CapsLock
É possível fazer pelo Regedit, SharpKeys, PowerToys e muitos outros.
-
Regedit
Salve o seguinte código como
caps_swapescape.rege o execute:Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01,00,3a,00,00,00,00,00Um mapeamento consiste em um inteiro de 32 bits (dois scancodes de 16 bits cada) no formato little-endian.
(03,00,00,00)→ Indica que virão 3 inteiros (96 bits = 24 dígitos em hex)(01,00)→ Escape(3a,00)→ CapsLock-
SharpKeys
Caps Lock (00_3A) → Escape (00_01) Escape (00_01) → Caps Lock (00_3A)
-
PowerToys Enable Keyboard Manager » remap a key
-
-
Desktops
Deslize com quatro dedos para cima no touchpad para aparecer a opção de criar novos desktops. Eu gosto de usar 2 desktops.
Terminal
Eu gosto do Cmder e do Windows Terminal (disponível na Microsoft Store). Eles são bastante customizáveis. Uma mudança importante é definir a fonte. Recomendo a Hack NF.
No Terminal (settings.json):
…
"actions": [
{
"command": {
"action": "copy",
"singleLine": false
},
"keys": "ctrl+c"
},
{
"command": "paste",
"keys": "ctrl+shift+v"
},
{
"command": "find",
"keys": "ctrl+shift+f"
},
{
"command": {
"action": "splitPane",
"split": "auto",
"splitMode": "duplicate"
},
"keys": "alt+shift+d"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"keys": "shift+enter"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[13;5u"
},
"keys": "ctrl+enter"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[13;6u"
},
"keys": "ctrl+shift+enter"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[32;2u"
},
"keys": "shift+space"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[32;5u"
},
"keys": "ctrl+space"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[32;6u"
},
"keys": "ctrl+shift+space"
}
]
…
"defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}",
…
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": false,
"name": "Ubuntu",
"fontFace": "Hack NF",
"source": "Windows.Terminal.Wsl"
},
…
{
"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
"hidden": false,
"name": "PowerShell",
"fontFace": "Hack NF",
"source": "Windows.Terminal.PowershellCore"
}
Eu altero o comando paste de ctrl+v para ctrl+shift+v para não quebrar o visual mode no vim.
Sandbox
Para testes de aplicações, especialmente de origem duvidosa, é recomendável utilizar um sistema isolado: sandboxes ou máquinas virtuais.
Para casos nos quais não é necessário ou desejável persistir instalações e configurações e a versão atual do Windows funciona, uma sandbox é mais prática que VMs. Não precisa baixar imagens, ela abre mais rápido, ocupa menos espaço em disco, etc.
Sandboxing pode ser feito com programas como o Sandboxie, porém o Windows 10 Professional já vem com esse recurso nativamente, basta ativar ser ativado.
A configuração é bem simples e a performance é boa. A Windows Sandbox utiliza tecnologia de Windows Containers que, por usa vez, utiliza Hyper-V.
A Sandbox pode ser ativada nas Windows Features ou com o seguinte comando no PowerShell:
Enable-WindowsOptionalFeature -Online -FeatureName "Containers-DisposableClientVM"
A configuração é feita via arquivos XML com extensão .wsb, como o seguinte:
<Configuration>
<VGpu>Disable</VGpu>
<Networking>Disable</Networking>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\Share</HostFolder>
<SandboxFolder>C:\Share</SandboxFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<AudioInput>Disable</AudioInput>
<VideoInput>Disable</VideoInput>
<ProtectedClient>Enable</ProtectedClient>
<PrinterRedirection>Disable</PrinterRedirection>
<ClipboardRedirection>Disable</ClipboardRedirection>
<MemoryInMB>8192</MemoryInMB>
<LogonCommand>
<Command>explorer.exe C:\Share</Command>
</LogonCommand>
</Configuration>
Esse exemplo inicia uma sandbox em modo protegido, com 8 GB de RAM, acesso de leitura à pasta
C:\Share e sem acesso a rede, microfone, webcam, impressora nem área de trabalho.
Virtualização: Hyper-V
O Microsoft Sandbox é ótimo para testes rápidos e para executar aplicativos portáteis, porém ele não cobre o caso de uso em que é necessário persistir modificações no sistema. Nesses casos devemos usar máquinas virtuais.
Se você tiver um servidor potente, pode valer a pena instalar um gerenciador de máquinas virtuais como o Proxmox VE e usar as VMs por acesso remoto. Dependendo do caso, subir uma VM na nuvem também é uma boa ideia.
Para instalações locais no Windows também existem várias opções de hypervisors, que podem ser de dois tipos:
- Hypervisor tipo 1:
- Bare-metal, native
- Acessa o hardware diretamente
- Melhor performance
- Exemplos: VMware ESXi (VMware vSphere), Microsoft Hyper-V, Oracle VM, Citrix Hypervisor
- Hypervisor tipo 2:
- Hosted
- Roda sobre o sistema operacional
- Mais fáceis de gerenciar
- Exemplos: VMware Fusion, VMware Workstation Pro, Oracle VM VirtualBox
Dizem que o VMware é o que possui mais funcionalidades, porém eu tenho usado o Hyper-V que vem com o Windows Pro principalmente pelo custo.
É possível instalar Linux, FreeBSD e Windows no Hyper-V. Um detalhe é que Windows virtualizado também precisa de licença.
Dicas:
- Prefira usar a Generation 2.
- Ativar TPM: Security » Enable Trusted Platform Module
- Crie checkpoints (snapshots) antes de qualquer mudança
- Instalação offline (Windows 11):
- Pressione Shift+F10 para abir o terminal
- Execute C:\Windows\System32\oobe\BypassNRO.cmd
- Clique “I don’t have internet”
- Clique ““Continue with limited setup”
- Em enhanced session mode é possível copiar e colar arquivos entre host e VM
- É possível montar discos virtuais “.vhdx” para compartilhar arquivos. Lembre de desmontá-los antes de iniciar as VMs.
- Ative Guest services
Placa de vídeo Nvidia no Hyper-V
Atualizado em Jan/2023. Usando Windows 11.
Devido a uma falha de segurança, a Microsoft desativou a opção “RemoteFX vGPU” que permitia com que várias VMs compartilhassem uma GPU.
No Windows Server existe a opção de alocar uma GPU completamente para uma VM, o chamado GPU passthrough via Discrete Device Assignment (DDA). Porém apenas Enterprise GPUs como a Nvidia Quadro funcionam.
A única solução atual é GPU Paravirtualization/GPU Partitioning. Veja os seguintes links para
mais informações:
- Easy-GPU-PV: https://github.com/jamesstringerparsec/Easy-GPU-PV
- https://www.youtube.com/watch?v=XLLcc29EZ_8
Get-VMHostPartitionableGpu
WSL2
Depois de ter ativado o “Windows Subsystem for Linux” nas Windows Features, ainda é preciso configurar o ambiente.
Dica: muito do que eu escrevi no artigo sobre Arch também se aplica ao Ubuntu no WSL.
-
Instale a atualização do kernel
-
Atualize o WSL, se necessário
wsl --update -
Defina o WSL2 como padrão:
wsl --set-default-version 2 -
Instale o Ubuntu
-
Opção 1: pela Microsoft Store
-
Opção 2: por linha de comando
cd ~\Downloads curl.exe -L -o ubuntu-2204.appx https://aka.ms/wslubuntu2204 Add-AppxPackage .\ubuntu-2204.appxExecute o arquivo
~\Downloads\ubuntu-2204.appx. Vai aparecer uma mensagem dizendo que o Ubuntu já está instalado e um botão escritolaunchpara iniciar o Ubuntu.
-
-
Verifique se a versão do WSL é a 2:
wsl --list --verboseSe sua versão for a 1, execute
wsl --set-version Ubuntu 2. -
[Opcional] Mova a imagem de C: para Z:
As VHDs (virtual hard disk) do WSL2 são salvas em
C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName].
Exemplo:C:\Users\Julio\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx.É possível mover a imagem e reapontar o caminho pelo Regedit, porém existe um jeito mais seguro usando a função de exportar e importar imagens:
Z: mkdir Z:\WSL wsl --export Ubuntu Z:\WSL\Ubuntu.tar wsl --unregister Ubuntu wsl --import Ubuntu Z:\WSL\ Z:\WSL\Ubuntu.tar ubuntu.exe config --default-user julio rm Z:\WSL\Ubuntu.tar -
Ajuste os locales
sudo nvim /etc/locale.gen sudo locale-gen -
Não adicione pastas do Windows ao $PATH
Adicione as seguintes linhas ao arquivo
/etc/wsl.conf:[interop] appendWindowsPath = falseIsso melhora significativamente a performance do autocomplete na linha de comando, pois acessar o sistema de arquivos do Windows é muito demorado.
Ainda é possível iniciar programas a partir do WSL, basta usar o caminho completo ou adicionar symlinks em alguma pasta que já esteja no $PATH.
Veja https://learn.microsoft.com/en-us/windows/wsl/wsl-config#interop-settings
-
Ative o Systemd
Alguns programas (Snap, Flatpak, microk8s) dependem do Systemd.
Adicione as seguintes linhas ao arquivo /etc/wsl.conf:
[boot]
systemd=true
Reinicie o WSL: wsl.exe --shutdown.
-
Configure a memória
O WSL2 roda em Hyper-V. Por padrão, metade (ou 80% em novas builds) da memória da máquina é alocada. Esse valor pode ser alterado pelo arquivo
C:\Users\julio\.wslconfig:wsl --shutdown notepad "$env:USERPROFILE/.wslconfig"[wsl2] memory=16GB swap=0 processors=4Verifique com o comando
freeno Linux.Observações:
- Não coloque um valor muito alto, pois o que for alocado para o Linux não poderá ser usado pelo Windows.
- Para liberar memória, rode
echo 1 >> /proc/sys/vm/drop_cachescomo root. - O arquivo
.wslconfigdeve ser salvo como UTF-8 without BOM. - A swap é salva em
%USERPROFILE%\AppData\Local\Temp\swap.vhdx
-
Adicione repositórios adicionais (PPAs):
PPAs (Personal Package Archive) são repositórios adicionais aos repositórios do Ubuntu. Muitos deles são dos mantenedores oficiais.
- Neovim:
sudo add-apt-repository ppa:neovim-ppa/unstable sudo apt update- Git
sudo add-apt-repository ppa:git-core/ppa sudo apt update -
Atualize o sistema
sudo apt update && sudo apt upgrade -
Instale programas disponíveis via repositórios:
Básicos:
sudo apt install \ ack \ curl \ ffmpeg \ git \ gitk\ jq \ make \ neovim \ p7zip-full \ renameutils \ rsync \ sshfs \ tree \ wget \ zsh \ oathtoolLaTeX:
sudo apt install \ latexmk \ texlive-lang-portuguese \ texlive-xetexDependências para compilar o Python:
sudo apt install \ build-essential \ libbz2-dev \ libffi-dev \ liblzma-dev \ libncursesw5-dev \ libreadline-dev \ libsqlite3-dev \ libssl-dev \ libxml2-dev \ libxmlsec1-dev \ llvm \ tk-dev \ xz-utils \ zlib1g-dev -
Clone os dotfiles (https://github.com/jbsilva/dotfiles) e crie os links para os arquivos de configuração
cd ~ ln -s dotfiles/.zsh ln -s dotfiles/.zshrc ln -s dotfiles/.gitconfig-global ln -s dotfiles/.gitconfig-wsl .gitconfig ln -s dotfiles/.p10k.zsh ln -s dotfiles/.config -
Instale programas de outras fontes:
O repositório do Ubuntu nem sempre tem as versões mais novas dos pacotes.
Alternativas:- PPAs
- Snap
- Flatpak
- Appimage
- Pacotes
.deb - Executáveis pré-compilados
- Asdf
- Cargo
- Compilar código fonte
Asdf:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1Mambaforge:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh bash Mambaforge-Linux-x86_64.shFlatpak (ative o Systemd antes):
sudo apt install flatpak gnome-software-plugin-flatpak gnome-softwareflatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepoflatpak updateHugo:
CGO_ENABLED=1 go install --tags extended github.com/gohugoio/hugo@latestou
HUGO_LATEST="0.121.1" wget -qO- https://github.com/gohugoio/hugo/releases/download/v${HUGO_LATEST}/hugo_extended_${HUGO_LATEST}_linux-amd64.tar.gz | tar xvz hugo -C ~/bin/ou
asdf plugin add hugo HUGO_LATEST=$(asdf list-all hugo | tail -1) asdf install hugo extended_$HUGO_LATEST asdf global hugo extended_$HUGO_LATESTZellij:
ZELLIJ_LATEST=0.39.2 wget -qO- https://github.com/zellij-org/zellij/releases/download/v${ZELLIJ_LATEST}/zellij-x86_64-unknown-linux-musl.tar.gz | tar xvz zellij -C ~/bin/Yt-dlp:
python -m pip install -U --pre yt-dlpou
mkdir -p ~/bin wget -O ~/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux yt-dlp --update-to nightlyExifTool:
O ExifTool é um programa muito útil para manter minha biblioteca de fotos organizada.
mkdir -p ~/bin EXIFTOOL_LATEST=12.70 wget -qO- https://exiftool.org/Image-ExifTool-${EXIFTOOL_LATEST}.tar.gz | tar xvzf - -C ~/bin/ mv ~/bin/Image-ExifTool* ~/bin/ExifTool ln -s ~/bin/ExifTool/exiftool ~/bin/exiftool -
Defina o shell padrão:
chsh -s $(which zsh)
Compactar imagem do WSL2
Compactar a imagem pode salvar alguns MBs.
-
No WSL2:
# apt autoremove && apt autoclean && apt clean # fstrim / -
No PowerShell:
> Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName PackageFamilyName ----------------- CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc> wsl --shutdown > optimize-vhd -Path "C:\Users\Julio\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx" -Mode full
X server
Instale o VcXsrv e libere-o no firewall (Windows
Defender).
Marque a opção Disable access control.
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
Obs.: a melhor forma de fazer o clipboard funcionar no Neovim é com o win32yank.exe. Ele é instalado junto com o Neovim para Windows, porém pode ser instalado manualmente:
mkdir ~/bin
export PATH=$HOME/bin:$PATH
wget https://github.com/equalsraf/win32yank/releases/latest/download/win32yank-x64.zip
unzip -p win32yank-x64.zip win32yank.exe > ~/bin/win32yank.exe
chmod +x ~/bin/win32yank.exe
rm -f win32yank-x64.zip
Copie para o registrador + usando "+y. Alternativamente, use :set clipboard=unnamedplus no
Neovim.
Docker Desktop com WSL2
Esta opção é a mais simples, porém só é gratuita para uso pessoal, acadêmico, open-source ou em pequenas empresas (menos de 250 empregados E menos de $10 milhões de lucro anual).
Baixe o Docker Desktop (eu baixo pelo Chocolatey).
Marque as opções Use the WSL 2 based engine e Expose daemon on tcp://localhost:2375 without TLS.
Isso já é suficiente para usar o docker normalmente no terminal do Ubuntu.
Docker com WSL2 sem Docker Desktop
O Docker Desktop é pago para uso em grandes empresas, porém ele não é necessário para rodar o Docker.
Existem múltiplas alternativas:
- Instalar docker diretamente na distro no WSL2 (com Systemd ou containerd)
- Podman
- Rancher Desktop
Docker no WSL2 com Systemd
Em outra parte deste artigo eu explico como ativar o Systemd editando o arquivo /etc/wsl.conf.
-
Remova pacotes antigos
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; donesudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extrassudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd rm ~/.docker/config.json -
Adicione o repositório
aptoficial da Docker# Adiciona a chave GPG oficial do Docker sudo apt update sudo apt install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg# Adiciona o repositório apt à lista echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -
Instale o Docker e o docker-compose-plugin
sudo apt update && \ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginUpdate: o docker-compose v1 é a versão antiga em Python, sem atualizações desde maio de 2021. O plugin foi reescrito em Go e seu comando agora é
docker compose(com espaço em vez de hífen). -
Opcionalmente, adicione seu usuário ao grupo
dockerpara não precisar dosudo:sudo usermod -aG docker $USERVeja possíveis atualizações na documentação oficial.
Fique atento que isso pode ser uma brecha de segurança.
-
Teste a instalação
sudo docker run hello-world
Docker com Rancher Deskop
O Rancher substitui bem o Docker Desktop e é especialmente bom para Kubernetes. Ele pode ser instalado pelo Chocolatey:
choco install rancher-desktop
NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
$ cat /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
sudo systemctl restart docker
Teste com o seguinte comando:
docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Visual Studio Code com WSL2
O VS Code instalado no Windows tem integração nativa com o WSL2. Você precisará instalar as extensões no WSL2 também.
GUI para Git
O Git por linha de comando é excelente para quase tudo, mas algumas tarefas são feitas mais facilmente de forma visual.
Ferramentas instaladas no Windows podem sofrer com performance ao acessar o sistema de arquivo do WSL, por isso recomendo instalá-las diretamente no Linux. Isso elimina algumas GUIs como o Sourcetree.
As ferramentas que já testei e gostei são:
-
- Ele já vem com uma boa ferramente da controle de versão. Algumas extensões possuem mais funcionalidades, porém eu não uso.
-
- Foi a primeira GUI para Git. Uso bastante para visualizar mudanças em um único arquivo.
-
- É muito completo e bonito, porém pago.
sudo apt update sudo apt install -y libgbm-dev libnotify4 wget https://release.gitkraken.com/linux/gitkraken-amd64.deb sudo dpkg -i ./gitkraken-amd64.deb sudo apt install -f -
-
Pelo Flatpak:
$ flatpak search gittyup Name Description Application ID Version Branch Remotes Gittyup Graphical Git client com.github.Murmele.Gittyup v1.3.0 stable flathubflatpak install flathub com.github.Murmele.Gittyupflatpak run --nosocket=fallback-x11 --socket=x11 com.github.Murmele.Gittyup -
AppImage:
wget -q -O ~/bin/gittyup \ $(wget -q -O - https://api.github.com/repos/Murmele/Gittyup/releases | \ jq -r '.[0].assets[] | select(.name | test("^Gittyup.*AppImage$")) | .browser_download_url') && \ chmod +x ~/bin/gittyup && \ gittyup --version
-
AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
ou com o asdf:
asdf plugin add awscli
asdf install awscli latest
asdf global awscli latest
Acessar por SSH
O WSL2 é uma máquina virtual com seu próprio endereço IP.
Este endereço pode ser encontrado das seguintes formas:
-
Instale o OpenSSH
sudo apt install openssh-server -
Ajuste as configurações em
/etc/ssh/sshd_configPort 2255 ListenAddress 0.0.0.0 PasswordAuthentication yes -
Descubra o endereço IP da VM
Usando o iproute2 no WLS2:
$ ip addr show eth0 … inet 172.21.145.176/20 brd 172.21.159.255 scope global eth0 …Ou, pelo PowerShell:
$ wsl -- ip -o -4 -j addr s eth0 | ConvertFrom-Json | %{ $_.addr_info.local } | ?{ $_ } 172.21.145.176Obs: o valor em
/etc/resolv.confé o endereço do host, não o da VM.$wsl = wsl -- ip -o -4 -j addr s eth0 | ConvertFrom-Json | %{ $_.addr_info.local } | ?{ $_ } $host = (Get-NetIPAddress).IPAddress | ?{ $_ -match ($wsl -replace '^((\d+\.){2}).*$','^$1') } $wsl,$host -
Verifique se o serviço está rodando
Leia o trecho acima sobre como ativar o Systemd antes.
$ sudo systemctl status sshd.service ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled) Active: active (running) since… -
Crie um portproxy entre a VM e o Host
Em um PowerShell como admin:
netsh interface portproxy add v4tov4 listenport=2255 listenaddress=0.0.0.0 connectport=2255 connectaddress=172.21.145.176 -
Libere a porta 2255 no Firewall
netsh advfirewall firewall add rule name="Open Port 2255 for WSL2" dir=in action=allow protocol=TCP localport=2255$ netsh interface portproxy show v4tov4 Listen on ipv4: Connect to ipv4: Address Port Address Port --------------- ---------- --------------- ---------- 0.0.0.0 2255 172.21.145.176 2255
Scanner
Existem muitos programas para interagir com o scanner, porém o melhor que conheço é o XSane, que é um frontend para o SANE.
sudo apt install xsane
Eu tenho uma multifuncional Canon Pixma MG5450. O nome completo não aparece na página de dispositivos compatíveis, porém ela faz parte da “PIXMA MG5400 Series”, que está inclusa no backend sane-pixma.
O comando scanimage -L faz um broadcast para detectar scanners conectados. Por padrão,
dispositivos da Canon podem ser descobertos com o protocolo BJNP na porta UDP 8612.
Infelizmente esse comando não detectou meu scanner de primeira.
Eu sabia que não era um erro de conexão, pois curl http://192.168.15.7 retorna a página da
multifuncional (esse IP é fixado no meu servidor DHCP).
A solução foi explicitar o IP da multifuncional no arquivo pixma.conf:
echo "bjnp://192.168.15.7" | sudo tee -a /etc/sane.d/pixma.conf
O comando funcionou sem problemas depois disso:
$ scanimage -L
device `pixma:MG5400_192.168.15.7' is a CANON Canon PIXMA MG5400 Series multi-function peripheral
O parâmetro --all lista possíveis opções compatíveis com o backend utilizado:
$ scanimage --device "pixma:MG5400_192.168.15.7" --all
Output format is not set, using pnm as a default.
All options specific to device `pixma:MG5400_192.168.15.7':
Scan mode:
--resolution auto||75|150|300|600|1200|2400dpi [75]
Sets the resolution of the scanned image.
--mode auto|Color|Gray|Lineart [Color]
Selects the scan mode (e.g., lineart, monochrome, or color).
--source Flatbed [Flatbed]
Selects the scan source (such as a document-feeder). Set source before
mode and resolution. Resets mode and resolution to auto values.
…
Desta forma, eu poderia escanear um documento em 150 dpi direto da linha de comando usando o scanimage:
scanimage \
--device "pixma:MG5400_192.168.15.7" \
--format=png \
--output-file scan.png \
--resolution 150 \
--progress
Porém com o XSane é muito mais fácil.
Áudio
Programas como o Virtual Audio Cable e Voicemeeter são úteis para configurações com múltiplos auto-falantes e para fazer streaming. As versões gratuitas de ambos podem ser instaladas pelo Chocolatey.
- Entre em
Control Panel\Hardware and Sound » Sound; - Em Playback, defina o VoiceMeeter Input como o dispositivo padrão e o VoiceMeeter Aux Input como o dispositivo padrão de comunicação;
- Em
Recording, defina o VoiceMeeter Output como o dispositivo padrão e o VoiceMeeter Aux Output como o dispositivo de comunicação padrão; - Entre na aba
Advancednas propriedades de cada dispositivo e defina o sample rate (Ex.: 24 bit, 48000 Hz). O sample rate deve ser configurado para o mesmo valor no Voicemeeter (em Menu » System settings » Preferred Main SampleRate). - Exemplo de configuração do Voicemeeter Banana:
- Hardware Input 1: Microfone do notebook
- Hardware Input 2: Microfone do headset
- Hardware Input 3: CABLE Output (VB-Audio Virtual Cable)
- Voicemeeter VAIO: Saída Desktop » A1, B1
- Voicemeeter AUX: Saída Calls » A1
- A1: WDM: Speakers / Headphones
- A2: WDM: Headset
- A3: WDM: TV ligada no HDMI
-
Obs. 1: Eu só configuro o microfone do meu headset bluetooth quando vou utilizá-lo, pois economiza energia e posso utilizar o fone no modo com maior qualidade de som.
-
Obs. 2: Tive problema no Spotify após instalar o Voicemeeter. Resolvi reinstalando o Spotify.
Outro programa bastante útil é o EarTrumpet. Ele permite definir, para cada programa, qual saída de áudio usar e com qual volume.
Streaming
Para chamadas de vídeo nas quais quero compartilhar o som sendo reproduzido no computador além do meu microfone, mas sem o som da própria chamada (voz dos outros participantes):
- No Meets/Teams/Discord/Skype:
- Microfone: VoiceMeeter Output
- Speaker: VoiceMeeter Aux Input
- No VoiceMeeter:
- Mic PC: B1
- Desktop (Voicemeeter VAIO): A1, B1
- Calls (Voicemeeter AUX): A1
Links
- https://github.com/bitsadmin/winconfig/tree/master/CleanWindows
- https://www.dedoimedo.com/computers/windows-10-essential-post-install-tweaks.html
- https://nickymeuleman.netlify.app/blog/linux-on-windows-wsl2-zsh-docker
- https://github.com/neovim/neovim/wiki/FAQ#how-to-use-the-windows-clipboard-from-wsl
- https://vb-audio.com/Voicemeeter/VoicemeeterBanana_UserManual.pdf
- https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-sandbox/windows-sandbox-configure-using-wsb-file
- https://aka.ms/wslsystemd
- https://learn.microsoft.com/en-us/windows/wsl/wsl-config
- https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html