This utility lets you draw using your laptop's touchpad on Linux.

Overview

FingerPaint

This utility lets you draw using your laptop's touchpad on Linux.

Pressing any key or clicking the touchpad will finish the drawing.

Your touchpad will not control the cursor while drawing, though external mice should still work.

It has support for both X11 (all desktop environments), and Wayland (just Gnome at the moment).

Video:

Video

Installation

Ubuntu / Debian

apt install xinput python3-pip python3-tk
pip3 install fingerpaint

Arch / Manjaro

Install fingerpaint via the AUR

Usage examples

# Simple usage
fingerpaint -o painting.png

# Play with style
fingerpaint --dark -o painting.png

# Copy to clipboard (using bash)
fingerpaint --hint=$'Press any key or click to finish drawing\nImage will be copied to clipboard' -o - | xclip -sel clip -t image/png

# Copy to clipboard (using fish)
fingerpaint --hint="Press any key or click to finish drawing"\n"Image will be copied to clipboard" -o - | xclip -sel clip -t image/png

Uses

  • Digitize your signature to sign PDFs
  • Enter complex characters (e.g. Math symbols) or Asian scripts
  • Doodle I guess
Comments
  • Program hangs after closing GUI

    Program hangs after closing GUI

    I noticed that the script doesn't end after closing the GUI using the keyboard. Without looking in detail I think this could be because keyboard events are not caught in this line, only using the mouse buttons works: https://github.com/Wazzaps/fingerpaint/blob/ff7090b4a5a0b999dc75ef687911e8c04299f3f4/fingerpaint/fingerpaint.py#L189-L191

    opened by jhossbach 8
  • TypeError: 'int' object is not subscriptable

    TypeError: 'int' object is not subscriptable

    Hi, when I try to run fingerpaint, I encounter the following issue:

    Traceback (most recent call last):
      File "/home/<user>/.local/bin/fingerpaint", line 8, in <module>
        sys.exit(cli())
      File "/home/<user>/.local/lib/python3.8/site-packages/fingerpaint/fingerpaint.py", line 288, in cli
        main(args)
      File "/home/<user>/.local/lib/python3.8/site-packages/fingerpaint/fingerpaint.py", line 207, in main
        make_ui(handler_loop(), scaled, devname, args)
      File "/home/<user>/.local/lib/python3.8/site-packages/fingerpaint/fingerpaint.py", line 86, in make_ui
        image_canvas.line(
      File "/usr/lib/python3/dist-packages/PIL/ImageDraw.py", line 161, in line
        angles = [
      File "/usr/lib/python3/dist-packages/PIL/ImageDraw.py", line 162, in <listcomp>
        math.degrees(math.atan2(end[0] - start[0], start[1] - end[1]))
    TypeError: 'int' object is not subscriptable
    

    Touchpad used is SYNA2393:00 06CB:7A13, OS is Ubuntu 20.04 with GNOME 3.36.8.

    opened by biancofla 5
  • AttributeError: 'InputDevice' object has no attribute 'absinfo'

    AttributeError: 'InputDevice' object has no attribute 'absinfo'

    When I try to run fingerpaint, I get this error:

    Using touchpad: XXXXXXX Touchpad
    Traceback (most recent call last):
      File "/home/XXX/.local/bin/fingerpaint", line 8, in <module>
        sys.exit(cli())
      File "/home/XXX/.local/lib/python3.9/site-packages/fingerpaint/fingerpaint.py", line 288, in cli
        main(args)
      File "/home/XXX/.local/lib/python3.9/site-packages/fingerpaint/fingerpaint.py", line 165, in main
        x_absinfo = touchpad.absinfo(evdev.ecodes.ABS_X)
    AttributeError: 'InputDevice' object has no attribute 'absinfo'
    
    

    I am running Fedora 34, with GNOME DE. (I changed some personal information for XXX).

    opened by caiocvsilva 5
  • Logitech K400 Plus trackpad not recognized

    Logitech K400 Plus trackpad not recognized

    I have a Logitech K400 Plus keyboard.

    It has a trackpad and left/right buttons built into in

    It interfaces to the computer via Logitech Unifying Receiver.

    Fingerpaint does not recognize it as a trackpad.

    Is there a way to inform Fingerpaint to use this trackpad?

    enhancement 
    opened by johnblommers 4
  • State of Wayland support

    State of Wayland support

    I am wondering whether Wayland is supported now, is xinput still needed? There was an issue on the AUR: https://aur.archlinux.org/packages/fingerpaint-wayland

    https://github.com/Wazzaps/fingerpaint/blob/12b865681dbe4b5602bc052e9f6dd7d515554952/fingerpaint/fingerpaint.py#L298-L305

    opened by jhossbach 2
  • TypeError: line() got an unexpected keyword argument 'joint'

    TypeError: line() got an unexpected keyword argument 'joint'

    I get this error when I tap on the touchpad:

    $ fingerpaint -o test.png Using touchpad: SYNA3082:00 06CB:8265 Touchpad Traceback (most recent call last): File "$HOME/.local/bin/fingerpaint", line 8, in sys.exit(cli()) File "$HOME/.local/lib/python3.6/site-packages/fingerpaint/fingerpaint.py", line 288, in cli main(args) File "$HOME/.local/lib/python3.6/site-packages/fingerpaint/fingerpaint.py", line 207, in main make_ui(handler_loop(), scaled, devname, args) File "$HOME/.local/lib/python3.6/site-packages/fingerpaint/fingerpaint.py", line 89, in make_ui width=int(args.line_thickness * aa_factor), joint='curve', fill=(0, 0, 0) TypeError: line() got an unexpected keyword argument 'joint'

    opened by AlfonsoGangemi 2
  • ability to go fullscreen

    ability to go fullscreen

    right now fingerpaint opens up in small windows which is sort of limited in visual sense when we want to doodle. It would be nice to have a maximize window option

    opened by Bhupesh-V 1
  • Loosen dependencies

    Loosen dependencies

    Tightening the dependencies in your setup.py makes it hard for some packaging managers (pacman) to install the package. It is also not necessary to keep a specific version. I tested it using the newer version Pillow v8.3.1

    Also, (for me at least) there seems to be some issue with the Arch package python-pyudev giving the wrong version which also messes with this requirement.

    Feel free to just cherry-pick from https://github.com/jhossbach/fingerpaint/commit/9afe96d339f59353a4e7b4b22353e9ca331c2074.

    opened by jhossbach 1
  • Release Tag (v1.1)

    Release Tag (v1.1)

    Hey there, it might be a good idea to create a version tag / release for the package. I can pick up from there and create an AUR package.

    Originally posted by @jhossbach in https://github.com/Wazzaps/fingerpaint/discussions/1#discussioncomment-1142541

    opened by jhossbach 1
  • fingerpaint and fingerpaint-wayland AUR packages are the same?

    fingerpaint and fingerpaint-wayland AUR packages are the same?

    I checked PKGBUILDs of both the packages, and they both seem the same. Maybe I guess, earlier they were separate? If they are same now, as both wayland and xorg functionality is in same code, please consider making a request at AUR for deletion to avoid any confusion for some people who use both wayland and xorg on their systems (like me, i generally use wayland, but sometimes have to switch to xorg, when i am somewhere where people may use my laptop)

    documentation 
    opened by heymisphere 1
  • Support for wlroots based compositors

    Support for wlroots based compositors

    Besides GNOME and KDE, wlroots (wlr) is the only big thing on wayland right now on which a lot of compositors are based (like sway, hyprland, river). If wlroots is supported, all these compositors would get supported. Any plans for the support for wlr?

    enhancement 
    opened by heymisphere 5
  • Create a Snap package (once Fingerpaint has a save UI)

    Create a Snap package (once Fingerpaint has a save UI)

    For an easy installation, clicking Install at Snap Store in Ubuntu, which is the first Linux distro for many new users now coming to Linux. Solus, KDE Neon, Manjaro, MakuluLinux, Ubuntu MATE, Zorin OS etc. support snapd by default too.

    Request was put up originally to here: https://forum.snapcraft.io/t/fingerpaint-draw-with-touchpad-or-sign-a-signature-easily-only-non-beginner-friendly-installation-available/31234

    enhancement good first issue 
    opened by heidiwenger 1
  • Feature Request:

    Feature Request: "hover" cursor

    This is a great & fun project - thanks for making it. I saw it on OMG! Ubuntu.

    Would you consider implementing a mode where we only see a cursor at the point on the canvas that a touch corresponds to...and then it only draws while holding down a key?

    Thank you!

    enhancement good first issue 
    opened by mdmayfield 0
  • Fingerpaint not working on Manjaro Gnome Wayland

    Fingerpaint not working on Manjaro Gnome Wayland

    I'm using Manjaro Gnome with Wayland and installed the fingerpaint-wayland aur.

    When I use the following command: fingerpaint - o test.png I get the following output:

    Using touchpad: SynPS/2 Synaptics TouchPad Unexpected touchpad state: "", are you using Gnome?

    opened by hahihohehe 11
Releases(v1.2.6)
Owner
Wazzaps
“heuristic” is a word grownups use when they’re about to protect your life’s savings using cryptography they can’t prove secure.
Wazzaps
A python package containing all the basic functions and classes for python. From simple addition to advanced file encryption.

A python package containing all the basic functions and classes for python. From simple addition to advanced file encryption.

PyBash 11 May 22, 2022
This is a python table of data implementation with styles, colors

Table This is a python table of data implementation with styles, colors Example Table adapts to the lack of data Lambda color features Full power of l

Урядов Алексей 5 Nov 09, 2021
'ToolBurnt' A Set Of Tools In One Place =}

'ToolBurnt' A Set Of Tools In One Place =}

