#19512 closed defect (limitation)
VR on Linux
| Reported by: | Owned by: | Tom Goddard | |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | VR | Version: | |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: | ||
| Notify when closed: | Platform: | all | |
| Project: | ChimeraX |
Description
The following bug report has been submitted:
Platform: Linux-6.17.7-ba20.fc43.x86_64-x86_64-with-glibc2.39
ChimeraX Version: 1.10.1 (2025-07-24 20:15:27 UTC)
Description
Hi!
I am doing some testing on my personal machine, trying to figure out whether we can use our xisting linux workstations for VR work in chimera, as the Windows machine we had previously used for that has been retired by IT due to Win10 EOL..
I am running bazzite linux with nvidia proprietery drivers on a laptop with rtx 2050 and a Quest3 for this. I am aware that the setup is very far from ideal, but since this machine is able to run steamVR and some light VR applications, I was hopeful it would work for Chimera too.
I first tried to do this through Monado and OpenXR, which I now know is not going to work, as the OpenXR code is OS specific and it was mentioned in one of the tickets from a few years back that OpenXR was only implented with Windows in mind.
When I get into SteamVR and type "vr on" in chimera, I get a "ChimeraX loading" in my headset, but the following error in Chimera itself:
An error occurred in drawing the scene. Redrawing graphics is now stopped to avoid a continuous stream of error messages. To restart graphics use the command "graphics restart" after changing the settings that caused the error.
Traceback (most recent call last):
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/core/updateloop.py", line 84, in draw_new_frame
view.draw(check_for_changes = False)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/graphics/view.py", line 188, in draw
self._draw_scene(camera, drawings)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/graphics/view.py", line 231, in _draw_scene
camera.set_render_target(vnum, r)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/vive/vr.py", line 964, in set_render_target
self._submit_eye_image('left', left_fb.openvr_texture, render)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/vive/vr.py", line 978, in _submit_eye_image
result = self._compositor.submit(eye, texture)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/openvr/__init__.py", line 4460, in submit
openvr.error_code.CompositorError.check_error_value(error)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/openvr/error_code/__init__.py", line 23, in check_error_value
raise error_class(error_value, message)
openvr.error_code.CompositorError_InvalidTexture
Please let me know if what I am doing is inherently cursed, or there is something we can try before getting a new Windows machine for our VR setup.
OpenGL version: 4.6 (Core Profile) Mesa 25.0.7-0ubuntu0.24.04.2
OpenGL renderer: Mesa Intel(R) Iris(R) Xe Graphics (ADL GT2)
OpenGL vendor: Intel
Python: 3.11.4
Locale: en_US.UTF-8
Qt version: PyQt6 6.8.1, Qt 6.8.2
Qt runtime version: 6.8.2
Qt platform: xcb
XDG_SESSION_TYPE=wayland
DESKTOP_SESSION=plasma
XDG_SESSION_DESKTOP=KDE
XDG_CURRENT_DESKTOP=KDE
DISPLAY=:0
WAYLAND_DISPLAY=wayland-0
Manufacturer: LENOVO
Model: 82UT
OS: Ubuntu 24.04
Architecture: 64bit
Virtual Machine: docker
CPU: 20 12th Gen Intel(R) Core(TM) i7-12700H
Cache Size: 24576 KB
Memory:
total used free shared buff/cache available
Mem: 15Gi 6.2Gi 3.9Gi 1.7Gi 7.9Gi 9.2Gi
Swap: 4.0Gi 401Mi 3.6Gi
Graphics:
unknown
Installed Packages:
alabaster: 1.0.0
appdirs: 1.4.4
asttokens: 3.0.0
babel: 2.17.0
beautifulsoup4: 4.13.3
blockdiag: 3.0.0
blosc2: 3.6.1
build: 1.2.2.post1
certifi: 2025.7.14
cftime: 1.6.4.post1
charset-normalizer: 3.4.2
ChimeraX-AddCharge: 1.5.19
ChimeraX-AddH: 2.2.7
ChimeraX-AlignmentAlgorithms: 2.0.2
ChimeraX-AlignmentHdrs: 3.6.1
ChimeraX-AlignmentMatrices: 2.1
ChimeraX-Alignments: 2.20.2
ChimeraX-AlphaFold: 1.0.1
ChimeraX-AltlocExplorer: 1.1.2
ChimeraX-AmberInfo: 1.0
ChimeraX-Aniso: 1.1.4
ChimeraX-Arrays: 1.1
ChimeraX-Atomic: 1.60.7
ChimeraX-AtomicLibrary: 14.1.19
ChimeraX-AtomSearch: 2.0.1
ChimeraX-AxesPlanes: 2.4
ChimeraX-BasicActions: 1.1.3
ChimeraX-BILD: 1.0
ChimeraX-BlastProtein: 3.0.0
ChimeraX-Boltz: 1.0
ChimeraX-BondRot: 2.0.4
ChimeraX-BugReporter: 1.0.2
ChimeraX-BuildStructure: 2.13.1
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.5.1
ChimeraX-ButtonPanel: 1.0.1
ChimeraX-CageBuilder: 1.0.1
ChimeraX-CellPack: 1.0
ChimeraX-Centroids: 1.4
ChimeraX-ChangeChains: 1.1
ChimeraX-CheckWaters: 1.5
ChimeraX-ChemGroup: 2.0.2
ChimeraX-Clashes: 2.3
ChimeraX-ColorActions: 1.0.5
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.8
ChimeraX-CommandLine: 1.3
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0.1
ChimeraX-Core: 1.10.1
ChimeraX-CoreFormats: 1.2
ChimeraX-coulombic: 1.4.5
ChimeraX-Crosslinks: 1.0
ChimeraX-Crystal: 1.0
ChimeraX-CrystalContacts: 1.0.1
ChimeraX-DataFormats: 1.2.4
ChimeraX-Dicom: 1.2.7
ChimeraX-DistMonitor: 1.4.2
ChimeraX-DockPrep: 1.1.4
ChimeraX-Dssp: 2.0
ChimeraX-EMDB-SFF: 1.0
ChimeraX-ESMFold: 1.0
ChimeraX-FileHistory: 1.0.1
ChimeraX-FunctionKey: 1.0.1
ChimeraX-Geometry: 1.3
ChimeraX-gltf: 1.0
ChimeraX-Graphics: 1.4.1
ChimeraX-Hbonds: 2.5.1
ChimeraX-Help: 1.3
ChimeraX-HKCage: 1.3
ChimeraX-IHM: 1.1
ChimeraX-ImageFormats: 1.2
ChimeraX-IMOD: 1.0
ChimeraX-IO: 1.0.3
ChimeraX-ItemsInspection: 1.0.1
ChimeraX-IUPAC: 1.0
ChimeraX-KVFinder: 1.6.2
ChimeraX-Label: 1.1.14
ChimeraX-LinuxSupport: 1.0.1
ChimeraX-ListInfo: 1.2.2
ChimeraX-Log: 1.2
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.9.1
ChimeraX-Map: 1.3
ChimeraX-MapData: 2.0
ChimeraX-MapEraser: 1.0.1
ChimeraX-MapFilter: 2.0.1
ChimeraX-MapFit: 2.0
ChimeraX-MapSeries: 2.1.1
ChimeraX-Markers: 1.0.1
ChimeraX-Mask: 1.0.2
ChimeraX-MatchMaker: 2.2.2
ChimeraX-MCopy: 1.0
ChimeraX-MDcrds: 2.10.1
ChimeraX-MedicalToolbar: 1.1
ChimeraX-Meeting: 1.0.1
ChimeraX-MLP: 1.1.1
ChimeraX-mmCIF: 2.16
ChimeraX-MMTF: 2.2
ChimeraX-ModelArchive: 1.0
ChimeraX-Modeller: 1.5.19
ChimeraX-ModelPanel: 1.5.1
ChimeraX-ModelSeries: 1.0.1
ChimeraX-Mol2: 2.0.3
ChimeraX-Mole: 1.0
ChimeraX-Morph: 1.0.2
ChimeraX-MouseModes: 1.2
ChimeraX-Movie: 1.0
ChimeraX-MutationScores: 1.0
ChimeraX-Neuron: 1.0
ChimeraX-Nifti: 1.2
ChimeraX-NMRSTAR: 1.0.2
ChimeraX-NRRD: 1.2
ChimeraX-Nucleotides: 2.0.3
ChimeraX-OpenCommand: 1.14.1
ChimeraX-OrthoPick: 1.0.1
ChimeraX-PDB: 2.7.10
ChimeraX-PDBBio: 1.0.1
ChimeraX-PDBLibrary: 1.0.4
ChimeraX-PDBMatrices: 1.0
ChimeraX-PickBlobs: 1.0.1
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1.3
ChimeraX-ProfileGrids: 1.1.3
ChimeraX-PubChem: 2.2
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1.2
ChimeraX-RemoteControl: 1.0
ChimeraX-RenderByAttr: 1.6.3
ChimeraX-RenumberResidues: 1.1
ChimeraX-ResidueFit: 1.0.1
ChimeraX-RestServer: 1.3.1
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 4.0
ChimeraX-RotamerLibsDunbrack: 2.0
ChimeraX-RotamerLibsDynameomics: 2.0
ChimeraX-RotamerLibsRichardson: 2.0
ChimeraX-SaveCommand: 1.5.1
ChimeraX-SchemeMgr: 1.0
ChimeraX-SDF: 2.0.3
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0.1
ChimeraX-Segmentations: 3.5.7
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.17.1
ChimeraX-Shape: 1.1
ChimeraX-Shell: 1.0.1
ChimeraX-Shortcuts: 1.2.1
ChimeraX-ShowSequences: 1.0.3
ChimeraX-SideView: 1.0.1
ChimeraX-SimilarStructures: 1.0.1
ChimeraX-Smiles: 2.1.2
ChimeraX-SmoothLines: 1.0
ChimeraX-SpaceNavigator: 1.0
ChimeraX-StdCommands: 1.19.1
ChimeraX-STL: 1.0.1
ChimeraX-Storm: 1.0
ChimeraX-StructMeasure: 1.2.1
ChimeraX-Struts: 1.0.1
ChimeraX-Surface: 1.0.1
ChimeraX-SwapAA: 2.0.1
ChimeraX-SwapRes: 2.5.2
ChimeraX-TapeMeasure: 1.0
ChimeraX-TaskManager: 1.0
ChimeraX-Test: 1.0
ChimeraX-Toolbar: 1.2.3
ChimeraX-ToolshedUtils: 1.2.4
ChimeraX-Topography: 1.0
ChimeraX-ToQuest: 1.0
ChimeraX-Tug: 1.0.1
ChimeraX-UI: 1.45.2
ChimeraX-Umap: 1.0
ChimeraX-uniprot: 2.3.1
ChimeraX-UnitCell: 1.0.1
ChimeraX-ViewDockX: 1.4.4
ChimeraX-VIPERdb: 1.0
ChimeraX-Vive: 1.1
ChimeraX-VolumeMenu: 1.0.1
ChimeraX-vrml: 1.0
ChimeraX-VTK: 1.0
ChimeraX-WavefrontOBJ: 1.0
ChimeraX-WebCam: 1.0.2
ChimeraX-WebServices: 1.1.5
ChimeraX-Zone: 1.0.1
colorama: 0.4.6
comm: 0.2.2
contourpy: 1.3.2
coverage: 7.10.0
cxservices: 1.2.3
cycler: 0.12.1
Cython: 3.0.12
debugpy: 1.8.15
decorator: 5.2.1
distro: 1.9.0
docutils: 0.21.2
executing: 2.2.0
filelock: 3.18.0
fonttools: 4.59.0
funcparserlib: 2.0.0a0
glfw: 2.9.0
grako: 3.16.5
h5py: 3.14.0
html2text: 2024.2.26
idna: 3.10
ihm: 2.2
imagecodecs: 2024.6.1
imagesize: 1.4.1
iniconfig: 2.1.0
ipykernel: 6.29.5
ipython: 8.26.0
ipywidgets: 8.1.7
jedi: 0.19.1
Jinja2: 3.1.6
jupyter_client: 8.6.3
jupyter_core: 5.8.1
jupyterlab_widgets: 3.0.15
kiwisolver: 1.4.8
line_profiler: 4.2.0
lxml: 5.3.1
lz4: 4.3.2
MarkupSafe: 3.0.2
matplotlib: 3.10.1
matplotlib-inline: 0.1.7
msgpack: 1.1.0
ndindex: 1.10.0
nest-asyncio: 1.6.0
netCDF4: 1.6.5
networkx: 3.3
nibabel: 5.2.0
nptyping: 2.5.0
numexpr: 2.11.0
numpy: 1.26.4
nvidia-nvjitlink-cu12: 12.9.86
OpenMM: 8.2.0
OpenMM-CUDA-12: 8.2.0
openvr: 1.26.701
packaging: 24.2
ParmEd: 4.2.2
parso: 0.8.4
pep517: 0.13.1
pexpect: 4.9.0
pickleshare: 0.7.5
pillow: 10.4.0
pip: 25.0.1
pkginfo: 1.11.1
platformdirs: 4.3.8
pluggy: 1.6.0
prompt_toolkit: 3.0.51
psutil: 7.0.0
ptyprocess: 0.7.0
pure_eval: 0.2.3
py-cpuinfo: 9.0.0
pycollada: 0.8
pydicom: 2.4.4
Pygments: 2.18.0
pynmrstar: 3.3.5
pynrrd: 1.0.0
PyOpenGL: 3.1.9
PyOpenGL-accelerate: 3.1.9
pyopenxr: 1.1.4501
pyparsing: 3.2.3
pyproject_hooks: 1.2.0
PyQt6: 6.8.1
PyQt6-Qt6: 6.8.2
PyQt6-WebEngine: 6.8.0
PyQt6-WebEngine-Qt6: 6.8.2
PyQt6_sip: 13.10.0
pytest: 8.4.1
pytest-cov: 6.2.1
python-dateutil: 2.9.0.post0
pytz: 2025.2
pyzmq: 27.0.0
qtconsole: 5.5.2
QtPy: 2.4.3
qtshim: 1.1
RandomWords: 0.4.0
requests: 2.32.3
roman-numerals-py: 3.1.0
scipy: 1.14.0
setuptools: 78.1.0
sfftk-rw: 0.8.1
six: 1.16.0
snowballstemmer: 3.0.1
sortedcontainers: 2.4.0
soupsieve: 2.7
Sphinx: 8.2.3
sphinx-autodoc-typehints: 3.1.0
sphinxcontrib-applehelp: 2.0.0
sphinxcontrib-blockdiag: 3.0.0
sphinxcontrib-devhelp: 2.0.0
sphinxcontrib-htmlhelp: 2.1.0
sphinxcontrib-jsmath: 1.0.1
sphinxcontrib-qthelp: 2.0.0
sphinxcontrib-serializinghtml: 2.0.0
stack-data: 0.6.3
superqt: 0.7.1
tables: 3.10.2
tcia_utils: 1.5.1
tifffile: 2025.3.13
tinyarray: 1.2.4
tornado: 6.5.1
traitlets: 5.14.3
typing_extensions: 4.14.1
tzdata: 2025.2
urllib3: 2.5.0
wcwidth: 0.2.13
webcolors: 24.11.1
wheel: 0.45.1
wheel-filename: 1.4.2
widgetsnbextension: 4.0.14
Change History (3)
comment:1 by , 28 hours ago
| Component: | Unassigned → VR |
|---|---|
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Status: | new → assigned |
| Summary: | ChimeraX bug report submission → VR on Linux |
comment:2 by , 27 hours ago
| Resolution: | → limitation |
|---|---|
| Status: | assigned → closed |
Hi Kyrylo,
I don't think I have good news for you. I'd guess 99% of VR is being done on Windows. Although in theory it can work on Linux, it doesn't make sense for any developer to work on that since the audience is so small.
Unfortunately you are right that OpenXR uses operating specific calls to set up a session. The ChimeraX code for that is here (on github)
and in your ChimeraX installation in site-packages/chimerax/vive/openxr.py. If you are really crazy you could try to edit it to make the appropriate Linux OpenXR setup calls. I think it is these 4 lines of code (with Win32 and WGL in them) that need to be changed
gb = xr.GraphicsBindingOpenGLWin32KHR()
from OpenGL import WGL
gb.h_dc = WGL.wglGetCurrentDC()
gb.h_glrc = WGL.wglGetCurrentContext()
I didn't see any other reference to Windows in the ChimeraX OpenXR code.
In theory SteamVR should work too. I think it officially supports Linux. Your error message
openvr.error_code.CompositorError_InvalidTexture
is rather vague. Aha! I see in your bug report ChimeraX is using Mesa graphics.
OpenGL version: 4.6 (Core Profile) Mesa 25.0.7-0ubuntu0.24.04.2
OpenGL renderer: Mesa Intel(R) Iris(R) Xe Graphics (ADL GT2)
OpenGL vendor: Intel
That definitely won't work. It needs to be using your Nvidia graphics driver. If you fix whatever the problem is with ChimeraX not seeing your Nvidia graphics driver then SteamVR might work. ChimeraX should use the Nvidia driver if it is correctly installed on your computer. You can try the "nvidia-smi" shell command on your machine to see if it thinks the Nvidia driver is working. The Nvidia drivers have long been a dysfunctional nightmare on the Wayland winding system you are using. I don't know how to get an Nvidia driver working on Wayland. But when I have seen this on Ubuntu I logged in using an X11 windowing system session and then the Nvidia driver was working. You can see in ChimeraX what driver it is using with the ChimeraX "graphics driver" command.
Good luck! (You'll need it. Linux is pain unless you are an expert hacker.)
Tom
comment:3 by , 27 hours ago
One more tip. I recall when I was using the Nvidia proprietary driver on the Wayland windowing system on Ubuntu the nvidia-smi command worked meaning the driver is correctly installed. But the problem was the Wayland windowing system did not operate with it so graphics applications did not see the driver. Maybe that has improved, my experience with that was 6 months ago. It might be possible to make Nvidia drivers work with Wayland if you search online.
Reported by Kyrylo Bisikalo