Skip to content

Instantly share code, notes, and snippets.

@vsTerminus
Created February 9, 2025 21:56
Show Gist options
  • Save vsTerminus/bf4f0247d75b7c0b747ab04bb34a0999 to your computer and use it in GitHub Desktop.
Save vsTerminus/bf4f0247d75b7c0b747ab04bb34a0999 to your computer and use it in GitHub Desktop.
VoiceAttack on Linux

Voice Attack on Linux

2025-02-09

I personally use VoiceAttack with DCS (Digital Combat Simulator) to manage radio menus and UI hotkeys that are difficult to find or navigate while in VR.

This guide explains the setup and usage of VoiceAttack with the intent to use it with DCS, but the process should be mostly identical for other games such as Elite: Dangerous or whatever else you might like to use it with.

Note: Even though I am using Valve's Proton (because it's the only thing that can talk to SteamVR currently), my copy of DCS is standalone and I run it via Lutris, not Steam. For steam games things are a bit more complicated.

Prefix location

Dotnet and wine can get messy, so I tend to create separate prefixes when I need to use dotnet instead of the built-in wine-mono. You can do whatever you like, just be aware that installing dotnet in your prefix could actually break some other apps that were already working fine and it can be hard to uninstall sometimes.

For this guide I have the prefix location set to /home/yourname/Games/DCS/Prefixes/voiceattack - You'll need to change that to whatever makes sense for you.

Creating a Prefix with .NET Framework 4.8 instead of wine-mono

Credit: https://unix.stackexchange.com/questions/191608/wine-do-not-check-for-mono-installation

The most important step right now is to create a a new Wine prefix without wine-mono. It was not enough to remove wine-mono from an existing prefix, I had to create it without wine-mono to begin with.

To do this, create a new prefix and block wine from loading "mscoree" and at the same time install .NET so that Wine won't try to install mono later.

WINEPREFIX=/home/yourname/Games/DCS/Prefixes/voiceattack WINEDLLOVERRIDES=mscoree=d winetricks -q dotnet48

You can verify the prefix does not have wine-mono by running

WINEPREFIX=/home/yourname/Games/DCS/Prefixes/voiceattack wine uninstaller --list

It should only show Microsoft .NET Framework 4.8, with no mention of wine-mono.

Installing Speech Platform

Credit: https://voiceattack.com/alternate.aspx

  1. Download SpeechPlatformRuntime64.msi from https://www.voiceattack.com/speechengines/SpeechPlatformRuntime64.msi
  2. Download at least one Speech Recognition (SR) language (Probably MSSpeech_SR_en-US_TELE.msi) from https://www.microsoft.com/en-us/download/details.aspx?id=27224
  3. (Optionally) Download at least one Text To Speech (TTS) language from the same place

Note: If you downloaded SpeechPlatformRuntime.msi from Microsoft you may have the 32 bit version which will not work. VA will see your mic but not recognize your words. You must install the 64 bit version.

Now install them:

Speech Platform:

WINEPREFIX=/home/yourname/Games/DCS/Prefixes/voiceattack wine msiexec /i SpeechPlatformRuntime.msi

Speech Recognition:

WINEPREFIX=/home/yourname/Games/DCS/Prefixes/voiceattack wine msiexec /i MSSpeech_SR_en-US_TELE.msi 

Finally, double check that your "wine uninstaller" output looks something like this, and does not contain "wine-mono"

WINEPREFIX=/home/yourname/Games/DCS/Prefixes/voiceattack wine uninstaller --list
{92FB6C44-E685-45AD-9B20-CADF4CABA132} - 1033|||Microsoft .NET Framework 4.8
{3B433087-E62E-4BF5-97F9-4AF6E1C2409C}|||Microsoft Server Speech Platform Runtime (x64)
{66D57636-BD4B-402F-9E7D-5E89C28C8136}|||Microsoft Server Speech Recognition Language - TELE (en-US)

Installing VoiceAttack

Download the installer from https://voiceattack.com/

WINEPREFIX=/home/yourname/Games/DCS/Prefixes/voiceattack wine voiceattackinstaller_115.exe

Install it to wherever you want. Personally I find it easier if it's installed outside of the prefix, because then you can delete and recreate prefixes without needing to reinstall the app.

Running VoiceAttack

Configure Lutris to launch the VoiceAttack executable from wherever you installed it. Make sure you specify the same prefix we have been using this entire guide as well.

You should be able to say "browser" and if everything is working VA will acknowledge the command and open the VoiceAttack homepage in your web browser.

Running DCS

Here's the fun part: In order for VoiceAttack to send hotkeys to DCS (or another game) they need to be running in the same prefix together.

In order to do that they both need to be using the same version of Wine or Proton.

Also, currently only Valve's official versions of Proton (eg, Proton 9.0 or Proton Experimental) can talk to SteamVR, so you are limited to these if you use VR.

The nice part is, unlike TrackIR, VoiceAttack does not need to be started first in order to work. You can launch DCS and later launch VA if you need it. Just make sure that in Lutris they are both using the same prefix and the same runner.

Notes for Steam Users

I haven't tested this yet. If I end up using VA with any Steam Games I'll come back and update this with any changes.

But in theory you can follow more or less the same process but with extra steps.

  1. Identify the Prefix location for the game you want to play. Right click the game -> Properties -> Updates. Make note of the App ID. The Prefix is located in ~/.local/share/Steam/steamapps/compatdata/APPIDHERE/pfx
  2. Move or rename the prefix. Rename it "pfx-original" or something. Steam doesn't store the game files in the prefix, but game settings get stored there.
  3. Now follow the guide, but use /home/yourname/.local/share/Steam/steamapps/compatdata/APPIDHERE/pfx as your prefix location.
  4. Copy the "drive_c/users" folder from the old pfx folder into the new pfx folder - This should restore any settings

This will make your game's prefix compatible with VoiceAttack.

Now you can play the game normally, and you should be able to launch VA from Lutris so long as again you make sure that both are being launched with the same version of Proton.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment