在 Linux 上使用 libinput 驱动的多点触控手势
Fusuma is a powerful tool designed to enable multitouch gesture recognition on Linux, providing intuitive operations for users. By utilizing gestures like swipes and pinches on laptops and devices with touchpads, you can create a more efficient working environment.
襖(Fusuma) means sliding door used to partition off rooms in a Japanese house.
Enhance your Linux experience by evolving your interaction with Fusuma!
IMPORTANT: You MUST be a member of the INPUT group to read touchpad by Fusuma.
sudo gpasswd -a $USER input
Then, You apply the change with no logout or reboot.
newgrp input
IMPORTANT: This makes /dev/input/ readable, so if that's an issue for you for some reason (like for privacy- or security concerns etc. or if it causes other parts of your OS to misbehave), consider this your heads-up.
You need libinput release 1.0 or later.
sudo apt-get install libinput-tools
Fusuma runs in Ruby, so you must install it first.
sudo apt-get install ruby
sudo gem install fusuma
For sending shortcuts:
sudo apt-get install xdotool
For Arch Based Distros (Manjaro, Arch) You need libinput release 1.0 or later. This is most probably installed by default on Manjaro
sudo pacman -Syu libinput-tools
Fusuma runs in Ruby, so you must install it first.
sudo pacman -Syu ruby
Note: By default in Arch Linux, when running gem, gems are installed per-user (into ~/.gem/ruby/), instead of system-wide (into /usr/lib/ruby/gems/). This is considered the best way to manage gems on Arch, because otherwise they might interfere with gems installed by Pacman. (From Arch Wiki)
To install gems system-wide, see any of the methods listed on Arch Wiki
sudo gem install fusuma
For sending shortcuts:
sudo pacman -Syu xdotool
For the truly lazy people: As with pretty much anything else available as Open-Source-Software, you can install Fusuma via a package from the AUR. The package you would want is called ruby-fusuma.
Please keep in mind that this community-built package is NOT officially supported here and while it might do the job, it is not the intended way to install.
Installing Fusuma this way means that if things do not work as intended during or after the installation, you are on your own.
So please do not bombard the Issues-Page here on Github if Fusuma isn't working correctly after installing it via the AUR.
Fusuma's plugins as listed below here in this Readme can be installed as optional dependencies also via the AUR, namescheme being ruby-fusuma-replacewithnameofplugin.
You need libinput release 1.0 or later.
sudo dnf install libinput
Fusuma runs in Ruby, so you must install it first.
sudo dnf install ruby
sudo gem install fusuma
For sending shortcuts:
sudo dnf install xdotool
Ensure the touchpad events are being sent to the GNOME desktop by running the following command:
gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
fusuma
sudo gem update fusuma
You can customize the settings for gestures to put and edit ~/.config/fusuma/config.yml.
NOTE: You will need to create the ~/.config/fusuma directory if it doesn't exist yet.
mkdir -p ~/.config/fusuma # create config directory
nano ~/.config/fusuma/config.yml # edit config file.
3:, 4: fingersleft:, right:, up:, down: directionsbegin:, update:, end: events2:, 3:, 4: fingersin:, out: directionsbegin:, update:, end: events2:, 3:, 4: fingersclockwise:,counterclockwise: directionsbegin:, update:, end: events1:, 2:, 3:, 4: fingersbegin:, end:, cancelled: events# character.https://github.com/iberianpig/fusuma/wiki/Ubuntu
…
The following wiki pages can be edited by everyone.
If you have a nice configuration, please share ~/.config/fusuma/config.yml with everyone.
if command: properties are blank, the swipe/pinch/hold doesn't execute command.
threshold: is sensitivity to swipe/pinch/hold. Default value is 1.
If the swipe's threshold is 0.5, shorten swipe-length by half.
interval: is delay between swipes/pinches/hold. Default value is 1.
If the swipe's interval is 0.5, shorten swipe-interval by half to recognize a next swipe.
threshold: / interval: settings…
There are three priorities of threshold: and interval:.
The individual threshold: and interval: settings (under "direction") have a higher priority than the global one (under "root")
command: property for assigning commandsOn fusuma version 0.4 command: property is available!
You can assign any command each gestures.
shortcut: property is deprecated, it was removed on fusuma version 1.0.
You need to replace to command: property.
swipe:
3:
left:
- shortcut: 'alt+Left'
+ command: 'xdotool key alt+Left'
right:
- shortcut: 'alt+Right'
+ command: 'xdotool key alt+Right'
NOTE: xdotool has some issues
xte
sudo apt install xautomation-c, --config=path/to/file : Use an alternative config file-d, --daemon : Daemonize process-l, --list-devices : List available devices-v, --verbose : Show details about the results of running fusuma--version : Show fusuma version--log-file=path/to/file : Set path of log fileSet the following options to recognize multi-touch gestures only for the specified touchpad device.
plugin:
filters:
libinput_device_filter:
keep_device_names:
- "BUILT-IN TOUCHPAD NAME"
- "EXTERNAL TOUCHPAD NAME"
which fusumagnome-session-properties-d option at the end of the command input fieldwhich fusumafusuma.desktop in the ~/.config/autostart/ directory.fusuma.desktop file:[Desktop Entry]
Name=fusuma
Comment=run fusuma
Exec={path_to_fusuma} -d --log=/tmp/fusuma.log
Icon=input-touchpad
X-GNOME-Autostart-enabled=true
Type=Application
Replace {path_to_fusuma} with the path obtained from which fusuma.
4. Save the file and ensure its permissions are correctly set to be executable.
5. Restart your system or session to verify that fusuma starts automatically.
Useful when you want fusuma to be supervised by systemd (auto-restart on failure, journal-based logs, start/stop with systemctl --user).
which fusuma~/.config/systemd/user/fusuma.service with the following content. Replace {path_to_fusuma} with the path from step 1.[Unit]
Description=Fusuma (multitouch gesture recognizer)
Documentation=https://github.com/iberianpig/fusuma
PartOf=graphical-session.target
After=graphical-session.target
[Service]
Type=simple
ExecStart={path_to_fusuma}
Restart=on-failure
RestartSec=3
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=graphical-session.target
systemctl --user daemon-reload
systemctl --user enable --now fusuma.service
systemctl --user status fusuma.service
journalctl --user -u fusuma.service -f
Notes:
-d / --daemon; systemd manages the process itself, so fusuma should run in the foreground (Type=simple).input group (see Grant permission to read the touchpad device).graphical-session.target is started by your desktop session manager. If the service does not start at login, your session may not pull the target in — replace both graphical-session.target lines with default.target, or start the service manually with systemctl --user start fusuma.service.fusuma exits with code 1 on SIGTERM
Update to 2.3.0, strange behaviour on Wayland
hold threshold not working
Limit begin: and end: to swiping in specific directions
[Question]is it usable for touchscreen?
Mouse Left & Right click hold not usable with hold:1 enabled
hold-drag gesture
Can fusuma use flatpak: `device=input|all` permission instead of requiring `input` group?
Tap & Drag (Retain Tap Threshold When Finger Lifted)
[Feature request] Slant(diagonal) swiping gestures