USB-Audio unter WSL2 aktivieren

Veröffentlicht am von
Überarbeitet am

wsl2audiovideo

Hintergrund & Funktionsweise

Für die Nutzung von Audio (und Video) unter WSL21 ist es erforderlich den Kernel neu zu kompilieren und zusätzlichen Modulen zu aktivieren. Audio- und Video-Support ist beispielsweise hilfreich, wenn per “Xrdp”2 auf die WSL2-Instanz zugegriffen wird, um Linux als vollwertige Desktop-Umgebung unter Windows zu nutzen. Dieser Artikel beschreibt wie das möglich ist und welche Schritte dafür ausgeführt werden müssen.

Voraussetzungen

  1. Mindestens Windows 113 ist installiert
  2. WSL2 muss unter Windows 11 aktiviert sein
  3. → Eine WSL2-Linux-Distribution ist installiert

Schritte

  1. Starten des installierten Subsystems

    - innerhalb der Windows Eingabeaufforderung -

    • Die Tastenkombination Windows-Taste + R-Taste betätigen
    • Im kleinen Fenster cmd eingeben und mit der Return-Taste bestätigen oder OK klicken
    • System starten
      wsl -d mylinux
      
    • Hinweise:
      • Die Windows Eingabeaufforderung wechselt in das Terminal der Linux-Distribution
      • Der Distributionsname “mylinux” wurde innerhalb eines vorherigen Artikels festgelegt, siehe → 3. Voraussetzung
  2. Installation der benötigten Pakete und Download des Kernel-Releases

    - innerhalb der Terminals der Linux-Distribution -

    • Benötigte Build-Tools installieren
      sudo apt install -y build-essential flex bison dwarves libssl-dev libelf-dev bc linux-tools-virtual libncurses-dev usbutils unzip
      
    • Download des Kernel-Releases
      cd
      
      wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/heads/linux-msft-wsl-5.15.y.zip
      
    • Entpacken des Kernel-Releases
      unzip -o linux-msft-wsl-5.15.y.zip
      
  3. Modifizieren der Standardkonfigration des Kernels, Kompilieren und Installieren

    - innerhalb des Terminals der Linux-Distribution -

    • Kopieren der Standardkonfiguration des WSL2-Kernels in die oberste Ebene des geklonten Repository
      cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.y
      
      cp Microsoft/config-wsl .
      
    • Hinzufügen der folgenden Konfigrations-Flags zur Standardkonfiguration
      sudo tee -a config-wsl > /dev/null <<EOT
      CONFIG_MEDIA_SUPPORT=m
      CONFIG_MEDIA_CAMERA_SUPPORT=y
      CONFIG_MEDIA_SDR_SUPPORT=y
      CONFIG_MEDIA_PLATFORM_SUPPORT=y
      CONFIG_MEDIA_TEST_SUPPORT=y
      CONFIG_VIDEO_DEV=m
      CONFIG_MEDIA_CONTROLLER=y
      CONFIG_VIDEO_V4L2=m
      CONFIG_MEDIA_USB_SUPPORT=y
      CONFIG_USB_VIDEO_CLASS=m
      CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
      CONFIG_USB_GSPCA=m
      CONFIG_VIDEOBUF2_CORE=m
      CONFIG_VIDEOBUF2_V4L2=m
      CONFIG_VIDEOBUF2_MEMOPS=m
      CONFIG_VIDEOBUF2_VMALLOC=m
      CONFIG_MEDIA_ATTACH=y
      CONFIG_HIDRAW=y
      CONFIG_SOUND=m
      CONFIG_SND_USB_AUDIO=m
      CONFIG_SND=m
      CONFIG_SND_PCM_TIMER=y
      CONFIG_SND_SUPPORT_OLD_API=y
      CONFIG_SND_PROC_FS=y
      CONFIG_SND_VERBOSE_PROCFS=y
      CONFIG_SND_DMA_SGBUF=y
      CONFIG_SND_DRIVERS=y
      CONFIG_SND_PCI=y
      CONFIG_SND_HDA_PREALLOC_SIZE=2048
      CONFIG_SND_USB=y
      CONFIG_SND_X86=y
      EOT
      
    • Automatisches Zusammenführen der neuen und überschriebenen Konfiguration
      sudo make menuconfig KCONFIG_CONFIG=config-wsl
      
    • Hinweise:
      • Die Kernel-Konfigurationsmaske wird geöffnet.
      • Diese Maske direkt wieder per “Exit”, dann mit “Yes” verlassen.
    • Kompilieren des Kernels
      sudo make -j $(nproc) KCONFIG_CONFIG=config-wsl
      
    • Installieren der Kernel-Module
      sudo make modules_install -j$(nproc)  KCONFIG_CONFIG=config-wsl
      
  4. Kopieren des Kernel-Images

    - innerhalb des Terminals der Linux-Distribution -

    • Erstellen und Kopieren des Images in ein Verzeichnis des Host-Systems
      mkdir /mnt/c/WSL2-Linux-Kernel
      
      sudo cp vmlinux /mnt/c/WSL2-Linux-Kernel
      
      exit
      
  5. Konfigurieren von WSL2 zur Verwendung des neuen Kernels

    - innerhalb der Windows Eingabeaufforderung -

    • Hinzufügen des individuellen Kernes zur WSL-Konfiguration
      echo kernel=c:\\WSL2-Linux-Kernel\\vmlinux>> "%userprofile%\.wslconfig"
      
    • Herunterfahren von WSL2
      wsl --shutdown
      
    • Neustart der Linux-Distribution
      wsl -d mylinux
      
    • Hinweise:
      • Die Windows Eingabeaufforderung wechselt erneut in das Terminal der Linux-Distribution
      • Der Distributionsname “mylinux” wurde innerhalb eines vorherigen Artikels festgelegt, siehe → 3. Voraussetzungen
  6. Vorbereiten des Benutzers und usbip Tools

    - innerhalb des Terminals der Linux-Distribution -

    • Benutzer den zusätzlichen Gruppen hinzufügen
      sudo usermod -a -G users,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,rtkit,ssl-cert tux
      
    • Hinweis:
    • Vorbereiten von usbip
      sudo update-alternatives --install /usr/local/bin/usbip usbip $(command -v ls /usr/lib/linux-tools/*/usbip | tail -n1) 20
      
      exit
      
  7. Windows Eingabeaufforderung schließen und mit erhöhten Rechten starten

    - innerhalb der Windows Eingabeaufforderung -

    • Eingabeaufforderung schließen
      exit
      
    • Die Tastenkombination Windows-Taste + R-Taste betätigen
    • Im kleinen Fenster cmd eingeben, danach die ‘Strg’ + die ‘Umschalt-/Shift-Taste’ drücken und mit der Return-Taste bestätigen oder OK klicken
    • Im folgenden Fenster mit Ja bestätigen
  8. Installieren von usbipd und USB-Gerät(e) exportierbar machen

    - innerhalb der Windows Eingabeaufforderung (mit erhöhten Rechten) -

    • Installation
      winget install usbipd
      
    • USB-Geräte auflisten
      usbipd list
      
    • Die Ausgabe sollten in etwa wie folgt aussehen:
      BUSID  VID:PID    DEVICE                                                        STATE
      2-1    17ef:a387  Lenovo USB Ethernet                                           Not shared
      2-2    174c:5106  USB-Massenspeichergerät                                       Not shared
      4-5    1050:0407  USB-Eingabegerät, Microsoft Usbccid-Smartcard-Leser (WUDF)    Not shared
      4-6    046d:0a45  Logitech USB Headset, USB-Eingabegerät                        Not shared
      
    • USB-Gerät exportierbar machen am Beipiel eines USB Headsets
      usbipd bind -b 4-6 -f
      
      exit
      
    • Hinweise:
      • Anstelle der BUS_ID 4-6 die ID wählen welches dem zu exportierenden Gerät entspricht
  9. Windows Eingabeaufforderung mit Standardrechten starten

    - innerhalb der Windows Eingabeaufforderung -

    • Die Tastenkombination Windows-Taste + R-Taste betätigen
    • Im kleinen Fenster cmd eingeben und mit der Return-Taste bestätigen oder OK klicken
    • Wechsel in die Linux-Distribution
      wsl -d mylinux
      
    • Hinweise:
      • Die Windows Eingabeaufforderung wechselt erneut in das Terminal der Linux-Distribution
      • Der Distributionsname “mylinux” wurde innerhalb eines vorherigen Artikels festgelegt, siehe → 3. Voraussetzungen
  10. USB-Gerät in der Linux-Distribution anzeigen

    - innerhalb des Terminals der Linux-Distribution -

    • IP-Adresse des WSL Hosts als Umgebungsvariable setzen
      WSL_HOST_IP=$(ip route show default | awk '{print $3}')  
      
    • USB-Geräte anzeigen
      usbip list -r $WSL_HOST_IP
      
    • Die Ausgabe sollten in etwa wie folgt aussehen:
      Exportable USB devices
      ======================
      - 172.28.48.1
              4-6: Logitech, Inc. : 960 Headset (046d:0a45)
              : USB\VID_046D&PID_0A45\000000000000
              : (Defined at Interface level) (00/00/00)
              :  0 - Audio / Control Device / unknown protocol (01/01/00)
              :  1 - Audio / Streaming / unknown protocol (01/02/00)
              :  2 - Audio / Streaming / unknown protocol (01/02/00)
              :  3 - Human Interface Device / No Subclass / None (03/00/00)
      
  11. USB-Gerät verbinden und Audio über die Desktop-Umgebung prüfen

    • Linux Desktop-Umgebung starten, siehe Tutorial unter → 3. Voraussetzungen
    • Ein Terminal in der Linux Desktop-Umgebung starten
    • USB-Gerät per usbip verbinden
      sudo usbip attach -b 4-6 -r $WSL_HOST_IP
      
    • Überprüfen
      lsusb
      
    • Die Ausgabe sollten in etwa wie folgt aussehen:
      Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
      Bus 001 Device 002: ID 046d:0a45 Logitech, Inc. 960 Headset
      Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      
    • Hinweise:
      • Sobald gewünschte Gerät in der Liste erscheint (in diesem Fall Logitech, Inc. 960 Headset) ist die Verbindung korrekt aufgebaut
      • Das Gerät sollte jetzt im Audio-Mixer der Linux Desktop-Umgebung auffindbar sein

Das könnte Sie auch interessieren

  1. → Linux mit einer Desktop-Umgebung unter Windows 11

Haftungsausschluss: Die Informationen in diesem Artikel sind als unverbindliche Hinweise zu verstehen.
Die Aktualität, inhaltliche Richtigkeit und Vollständigkeit kann nicht gewährleistet werden.