update readme for current state of project

This commit is contained in:
Kevin F 2023-03-05 22:29:15 -06:00
parent 5f14fd11d0
commit 1147984f40

View File

@ -1,37 +1,35 @@
# GoSmartKeyboard # GoSmartKeyboard
Copyright 2022 [Kevin Froman](https://chaoswebs.net/) [Licensed under GPLv3](LICENSE.md) Copyright [Kevin Froman](https://chaoswebs.net/) [Licensed under GPLv3](LICENSE.md)
Work in progress Work in progress
# Introduction # Introduction
GoSmartKeyboard is a daemon that allows you to have a more powerful keyboarding experience. It is meant to be used with a secondary device, such as an Android phone or a raspberry pi. GoSmartKeyboard is a daemon that allows you to have a more powerful keyboarding experience. It can be used with a secondary device, such as an Android phone or a raspberry pi, or it can run locally. A seperate client binary is provided that reads from a FIFO (named pipe) and sends the data to the server. This allows you to use any program that can write to a FIFO as a source of keyboard input.
This is done with a simple websocket server meant to accept a single connection, authenticate it, and stream UTF16 characters and send them as key strokes into the window manager. **With a simple daemon like this we can enhance keyboarding with inteligent features.** This is done with a simple websocket server meant to accept a single connection, authenticate it, and stream UTF16 characters and send them as key strokes into the window manager. **With a simple daemon like this we can enhance keyboarding with inteligent features.**
The goal of this particular daemon is not to perfectly emulate a HID, so it may trip up on Windows UAC or game anticheat systems. Be careful with online games, as they may interpret the keystrokes as cheating. I assume if you don't send keystrokes or more accurately than a human you should be fine, but don't blame the software if you get banned.
A client is included that simply connects and authenticates. It is meant to be used with unix philosophy modules, for example a password manager wrapper. A UI could then wrap the client and said modules.
**See [Building.md](Building.md) for instructions on how to build this [literate](https://en.wikipedia.org/wiki/Literate_programming) project.** **See [Building.md](Building.md) for instructions on how to build this [literate](https://en.wikipedia.org/wiki/Literate_programming) project.**
## Why a smart keyboard? ## What can you do with it?
Keyboards have been an essential element of computing since the beginning, however they have not evolved much. Everything has a smart variant, so why not keyboards? Examples of what you can do:
A smart keyboard could, for example, be used for the following:
* Run dictation software on a separate device
* Typical macros * Typical macros
* Buffer typed text before sending it to the client, preventing invalid commands or input. (This would also save some CPU on low power machines, this is how many early teletype systems worked) * Buffer typed text before sending it to the server, preventing invalid commands or input.
* Clever CLI tricks, think `vim` or `cowsay` on your keyboard! * Clever CLI tricks, think `vim` or `cowsay` on your keyboard!
* Isolated password manager * Isolated password manager
* One Time Passwords * One Time Passwords
* Virtual keyboard switch or communicating with multiple daemons at once * Virtual keyboard switch (keyboard multiplexer)
* Easily attach to VMs * Typing things into VMS, or transfering text based files to VMs/servers.
* Text storage, such as configuration or SSH pubkeys * Text storage, such as configuration or SSH pubkeys
* On-the-fly spell checking or translation * On-the-fly spell checking or translation
* On-the-fly encryption (ex: PGP sign every message you type), isolated from the perhaps untrusted computer * On-the-fly encryption (ex: PGP sign every message you type), isolated from the perhaps untrusted computer
@ -44,11 +42,11 @@ Some points about the design of this project:
* Written in go with the [literate](https://en.wikipedia.org/wiki/Literate_programming) tool [srcweave](https://github.com/justinmeiners/srcweave), so this * Written in go with the [literate](https://en.wikipedia.org/wiki/Literate_programming) tool [srcweave](https://github.com/justinmeiners/srcweave), so this
markdown book is actually the source code markdown book is actually the source code
* The project is test-driven
* KISS principle above All * KISS principle above All
* Small and light core * Small and light core
* Advanced features provided via plugins * No dependencies for the core and most features
* Well defined [threat model](ThreatModel.md) * Features (such as described in above section) are implementend as seperate programs, unix style
* Simple [threat model](ThreatModel.md)
# Running # Running
@ -58,7 +56,7 @@ markdown book is actually the source code
`sudo KEYBOARD_TCP_BIND_ADDRESS=0.0 KEYBOARD_TCP_BIND_PORT=8080 ./keyboard` `sudo KEYBOARD_TCP_BIND_ADDRESS=0.0 KEYBOARD_TCP_BIND_PORT=8080 ./keyboard`
# Entrypoint # Server Entrypoint