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
BOLT12 Lightning Address Format

BOLT12 Address Support (DRAFT!) Inspired by the awesome lightningaddress.com, except for BOLT12: Supports BOLT12 Allows BOLT12 vendor string authentic

Rusty Russell 28 Sep 14, 2022
Tool to produce system call tables from Linux source code.

Syscalls Tool to generate system call tables from the linux source tree. Example The following will produce a markdown (.md) file containing the table

7 Jul 30, 2022
EVE-NG tools, A Utility to make operations with EVE-NG more friendly.

EVE-NG tools, A Utility to make operations with EVE-NG more friendly. Also it support different snapshot operations with same style as Libvirt/KVM

Bassem Aly 8 Jan 05, 2023
腾讯云轻量服务流量超出限制自动关机

LightHouse_Automatic_Shutdown 腾讯云轻量服务流量超出限制自动关机

132 Dec 14, 2022
async parser for JET

This project is mainly aims to provide an async parsing option for NTDS.dit database file for obtaining user secrets.

15 Mar 08, 2022
This tool analyzes the json files generated by stream-lnd-htlcs to find hidden channel demand.

analyze_lnd_htlc Introduction Rebalancing channels is an important part of running a Lightning Network node. While it would be great if all channels c

Marimox 4 Dec 08, 2022
About Library for extract infomation from thai personal identity card.

ThaiPersonalCardExtract Library for extract infomation from thai personal identity card. imprement from easyocr and tesseract New Feature v1.3.2 🎁 In

ggafiled 26 Nov 15, 2022
Kanye West Lyrics Generator

aikanye Kanye West Lyrics Generator Python script for generating Kanye West lyrics Put kanye.txt in the same folder as the python script and run "pyth

4 Jan 21, 2022
A python program to find binary, octal and hexadecimal of a decimal.

decimal-converter This little python program can convert a decimal in to, Binary Octal Hexadecimal Needed Python 3 or later or a online python compile

Chandula Janith 0 Nov 27, 2021
Basic loader is a small tool that will help you generating Cloudflare cookies

Basic Loader Cloudflare cookies loader This tool may help some people getting valide cloudflare cookies Installation 🔌 : pip install -r requirements.

IHateTomLrge 8 Mar 30, 2022
Dill_tils is a package that has my commonly used functions inside it for ease of use.

DilllonB07 Utilities Dill_tils is a package that has my commonly used functions inside it for ease of use. Installation Anyone can use this package by

Dillon Barnes 2 Dec 05, 2021
Display your calendar on the wallpaper.

wallCal Have your calendar appear as the wallpaper. disclaimer Use at your own risk. Don't blame me if you miss a meeting :-) Some parts of the script

7 Jun 14, 2022
Genart - Generate random art to sell as nfts

Genart - Generate random art to sell as nfts Usage git clone

Will 13 Mar 17, 2022
Dynamic key remapper for Wayland Window System, especially for Sway

wayremap Dynamic keyboard remapper for Wayland. It works on both X Window Manager and Wayland, but focused on Wayland as it intercepts evdev input and

Kay Gosho 50 Nov 29, 2022
Python script to launch burp scans automatically

SimpleAutoBurp Python script that takes a config.json file as config and uses Burp Suite Pro to scan a list of websites.

Adan Álvarez 26 Jul 18, 2022
Build capture utility for Linux

CX-BUILD Compilation Database alternative Build Prerequisite the CXBUILD uses linux system call trace utility called strace which was customized. So I

GLaDOS (G? L? Automatic Debug Operation System) 3 Nov 03, 2022
A python mathematics module

A python mathematics module

Fayas Noushad 4 Nov 28, 2021
Modest utility collection for development with AIOHTTP framework.

aiohttp-things Modest utility collection for development with AIOHTTP framework. Documentation https://aiohttp-things.readthedocs.io Installation Inst

Ruslan Ilyasovich Gilfanov 0 Dec 11, 2022
This is Cool Utility tools that you can use in python.

This is Cool Utility tools that you can use in python. There are a few tools that you might find very useful, you can use this on pretty much any project and some utils might help you a lot and save

Senarc Studios 6 Apr 18, 2022
ULID implementation for Python

What is this? This is a port of the original JavaScript ULID implementation to Python. A ULID is a universally unique lexicographically sortable ident

Martin Domke 158 Jan 04, 2023