Mouser README

The project's README from github.com/TomBadash/Mouser. As one markdown file: README.md.

Mouser — Logitech Mouse Remapper

Mouser logo

English | 中文文档

A lightweight, open-source, fully local alternative to Logitech Options+ for remapping Logitech HID++ mice. The current best experience is on the MX Master and MX Anywhere families, with detection and fallback UI support for additional Logitech models.

No telemetry. No cloud. No Logitech account required.


Contents


Download & Run

No install required. Just download, extract, and double-click.

Windows Downloads macOS Apple Silicon Downloads macOS Intel Downloads Linux Downloads
Downloads

  1. Open the latest release page.
  2. Download the zip for your platform:
    • Windows — Mouser-Windows.zip
    • macOS (Apple Silicon) — Mouser-macOS.zip
    • macOS (Intel) — Mouser-macOS-intel.zip
    • Linux — Mouser-Linux.zip
  3. Extract it anywhere (Desktop, Documents, /Applications, wherever).
  4. Run the executable: Mouser.exe, Mouser.app, or ./Mouser.

That's it. The app opens, drops a tray / menu-bar icon, and starts remapping immediately.

What to expect on first launch

First-time notes


Screenshots

Mouse & Profiles Point & Scroll
Mouser — Mouse & Profiles page Mouser — Point & Scroll settings

Features

Button remapping

Device control

Cross-platform

Smart connectivity

Multi-language UI

Privacy first


Device coverage

Family / model Detection + HID++ probing UI support
MX Master 4 / 3S / 3 / 2S / MX Master Yes Dedicated interactive per-model layouts
MX Anywhere 3S / 3 / 2S Yes Dedicated interactive per-model layouts
MX Vertical Yes Generic fallback card (with DPI switch button support)
Unknown Logitech HID++ mice Best effort by PID/name Generic fallback card

MX Master and MX Anywhere devices have dedicated visual overlays. Other devices are still detected, show their model name, and can opt into an experimental layout override — button positions just may not line up until a real overlay lands. See CONTRIBUTING_DEVICES.md to add yours.


Default mappings

Button Default action
Back button (XButton1) Alt + Tab (Switch Windows)
Forward button (XButton2) Alt + Tab (Switch Windows)
Middle click Pass-through
Gesture button Pass-through
Gesture swipes (up / down / left / right) Pass-through
Mode shift (scroll click) Switch Scroll Mode (Ratchet / Free Spin)
Horizontal scroll left Browser Back
Horizontal scroll right Browser Forward
DPI switch (MX Vertical) Pass-through

Available actions

Action labels adapt per platform. Windows exposes Win+D and Task View; macOS exposes Mission Control, Show Desktop, App Exposé, and Launchpad; Linux falls back to compositor-native equivalents.

Category Actions
Navigation Alt+Tab, Alt+Shift+Tab, Show Desktop, Previous Desktop, Next Desktop, Task View (Windows), Mission Control / App Exposé / Launchpad (macOS), Page Up / Page Down / Home / End
Browser Back, Forward, Close Tab (Ctrl+W), New Tab (Ctrl+T), Next Tab (Ctrl+Tab), Previous Tab (Ctrl+Shift+Tab)
Editing Copy, Paste, Cut, Undo, Select All, Save, Find
Media Volume Up, Volume Down, Volume Mute, Play / Pause, Next Track, Previous Track
Scroll Switch Scroll Mode (Ratchet / Free Spin), Toggle SmartShift, Cycle DPI Presets
Mouse Left Click, Right Click, Middle Click, Back (Mouse Button 4), Forward (Mouse Button 5)
Custom User-defined keyboard shortcuts (any key combination, captured in the UI)
Other Do Nothing (pass-through)

Build from source

You only need this if you want to hack on Mouser or run a development build. Most users should grab a release zip — see Download & Run.

Common prerequisites

git clone https://github.com/TomBadash/Mouser.git
cd Mouser
python -m venv .venv
Windows
.\.venv\Scripts\activate
pip install -r requirements.txt

# Run from source
python main_qml.py

# Or start straight into the tray
python main_qml.py --start-hidden

# Build a portable zip
build.bat                # standard
build.bat --clean        # force clean rebuild

build.bat installs requirements, verifies that hidapi is importable, and packages with PyInstaller. The output lives in dist\Mouser\ — zip the folder and ship it.

To launch a source checkout without a console window, create a shortcut that uses pythonw.exe; see DEVELOPMENT.md.

macOS
source .venv/bin/activate
pip install -r requirements.txt

# Run from source
python main_qml.py
python main_qml.py --start-hidden     # launch directly to menu bar

# Build the native menu-bar bundle
pip install pyinstaller
./build_macos_app.sh

The output is dist/Mouser.app. The script reuses images/AppIcon.icns when present, otherwise generates one from images/logo_icon.png. Signing depends on whether MOUSER_SIGN_IDENTITY is set in the environment:

  • Unset (default): ad-hoc signs with codesign --sign -. Convenient for one-off builds, but the bundle's code identity can change on rebuild, so macOS may ask for Accessibility permission again.
  • Set to a codesigning identity (security find-identity -v -p codesigning to list them — SHA-1 form preferred): signs every nested .dylib / .so / .framework with hardened runtime options, then signs the outer app with the hardened-runtime exceptions at build_resources/Mouser.entitlements. This is a local developer signing path for repeated builds; stable macOS permission behavior depends on keeping the same source, resolved Python interpreter, dependency versions, architecture, signing identity, entitlements, and timestamp policy. A failing codesign --verify --deep --strict check aborts the build.
