The editor was a process-wide singleton: opening it on a different device replaced the content in the existing window. A user with two perkey-capable devices (e.g. a G915 keyboard and a G502 mouse) had to context-switch between them, losing any in-progress edits on the device they switched away from. Replace the singleton with a `_dialogs` dict in dialog.py keyed by a stable per-device identifier. control.py builds the key from `device.unitId` first — read from the device firmware via the DeviceInformation feature, the same regardless of whether the device is currently on a receiver or plugged directly via USB — so the same physical device on different transports shares one dialog instead of opening two windows. Falls back to `serial`, `hid_serial`, `codename`, and finally `id(sink)` for the pathological case where nothing else identifies the device. If the dialog is already open for a given device and `present()` is called with the same sink instance, the window is just raised — no flicker, in-progress interaction state preserved. A different sink under the same key (transport change for the same physical device) rebuilds the window content under the existing dialog slot, so the window position is preserved across transport switches. Closing a window via the WM tears down only that dialog and pops it from the registry; other open editors stay up. As a side cleanup the unused `inset` ScrolledWindow shadow already added in editor.py and the per-device sizing logic in dialog.py remain in place. |
||
|---|---|---|
| .github | ||
| bin | ||
| docs | ||
| lib | ||
| po | ||
| rules.d | ||
| rules.d-uinput | ||
| share | ||
| tests | ||
| tools | ||
| .coveragerc | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .python-version | ||
| CHANGELOG.md | ||
| COPYRIGHT | ||
| LICENSE.txt | ||
| MANIFEST.in | ||
| Makefile | ||
| README.md | ||
| RELEASE.md | ||
| RHEL.md | ||
| Release_Notes.md | ||
| mkdocs.yml | ||
| pyproject.toml | ||
| release.sh | ||
| setup.py | ||
README.md
Solaar
Solaar is a Linux manager for many Logitech keyboards, mice, and other devices that connect wirelessly to a Unifying, Bolt, Lightspeed or Nano receiver as well as many Logitech devices that connect via a USB cable or Bluetooth. Solaar is not a device driver and responds only to special messages from devices that are otherwise ignored by the Linux input system.
More Information - Usage - Capabilities - Rules - Manual Installation - Known Issues
Solaar supports:
- pairing/unpairing of devices with receivers
- configuring device settings
- custom button configuration
- running rules in response to special messages from devices
For more information see the main Solaar documentation page. -
Installation Packages
Up-to-date prebuilt packages are available for some Linux distros (e.g., Fedora) in their standard repositories. If a recent version of Solaar is not available from the standard repositories for your distribution, you can try one of these packages:
- Arch solaar package in the extra repository
- Ubuntu/Kubuntu package in Solaar stable ppa
- NixOS Flake package in Svenum/Solaar-Flake
Solaar is available from some other repositories but may be several versions behind the current version:
- a Debian package, courtesy of Stephen Kitt
- a Ubuntu package is available from universe repository
- a Gentoo package, courtesy of Carlos Silva and Tim Harder
- a Mageia package, courtesy of David Geiger