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 » Search
e 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 Drives
e ativeRequire Additional Authentication at Startup
eAllow enhanced PINs for startup
. -
Desativar o Meet Now do Skype
Entre em
User Configuration
»Administrative templates
»Start Menu and Taskbar
e ative a policyRemove the Meet Now icon
.
Regedit
-
Desativa Cortana e Bing
Navegue até
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search
e crie uma nova DWORD chamadaConnectedSearchUseWeb
e atribua valor 0.Navegue até
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search
e crie duas novas DWORDs com valor 0:AllowSearchToUseLocation
eBingSearchEnabled
. -
Usar UTC no relógio (útil para dual-booting)
Navegue até
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
e crie uma nova DWORD chamadaRealTimeIsUniversal
com 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 /F
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu /V {20D04FE0-3AEA-1069-A2D8-08002B30309D} /T REG_DWORD /D 0x0 /F
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /V {20D04FE0-3AEA-1069-A2D8-08002B30309D} /T REG_DWORD /D 0x0 /F
reg 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.reg
e 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,00
Um 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.appx
Execute o arquivo
~\Downloads\ubuntu-2204.appx
. Vai aparecer uma mensagem dizendo que o Ubuntu já está instalado e um botão escritolaunch
para iniciar o Ubuntu.
-
-
Verifique se a versão do WSL é a 2:
wsl --list --verbose
Se 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 = false
Isso 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=4
Verifique com o comando
free
no 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_caches
como root. - O arquivo
.wslconfig
deve 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 \ oathtool
LaTeX:
sudo apt install \ latexmk \ texlive-lang-portuguese \ texlive-xetex
Dependê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.1
Mambaforge:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh bash Mambaforge-Linux-x86_64.sh
Flatpak (ative o Systemd antes):
sudo apt install flatpak gnome-software-plugin-flatpak gnome-software
flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak update
Hugo:
CGO_ENABLED=1 go install --tags extended github.com/gohugoio/hugo@latest
ou
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_LATEST
Zellij:
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-dlp
ou
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 nightly
ExifTool:
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; done
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd rm ~/.docker/config.json
-
Adicione o repositório
apt
oficial 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-plugin
Update: 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
docker
para não precisar dosudo
:sudo usermod -aG docker $USER
Veja 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 flathub
flatpak install flathub com.github.Murmele.Gittyup
flatpak 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_config
Port 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.176
Obs: 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
Advanced
nas 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