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 -> 512000 para 500GB
format quick fs=ntfs label="Windows"
assign letter="W"
create partition primary size=1024
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 1GB.
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 /FNão mostra arquivos recentes
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer /V ShowRecent /T REG_DWORD /D 0x0 /FMostrar 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.
Gerenciadores de pacotes
Os três gerenciadores de pacotes para Windows mais conhecidos são: Chocolatey, Scoop e Winget.
Winget
Esse é o gerenciador de pacotes oficial da Microsoft. Ele existe desde o final de 2019. Não é possível instalar fontes, scripts.
winget install `
7zip.7zip `
Bambulab.Bambustudio `
DBBrowserForSQLite.DBBrowserForSQLite `
dbeaver.dbeaver `
Discord.Discord `
Ditto.Ditto `
Elgato.StreamDeck `
Git.Git `
Google.Chrome `
Greenshot.Greenshot `
Insomnia.Insomnia `
Kensington.KensingtonWorks `
MediaArea.MediaInfo.GUI `
Microsoft.PowerShell `
Microsoft.PowerToys `
Microsoft.VisualStudioCode `
Microsoft.WindowsTerminal `
Mozilla.Firefox `
OBSProject.OBSStudio `
PeterDaveHello.TransmissionRemoteGUI `
Plex.Plex `
SlackTechnologies.Slack `
Spotify.Spotify `
tailscale.tailscale `
Telegram.TelegramDesktop `
Valve.Steam `
Vivaldi.Vivaldi `
VB-Audio.Voicemeeter.Banana `
VideoLAN.VLC `
WireGuard.WireGuard `
Zen-Team.Zen-Browser
Winget upgrade
Para atualizar todos os programas:
winget upgrade --all --silent --accept-source-agreements --accept-package-agreements --include-unknown --disable-interactivity --force
Eu rodo uma vez em um prompt como admin e outra como usuário normal.
Como admin você precisa autorizar apenas um pop-up, porém ele apenas atualiza o que for instalado em nível de sistema. Como usuário comum você pode atualizar os programas instalados em nível de usuário.
Limpeza de histórico
Rodar no PowerShell:
# File Explorer Home
Remove-Item -Path "$env:APPDATA\Microsoft\Windows\Recent\*" -Force
Remove-Item -Path "$env:APPDATA\Microsoft\Windows\Recent\AutomaticDestinations\*" -Force
Remove-Item -Path "$env:APPDATA\Microsoft\Windows\Recent\CustomDestinations\*" -Force
# File Explorer address bar
Remove-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths" -Force -ErrorAction SilentlyContinue
# Clear typed history in Run dialog
Remove-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" -Force -ErrorAction SilentlyContinue
Chocolatey
Update: o Chocolatey contém mais pacotes que o Winget, porém essa diferença vem diminuindo. Hoje em dia eu não uso mais o Chocolatey, portanto não manterei esta sessão atualizada.
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 outdatedAtualize o Chocolatey antes:
choco upgrade chocolateyAtualize 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.Alternativamente, instale com o
oh-my-posh. Em um PowerShell como admin:oh-my-posh font install hackOutra boa é a JetBrains Mono.
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:00000000Default 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)→ CapsLockSharpKeys
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
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.
Dica 2: Se quiser aplicar uma configuração a todas as distros, use o arquivo
C:\Users\<UserName>\.wslconfig em vez do /etc/wsl.conf.
Instale a atualização do kernel
Atualize o WSL, se necessário
wsl --updateDefina o WSL2 como padrão:
wsl --set-default-version 2Liste distros disponíveis
wsl --list --onlineInstale uma distro (Ubuntu 22.04 ou 24.04)
Opção 1:
wsl --install -d Ubuntu-24.04Opção 2: pela Microsoft Store
Opção 3: 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.Defina a distro padrão (caso instale mais de uma)
wslconfig /setdefault Ubuntu-24.04[Opcional] Mova a imagem de
C:paraZ: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.tarUpdate (2024): agora existe a opção
wsl --import-in-place:wsl --import-in-place Ubuntu-24.04 Z:\WSL\Ubuntu-24.04\ext4.vhdxVerifique a versão do Ubuntu
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.1 LTS Release: 24.04 Codename: nobleAjuste os locales
sudo nvim /etc/locale.gen sudo locale-genNão adicione pastas do Windows ao
$PATHAdicione 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.
[Snap]: https://snapcraft.io/
[Flatpak]: https://flatpak.org/
[microk8s]: https://microk8s.io/
Adicione as seguintes linhas ao arquivo `/etc/wsl.conf`:
```bash
[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 updateAtualize o sistema
sudo apt update && sudo apt upgradeInstale 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 \ unzip \ wget \ xclip \ zsh \LaTeX:
sudo apt install \ latexmk \ texlive-lang-portuguese \ texlive-xetexUtilitários:
sudo apt install \ ripgrep \ fd-find \ oathtoolClone 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-wsl .gitconfig ln -s dotfiles/.p10k.zsh ln -s dotfiles/.configInstale 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
- pipx
- uvx
- Compilar código fonte
Asdf
Update (2025):
O asdf foi reescrito em Golang na versão v0.16.0. Agora é possível baixar um único binário:
curl -sL https://api.github.com/repos/asdf-vm/asdf/releases/latest | \ jq -r '.assets[] | select(.name | test("^asdf-v.*-linux-amd64.tar.gz$")).browser_download_url' | \ xargs curl -sL | \ tar xz -C ~/bin/Os comandos
asdf globaleasdf localforam substituidos porasdf set.Configure seguindo a documentação, meu .zshrc ou o plugin.
Modo antigo:
git clone https://github.com/asdf-vm/asdf.git ~/.asdfuv
curl -LsSf https://astral.sh/uv/install.sh | shPython
(Atualizado em 2025)
Existem várias formas de se instalar Python:
Repositório oficial do Ubuntu
sudo apt install python3Essa é a forma mais fácil, porém você não pode especificar qual versão você quer ou manter múltiplas versões ao mesmo tempo.
sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.11Essa é uma boa alternativa. Permite instalar múltiplas versões sem precisar compilar.
curl https://pyenv.run | bash pyenv versions pyenv install "3.13"O Pyenv compila as versões que você escolher. Instale as dependências:
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-devasdf install python latest:3.10 # asdf local python latest:3.10 asdf set python latest:3.10O asdf-python é um plugin para asdf que usa o Pyenv para build e instalação. Faz sentido se você também for usar o asdf para outras linguagens como nodejs ou ruby.
uv python install 3.12O
uvpermite baixar uma versão pré-compilada do Python do python-build-standalone.Esteja ciente de que alguns programas são incompatíveis com essas builds, porque elas não linkam com bibliotecas do sistema.
Infelizmente o
uvainda não tem um--buildpara cobrir esses casos, mas para todos os outros é ele que eu uso. As builds são bem otimizadas e não preciso perder tempo compilando.[pixi]
???
Mambaforge
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 updateCompiladores e build tools
Certifique-se de ter alguns compiladores e linkers instalados:
sudo apt install \ build-essential \ cmake \ ninja-build \ clang \ -yRust
Instale com:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shGo
O jeito mais fácil é usando asdf.
asdf ...Mas se só quiser a última versão:
sudo rm -rf /usr/local/go && \ wget -qO- "https://go.dev/dl/$(curl -s 'https://go.dev/dl/?mode=json' | \ jq -r '.[0].files[] | select(.os=="linux" and .arch=="amd64") | .filename')" | \ sudo tar -C /usr/local -xzf - && \ go versionPara o usuário local apenas:
mkdir -p $HOME/.local && \ wget -qO- "https://go.dev/dl/$(curl -s 'https://go.dev/dl/?mode=json' | \ jq -r '.[0].files[] | select(.os=="linux" and .arch=="amd64") | .filename')" | \ tar -C $HOME/.local -xzf - && \ export PATH=$PATH:$HOME/.local/go/bin && \ go versionHugo
curl -sL https://api.github.com/repos/gohugoio/hugo/releases/latest | \ jq -r '.assets[] | select(.name | test("^hugo_extended_withdeploy_.*_linux-amd64\\.deb$")).browser_download_url' | \ xargs wget -q --show-progress -O hugo.deb && \ sudo dpkg -i --force-overwrite hugo.deb && \ sudo apt-get install -f && \ rm -f hugo.deb && \ hugo versionou
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:
curl -sL https://api.github.com/repos/zellij-org/zellij/releases/latest | \ jq -r '.assets[] | select(.name | test("^zellij-x86_64-.*-linux-.*.tar.gz$")).browser_download_url' | \ xargs curl -sL | \ tar -xz -C ~/bin/ "zellij"Yt-dlp:
uv tool install yt-dlpou
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/exiftoolAWS CLI
sudo snap install aws-cli --classic aws --versionou
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/installou com o
asdf:asdf plugin add awscli asdf install awscli latest asdf global awscli latestgit-filter-repo
uv tool install git-filter-repoTailwind
curl -sL "https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64" -o ~/bin/tailwindcss chmod +x ~/bin/tailwindcssWatchman
See https://facebook.github.io/watchman/docs/install
curl -sL https://api.github.com/repos/facebook/watchman/releases/latest | \ jq -r '.assets[] | select(.name | test("^watchman-.*-linux\\.zip$")).browser_download_url'Defina o shell padrão:
chsh -s $(which zsh)
GNOME Keyring
Existem vários programas para armazenar senhas, chaves e certificados de forma segura. O GNOME Keyring é um dos mais populares e compatível com outros programas como Docker, Git, Chromium e GnuPG.
Ele foi feito para usar com interface gráfica, porém eu consegui usar no Ubuntu headless.
Instale via apt
sudo apt install gnome-keyringO
gnome-keyring-daemonserá iniciado automaticamente pelo systemd após o login, porém estará bloqueado.Desbloqueie o gnome-keyring ao iniciar um terminal (uso ZSH)
echo 'eval $(echo -n db | gnome-keyring-daemon --unlock --replace 2> /dev/null)' >> ~/.zshrcTeste
uvx keyring set system username uvx keyring get system username
Alternativas: pass, Hashicorp Vault, kwallet
Compartilhar arquivos entre distros no WSL2
Execute o seguinte comando para criar um arquivo que instrui o systemd a montar a pasta / da
distribuição atual em /mnt/wsl/instances/$DISTRO. A pasta /mnt/wsl/ (ou o que estiver
configurado em [automount].root) é compartilhada por todas as distribuições em execução.
cat <<EOF | sudo tee /etc/systemd/system/mnt-wsl-instances-${WSL_DISTRO_NAME/-/}.mount
[Unit]
Description=WSL Instances
[Mount]
What=/
Where=/mnt/wsl/instances/${WSL_DISTRO_NAME/-/}
Type=none
Options=defaults,bind,X-mount.mkdir
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable mnt-wsl-instances-${WSL_DISTRO_NAME/-/}.mount --now
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 USD milhões de lucro anual).
Baixe o Docker Desktop (pelo Chocolatey, por exemplo).
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.
O jeito mais simples de instalar o Docker é usando o script seguinte script:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run
Ele vai imprimir os comandos a serem executados. Remova o --dry-run para executar de fato.
Se quiser fazer passo-a-passo sem script:
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.jsonAdicione 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/nullInstale 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. Se quiser uma opção mais segura (porém limitada), procure sobre como executar o daemon em rootless mode.
Teste a instalação
sudo docker run hello-worldConfigure onde armezanar as credenciais (Credential Helper)
É útil caso você faça
docker loginpara gerenciar imagens no Docker Hub ou em um repositório privado. Sem um credential helper, a senha é armazenada em plaintext (base64) no arquivo~/.docker/config.json.Alternativa 1: Pass
sudo apt install gnupg2 pass sudo apt install golang-docker-credential-helperswget -q -O ~/bin/docker-credential-pass $(wget -q -O - https://api.github.com/repos/docker/docker-credential-helpers/releases | \ jq -r '.[0].assets[] | select(.name | test("^docker-credential-pass-.*linux-amd64$")) | .browser_download_url') && chmod +x ~/bin/docker-credential-passEm
~/.docker/config.json:{ "credsStore": "pass" }Alternativa 2: gnome-keyring
Instale e configure como explicado em Gnome Keyring.
wget -q -O ~/bin/docker-credential-secretservice $(wget -q -O - https://api.github.com/repos/docker/docker-credential-helpers/releases | \ jq -r '.[0].assets[] | select(.name | test("^docker-credential-secretservice-.*linux-amd64$")) | .browser_download_url') && chmod +x ~/bin/docker-credential-secretserviceEm
~/.docker/config.json:{ "credsStore": "secretservice" }
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 -fPelo 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.GittyupAppImage:
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
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-serverAjuste as configurações em
/etc/ssh/sshd_configPort 2255 ListenAddress 0.0.0.0 PasswordAuthentication yesDescubra 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 = wsl -- ip -o -4 -j addr s eth0 | ConvertFrom-Json | %{ $_.addr_info.local } | ?{ $_ } ❯ $host_ip = (Get-NetIPAddress).IPAddress | ?{ $_ -match ($wsl_ip -replace '^((\d+\.){2}).*$','^$1') } ❯ $wsl_ip,$host_ip 172.30.121.114 172.30.112.1Verifique 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=$wsl_ipLibere 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.30.121.114 2255Para desfazer
Remove a port forwarding rule:
netsh interface portproxy delete v4tov4 listenport=2255 listenaddress=0.0.0.0Verifique a mudança:
netsh interface portproxy show v4tov4Remover todas as configurações:
netsh interface portproxy resetRemove a regra no firewall:
netsh advfirewall firewall delete rule name="Open Port 2255 for WSL2" protocol=TCP localport=2255Verificar:
$ netsh advfirewall firewall show rule name="Open Port 2255 for WSL2" No rules match the specified criteria.netsh advfirewall firewall show rule name=all | Select-String -Pattern "WSL" -Context 0,4
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