MOUSER_SIGN_IDENTITY="ABCD1234..." ./build_macos_app.sh   # local signed build
  • This is not a notarized release-signing flow. Public macOS release zips remain ad-hoc signed until a separate Developer ID signing, secure timestamp, notarization, stapling, and Gatekeeper validation workflow exists.
  • Build on the architecture you want to ship: an arm64 Python produces an Apple Silicon bundle, an x86_64 Python produces an Intel bundle. Set PYINSTALLER_TARGET_ARCH=arm64|x86_64|universal2 to override.
  • Release CI publishes both Mouser-macOS.zip (Apple Silicon) and Mouser-macOS-intel.zip (Intel) automatically on tag pushes.
  • Accessibility permission is required. See readme_mac_osx.md for the full grant flow and platform-specific notes.
Linux
source .venv/bin/activate
pip install -r requirements.txt

# Run from source
python main_qml.py

# Install device permissions (only needed once, then reconnect the mouse)
./packaging/linux/install-linux-permissions.sh

# Build a portable bundle
sudo apt-get install libhidapi-dev
pip install pyinstaller
pyinstaller Mouser-linux.spec --noconfirm

The helper installs 69-mouser-logitech.rules, reloads udev, and tries to modprobe uinput. After a successful run, reconnect the mouse, fully quit Mouser, and launch normally — no sudo. On systems without logind / uaccess, adding the user to the input group is the distro-specific fallback.

The first normal Linux launch creates or refreshes:

~/.local/share/applications/io.github.tombadash.mouser.desktop

The generated launcher uses absolute paths for the current portable app or source checkout, and syncs Mouser's app icon into the per-user hicolor icon theme when possible. If you move the checkout, launch Mouser once from the new path to refresh the app-menu entry. Enabling Start at login also manages:

~/.config/autostart/io.github.tombadash.mouser.desktop

That Linux autostart entry includes a short GNOME startup delay so Mouser does not race Bluetooth / HID initialization immediately after login.

xdotool enables per-app profile switching on X11; kdotool adds KDE Wayland support. Other Wayland compositors fall back to the default profile.

Automated releases: pushing a v* tag triggers .github/workflows/release.yml, which builds Windows, macOS (Apple Silicon + Intel), and Linux artifacts in CI and uploads them to the GitHub Release.

For project layout, the architecture diagram, the HID++ gesture detector, the Engine + reconnection flow, debug CLI flags (--hid-backend=iokit|hidapi|auto), and how to run the test suite, see DEVELOPMENT.md. To add a new device, see CONTRIBUTING_DEVICES.md.


Limitations


Roadmap


Contributing

Contributions are welcome.

Support the project

If Mouser saves you from installing Logitech Options+, consider supporting development:

Sponsor

Every bit helps keep the project going — thank you.


Acknowledgments

Mouser (TomBadash/Mouser)

Searching Database…

5.3K ·GitHub
这是什么?Mouser 是一款轻量、开源、完全本地运行的应用,用于重新映射罗技 HID++ 鼠标(如 MX Master 和 MX Anywhere 系列),是 Logitech Options+ 的免费替代品。
这是后台程序吗?还是需要一直打开界面?它是一款独立的桌面应用。打开一次设置窗口后,它会继续在系统托盘或菜单栏中运行,因此你可以关闭窗口而不必退出重新映射程序。
我该怎么让它运行起来?从发布页面下载适用于你操作系统的压缩包(Windows、macOS Apple Silicon、macOS Intel 或 Linux),解压到任意位置,然后运行可执行文件(Mouser.exe、Mouser.app 或 ./Mouser),无需安装程序。
我需要安装 Logitech Options+ 或注册账号吗?不需要账号,也不需要任何云服务,但必须确保 Logitech Options+ 没有在运行,因为两个程序都会争夺对鼠标的 HID++ 访问权限。
在权限或设置方面有什么需要注意的吗?macOS 需要授予“辅助功能”权限,以便事件拦截正常工作;Linux 需要一次性运行 udev 辅助脚本,以获取 /dev/hidraw 和 /dev/uinput 的访问权限;另外,按设备区分的按键映射尚未完全独立,配置方案目前仍在所有设备之间通用。
哪些鼠标在 Mouser 上效果最好?MX Master 和 MX Anywhere 系列拥有专门的交互式布局,体验最佳;其他罗技 HID++ 鼠标(如 MX Vertical)可以被识别,但只会显示通用的备用界面。
Mouser 会把任何数据发送到外部吗?不会。所有处理都在本地完成,配置是你电脑上的一个普通 JSON 文件,而且没有任何遥测、云端连接,也不需要账号。
我可以设置哪些类型的重新映射?你可以重新映射任何可编程按键(中键、手势键、后退/前进键、模式切换键、DPI 切换键),将按键绑定为鼠标点击,录制自定义键盘快捷键,还可以从 40 多种内置动作中选择。
映射能否根据应用自动切换?可以。Mouser 支持按应用设置的配置方案,当前台应用切换时会自动切换映射。例如,在 Chrome 和 VS Code 中可以使用不同的按键行为。
它支持 DPI 和 SmartShift 控制吗?支持。它提供从 200 到设备最高值(MX Master 上为 8000)的 DPI 滑块,并带有快捷预设,还可以切换罗技 SmartShift 的棘轮/自由滚动模式,这两项都可以绑定到按键上。
如果鼠标断开后重新连接,会发生什么?Mouser 会自动检测断电重启和蓝牙重新连接,无需重启即可重新绑定 HID++ 和操作系统的鼠标钩子,并且每次重新连接后都会重新应用 SmartShift 设置。
Creator
TomBadash
Size
9.1 MB
Stars
5.3K
Age
7mo
Commits · 90 Days