Step-by-step guide for installing and running the Swann Security App — the
Swann desktop client for Windows (the installer file is named
VMS Pro64_SWANN(Swann Security)…) — on Linux using Wine, including getting
the live camera feed and playback to work, and keeping the video running when
the window is moved.
The app tested here is the Swann Security App (PC Windows Version) from https://us.swann.com/download-apps/.
Tested environment:
- Distro: CachyOS (Arch-based)
- Wine: 11.15 (installed via CachyOS Hello "Gaming" packages)
- Winetricks: 20260125
- GPU: NVIDIA RTX 4060 Ti (NVIDIA proprietary driver + Vulkan)
- Session: Wayland (XWayland)
On CachyOS, the easiest way is to use CachyOS Hello → Apps/Tweaks → Install Gaming packages, which installs Wine, Lutris, Winetricks, Steam, and other gaming tools in one go.
When you first try to launch a Wine application (e.g. the Swann installer),
Wine may prompt that Wine Mono is required. Install it from the CachyOS
package installer (search for wine-mono and install it). Wine Mono provides
the .NET runtime that some installers and apps need.
The default Wine prefix used here is 64-bit (~/.wine). It is created
automatically on first run.
Without this, the installer fails with:
err:module:import_dll Library MFC42.DLL (which is needed by ...isskin.dll) not found
Fix it by installing the Visual C++ 6.0 MFC runtime with winetricks:
winetricks mfc42Download the Swann Security App (the "PC Windows & Mac" download) from https://us.swann.com/download-apps/, then run its installer:
wine 'VMS Pro64_SWANN(Swann Security)_Vxxxxxxx.exe'Complete the wizard. This installs the application to:
/home/owner/.wine/drive_c/Program Files/SWANN/Swann Security/
(Equivalent Windows path: C:\Program Files\SWANN\Swann Security\)
winetricks lavfilters ffdshowThe app bundles its own FFmpeg decoders, so this may not actually be needed — it was installed here as a precaution and has not been proven necessary.
The built-in video rendering fails under Wine's default D3D11->OpenGL path with errors such as:
err:d3d:context_choose_pixel_format Trying to locate a compatible pixel format...
ERROR: gpuMonitor.cpp: EtGpuTotalNodeCount_ == 0
Vulkan already works on the host, so install DXVK to translate the app's D3D11 calls to Vulkan:
winetricks dxvkDXVK installs the 64-bit and 32-bit d3d11.dll / dxgi.dll into the prefix and
sets the DLL overrides automatically. Verify it loads at runtime by checking the
app log for:
info: DXVK: v3.0.2
Do NOT also install dxvk-mingw-git via pacman on top of this — it is the same
DXVK and would conflict.
The app tries to use DXVA2 hardware decoding, but Wine does not expose DXVA2
GPU nodes (the log shows EtGpuTotalNodeCount_ == 0 and FFmpeg reports
Failed setup for format dxva2_vld: hwaccel initialisation returned error).
FFmpeg then falls back to software decoding automatically, and video plays
fine regardless — so hardware decoding is not required.
gpunumber=0 in the app config forces the software path and silences the
fallback errors, but it is not essential for video to work:
/home/owner/.wine/drive_c/users/owner/AppData/Roaming/SWANN/Swann Security/swann security.ini
[gen]
liveDefaultStream=1
gpunumber=0If you remove or change it, the app still works (it just retries hardware decode and falls back). Restart the app after changing this file.
The video surface is rendered by the app's bundled Play SDK over D3D9 via DXVK.
On NVIDIA + XWayland, moving/resizing the window makes the Vulkan swapchain go
OUT_OF_DATE, and NVIDIA's VK_KHR_present_wait path can block (NV bug 4924590).
Note: these DXVK settings did not by themselves stop the window-move freeze — the fix for that is the Wine virtual desktop in step 8. They are kept as minor tuning (disables vsync-wait, lowers frame latency) but are not required.
Create a dxvk.conf in the app's install directory (DXVK reads it from there):
/home/owner/.wine/drive_c/Program Files/SWANN/Swann Security/dxvk.conf
Contents:
# Swann Security - DXVK workarounds
# Fixes video freezing when the window is moved/resized under XWayland
# (NVIDIA VK_KHR_present_wait bug, NV bug 4924590).
# Do not wait for presentation completion (avoids the present_wait freeze
# when the swapchain goes OUT_OF_DATE on window move).
dxvk.latencySleep = False
# More back buffers give the swapchain room to breathe during resizes.
d3d9.numBackBuffers = 2
# Limit frame latency so a stalled present cannot back up.
d3d9.maxFrameLatency = 1
# Disable vsync wait on presentation. The video surface present is what
# blocks on window move; tearing on live/playback video is a fair trade.
d3d9.presentInterval = 0Verify DXVK loaded the config (run the app once, then check
/tmp/Swann Security_d3d9.log):
info: Found config file: /home/owner/.wine/drive_c/Program Files/SWANN/Swann Security/dxvk.conf
info: Effective configuration:
info: d3d9.presentInterval = 0
info: d3d9.maxFrameLatency = 1
info: d3d9.numBackBuffers = 2
info: dxvk.latencySleep = False
Note: DXVK still advertises presentWait: 1 in its log — that is just the
extension being exposed, not proof the wait is used.
The fix for the window-move freeze is the Wine virtual desktop. The app's video is rendered on a D3D9 surface via DXVK; on XWayland, moving the window invalidates the Vulkan surface and the swapchain must be recreated, which freezes the video on NVIDIA. Running the app inside a Wine virtual desktop keeps the real X11/Vulkan surface fixed, so moving the app window around inside the desktop never triggers a swapchain recreation and the video keeps playing.
Set the virtual desktop size to cover your display layout. For a 1080p + 4K dual-monitor setup at 100% scale (1920 + 3840 wide):
wine reg add "HKCU\Software\Wine\Explorer\Desktops" /v Default /t REG_SZ /d "5760x2160" /f(You can also enable it in winecfg → Graphics → "Emulate a virtual desktop".)
Relaunch the app after changing it; a large desktop window appears that spans
your screens.
If your monitors use different DPI scales (e.g. one at 100% and one at 170%), XWayland must destroy and re-create a window's surface when it crosses between outputs with different scales, which re-triggers the freeze. In practice:
- Moving the app within one monitor is fine.
- Moving it across monitors with different scales still freezes.
To make the app open and live on your primary screen, set that monitor as the primary output in KDE: System Settings → Display and Monitor → select the 4K monitor → "Primary display". New XWayland windows (including Swann) then open there by default. Keep the app on that monitor and you're set.
wine "/home/owner/.wine/drive_c/Program Files/SWANN/Swann Security/Swann Security.exe"Once it opens: log in, add your NVR/DVR (Wine uses the host network stack, so the NVR is reachable the same way as from any Linux app), and open a live view or playback. Video should now display and keep playing while you move the window within its virtual desktop.
- MESA-EGL /
failed to create dri2 screenwarnings — harmless noise on NVIDIA systems; ignore unless video is broken. err:d3d:context_choose_pixel_formatafter DXVK install — comes from the legacy DirectDraw path and is not fatal for the main UI/video rendering.Failed setup for format dxva2_vld— the app tried DXVA2 hardware decode and fell back to software; video still plays. Normal under Wine.- Video freezes when moving the window across monitors — that is the mixed-DPI-scale XWayland surface recreation issue (see step 9). Keep the app on one monitor, ideally the primary one.
- Network: "cannot connect to NVR" — verify the host itself can reach the NVR
(ping /
nc -zv <NVR-IP> <port>). Wine does not add a network layer; if the host can reach it, the app can too. - Installer still fails on MFC42 — rerun
winetricks mfc42and confirmmfc42.dllexists inC:\windows\syswow64\.