node input watcher
Find a file
2022-03-03 03:35:34 +01:00
.vscode introduced global config variable and optimized application start 2022-02-20 21:38:27 +01:00
libs added most of the combo functionality 2022-03-03 03:35:34 +01:00
.gitignore initial commit 2022-02-15 04:33:19 +01:00
config.json added most of the combo functionality 2022-03-03 03:35:34 +01:00
ninwa.js added config parameter 'restart' and added functionality to restart watchers on close 2022-02-24 00:07:57 +01:00
ninwa.service modified systemd-service and readme accordingly 2022-02-19 02:32:48 +01:00
package.json optimized some stuff, sanitized config, set defaults, etc. 2022-02-16 02:08:21 +01:00
README.md added most of the combo functionality 2022-03-03 03:35:34 +01:00

ninwa

node input watcher

requirements

  • node.js
  • yarn
  • evtest

setup

  • clone the project
    git clone https://git.velvettear.de/velvettear/ninwa.git

  • enter the project directory
    cd ninwa

  • installed required modules
    yarn install

  • modify config.json according to your needs

  • execute ninwa
    node ninwa.js

systemd

for security reasons it is highly recommended to not run ninwa with root permissions!

  • create a new system user
    useradd -r -s /usr/bin/nologin ninwa

  • symlink the provided systemd-service file and modify it according to your needs
    ln -s /path/to/ninwa/ninwa.service /etc/systemd/system/ninwa.service

  • reload systemd-services
    systemctl daemon-reload

  • enable and start the ninwa as a systemd-service
    systemctl enable --now ninwa

configuration

configuration is done entirely within the file config.json.

log: [object]

  • level: [string] verbosity of the log; either debug, info, warning or error
  • timestamp: [string] format string for the timestamp; review moment.js for further information

socket: [object]

  • location: [string] path to the socket file; defaults to /tmp/ninwa.sock

watchers: [object-array]

  • device: [string] name of or path to an input device; ninwa automatically tries to locate the device in /dev/input and /dev/input/by-id/ if only a name is given
  • restart: [boolean] restart watcher on close
  • grep: [string] pre-filter evtest's output with grep
  • keys: [object-array]
    • key: [string] name of the key
    • type: [string] type of the key event; either keyup, keydown or keyhold
    • delay: [number] time in milliseconds until the key will be registered again (mostly useful for keyhold-events)
    • command: [string] command to execute on key press
    • args: [string-array] arguments to pass to the executed command; variables {{ key }} and {{ type }} used in args will be replaced