{"id":16405599,"url":"https://github.com/aecsocket/fukomaster","last_synced_at":"2026-03-05T10:33:10.401Z","repository":{"id":246785468,"uuid":"822172741","full_name":"aecsocket/fukomaster","owner":"aecsocket","description":"Simulate a trackpad with your physical mouse","archived":false,"fork":false,"pushed_at":"2025-05-12T09:30:04.000Z","size":7517,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-12T10:43:47.460Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aecsocket.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-30T13:36:23.000Z","updated_at":"2025-05-12T09:30:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"6f957b74-1d49-4b89-bee9-66a1d0344311","html_url":"https://github.com/aecsocket/fukomaster","commit_stats":null,"previous_names":["aecsocket/fukomaster"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/aecsocket/fukomaster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aecsocket%2Ffukomaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aecsocket%2Ffukomaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aecsocket%2Ffukomaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aecsocket%2Ffukomaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aecsocket","download_url":"https://codeload.github.com/aecsocket/fukomaster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aecsocket%2Ffukomaster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30119453,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T09:35:22.236Z","status":"ssl_error","status_checked_at":"2026-03-05T09:35:20.028Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T06:06:38.476Z","updated_at":"2026-03-05T10:33:10.362Z","avatar_url":"https://github.com/aecsocket.png","language":"Rust","readme":"# `fukomaster`\n\nSimulate a trackpad with your physical mouse.\n\n\u003chttps://github.com/aecsocket/fukomaster/assets/43144841/e3c5d35a-5a9b-4712-bc81-c43085fff9a8\u003e\n\n\u003ccenter\u003e\n\n*Using fukomaster with an MX Master 3S on GNOME with the\n[PaperWM](https://github.com/paperwm/PaperWM) tiling WM extension*\n\n\u003c/center\u003e\n\n## Motivation\n\nMice like the [MX Master 3S] have a dedicated gesture button which can be used to activate desktop\nactions. On Windows, this allows you to do useful functions like switch between workspaces with\na flick of the mouse. However, Linux has much worse support for these gestures.\n\nTools like [Solaar] allow you to assign actions to the gesture button using rules, which you can use\nto switch workspaces. For example, a rule like \"on mouse gesture right -\u003e press keybind\n`Super+Right`\" will press the `Super+Right` keybind when you perform a right swipe, and if your WM\nis configured to interpret `Super+Right` as \"switch to the next workspace\", this will change the\nworkspace.\n\nHowever, WMs like KDE's `kwin` and GNOME's `mutter` have an even nicer tool for switching workspaces\nin this gesture manner: the three-finger swipe on the trackpad. If you press down on a trackpad with\nthree fingers and start swiping left/right, the desktop will swipe **smoothly** in the direction\nthat you swipe - that is, it's not an abrupt change like a keybinding, but a gradual process. The\nmore you swipe, or the faster you swipe, the further the desktop moves to the next workspace.\n\nfukomaster allows you to simulate this behavior by temporarily turning your mouse into a trackpad;\nstarting a three-finger swipe (or however many you have configured); then converting your mouse\nmovements into finger movements on the virtual trackpad.\n\nNote that this doesn't just work with switching workspaces - you can use trackpad gestures for all\nkinds of things, such as swiping right to go back in a web browser. You are, however, limited to the\nfact that all of your virtual fingers will be moving in the same direction at the same speed, so you\ncan't, for example, simulate a pinch-and-zoom.\n\n## Usage\n\nTested on:\n- [x] Wayland\n  - [x] GNOME 46\n- [ ] Xorg\n  - TODO\n\nThis tool must be run as root, since it needs to read raw mouse inputs from your physical mouse.\n\n**If using [Solaar],** the *Key/Button Diversion* for the *Mouse Gesture Button* must be set to\n*Regular*, so that this tool can read the mouse gesture button being pressed/released.\n\nThis tool uses `evdev`'s grab functionality, which allows a process to temporarily lock a device's\ninputs so that only that process can consume them, and other processes do not read the events.\n**This may cause some issues with other processes which also grab!**\n\nThis tool is very customizable - see the `--help` for all the command line flags.\n\n### Packages\n\nTODO - probably need to package this as a systemd service. Could upload to AUR?\n\n### Compile from source\n\n```bash\ncargo build\nsudo target/debug/fukomaster\n```\n\nTo enable logging, use `sudo -E` to pass in the `RUST_LOG` env var:\n\n```bash\nRUST_LOG=trace sudo -E target/debug/fukomaster\n```\n\n## Etymology\n\n- `master`: because I wrote it for my MX Master 3S\n- `fuko`: ヒトデです！\n\n[MX Master 3S]: https://www.logitech.com/en-eu/products/mice/mx-master-3s.910-006559.html\n[Solaar]: https://pwr-solaar.github.io/Solaar/\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faecsocket%2Ffukomaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faecsocket%2Ffukomaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faecsocket%2Ffukomaster/lists"}