Windows

Apr. 18, 2021·
Julio Batista Silva
Julio Batista Silva
· 29 Min Lesezeit
Hinweis
Aktualisiert im Oktober 2024.

Installation

Installations-USB erstellen

Du kannst Windows 10 direkt von der Microsoft-Website herunterladen. Wähle einen USB‑Stick mit mindestens 8 GB, den das Tool formatiert und zu einem bootfähigen Installer macht.

Falls der Fehler 715-123130 erscheint, probiere einen anderen Browser oder lade über ein VPN in den USA herunter.

Wenn du die ISO herunterlädst, prüfe den Hash:

PS > Get-FileHash .\Win11_22H2_EnglishInternational_x64v1.iso

Algorithm       Hash
---------       ----
SHA256          F115CD6B31734BC091BC94B964D5AD43984285BF229503481E2F7EF94AB7140E

Zum Schreiben des Images empfehle ich Rufus. Es bietet einige sehr praktische Funktionen.

Partitionierung

Eine typische Windows-Installation erstellt 4 Partitionen:

  • EFI: 100 MB
  • MSR: 16 MB
  • Windows
  • Recovery: 500 MB bis 650 MB

Den Wert, den du im grafischen Installer eingibst, ist die Summe all dieser Partitionen. Wenn dein C: exakt 250 GB anzeigen soll, musst du etwas mehr als 256616 MB verwenden (100 + 16 + 250 * 1024 + 500).

Für mehr Kontrolle über die Größen kannst du per Kommandozeile partitionieren. Drücke Shift + F10 und nutze 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

In diesem Beispiel werden eine EFI-Partition mit 1 GB und eine Recovery-Partition mit 1 GB erzeugt.

Für Dual‑Boot wird eine EFI von mindestens 300 MB empfohlen. Linux bindet diese Partition als /boot ein und speichert dort die Dateien für den Bootloader, einschließlich komprimierter Kernel‑ und Treiberdateien (vmlinuz).

Wenn bereits vor der Installation eine FAT32‑formatierte EFI‑Partition vorhanden ist, verwendet Windows diese anstelle einer neuen.

Wenn du feststellst, dass die EFI‑Partition nach der Windows‑Installation vergrößert werden muss, schau dir den Partition Expert von Macrorit an. Die kostenlose Portable‑Version kann Partitionen einfach verschieben und in der Größe ändern.

Die 16‑MB‑MSR‑Partition (Microsoft Reserved) kann vom Windows‑Installer selbst (create partition msr) oder mit dem Code 0c01 in cgdisk wiederhergestellt werden.

Datenschutzoptionen

Beim ersten Start erscheint ein Datenschutz‑Bildschirm. Deaktiviere Find my device, Inking & Typing, Advertising ID, Diagnostic data, Tailored experiences und alles Weitere, was sich deaktivieren lässt.

Nach dem Start: Settings » Privacy. Ich deaktiviere fast alles. Die einzige App, die meine Kamera (die ohnehin abgedeckt ist) nutzen darf, ist Skype.

Group Policy Editor

Führe gpedit.msc aus.

  • Websuche

    Gehe zu Local Computer Policy » Computer Configuration » Administrative Templates » Windows Components » Search und setze „Do not allow web search“ auf Enabled.

  • BitLocker mit PIN

    Navigiere zu Computer Configuration » Administrative Templates » Windows Components » BitLocker Drive Encryption » Operating System Drives und aktiviere Require Additional Authentication at Startup und Allow enhanced PINs for startup.

  • Meet Now (Skype) deaktivieren

    Gehe zu User Configuration » Administrative templates » Start Menu and Taskbar und aktiviere die Richtlinie Remove the Meet Now icon.

Regedit

  • Cortana und Bing deaktivieren

    Navigiere zu HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search und lege eine neue DWORD mit dem Namen ConnectedSearchUseWeb und dem Wert 0 an.

    Navigiere zu HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search und lege zwei DWORDs mit Wert 0 an: AllowSearchToUseLocation und BingSearchEnabled.

  • UTC für die Uhr verwenden (nützlich für Dual‑Boot)

    Navigiere zu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation und lege eine neue DWORD RealTimeIsUniversal mit dem Wert 1 an.

  • Desktop‑Symbole anzeigen/ausblenden

    Das geht über die grafische Oberfläche; ich empfehle nicht, es im Regedit zu tun.

    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}
    

    Beispiel:

    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
    
  • Keine zuletzt verwendeten Dateien anzeigen

    reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer /V ShowRecent /T REG_DWORD /D 0x0 /F
    
  • Benutzerordner in der Schnellzugriff‑Navigation des Explorers anzeigen (Quick Access)

    reg add HKCU\SOFTWARE\Classes\CLSID\{59031a47-3f72-44a7-89c5-5595fe6b30ee} /V System.IsPinnedToNameSpaceTree /T REG_DWORD /D 0x1 /F
    

Computername

Navigiere zu Control Panel\System and Security\System. Klicke in der Zeile mit dem Computernamen auf „Change settings“ und ändere den Namen.

Windows Update

Alles aktualisieren und den Rechner neu starten.

Manchmal ist das neueste Update noch nicht über Windows Update verfügbar, kann aber manuell installiert werden: https://www.microsoft.com/en-us/software-download/windows10.

Treiber

  • Kensington Works
  • Nvidia
  • Hersteller‑Website

