Environment Variables
TuxBlox can be steered with environment variables. The launcher sets the important ones for you, and the Environment variables box in Settings is where you add your own.
You do not need anything on this page for TuxBlox to work. Reach for it when you are debugging, benchmarking, or working around a driver.
How to set them
Through the launcher, which is the way that persists. Settings, then Environment variables, as a space separated list:
DXVK_HUD=fps TUXBLOX_LOG=1
Variables you set here are applied last, so they override anything TuxBlox chose for you, including the graphics card picker.
For a single run from a terminal, if you are calling the layer yourself:
TUXBLOX_LOG=1 ~/.tuxblox/TuxBloxLauncher --launch-studio
TuxBlox variables
TUXBLOX_PREFIX
Path to the virtual drive. The launcher sets this to ~/.tuxblox/runtime.
Only needs setting by hand if you are running compat/main directly. It is the one variable the layer cannot work without.
TUXBLOX_LOG
Turns on logging. Off by default, because logging costs real frame time.
| Value | Effect |
|---|---|
-1 |
Silence: nothing at all is printed |
unset or 0 |
No logging |
1 |
A useful default set of channels |
| anything else | That value is added to the default set |
The advanced form takes Wine debug channel syntax, so TUXBLOX_LOG=+seh,+relay adds those channels on top of the defaults.
Turning this on also raises the graphics layers' own logging to a level that reports warnings.
-1 goes the other way and turns everything off, including the handful of lines the layer normally prints and the graphics layers' error reporting. It is for programs whose output is being read by something else rather than by a person: Studio MCP sets it, because a single unexpected line there breaks the connection to the AI client. There is no reason to set it by hand, and a crash under it leaves nothing to look at.
TUXBLOX_LOG_DIR
Where tuxblox.log is written. The launcher sets it to ~/.tuxblox/logs. Defaults to your home folder if unset.
TUXBLOX_LOG_LIMIT
The largest a session log is allowed to get, in megabytes. Defaults to 64.
With logging turned up, a log can grow by megabytes a second, and a long session used to be able to produce one far too big to open or send. When a log passes this size, TuxBlox takes the middle out of it and keeps both ends — the start says what was launched and how, the end says what went wrong — and marks the gap in the file where the removed part was.
Set it to 0 to keep everything and let the log grow without limit.
TUXBLOX_HAPTICS
Set to 0 to turn off controller vibration. Anything else, including leaving it unset, leaves it on.
This is what the Enable Haptics setting writes.
TUXBLOX_WEBVIEW_GPU
1 or 0, for GPU acceleration in the panels that are web pages. This is what the GPU acceleration for web pages setting writes.
Unlike haptics, both values are sent explicitly, because the layer's own default differs from the launcher's.
TUXBLOX_NO_FSYNC
Set to 1 to drop down a rung on the thread synchronisation ladder.
TuxBlox picks the best mechanism your kernel offers, preferring ntsync, then fsync, then falling back to the compatibility layer's own server. This variable forces it off the faster paths.
Only useful for diagnosing a hang. It will not make anything faster.
TUXBLOX_USE_WINED3D
Set to 1 to render Direct3D through WineD3D, which translates to OpenGL, instead of DXVK, which translates to Vulkan.
DXVK is the default and is faster nearly everywhere. WineD3D is worth trying only on hardware with no usable Vulkan driver.
TUXBLOX_NO_D3D11
Set to 1 to disable Direct3D 11 entirely, pushing Roblox onto an older rendering path.
A diagnostic, not a tuning knob.
TUXBLOX_DISABLE_NVAPI
Set to 1 to turn off NVIDIA's NVAPI support inside the layer. Only relevant on NVIDIA hardware, and only worth trying if something NVIDIA specific is misbehaving.
TUXBLOX_DLL_COPY
Overrides which libraries get copied into the virtual drive rather than linked. Internal, and changing it will probably break your install. Listed for completeness.
Graphics variables
These are not TuxBlox's, they belong to the graphics stack underneath. They work because TuxBlox passes your environment straight through.
Picking a card
The Graphics card setting writes these for you. Set them yourself only if the picker gets your machine wrong.
NVIDIA:
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia
AMD and Intel:
DRI_PRIME=pci-0000_03_00_0 MESA_VK_DEVICE_SELECT=1002:744c
Overlays and measurement
| Variable | What it does |
|---|---|
DXVK_HUD=fps |
DXVK's own framerate overlay |
DXVK_HUD=full |
Everything DXVK can report |
MANGOHUD=1 |
MangoHud overlay, if you have it installed |
Note
Roblox renders through Vulkan directly rather than through Direct3D, so DXVK's overlay may show nothing during actual gameplay. It is still useful for Studio's interface and for the launcher's own panels.
Wine variables
The compatibility layer is Wine underneath, so Wine's variables work, WINEDEBUG included. TuxBlox sets sensible values for the ones that matter and will not overwrite one you set yourself.
Be careful with WINEDEBUG. Verbose channels can slow Roblox to a crawl and produce gigabytes of log.
Variables TuxBlox sets for itself
You will see these in logs. They are set by the layer at startup and are not meant to be set by hand.
| Variable | Purpose |
|---|---|
TUXBLOX_WEBVIEW_DIR |
Where the bundled browser component lives |
TUXBLOX_REAL_EXIT_CODE |
How Roblox's real exit code is reported back |
TUXBLOX_WRAPPER_EXIT_CODE |
The layer's own exit code |
TUXBLOX_VERSION, TUXBLOX_CHANNEL |
Baked in at build time |
Variables that no longer exist
TuxBlox used to use Proton's PROTON_* and Steam's STEAM_COMPAT_* names. They were renamed to TUXBLOX_* and the ones that only applied to Steam games were removed.
If you are following an old guide, STEAM_COMPAT_DATA_PATH is now TUXBLOX_PREFIX and PROTON_LOG is now TUXBLOX_LOG.