Repository navigation
Installation
Before you install, check Requirements (supported systems, drivers, permissions per OS). Full guide: docs/installation.md. This page is the short version.
- Open the Releases page. Versions
0.xand tags with a suffix are marked pre-release and do not appear under/releases/latest. - Download the package for your system plus
SHA256SUMS.txt. - Verify:
sha256sum -c --ignore-missing SHA256SUMS.txt(this protects against a damaged download only, not against a compromised release). To check where a file was built:gh attestation verify <file> -R HoZe-Lukas/dofScrollproves that this repository's release workflow produced it. - Install:
| Format | Command | Notes |
|---|---|---|
| RPM (built on Rocky Linux 9) |
sudo dnf install -y epel-release, then sudo dnf install ./dofscroll-*.rpm
|
spacenavd comes from EPEL on RHEL 9 and its clones (Fedora has it in its own repositories); Qt is inside the package, nothing else to install |
| DEB (built on Debian 12) | sudo apt install ./dofscroll_*.deb |
spacenavd is in Debian 12 and 13 and Ubuntu 24.04 (install-tested in CI); check other releases with apt-cache policy spacenavd
|
| TGZ |
tar xzf dofscroll-*-Linux.tar.gz, then sudo cp -a dofscroll-*-Linux/usr/. /usr/
|
Self-contained interface (own Qt): dofscroll-ui runs from the unpacked folder; the daemon needs libspnav and the X11 libraries from your distribution |
The RPM and DEB files are install-tested in CI containers only (not on a real desktop). A package installs /usr/bin/dofscroll and /usr/bin/dofscroll-ui (with its own Qt 6.9.3 in /usr/lib/dofscroll, which is why the packages are 27 to 35 MB), /usr/bin/dofscroll-hidprobe (diagnostic), a menu entry, the user units in /usr/lib/systemd/user, example configs in /usr/share/dofscroll/examples/ (the joystick modes and button modes are built into the program), and the uinput udev rule as an inactive example under /usr/share/dofscroll/udev/.
Install the package, then open dofScroll from the application menu. That is the whole first start: the interface starts the daemon by itself and shows a short setup guide (daemon running, SpaceMouse found, "Start at login" on by default). The RPM and DEB never enable or start the spacenavd service (they print the command when the service exists but is off); a fresh install does not start your dofscroll units either, the interface does that, and the setup guide changes "Start at login" only when you press Finish. The steps below are the alternative: a TGZ install, a machine without a desktop, or when the automatic way did not work.
-
sudo systemctl enable --now spacenavd(the packages do not do this for you) -
systemctl --user daemon-reload, then checksystemctl --user list-unit-files 'dofscroll*' -
systemctl --user enable --now dofscroll.service dofscroll-ui.service. The interface's "Start at login" switch does the same through one interface on all systems. - Wayland only (or
BACKEND = uinput): activate the udev rule yourself, it is not active by default.sudo cp /usr/share/dofscroll/udev/70-dofscroll-uinput.rules /etc/udev/rules.d/, thensudo udevadm control --reload && sudo udevadm trigger, then log out and in. Do not join theinputgroup, see Security.
On first start the tray creates ~/.config/dofscroll/dofscroll.conf (global settings) if it does not exist (it never overwrites anything); each profile is a file in devices/ or apps/, and an existing single-file config is split once, with a backup, see docs/installation.md; the example joystick modes are built into the program and need no copying. Without the tray, copy the config by hand, see docs/installation.md.
# RHEL 9 family: sudo dnf install -y epel-release
# then: sudo dnf install -y gcc-c++ cmake pkgconf-pkg-config spacenavd libspnav-devel \
# libX11-devel libXtst-devel gettext
cmake -S . -B build
cmake --build build --target check-deps
cmake --build build -j4
ctest --test-dir build --output-on-failure
sudo cmake --install build --prefix /usrCMake 3.16 or newer. Debian-family package names are in the full guide (marked unverified there). Options: -DDOFSCROLL_HARDEN=OFF, -DDOFSCROLL_SANITIZE=ON, -DDOFSCROLL_WERROR=ON. With the default prefix /usr/local systemd does not read the installed units; use --prefix /usr or cmake --build build --target install-user-links.
CI builds an installer (dofscroll-<version>-windows-x64-setup.exe) and a portable ZIP. They have not been run with a real SpaceMouse, and they are not code-signed.
- Download, verify the checksum as above, run the installer. No administrator rights are needed (default folder
%LOCALAPPDATA%\Programs\dofscroll). - SmartScreen shows "Windows protected your PC": click More info, then Run anyway.
-
Open dofscroll from the Start menu (or tick "Open dofscroll now" on the finish page): the interface (
dofscroll-ui.exe) starts the daemon (dofscroll.exe, no window) by itself and the first start shows the setup guide with "Start at login" on. The installer has the optional component "Start the daemon at logon" (off by default) too. - Config:
%APPDATA%\dofscroll\(dofscroll.conf,devices\,apps\; same layout as on Linux). Log:%LOCALAPPDATA%\dofscroll\dofscroll.log. - The official 3Dconnexion driver can stay installed and running; dofscroll works next to it and never asks you to stop it: with the driver installed it reads the device through the driver's interface (setting
INPUT, defaultauto), otherwise directly (not verified on hardware yet). Please run the 5 minute testpowershell -ExecutionPolicy Bypass -File scripts\test-driver-coexistence.ps1from the install folder and attach its file to issue #36, see Requirements. The diagnostic tooldofscroll-hidprobe.exeis next todofscroll.exe.
Uninstall: Settings > Apps > dofscroll; your configuration stays. Details: docs/installation.md, port-windows.md, port-windows-checklist.md.
CI builds dofscroll-<version>-macos-arm64.dmg (Apple silicon). It is signed ad hoc only (with the hardened runtime; the signature changes with an update, so macOS asks for the Input Monitoring and Accessibility grants again) and not notarized, and it has not been run with a real SpaceMouse.
- Open the DMG and drag
dofscroll.appto Applications. - Gatekeeper blocks the first start: right-click the app > Open > Open. On macOS 15 and later use System Settings > Privacy & Security > Open Anyway. Alternative:
xattr -dr com.apple.quarantine /Applications/dofscroll.app. -
Open dofscroll from Applications. The interface starts the daemon inside the app and shows the setup guide: "Start at login" is on by default, and each of the two permissions, Input Monitoring and Accessibility, has a button that opens the matching pane of System Settings and a live note while macOS does not accept the events. Switch on dofscroll in both lists (if it is not listed, add
Contents/Resources/daemon/dofscrollwith+). - Alternative by hand: the LaunchAgent script from the image (
README-first-run.txt).
Details: docs/installation.md, port-macos.md, packaging/macos/README.md.
Upgrade per OS (A package or installer never touches your config):
- Linux: install the newer package over the old one. The package stops the running daemon and interface before installing and starts them again afterwards. If that did not happen (for example you started the program from a terminal), run
systemctl --user daemon-reloadand restartdofscroll.serviceanddofscroll-ui.service, or use the tray item "Restart". - Windows: run the new installer; it stops the daemon and a running
dofscroll-ui.exefirst, then starts the daemon again if it was running (also for silent/Sinstalls) and the interface (interactive installs only). - macOS: quit the interface (tray, Quit), stop the daemon, replace
dofscroll.app, start both again (a loaded LaunchAgent:launchctl kickstart -k gui/$(id -u)/io.github.dofscroll.daemon).
Uninstall: systemctl --user disable --now dofscroll.service dofscroll-ui.service, then sudo dnf remove dofscroll (or sudo apt remove dofscroll), and remove /etc/udev/rules.d/70-dofscroll-uinput.rules if you added it. Delete ~/.config/dofscroll to drop your settings.
dofscroll is GPL-3.0-or-later. "3Dconnexion" and "SpaceMouse" are trademarks of 3Dconnexion GmbH or their respective owners; this is an independent project, not endorsed by or affiliated with them. These pages are generated from docs/wiki in the repository: send changes as a pull request.