MasterBurnt 5 Sep 10, 2022
Macro recording and metaprogramming in Python

macro-kit is a package for efficient macro recording and metaprogramming in Python using abstract syntax tree (AST).

8 Aug 31, 2022
Simple web index to use bloom filter for Pwned Passwords

pwbloom Simple web index to use bloom filter for Pwned Passwords The index.py runs a simple CGI web service checking passwords with a bloom filter for

Hanno Böck 4 Nov 23, 2021
Python HTTP Agent Parser

Features Fast Detects OS and Browser. Does not aim to be a full featured agent parser Will not turn into django-httpagentparser ;) Usage import ht

Shekhar 213 Dec 06, 2022
Extract XML from the OS X dictionaries.

Extract XML from the OS X dictionaries.

Joshua Olson 13 Dec 11, 2022
Python type-checker written in Rust

pravda Python type-checker written in Rust Features Fully typed with annotations and checked with mypy, PEP561 compatible Add yours! Installation pip

wemake.services 31 Oct 21, 2022
Cleaning-utils - a collection of small Python functions and classes which make cleaning pipelines shorter and easier

cleaning-utils [] [] [] cleaning-utils is a collection of small Python functions

4 Aug 31, 2022
Retrying is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything.

Retrying Retrying is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just

Ray Holder 1.9k Dec 29, 2022
A simple package for handling variables in string.

