Files
2026-11-01 22:01:32 -05:00

2.4 KiB

Wine and Proton verification

Cthulhu selects a loader from the application's Wine environment and executable. It bypasses a recognized Protontricks runtime proxy and searches the Proton installation for a usable loader. For processes advertising PRESSURE_VESSEL_RUNTIME, it stages the complete helper set under $XDG_STATE_HOME/cthulhu/wine-access/helper (default ~/.local/state). Sets are content-addressed and verified before use; running sets are never overwritten. The helper keeps the reader's D-Bus address and receives the application's display, authentication and Wine synchronization settings.

The active profile can contain:

[profiles.default.wine]
controller-only = false
excluded-hook-programs = ["ExampleGame.exe"]

Use your actual active profile name in place of default. Exclusions are case-insensitive executable basenames, without paths. These settings are read when the Wine manager starts; restart Cthulhu after editing them. They are not live application-profile switches. The helper must support --exclude-hook-program and --no-dialog-reader.

An excluded program appearing in a prefix switches that prefix's helper to controller-only mode. That mode remains until the prefix is retired, even if the excluded program exits while a launcher remains. controller-only = true or a nonempty WINE_ACCESS_NO_DIALOG_READER other than 0 requests it globally.

Run go test ./internal/wine ./internal/config -count=1 for loader selection, staging, environment forwarding, exclusion handling and settings persistence. Fixtures do not establish compatibility with a real Proton runtime or audible Wine output.

For live acceptance:

  1. Quit Cthulhu with Cthulhu+Q. Press Ctrl+Escape, then Shift+G to rebuild and launch it. These are separate key presses.
  2. Open an ordinary Wine editor. Verify focused controls, typing, selection and menus are spoken, Braille follows focus, and keyboard navigation is intact.
  3. Launch a test Proton application. Verify its supported accessibility output reaches the reader and closing it does not leave an unnecessary helper.
  4. With an intentionally excluded test game, verify its controller speech still arrives without dialog-reader interference. Check an ordinary editor in a separate prefix still has normal dialog reading.
  5. Report the exact application, prefix relationship, speech, Braille and focus behavior if a result differs. Redact private paths and text from debug logs.