GitHub - shneeba/logiwebconnect-mirror: Tooling to build an offline mirror of logiwebconnect.com and run it on Linux. Scripts only; no Logitech code or firmware redistributed. · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
shneeba
logiwebconnect-mirror
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>1 Commit<br>1 Commit
capture
capture
.gitignore
.gitignore
LICENSE
LICENSE
README.md
README.md
serve.py
serve.py
serve.sh
serve.sh
View all files
Repository files navigation
logiwebconnect-mirror
Tooling to build an offline copy of logiwebconnect.com, Logitech's<br>browser-based WebHID tool for pairing and updating Unifying/Bolt receivers. Useful if the site ever<br>goes away, and it patches the app to run on Linux (the live site blocks Linux).
Scripts only. No Logitech code, firmware, fonts or images are stored here. The scripts download<br>those from the live site to your own machine. See Legal.
Requirements
Node.js and Python 3.
A Chromium-family browser to use the mirror: Chrome, Chromium or Edge (not Firefox/Safari, no<br>WebHID). On Linux use the Google Chrome .deb, not snap/flatpak (sandbox can block HID).
A Unifying or Bolt receiver to pair against.
Build and run
node capture/fetch-precache.js # download the app + full asset set (from the SW PRECACHE_URLS manifest)<br>node capture/rewrite.js # rewrite URLs, stub telemetry, disable the OS allowlist (Linux)<br>./serve.sh # serve ./mirror at http://localhost:8765
Open http://localhost:8765/ in Chrome and pair. No clicking through the live site is needed (and<br>it's impossible on Linux anyway), so fetch-precache.js reads the service worker's asset manifest<br>and pulls everything directly.
capture.js is an optional Playwright capture for supported OSes (Windows/macOS/ChromeOS), for<br>assets outside the manifest. It needs npm install && npx playwright install chromium.
What rewrite.js does
Cross-origin URLs become local /_ext/... paths.
Telemetry (datapipeline.logitech.io) becomes /_noop/...; serve.py answers those POSTs with 204.
The OS allowlist is disabled. The app blocks Linux even in Chrome; the patch removes the OS check<br>and keeps the real one ("hid" in navigator && "forget" in HIDDevice.prototype), so Firefox and<br>Safari still report unsupported. It's a name-agnostic regex, so it survives re-minification.
serve.py
Static server with SPA history-fallback, so the app's client-side routes (/devices,<br>/select-receiver) don't 404 on a hard navigation. Plain python -m http.server does.
Linux: HID permissions
WebHID can list the receiver but can't open its /dev/hidraw* node without permission<br>(NotAllowedError: Failed to open the device). Grant access for this session:
for h in /sys/class/hidraw/hidraw*; do grep -ql 046D "$h/device/uevent" && echo "/dev/$(basename "$h")"; done<br>sudo chmod a+rw /dev/hidrawN
To make it permanent, add a udev rule (you're usually in plugdev):
echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="046d", MODE="0660", GROUP="plugdev", TAG+="uaccess"' \<br>| sudo tee /etc/udev/rules.d/42-logitech-hidraw-permissions.rules<br>sudo udevadm control --reload-rules && sudo udevadm trigger
Same rule Solaar ships. It only affects Logitech (046d) HID access, not your mouse/keyboard input.
Files
capture/<br>├── fetch-precache.js download app + full asset set (recommended; no deps)<br>├── capture.js optional Playwright capture (supported OS only)<br>├── rewrite.js patch URLs, telemetry, Linux support<br>├── write-mirror.js decode a bulk-fetch dump<br>└── package.json Playwright (only for capture.js)<br>serve.py static server with SPA fallback<br>serve.sh runs serve.py on :8765
mirror/ and capture/url-map.json are generated by the tooling and git-ignored.
Legal
Public domain (The Unlicense), scripts only. No Logitech software,<br>firmware, fonts or trademarks are included; the scripts download them from Logitech's live site to<br>your machine for your own use. Using that material is subject to Logitech's terms and your local<br>law. Not affiliated...