A simple package for handling string variables. Welcome! This is a simple package for handling variables in string, You can add or remove variables wi

1 Dec 31, 2021
a demo show how to dump lldb info to ida.

用一个demo来聊聊动态trace 这个仓库能做什么? 帮助理解动态trace的思想。仓库内的demo,可操作,可实践。 动态trace核心思想: 动态记录一个函数内每一条指令的执行中产生的信息,并导入IDA,用来弥补IDA等静态分析工具的不足。 反编译看一下 先clone仓库,把hellolldb

25 Nov 28, 2022
Pampy: The Pattern Matching for Python you always dreamed of.

Pampy: Pattern Matching for Python Pampy is pretty small (150 lines), reasonably fast, and often makes your code more readable and hence easier to rea

Claudio Santini 3.5k Jan 06, 2023
🚧Useful shortcuts for simple task on windows

Windows Manager A tool containg useful utilities for performing simple shortcut tasks on Windows 10 OS. Features Lit Up - Turns up screen brightness t

Olawale Oyeyipo 0 Mar 24, 2022
Python Yeelight YLKG07YL/YLKG08YL dimmer handler

With this class you can receive, decrypt and handle Yeelight YLKG07YL/YLKG08YL dimmer bluetooth notifications in your python code.

12 Dec 26, 2022
A python app which aggregates and splits costs from multiple public cloud providers into a csv

Cloud Billing This project aggregates the costs public cloud resources by accounts, services and tags by importing the invoices from public cloud prov

1 Oct 04, 2022
DUQ is a python package for working with physical Dimensions, Units, and Quantities.

DUQ is a python package for working with physical Dimensions, Units, and Quantities.

2 Nov 02, 2022
A Program that generates and checks Stripe keys 24x7.

A Program that generates and checks Stripe keys 24x7. This was made only for Educational Purposes, I'm not responsible for the damages cause by you

iNaveen 18 Dec 17, 2022
a tool for annotating table

table_annotate_tool a tool for annotating table motivated by wiki2bio,we create a tool to annoate all types of tables,this tool can annotate a table w

wisdom under lemon trees 4 Sep 23, 2021
Python utility for discovering interesting CFPreferences values on iDevices

Description Simple utility to search for interesting preferences in iDevices. Installation python3 -m pip install -U --user cfprefsmon Example In this

12 Aug 19, 2022