Fusuma
Multitouch gestures with libinput driver on Linux
Install / Use
/learn @iberianpig/FusumaREADME
Fusuma
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.
Features
- Easy Installation: Easy to install via RubyGems.
- Flexible Configuration: Customize gestures and actions freely in YAML file format.
- Sensitivity Settings: Fine-tune gesture recognition with adjustable thresholds and intervals to suit your preferences and enhance precision.
- Extension through Plugins: A plugin system allows for additional functionality as needed.
Enhance your Linux experience by evolving your interaction with Fusuma!
Installation
Grant permission to read the touchpad device
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.
For Debian Based Distros (Ubuntu, Debian, Mint, Pop!_OS)
1. Install libinput-tools
You need libinput release 1.0 or later.
sudo apt-get install libinput-tools
2. Install Ruby
Fusuma runs in Ruby, so you must install it first.
sudo apt-get install ruby
3. Install Fusuma
sudo gem install fusuma
4. Install xdotool (optional)
For sending shortcuts:
sudo apt-get install xdotool
</details>
<details>
<summary> For Arch Based Distros (Manjaro, Arch) </summary>
For Arch Based Distros (Manjaro, Arch)
1. Install libinput.
You need libinput release 1.0 or later. This is most probably installed by default on Manjaro
sudo pacman -Syu libinput-tools
2. Install Ruby
Fusuma runs in Ruby, so you must install it first.
sudo pacman -Syu ruby
3. Install Fusuma
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
4. Install xdotool (optional)
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.
For Fedora
1. Install libinput-tools
You need libinput release 1.0 or later.
sudo dnf install libinput
2. Install Ruby
Fusuma runs in Ruby, so you must install it first.
sudo dnf install ruby
3. Install Fusuma
sudo gem install fusuma
4. Install xdotool (optional)
For sending shortcuts:
sudo dnf install xdotool
</details>
Touchpad not working in GNOME
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
Usage
fusuma
Update
sudo gem update fusuma
Customize Gesture Mapping
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.
Available gestures
swipe:
- support
3:,4:fingers - support
left:,right:,up:,down:directions - support
begin:,update:,end:events
pinch:
- support
2:,3:,4:fingers - support
in:,out:directions - support
begin:,update:,end:events
rotate:
- support
2:,3:,4:fingers - support
clockwise:,counterclockwise:directions - support
begin:,update:,end:events
hold:
- require libinput version 1.19.0 or later
- support
1:,2:,3:,4:fingers - support
begin:,end:,cancelled:events
About YAML Basic Syntax
- Comments in YAML begins with the
#character. - Comments must be separated from other tokens by whitespaces.
- Indentation of whitespace is used to denote structure.
- Tabs are not included as indentation for YAML files.
Example: Gesture Mapping for Ubuntu
https://github.com/iberianpig/fusuma/wiki/Ubuntu
swipe:
3:
left:
command: "xdotool key alt+Right" # History forward
right:
command: "xdotool key alt+Left" # History back
up:
command: "xdotool key super" # Activity
down:
command: "xdotool key super" # Activity
4:
left:
command: "xdotool key ctrl+alt+Down" # Switch to next workspace
right:
command: "xdotool key ctrl+alt+Up" # Switch to previous workspace
up:
command: "xdotool key ctrl+alt+Down" # Switch to next workspace
down:
command: "xdotool key ctrl+alt+Up" # Switch to previous workspace
pinch:
in:
command: "xdotool keydown ctrl click 4 keyup ctrl" # Zoom in
out:
command: "xdotool keydown ctrl click 5 keyup ctrl" # Zoom out
hold:
4:
command: "xdotool key super" # Activity
More Example of config.yml
The following wiki pages can be edited by everyone.
- Ubuntu
- elementary OS
- i3
- KDE to mimic MacOS
- Pop!_OS with Cinnamon
- Pop!_OS Default Gnome
- Ubuntu OS to mimic Mac a little
- 3 fingers Drag (OS X Style)
- 3 fingers Alt Tab Switcher(Windows Style)
If you have a nice configuration, please share ~/.config/fusuma/config.yml with everyone.
Threshold and Interval
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.
Example of threshold: / interval: settings
swipe:
3:
left:
command: 'xdotool key alt+Right' # threshold: 0.5, interval: 0.75
threshold: 0.5
right:
command: 'xdotool key alt+Left' # threshold: 0.5, interval: 0.75
threshold: 0.5
up:
command: 'xdotool key super' # threshold: 1, interval: 0.75
down:
command: 'xdotool key super' # threshold: 1, interval: 0.75
pinch:
2:
in:
command: "xdotool keydown ctrl click 4 keyup ctrl" # threshold: 0.5, interval: 0.5
out:
command: "xdotool keydown ctrl click 5 keyup ctrl" # threshold: 0.5, interval: 0.5
threshold:
pinch: 0.5
interval:
swipe: 0.75
pinch: 0.5
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")
- child elements in the direction (left/right/down/up → threshold/interval)
- root child elements (threshold/interval → swipe/pinch/hold)
- default value (= 1)
command: property for assigning commands
On 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'
About xdotool
- xdotool manual (https://github.com/jordansissel/xdotool/blob/master/xdotool.pod)
- Available keys' hint (https://github.com/jordansissel/xdotool/issues/212#issuecomment-406156157)
**NOTE: xdotool ha
