Giter VIP home page Giter VIP logo

fusuma's Introduction

Fusuma Gem Version Build Status Coverage Status Inline docs

Fusuma is multitouch gesture recognizer. This gem makes your linux able to recognize swipes or pinchs and assign commands to them.

fusuma_image

襖(Fusuma) means sliding door used to partition off rooms in a Japanese house.

Features

  • Easy installation with RubyGems
  • Defining Gestures and Actions in YAML
  • Sensitivity setting (threshold, interval) for gesture recognition
  • Automatic device addition for reconnecting external touchpads
  • Extension of gesture recognition by plugin system

Installation

1. 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 MUST REBOOT to assign this group.

2. Install libinput-tools

You need libinput release 1.0 or later.

$ sudo apt-get install libinput-tools

3. Install Ruby

Fusuma runs in Ruby, so you must install it first.

$ sudo apt-get install ruby

4. Install Fusuma

$ sudo gem install fusuma

5. Install xdotool (optional)

For sending shortcuts:

$ sudo apt-get install xdotool

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
  • pinch:
    • support 2:, 3:, 4: fingers
    • support in:, out: directions
  • rotate:
    • support 2:, 3:, 4: fingers
    • support clockwise:,counterclockwise: directions

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

More Example of config.yml

The following wiki pages can be edited by everyone.

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 doesn't execute command.

threshold: is sensitivity to swipe/pinch. Default value is 1. If the swipe's threshold is 0.5, shorten swipe-length by half.

interval: is delay between swipes/pinches. 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")

  1. child elements in the direction (left/right/down/up → threshold/interval)
  2. root child elements (threshold/interval → swipe/pinch)
  3. 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

NOTE: xdotool has some issues

Alternatives to xdotool

  • fusuma-plugin-sendkey

    • Emulates keyboard events
    • Low latency
    • Wayland compatible
  • xte

  • ydotool

    • Wayland compatible
    • Needs more maintainers.
    • Requires only replacing xdotool with ydotool in in fusuma conf.

Options

  • -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
  • --device="Device name" : Open the given device only (DEPRECATED)
  • --version : Show fusuma version

Specify touchpads by device name

Set 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"

Autostart (gnome-session-properties)

  1. Check the path where you installed fusuma with $ which fusuma
  2. Open $ gnome-session-properties
  3. Add Fusuma and enter the location where the above path was checked in the command input field
  4. Add the -d option at the end of the command input field

Fusuma Plugins

Following features are provided as plugins.

  • Adding new gestures or combinations
  • Features for specific Linux distributions
  • Setting different gestures per applications

Installation of fusuma plugins

Fusuma plugins are provided with the fusuma-plugin-XXXXX naming convention and hosted on RubyGems.

$ sudo gem install fusuma-plugin-XXXXX

Available plugins

Name About
fusuma-plugin-sendkey Emulates keyboard events
fusuma-plugin-wmctrl Manages Window and Workspace
fusuma-plugin-keypress Detects gestures while pressing multiple keys
fusuma-plugin-tap Detects Tap and Hold gestures

Tutorial Video

Multitouch Touchpad Gestures in Linux with Fusuma
Multitouch Touchpad Gestures in Linux with Fusuma by Eric Adams

Support

I'm a Freelance Engineer in Japan and working on these products after finishing my regular work or on my holidays. Currently, my open-source contribution times is not enough. If you like my work and want to contribute and become a sponsor, I will be able to focus on my projects.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/iberianpig/fusuma. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

fusuma's People

Contributors

iberianpig avatar irq avatar z0rc avatar mattdemarillac avatar dependabot-support avatar epakai avatar mmoraes-rafael avatar rajanpandey avatar ryonakano avatar thomascrha avatar dependabot-preview[bot] avatar joshuatshaffer avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.