A from-scratch macOS user-space touch driver for the Corsair Xeneon Edge 14.5 inch 32:9 touchscreen panel so you can make it genuinely useful when using it with a Mac.
To install for the current user, just run the following from the root of the checked out repository on the relevant mac:
./Scripts/install.shThis builds the release binary, installs it under:
~/Library/Application Support/MacXeneonEdgeTouchDriver/bin/MacXeneonEdgeTouchDriver
and installs the LaunchAgent at:
~/Library/LaunchAgents/com.ajvwhite.MacXeneonEdgeTouchDriver.plist
No script uses sudo. Driver logs are written to:
~/Library/Logs/MacXeneonEdgeTouchDriver/driver.log
The LaunchAgent also creates stdout.log and stderr.log in the same directory for process-level output. The driver itself uses Unified Logging plus driver.log, so stdout and stderr are normally empty unless launchd or a lower-level runtime writes there.
The installer creates a default config file if one does not already exist:
~/Library/Application Support/MacXeneonEdgeTouchDriver/config.json
Uninstall:
./Scripts/uninstall.shUninstall removes the LaunchAgent and Application Support files but keeps logs.
Build a signed release binary:
./Scripts/build-release.shBy default this uses ad-hoc signing. Set CODESIGN_IDENTITY for Developer ID signing and NOTARIZATION_PROFILE to submit the release archive with xcrun notarytool.
Optional config file:
~/Library/Application Support/MacXeneonEdgeTouchDriver/config.json
All fields are optional. Missing or malformed config falls back to defaults and logs a warning.
logLevel only controls the minimum level written to driver.log; Unified Logging remains controlled by macOS logging configuration.
{
"logLevel": "info",
"timing": {
"warpToClickDelayMs": 10,
"downToUpDelayMs": 20,
"clickToWarpBackDelayMs": 10,
"tapDebounceMs": 50,
"stuckGestureTimeoutMs": 2000
},
"display": {
"vendorNumber": 3672,
"modelNumber": 60672,
"serialNumber": null,
"expectedWidth": 2560,
"expectedHeight": 720
},
"gesture": {
"multiTouchEnabled": false
},
"diagnostics": {
"fileLogPath": "/Users/ajvwhite/Library/Logs/MacXeneonEdgeTouchDriver/driver.log",
"fileLogMaxBytes": 5242880
}
}gesture.multiTouchEnabled is always forced to false as the hardware only exposes single touch information, if this ever changes we will look to see how to support multi-touch gestures.
- If the physical mouse is moved during a touch gesture, the cursor will return to the position captured when the touch began.
- Multi-contact gestures are not supported as the hardware doesn't report this information back.
- If the process is killed with
SIGKILL, normal shutdown cleanup cannot run. Relaunching the driver or moving the physical mouse after cursor association is restored may be needed.
- If the driver exits immediately, check Accessibility permission for the exact binary location as provided by the install script.
- If HID open fails, check Input Monitoring permission and confirm no other process has seized the same VID/PID device.
- If taps land on the wrong display, run
swift run DisplayInfoand adjust the optional display config override. - For HID investigation, use
swift run HIDDump; it intentionally runs in non-seize mode and is separate from the production daemon.