Script / Runbook
1. Summary
Issue: Local webcams (FaceTime HD / USB) could not be redirected into a V2Cloud Windows VDI session from macOS (Windows App) or Linux (Remmina). The V2Cloud client preview appeared, but redirection failed.
Outcome: Confirmed the session uses a brokered local proxy (127.0.0.1:ephemeral) and that only the “Remote Desktop Camera Bus” enumerates in Windows (RDCAMERA_BUS) without an actual camera device. This indicates partial camera channel initialization but no device stream delivery. Workaround is to use the supported connection path for webcam (browser mode / non-RDP if supported) or a Windows client (mstsc) for full camera redirection.
2. Environment
· Client OS: macOS (latest) and Linux Mint (also tested Ubuntu 22 where it worked).
· Client apps: macOS Microsoft “Windows App” (RDP), Linux Remmina (FreeRDP).
· Target: Windows Server VDI on V2Cloud.
· Connection type: Brokered/local proxy (localhost 127.0.0.1:random high port; internal link-local 169.254.x.x observed from the VM).
3. Symptoms / User Impact
· Camera shows as available in the picker (FaceTime HD / USB camera), but redirection fails.
· V2Cloud app shows a local camera preview icon/overlay; when redirect is attempted it reports not possible.
· Microphone redirection works, but camera does not.
· Issue reproduced on macOS and Linux Mint; worked on Ubuntu 22 in at least one test scenario.
4. Key Findings
1. 4.1 The “RDP parameters” file was not a full .rdp connection file
· The file configured inside V2Cloud (“Open default RDP parameters…”) contained only option lines (no full address). It is an override snippet merged into the generated session file by the V2Cloud launcher.
· Example snippet (not a full connection file):
devicestoredirect:s:*
drivestoredirect:s:*
redirectprinters:i:1
smart sizing:i:1
audiocapturemode:i:1
2. 4.2 The session is brokered through localhost (127.0.0.1)
· Evidence included: V2Cloud session identifiers and localhost references (e.g., 127.0.0.1:63385). On the VM, netstat showed an established RDP session from a link-local address, indicating a tunnel/proxy rather than a direct public IP connection.
3. 4.3 Windows VM enumerated only the camera bus, not the camera device
· On the VM, the device “Remote Desktop Camera Bus” (InstanceId contains RDCAMERA_BUS) was present and Status=OK, but no camera device appeared under Cameras/Imaging. This indicates the redirection channel was initialized but the client did not deliver a usable camera stream/device.
5. Investigation Steps (Executed)
5.1 Validate the RDP session and listener on the VM
· Run on the Windows VDI:
netstat -ano | findstr :3389
tasklist /fi "PID eq <PID>" (PID from netstat)
· Observed: RDP listener on :3389 and established session from link-local 169.254.x.x to the VM :3389.
5.2 Validate whether any redirected camera device enumerates
· Instead of relying on PowerShell “-Class Camera/Image” (which can fail on Server), list devices by name and ClassGuid:
Get-PnpDevice -PresentOnly | Where-Object { $_.FriendlyName -match '(?i)camera|webcam|video|imaging|usb video' } | Format-Table -AutoSize Status,Class,FriendlyName,InstanceId
$guids = @('{ca3e7ab9-b4c3-4ae6-8251-579ef933890f}','{6bdd1fc6-810f-11d0-bec7-08002be2092f}'); Get-PnpDevice -PresentOnly | Where-Object { $guids -contains $_.ClassGuid } | Format-Table -AutoSize Status,Class,FriendlyName,ClassGuid,InstanceId
Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -like '*RDCAMERA*' } | Format-List *
· Observed: “Remote Desktop Camera Bus” enumerated (RDCAMERA_BUS) but no actual camera device enumerated.
5.3 Ensure RDP configuration included explicit camera redirection
· Add to the V2Cloud “default RDP parameters” snippet:
camerastoredirect:s:*
· Note: this ensures the camera channel is requested when the client supports it.
5.4 Attempt alternate clients (macOS)
· Royal TSX (FreeRDP-based) failed to connect with a brokered session (FREERDP_ERROR_CONNECT_FAILED). FreeRDP was also tested via Homebrew.
· Key outcome: FreeRDP clients attempted to connect to 127.0.0.1 but were refused unless the V2Cloud proxy listener was active and on the correct ephemeral port.
5.5 Linux Mint (Remmina) - Flatpak vs official packages
· Observed behavior: Webcam redirection worked on Ubuntu 22 but failed on Linux Mint using Remmina.
· Most common cause: Mint installs Remmina/FreeRDP from Flatpak or older repos, resulting in missing/partial dynamic channels (webcam can fail while microphone still works).
· Fix: remove Flatpak Remmina (if installed) and install the official apt/PPA build of Remmina + FreeRDP, then retest.
4. On Linux Mint, confirm whether Remmina is Flatpak or apt:
flatpak list | grep -i remmina
which remmina
remmina --version
xfreerdp /version
5. If Flatpak Remmina is present, remove it:
flatpak uninstall -y org.remmina.Remmina
# (optional) remove Flatpak runtime leftovers
flatpak uninstall --unused -y
6. Install the official packages (choose one):
· Option A - Official distro packages:
sudo apt update
sudo apt install -y remmina freerdp2-x11
· Option B - Remmina NEXT PPA (often required if Mint repo is behind Ubuntu 22 working versions):
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:remmina-ppa-team/remmina-next
sudo apt update
sudo apt upgrade -y
7. Recheck versions and retest camera redirection:
remmina --version
xfreerdp /version
6. Root Cause (Most Likely)
· The camera redirection path is only partially supported in this brokered/local-proxy RDP flow. The Windows VDI can create the camera bus (RDCAMERA_BUS) but the macOS/Linux client + V2Cloud proxy do not deliver the actual camera device stream into the session.
· This is consistent with microphone redirection working (separate audio channel) while webcam redirection fails.
7. Resolution / Workarounds
· Choose one of the following supported approaches:
8. 7.1 Use the supported webcam path (recommended)
· If V2Cloud supports in-session webcam via browser/WebRTC, disable forced RDP and use the non-RDP session for workflows requiring camera.
9. 7.2 Use a Windows endpoint for sessions requiring webcam-in-VDI
· From a Windows client, use mstsc (or the officially supported Windows client) with webcam redirection enabled. Windows mstsc typically provides the most complete camera redirection support.
10. 7.3 Continue using RDP for non-camera workloads
· If mic-only is sufficient, keep current RDP settings. Camera redirection remains unsupported/unstable on macOS/Linux for this connection type.
11. 7.4 Linux Mint specific remediation (Remmina)
· If Ubuntu 22 works but Mint fails, switch Mint from Flatpak/old Remmina to the official apt/PPA Remmina + FreeRDP build (see section 5.5). This is the most common fix for webcam redirection discrepancies across Ubuntu-based distros.
8. Verification Checklist
· On the VM: Device Manager - confirm whether any camera appears under Cameras/Imaging during redirect attempts.
· On the VM: “Remote Desktop Camera Bus” present is not sufficient; a camera device must enumerate.
· If testing from Windows mstsc: confirm camera device enumerates and is selectable in target app (Teams/Camera/Browser).
· If testing browser mode: confirm the target app can access camera inside the session.
Comments
0 comments
Please sign in to leave a comment.