Verschlüsselung

  • BitLocker

    Nach dem Aktualisieren von Windows: BitLocker auf Laufwerk C:/ aktivieren. Den Recovery‑Key an einem sicheren Ort speichern (nicht auf dem betroffenen Rechner, klar).

  • VeraCrypt

    Eine Open‑Source‑Alternative zum Verschlüsseln ganzer Partitionen oder zum Erstellen von Containern. Später zeige ich, wie man es mit Chocolatey installiert.

Windows Features

Gehe zu Control Panel\Programs » Turn Windows features on or off.

  • „Virtual Machine Platform“ aktivieren
  • „Windows Hypervisor Platform“ aktivieren (wird für Docker benötigt)
  • „Windows Sandbox“ aktivieren
  • „Windows Subsystem for Linux“ aktivieren
  • „Hyper‑V“ aktivieren (für VMs)

Energieeinstellungen

Gehe zu Control Panel\Hardware and Sound\Power Options\Create a Power Plan und erstelle einen Plan auf Basis von „High Performance“ mit folgenden Optionen (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
  • 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
  • Display
    • Turn off display after
      • On battery: 20 Minutes
      • Plugged in: 30 Minutes

Unter Control Panel\Hardware and Sound\Power Options\System Settings die Option Turn on fast start-up deaktivieren.

Sperre bei Inaktivität

  • Screen Saver settings » Blank » 3 min » On resume, display log-on screen

Unnötige Programme deinstallieren

In „Add or Remove programs“ alles deinstallieren, was nicht benötigt wird.

Nervige Meldungen deaktivieren

Gehe zu Control Panel\System and Security\Security and Maintenance\Change Security and Maintenance settings.

Deaktiviere die Meldungen zu Windows Backup.

Paketmanager

TODO: https://daftdev.blog/2024/04/01/chocolatey-vs-scoop-vs-winget---which-windows-package-manager-to-use/

Die drei bekanntesten Paketmanager für Windows sind: Chocolatey, Scoop und Winget.

Winget

Das ist der offizielle Paketmanager von Microsoft; es gibt ihn seit Ende 2019. Schriften, Skripte u. a. lassen sich damit nicht installieren.

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

Alle Programme aktualisieren:

winget upgrade --all --silent --accept-source-agreements --accept-package-agreements --include-unknown --disable-interactivity --force

Ich führe das einmal in einer Administrator‑Eingabeaufforderung und einmal als normaler Benutzer aus.

Als Admin musst du nur ein Pop‑up bestätigen, aber es aktualisiert nur systemweit installierte Programme. Als normaler Benutzer kannst du benutzerweit installierte Programme aktualisieren.

Verlauf bereinigen

Im PowerShell ausführen:

# 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: Chocolatey enthält mehr Pakete als Winget, aber der Unterschied schrumpft. Heutzutage nutze ich Chocolatey nicht mehr; diesen Abschnitt halte ich daher nicht aktuell.

Installiere gemäß der aktuellen Anleitung auf https://chocolatey.org/install.

In PowerShell als Administrator:

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

Chocolatey aktualisieren

  • Veraltete Pakete auflisten:

    choco outdated
    
  • Chocolatey zuerst aktualisieren:

    choco upgrade chocolatey
    
  • Alle Pakete aktualisieren:

    choco upgrade all -y
    

PowerShell

Windows 10 und 11 kommen mit Version 5.1; die neueste Version ist auf GitHub verfügbar und kann über Chocolatey oder Winget installiert werden.

Mit Winget:

winget search Microsoft.PowerShell
winget install --id Microsoft.Powershell --source winget
> $PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      4      1

Execution Policy

PowerShell hat folgende Optionen, um die Ausführung von Skripten einzuschränken:

  • Restricted: Führt keine Skripte aus. Nur interaktiver Modus.
  • AllSigned: Führt nur Skripte aus, die von einem vertrauenswürdigen Herausgeber signiert sind.
  • RemoteSigned: Heruntergeladene Skripte müssen signiert sein.
  • Unrestricted: Alle Skripte können ausgeführt werden.

Ich konfiguriere RemoteSigned:

Set-ExecutionPolicy RemoteSigned

Oh My Posh

Oh My Posh ist ein Theme für das Terminal – besonders gut mit PowerShell.

Am einfachsten per Winget installieren:

winget install JanDeDobbeleer.OhMyPosh -s winget

Dann PowerShell so konfigurieren, dass Oh My Posh beim Start geladen wird:

notepad $PROFILE

Und Folgendes einfügen:

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/powerlevel10k_lean.omp.json" | Invoke-Expression
Set-PSReadlineOption -EditMode vi -BellStyle None

Diese Befehle konfigurieren PowerShell mit dem Theme powerlevel10k_lean im Vi‑Modus. Weitere Themes mit Get-PoshThemes und auf der offiziellen Seite.

Der Befehl notepad $PROFILE bearbeitet $profile.currentusercurrenthost. Wenn du für andere Hosts und Benutzer konfigurieren willst, bearbeite die passenden Dateien:

$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

Ich teile mir ein Microsoft 365 Family‑Abo mit fünf weiteren Personen. Es lohnt sich, denn neben dem Office‑Paket bekommt jede Person 1 TB OneDrive‑Speicher.
Außerdem gibt es oft Aktionen für 1 Jahr „Personal“ im Voraus, das man in 9 Monate „Family“ umwandeln kann.

Den Installer mit allen Office‑Programmen kannst du in deinem Microsoft‑Konto herunterladen. Dort wählst du Sprache und Version (32 oder 64‑Bit).

Alternativ kann man die Programme einzeln über den Microsoft Store installieren; ich empfehle das allerdings nicht.

E‑Mails

Ich nutze Thunderbird als E‑Mail‑Client.

  1. Um Platz zu sparen, deaktiviere die Ordner‑Synchronisation. Dann werden nur die Header geladen;
  2. Konfiguriere minimieren in die Taskleiste;
  3. Hinterlege deinen PGP‑Schlüssel zum Signieren von E‑Mails;
  4. Verwende ein Master‑Passwort, um die im Thunderbird gespeicherten Passwörter und Schlüssel zu schützen (Datei key4.db): Tools » Options » Privacy & Security » use a master password.

Für Konten mit Zwei‑Faktor‑Authentifizierung kannst du ein app‑spezifisches Passwort nutzen oder die Erstkonfiguration ohne Passwort machen und danach auf OAuth2 umstellen.

Kalender

Für die meisten genügt es, den E‑Mail‑Tab im Browser offen zu lassen und Benachrichtigungen zu aktivieren. Ich nutze mehrere Kalender und sehe sie gerne zentral mit Desktop‑Benachrichtigungen.

Die Windows‑Standard‑App ist tief ins System integriert und zeigt Ereignisse direkt in der Taskleiste an und nutzt native Benachrichtigungen. Da ich aber ohnehin Thunderbird für E‑Mails verwende, konfiguriere ich dort auch meine Kalender.

Nur anzeigen (View only)

Den Link zu deinem Google‑Kalender erhältst du so:

  1. Öffne die Google‑Kalender‑Einstellungen (https://calendar.google.com/calendar/u/0/r/settings);
  2. „Settings for my calendars“;
  3. Kalender auswählen;
  4. „Integrate calendar“;
  5. „Secret address in iCal format“.

Füge den Link in Thunderbird ein: File » New » Calendar » On the Network » iCalendar (ICS).

Der Kalender ist dann schreibgeschützt.

Um Ereignisse im Hauptfenster zu sehen: View » Today Pane » Show Today Pane.

Bidirektional synchronisieren (View & Edit)

Die Add‑ons Lightning und Provider for Google können das, aber du kannst Thunderbird auch via CalDav konfigurieren:

  • Google: Erzeuge ein app‑spezifisches Passwort unter https://myaccount.google.com/apppasswords.
  • Zoho: 1. App‑Passwort unter Zoho Accounts » Security » App Passwords » Application-Specific Passwords » Generate New Password erzeugen. 2. CalDav unter Settings » Calendar » Synchronize » CalDAV aktivieren. 3. Calendar ID unter Settings » Calendars » My Calendars holen. In Thunderbird: File » New » Calendar » On the Network » CalDAV.
  • Username: deine@email.com
  • Location Google: https://www.google.com/calendar/dav/deine@email.com/events
  • Location Zoho: https://calendar.zoho.com/caldav/**Calendar ID**/events

Sprachen

Ich lasse mein Notebook gerne auf Englisch, aber zusätzliche Sprachen wie Portugiesisch sind nützlich.

Settings » Languages » Preferred Languages » Add a preferred language.

Sprachen per PowerShell hinzufügen/entfernen

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

„Geister‑Tastatur“‑Bug

Auch in Deutschland nutze ich English (United Kingdom) als System‑ und Format‑Sprache. Aus irgendeinem Grund fügt Windows hartnäckig die deutsche Tastatur hinzu.

Schlimmer noch: Sie erscheint weder im Regedit (Computer\HKEY_USERS\.DEFAULT\Keyboard Layout\Preload) noch in den Sprach‑/Regionseinstellungen.

Man muss die deutsche Tastatur manuell hinzufügen, nur um sie wieder entfernen zu können.

Das geht auch per PowerShell:

$langs = Get-WinUserLanguageList
$langs[0].InputMethodTips.Add('0809:00000407')
Set-WinUserLanguageList $langs -Force
$langs[0].InputMethodTips.Remove('0809:00000407')
Set-WinUserLanguageList $langs -Force

Prüfe den Code im Regedit (Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language).

IDTagSpracheRegion
0x0416pt-BRPortugiesischBrasilien
0x0816pt-PTPortugiesischPortugal
0x0409en-USEnglischVereinigte Staaten
0x0809en-GBEnglischVereinigtes Königreich
0x0c0Aes-ESSpanischSpanien
0x0407de-DEDeutschDeutschland
0x1000en-150EnglischEuropa
0x1000en-DEEnglischDeutschland

Komplette Tabelle: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c

Zusätzliche Uhr

Ich kommuniziere viel mit Australien und Norwegen. Wegen der großen Zeitverschiebung habe ich gerne eine zusätzliche Uhr.

Gehe zu Date & Time » Add clocks for different time zones und konfiguriere die zusätzliche Uhr.

Personalisierung

  • Hintergrundbild

    Unter Settings » Personalization ein Hintergrundbild auswählen. Ich nutze meist „Solid colour“ Schwarz.

  • Farben

    Default app mode: Dark

  • Sperrbildschirm

    Anzeigen von Apps auf dem Sperrbildschirm und das Hintergrundbild im Anmeldebildschirm deaktivieren.

  • Schriften

    Installiere eine Nerd Font.
    Ich empfehle Hack NF. Paket entpacken, alle „Windows Compatible“‑Schriften markieren, Rechtsklick und „Install“ oder „Install for all users“.

    Alternativ per oh-my-posh. In einer PowerShell als Admin:

    oh-my-posh font install hack
    

    Ebenfalls gut: JetBrains Mono.

    Installiere die Google Noto Fonts, um Darstellungsprobleme mit fehlenden Zeichen zu vermeiden (sonst Kästchen). Bevorzuge die „hinted“-Variante.

  • Desktop‑Symbole anzeigen/ausblenden

    Themes » Desktop Icon Settings. Ich lasse „This PC“, „Recycle Bin“ und den Benutzerordner aktiv.

  • Taskleiste

    Entferne alles Überflüssige. Die Suchleiste ausblenden.

  • Autostart‑Programme deaktivieren

    Task‑Manager öffnen und unerwünschte Autostarts deaktivieren.

  • File Explorer

    File Explorer öffnen. View » Options » Change folder and search options. In der Registerkarte „View“ ein/aus:

    • Always show menus
    • Display the full path in the title bar
    • Show hidden files, folders, and drives
    • Hide extensions for known file types
    • Hide protected operating system files
  • OneDrive aus dem Quick Access entfernen

    [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
    
  • Standard‑Apps

    • Music player: VLC
    • Photo viewer: IrfanView
    • Video player: VLC
    • Web browser: Firefox

    Außerdem ordne ich Dateiendungen zu:

    • .txt → Notepad++
  • Chrome und Firefox

    Browser synchronisieren. Erweiterungs‑Konfigurationen (z. B. uMatrix) übernehmen.

  • Esc und CapsLock tauschen

    Möglich per Regedit, SharpKeys, PowerToys u. a.

    • Regedit

      Den folgenden Code als caps_swapescape.reg speichern und ausführen:

      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
      

      Ein Mapping besteht aus einem 32‑Bit‑Integer (zwei 16‑Bit‑Scancodes) im Little‑Endian‑Format.

      (03,00,00,00) → Es folgen 3 Integers (96 Bits = 24 Hex‑Ziffern) (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

Mit vier Fingern nach oben wischen, um neue Desktops anzulegen. Ich nutze meist 2 Desktops.

Terminal

Ich mag Cmder und Windows Terminal (im Microsoft Store). Beide sind gut anpassbar. Eine wichtige Änderung ist die Schriftart; ich empfehle Hack NF.

Im 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"
    }

Ich ändere die „paste“-Taste von ctrl+v auf ctrl+shift+v, um den Visual‑Mode im Vim nicht zu stören.

Sandbox

Fürs Testen von Anwendungen – vor allem aus unsicherer Quelle – empfiehlt sich ein isoliertes System: Sandboxes oder virtuelle Maschinen.

Wenn Installationen/Konfigurationen nicht persistiert werden müssen und die aktuelle Windows‑Version ausreicht, ist eine Sandbox praktischer als VMs: kein Images‑Download, schnellerer Start, weniger Platzbedarf usw.

Sandboxing geht mit Tools wie Sandboxie, aber Windows 10 Professional hat das Feature nativ; es muss nur aktiviert werden.

Die Konfiguration ist simpel und die Performance gut. Windows Sandbox nutzt Windows Containers und damit Hyper‑V.

Die Sandbox lässt sich in den Windows Features aktivieren oder per PowerShell:

Enable-WindowsOptionalFeature -Online -FeatureName "Containers-DisposableClientVM"

Die Konfiguration erfolgt über XML‑Dateien mit der Endung .wsb, z. B.:

<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>

Dieses Beispiel startet eine geschützte Sandbox mit 8 GB RAM, Lesezugriff auf C:\Share und ohne Netzwerk, Mikrofon, Webcam, Drucker oder Zwischenablage.

Virtualisierung: Hyper‑V

Microsoft Sandbox eignet sich für schnelle Tests und portable Apps; sie deckt jedoch nicht den Fall ab, in dem Systemänderungen persistent sein sollen. Dafür nutzt man VMs.

Wenn du einen starken Server hast, lohnt sich evtl. ein VM‑Manager wie Proxmox VE und Remote‑Zugriff. Je nach Fall ist auch eine VM in der Cloud sinnvoll.

Für lokale Installationen unter Windows gibt es mehrere Hypervisor‑Optionen, die in zwei Typen eingeteilt werden:

  • Hypervisor Typ 1:
    • Bare‑Metal, native
    • Greift direkt auf die Hardware zu
    • Beste Performance
    • Beispiele: VMware ESXi (VMware vSphere), Microsoft Hyper‑V, Oracle VM, Citrix Hypervisor
  • Hypervisor Typ 2:
    • Hosted
    • Läuft auf dem Betriebssystem
    • Einfacher zu verwalten
    • Beispiele: VMware Fusion, VMware Workstation Pro, Oracle VM VirtualBox

VMware gilt als funktionsreich, aber ich nutze derzeit Hyper‑V (Windows Pro) – vor allem wegen der Kosten.

Unter Hyper‑V lassen sich Linux, FreeBSD und Windows installieren. Beachte: Auch virtualisiertes Windows benötigt eine Lizenz.

Tipps:

  • Nach Möglichkeit „Generation 2“ verwenden.
  • TPM aktivieren: Security » Enable Trusted Platform Module
  • Vor Änderungen Checkpoints (Snapshots) anlegen
  • Offline‑Installation (Windows 11):
    • Shift+F10 für Terminal
    • C:\Windows\System32\oobe\BypassNRO.cmd ausführen
    • „I don’t have internet“ wählen
    • „Continue with limited setup“ wählen
  • Im „enhanced session mode“ lassen sich Dateien zwischen Host und VM kopieren/einfügen
  • Virtuelle „.vhdx“-Disks können zum Dateiaustausch gemountet werden. Vor dem Start der VMs wieder aushängen.
  • Guest Services aktivieren

Nvidia‑Grafikkarte unter Hyper‑V

Hinweis
Aktualisiert im Januar 2023. Windows 11.

Aufgrund einer Sicherheitslücke hat Microsoft die „RemoteFX vGPU“-Option entfernt, die mehreren VMs das Teilen einer GPU erlaubte.

Unter Windows Server kann man eine GPU exklusiv an eine VM durchreichen (GPU Passthrough via Discrete Device Assignment, DDA). Das funktioniert allerdings nur mit Enterprise‑GPUs wie Nvidia Quadro.

Die einzige aktuelle Lösung ist GPU Paravirtualization/GPU Partitioning. Mehr Infos:

WSL2

Hinweis
Letzte Aktualisierung: Oktober 2024.

Nachdem „Windows Subsystem for Linux“ in den Windows Features aktiviert wurde, muss die Umgebung noch konfiguriert werden.

Tipp: Vieles aus meinem Arch‑Artikel gilt auch für Ubuntu unter WSL.

Tipp 2: Wenn du eine Einstellung für alle Distros anwenden willst, verwende C:\Users\<UserName>\.wslconfig statt /etc/wsl.conf.

  1. Kernel‑Update installieren: Link

  2. WSL ggf. updaten

    wsl --update
    
  3. WSL2 als Standard setzen: wsl --set-default-version 2

  4. Verfügbare Distros auflisten

    wsl --list --online
    
  5. Eine Distro installieren (Ubuntu 22.04 oder 24.04)

    • Option 1: wsl --install -d Ubuntu-24.04

    • Option 2: über den Microsoft Store

    • Option 3: per Kommandozeile

      cd ~\Downloads
      curl.exe -L -o ubuntu-2204.appx https://aka.ms/wslubuntu2204
      Add-AppxPackage .\ubuntu-2204.appx
      

      Führe ~\Downloads\ubuntu-2204.appx aus. Es erscheint die Meldung, dass Ubuntu bereits installiert ist, sowie ein launch‑Button zum Starten.

  6. Prüfen, ob die WSL‑Version 2 ist: wsl --list --verbose

    Wenn 1: wsl --set-version Ubuntu 2.

  7. Standard‑Distro setzen (bei mehreren Installationen)

    wslconfig /setdefault Ubuntu-24.04
    
  8. [Optional] Abbild von C: nach Z: verschieben

    Die VHDs (Virtual Hard Disks) von WSL2 liegen unter C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName].
    Beispiel: C:\Users\Julio\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx.

    Man kann den Pfad via Regedit umbiegen; sicherer ist Export/Import:

    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
    

    Update (2024): Es gibt wsl --import-in-place:

    wsl --import-in-place Ubuntu-24.04 Z:\WSL\Ubuntu-24.04\ext4.vhdx
    
  9. Ubuntu‑Version prüfen

    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 24.04.1 LTS
    Release:        24.04
    Codename:       noble
    
  10. Locales anpassen

    sudo nvim /etc/locale.gen
    sudo locale-gen
    
  11. Windows‑Pfade nicht ins $PATH aufnehmen

    In /etc/wsl.conf folgende Zeilen hinzufügen:

    [interop]
    appendWindowsPath = false
    

    Das verbessert die Autovervollständigung spürbar, da der Zugriff auf das Windows‑Dateisystem langsam ist.

    Programme lassen sich weiterhin starten – mit vollem Pfad oder via Symlink in einem Verzeichnis, das bereits im $PATH liegt.

    Siehe https://learn.microsoft.com/en-us/windows/wsl/wsl-config#interop-settings

  12. Systemd aktivieren

Hinweis
Seit WSL 0.67.6 verfügbar; inzwischen Standard.
Einige Programme ([Snap], [Flatpak], [microk8s]) benötigen Systemd.

[Snap]: https://snapcraft.io/
[Flatpak]: https://flatpak.org/
[microk8s]: https://microk8s.io/

In `/etc/wsl.conf` ergänzen:

```bash
[boot]
systemd=true
```

WSL neu starten: `wsl.exe --shutdown`.
  1. Speicher konfigurieren

    WSL2 läuft in Hyper‑V. Standardmäßig wird die Hälfte (neuere Builds: 80%) des RAM zugewiesen. Anpassen via C:\Users\julio\.wslconfig:

    wsl --shutdown
    notepad "$env:USERPROFILE/.wslconfig"
    
    [wsl2]
    memory=16GB
    swap=0
    processors=4
    

    Mit free in Linux prüfen.

    Hinweise:

    • Nicht zu hoch ansetzen – RAM für Linux steht Windows nicht zur Verfügung.
    • Speicher freigeben: als root echo 1 >> /proc/sys/vm/drop_caches.
    • .wslconfig als „UTF‑8 without BOM“ speichern.
    • Swap liegt unter %USERPROFILE%\AppData\Local\Temp\swap.vhdx.
  2. Zusätzliche Repositories (PPAs) hinzufügen:

    PPAs (Personal Package Archives) ergänzen die offiziellen Ubuntu‑Repos; viele stammen von den Maintainer:innen selbst.

    • Neovim:
    sudo add-apt-repository ppa:neovim-ppa/unstable
    sudo apt update
    
    • Git:
    sudo add-apt-repository ppa:git-core/ppa
    sudo apt update
    
  3. System aktualisieren

    sudo apt update && sudo apt upgrade
    
  4. Pakete aus Repositories installieren

    Basics:

    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-xetex
    

    Utilities:

    sudo apt install \
      ripgrep \
      fd-find \
      oathtool
    
  5. Dotfiles klonen (https://github.com/jbsilva/dotfiles) und Symlinks anlegen

    cd ~
    ln -s dotfiles/.zsh
    ln -s dotfiles/.zshrc
    ln -s dotfiles/.gitconfig-wsl .gitconfig
    ln -s dotfiles/.p10k.zsh
    ln -s dotfiles/.config
    
  6. Programme aus anderen Quellen installieren:

    Die Ubuntu‑Repos haben nicht immer die neuesten Versionen. Alternativen:

    • PPAs
    • Snap
    • Flatpak
    • AppImage
    • .deb‑Pakete
    • Vorgebaute Binärdateien
    • Asdf
    • Cargo
    • pipx
    • uvx
    • Selbst kompilieren

    Asdf

    Update (2025):

    asdf wurde in v0.16.0 in Go neu geschrieben. Du kannst nun ein einzelnes Binary laden:

    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/
    

    Die Befehle asdf global und asdf local wurden durch asdf set ersetzt.

    Konfiguriere gemäß der Dokumentation, meiner .zshrc oder dem Plugin.

    Alter Modus:

    git clone https://github.com/asdf-vm/asdf.git ~/.asdf
    

    uv

    curl -LsSf https://astral.sh/uv/install.sh | sh
    

    Python

    (Aktualisiert 2025)

    Es gibt mehrere Möglichkeiten, Python zu installieren:

    • Offizielles Ubuntu‑Repo

      sudo apt install python3
      

      Am einfachsten, aber ohne freie Versionswahl und ohne mehrere parallele Versionen.

    • deadsnakes

      sudo add-apt-repository ppa:deadsnakes/ppa
      sudo apt update
      sudo apt install python3.11
      

      Gute Alternative; mehrere Versionen ohne Kompilieren.

    • Pyenv

      curl https://pyenv.run | bash
      pyenv versions
      pyenv install "3.13"
      

      Pyenv kompiliert die gewünschten Versionen. Abhängigkeiten installieren:

      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
      
    • asdf

      asdf install python latest:3.10
      # asdf local python latest:3.10
      asdf set python latest:3.10
      

      asdf-python ist ein asdf-Plugin, das Pyenv zum Bauen/Installieren nutzt – sinnvoll, wenn du asdf auch für andere Sprachen wie nodejs oder ruby nutzt.

    • uv

      uv python install 3.12
      

      uv lädt eine vorgebaute Python‑Version von python-build-standalone.

      Beachte: Manche Programme sind mit diesen Builds inkompatibel, da sie nicht gegen Systemlibs linken.

      Leider bietet uv noch kein --build für solche Fälle. Für alle anderen nehme ich uv: gut optimierte Builds ohne Kompilier‑Zeit.

    • [pixi]

      ???
      

    Mambaforge

    wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh
    bash Mambaforge-Linux-x86_64.sh
    

    Flatpak (Systemd vorher aktivieren)

    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
    

    Compiler und Build‑Tools

    Stelle sicher, dass Compiler und Linker installiert sind:

    sudo apt install \
      build-essential \
      cmake \
      ninja-build \
      clang \
      -y
    

    Rust

    Installation:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

    Go

    Am bequemsten mit asdf.

    asdf ...
    

    Wenn du nur die neueste Version willst:

    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 version
    

    Nur für den lokalen Benutzer:

    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 version
    

    Hugo

    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 version
    

    oder

    CGO_ENABLED=1 go install --tags extended github.com/gohugoio/hugo@latest
    

    oder

    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/
    

    oder

    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:

    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-dlp
    

    oder

    python -m pip install -U --pre yt-dlp
    

    oder

    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:

    ExifTool ist sehr nützlich, um meine Fotosammlung ordentlich zu halten.

    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
    

    AWS CLI

    sudo snap install aws-cli --classic
    aws --version
    

    oder

    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
    

    oder mit asdf:

    asdf plugin add awscli
    asdf install awscli latest
    asdf global awscli latest
    

    git-filter-repo

    uv tool install git-filter-repo
    

    Tailwind

    curl -sL "https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64" -o ~/bin/tailwindcss
    chmod +x ~/bin/tailwindcss
    

    Watchman

    Siehe 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'
    
  7. Standard‑Shell setzen: chsh -s $(which zsh)

GNOME Keyring

Es gibt diverse Programme zum sicheren Speichern von Passwörtern, Schlüsseln und Zertifikaten. GNOME Keyring ist sehr verbreitet und kompatibel mit Docker, Git, Chromium und GnuPG.

Es ist für GUIs gedacht, aber ich konnte es auch unter Ubuntu (headless) nutzen.

  1. Per apt installieren

    sudo apt install gnome-keyring
    

    gnome-keyring-daemon wird nach dem Login automatisch per systemd gestartet, ist aber gesperrt.

  2. GNOME Keyring beim Öffnen eines Terminals entsperren (Zsh)

    echo 'eval $(echo -n db | gnome-keyring-daemon --unlock --replace 2> /dev/null)' >> ~/.zshrc
    
  3. Test

    uvx keyring set system username
    uvx keyring get system username
    

Alternativen: pass, HashiCorp Vault, kwallet

Dateien zwischen Distros im WSL2 teilen

Führe folgenden Befehl aus, um dem systemd mitzuteilen, das Wurzelverzeichnis / der aktuellen Distribution unter /mnt/wsl/instances/$DISTRO zu mounten. Der Ordner /mnt/wsl/ (oder der in [automount].root konfigurierte) wird von allen laufenden Distributionen geteilt.

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

WSL2‑Image komprimieren

Das Komprimieren des Images kann ein paar MB sparen.

  • In WSL2:

    # apt autoremove && apt autoclean && apt clean
    # fstrim /
    
  • In 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

Hinweis
In neueren WSL‑Versionen nicht mehr erforderlich.

Installiere VcXsrv und erlaube es in der Firewall (Windows Defender).
Aktiviere „Disable access control“.

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
Hinweis
Der folgende Abschnitt gilt nicht mehr. Installiere xclip.

Hinweis: Die beste Clipboard‑Integration für Neovim gelingt mit win32yank.exe. Es wird mit Neovim für Windows mitinstalliert, kann aber auch manuell installiert werden:

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

In den Register + mit "+y kopieren. Alternativ :set clipboard=unnamedplus im Neovim.

Docker Desktop mit WSL2

Diese Option ist am einfachsten, aber nur kostenlos für privaten, akademischen, Open‑Source‑Gebrauch oder kleine Unternehmen (weniger als 250 Mitarbeiter UND weniger als 10 Mio. USD Jahresumsatz).

Lade Docker Desktop herunter (z. B. via Chocolatey).
Aktiviere Use the WSL 2 based engine und Expose daemon on tcp://localhost:2375 without TLS.

Das reicht, um Docker im Ubuntu‑Terminal normal zu benutzen.

Docker mit WSL2 ohne Docker Desktop

Docker Desktop ist in großen Unternehmen kostenpflichtig, aber zum Betreiben von Docker nicht nötig.

Alternativen:

Docker im WSL2 mit Systemd

An anderer Stelle dieses Artikels erläutere ich das Aktivieren von Systemd via /etc/wsl.conf.

Am einfachsten installierst du Docker mit folgendem Script:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run

Es druckt die auszuführenden Kommandos. Entferne --dry-run, um sie auszuführen.

Wenn du Schritt für Schritt ohne Script vorgehen willst:

  1. Alte Pakete entfernen

    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
    
  2. Offizielles Docker‑Apt‑Repository hinzufügen

    # Offiziellen GPG‑Key hinzufügen
    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
    
    # Repository eintragen
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      "$([ -r /etc/os-release ] && . /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  3. Docker und docker‑compose‑Plugin installieren

    sudo apt update && \
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    

    Hinweis: docker-compose v1 ist die alte Python‑Version, seit Mai 2021 ohne Updates. Das Plugin wurde in Go neu geschrieben; der Befehl lautet docker compose (mit Leerzeichen).

  4. Optional: Benutzer zur Gruppe docker hinzufügen, um sudo zu vermeiden:

    sudo usermod -aG docker $USER
    

    Aktuelle Hinweise in der offiziellen Dokumentation.

    Achtung: Das kann ein Sicherheitsrisiko sein. Eine sicherere (aber eingeschränkte) Alternative ist der Daemon im rootless mode.

  5. Installation testen

    sudo docker run hello-world
    
  6. Speicherort für Anmeldedaten (Credential Helper) konfigurieren

    Nützlich, wenn du docker login nutzt (Docker Hub oder private Registry). Ohne Credential Helper wird das Passwort im Klartext (base64) in ~/.docker/config.json gespeichert.

    • Alternative 1: Pass

      sudo apt install gnupg2 pass
      sudo apt install golang-docker-credential-helpers
      
      wget -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-pass
      

      In ~/.docker/config.json:

      {
        "credsStore": "pass"
      }
      
    • Alternative 2: gnome-keyring

    Installiere und konfiguriere wie in Gnome Keyring beschrieben.

    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-secretservice
    

    In ~/.docker/config.json:

    {
      "credsStore": "secretservice"
    }
    

Docker mit Rancher Desktop

Rancher ist ein guter Ersatz für Docker Desktop – besonders für Kubernetes. Installation per 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

Mit folgendem Befehl testen:

docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

Visual Studio Code mit WSL2

VS Code, das unter Windows installiert ist, hat native Integration mit WSL2. Du musst die Erweiterungen auch im WSL2 installieren.

GUI für Git

Git auf der Kommandozeile ist großartig, aber manches geht visuell einfacher.

Unter Windows installierte Tools sind oft langsam beim Zugriff auf das WSL‑Dateisystem – ich empfehle die Installation direkt unter Linux. Das schließt einige GUIs aus, z. B. Sourcetree.

Tools, die ich mag:

  • VS Code

    • Bereits mit guter Versionskontrolle. Es gibt Erweiterungen mit mehr Funktionen, die ich aber nicht nutze.
  • gitk

    • Die erste Git‑GUI. Nutze ich oft, um Änderungen in einer einzelnen Datei zu sichten.
  • GitKraken

    • Sehr umfangreich und hübsch, aber kostenpflichtig.
    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
    
  • Gittyup (Fork von GitAhead)

    • Über 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
      

Zugriff per SSH

WSL2 ist eine VM mit eigener IP‑Adresse.

Die Adresse erhältst du so:

  1. OpenSSH installieren

    sudo apt install openssh-server
    
  2. Einstellungen in /etc/ssh/sshd_config anpassen

    Port 2255
    ListenAddress 0.0.0.0
    PasswordAuthentication yes
    
  3. IP‑Adresse der VM ermitteln

    Mit iproute2 in WSL2:

    $ ip addr show eth0
        inet 172.21.145.176/20 brd 172.21.159.255 scope global eth0
    

    Oder per 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.1
    
  4. Prüfen, ob der Dienst läuft

    Vorher den Abschnitt zum Aktivieren von Systemd beachten.

    $ sudo systemctl status sshd.service
    ● ssh.service - OpenBSD Secure Shell server
         Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
         Active: active (running) since…
    
  5. Portproxy zwischen VM und Host anlegen

    In einer PowerShell als Admin:

    netsh interface portproxy add v4tov4 listenport=2255 listenaddress=0.0.0.0 connectport=2255 connectaddress=$wsl_ip
    
  6. Port 2255 in der Firewall freigeben

    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  2255
    
  7. Rückgängig machen

    Port‑Weiterleitung entfernen:

    netsh interface portproxy delete v4tov4 listenport=2255 listenaddress=0.0.0.0
    

    Änderung prüfen:

    netsh interface portproxy show v4tov4
    

    Alle Einstellungen löschen:

    netsh interface portproxy reset
    

    Firewall‑Regel entfernen:

    netsh advfirewall firewall delete rule name="Open Port 2255 for WSL2" protocol=TCP localport=2255
    

    Prüfen:

    $ 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

Es gibt viele Scanner‑Programme, aber das beste, das ich kenne, ist XSane – ein Frontend für SANE.

sudo apt install xsane

Ich habe ein Canon Pixma MG5450 Multifunktionsgerät. Der volle Name erscheint nicht in der Liste der unterstützten Geräte, aber es gehört zur „PIXMA MG5400 Series“, die im Backend sane-pixma enthalten ist.

scanimage -L sendet einen Broadcast, um Scanner zu entdecken. Canon‑Geräte werden standardmäßig über das BJNP‑Protokoll auf UDP‑Port 8612 gefunden.

Leider erkannte der Befehl meinen Scanner nicht auf Anhieb.

Ich wusste, dass es kein Verbindungsproblem war, denn curl http://192.168.15.7 lieferte die Seite des Geräts (die IP ist auf meinem DHCP‑Server fixiert).

Die Lösung war, die IP im pixma.conf zu hinterlegen:

echo "bjnp://192.168.15.7" | sudo tee -a /etc/sane.d/pixma.conf

Danach funktionierte der Befehl problemlos:

$ scanimage -L
device `pixma:MG5400_192.168.15.7' is a CANON Canon PIXMA MG5400 Series multi-function peripheral

Der Parameter --all listet mögliche Optionen des verwendeten Backends auf:

$ 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.

So könnte ich ein Dokument mit 150 dpi direkt per Kommandozeile mit scanimage scannen:

scanimage \
  --device "pixma:MG5400_192.168.15.7" \
  --format=png \
  --output-file scan.png \
  --resolution 150 \
  --progress

Mit XSane geht es aber deutlich komfortabler.

Audio

Programme wie Virtual Audio Cable und Voicemeeter sind hilfreich für Setups mit mehreren Lautsprechern und fürs Streaming. Die kostenlosen Versionen beider lassen sich über Chocolatey installieren.

  1. Control Panel\Hardware and Sound » Sound öffnen;
  2. Unter „Playback“ _VoiceMeeter Input_ als Standardgerät und _VoiceMeeter Aux Input_ als Standardkommunikationsgerät einstellen;
  3. Unter „Recording“ _VoiceMeeter Output_ als Standardgerät und _VoiceMeeter Aux Output_ als Standardkommunikationsgerät einstellen;
  4. In den Eigenschaften jedes Geräts unter „Advanced“ die Abtastrate setzen (z. B. 24 Bit, 48000 Hz). Der gleiche Wert muss in Voicemeeter gesetzt sein (Menu » System settings » Preferred Main SampleRate).
  5. Beispielkonfiguration Voicemeeter Banana:
    • Hardware Input 1: Notebook‑Mikrofon
    • Hardware Input 2: Headset‑Mikrofon
    • Hardware Input 3: CABLE Output (VB‑Audio Virtual Cable)
    • Voicemeeter VAIO: Desktop‑Ausgang » A1, B1
    • Voicemeeter AUX: Calls‑Ausgang » A1
    • A1: WDM: Speakers / Headphones
    • A2: WDM: Headset
    • A3: WDM: TV via HDMI
  • Hinweis 1: Ich aktiviere das Bluetooth‑Headset‑Mikrofon nur bei Bedarf – spart Akku und erlaubt den qualitativ besseren Wiedergabemodus.

  • Hinweis 2: Nach der Voicemeeter‑Installation hatte ich Probleme mit Spotify; Neuinstallation von Spotify hat geholfen.

Ebenfalls nützlich: EarTrumpet – pro Programm Ausgabegerät und Lautstärke einstellen.

Streaming

Für Videocalls, in denen ich neben dem Mikrofon auch den Systemton teilen möchte, aber ohne den Ton des Calls (Stimmen der anderen):

  • In Meets/Teams/Discord/Skype:
    • Microphone: VoiceMeeter Output
    • Speaker: VoiceMeeter Aux Input
  • In VoiceMeeter:
    • Mic PC: B1
    • Desktop (Voicemeeter VAIO): A1, B1
    • Calls (Voicemeeter AUX): A1

Julio Batista Silva
Autoren
Senior Cloud-Entwickler
comments powered by Disqus