{"id":23021595,"url":"https://github.com/raupulus/python-keycounter","last_synced_at":"2025-08-14T09:32:59.170Z","repository":{"id":53920204,"uuid":"240191480","full_name":"raupulus/python-keycounter","owner":"raupulus","description":"Herramienta en python 3 para contar la cantidad de teclas que se ha pulsado en un tiempo determinado o sesión. - Este repositorio es un mirror de https://gitlab.com/raupulus/python-keycounter","archived":false,"fork":false,"pushed_at":"2024-10-21T22:22:23.000Z","size":10048,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-22T18:35:23.691Z","etag":null,"topics":["api","keycounter","keylogger","keylogger-keycounter","python","python-keycounter","python3","serial"],"latest_commit_sha":null,"homepage":"https://api.fryntiz.dev","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raupulus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-13T06:20:36.000Z","updated_at":"2024-10-21T22:22:27.000Z","dependencies_parsed_at":"2023-01-27T15:31:31.758Z","dependency_job_id":null,"html_url":"https://github.com/raupulus/python-keycounter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fpython-keycounter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fpython-keycounter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fpython-keycounter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fpython-keycounter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raupulus","download_url":"https://codeload.github.com/raupulus/python-keycounter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229816378,"owners_count":18128563,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","keycounter","keylogger","keylogger-keycounter","python","python-keycounter","python3","serial"],"created_at":"2024-12-15T12:18:41.159Z","updated_at":"2024-12-15T12:18:41.698Z","avatar_url":"https://github.com/raupulus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Python KeyCounter (Contador de Pulsaciones para Linux y MacOS)\n\nHerramienta en python 3 para contar la cantidad de teclas que se ha pulsado en \nun tiempo determinado o sesión.\n\n## Objetivos\n\nLos objetivos de estos scripts es contar las pulsaciones de teclas, mostrarlo\npor una pantalla y en la barra de navegación teniendo la posibilidad de\nsubirlos a una API desde un caché temporal en una db sqlite que se crea bajo\nel mismo directorio del script.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/1.png\" alt=\"Imagen del Proyecto 1\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/2.jpeg\" alt=\"Imagen del Proyecto 2\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/3.jpeg\" alt=\"Imagen del Proyecto 3\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/4.jpg\" alt=\"Imagen del Proyecto 4\" height=\"150\"\u003e\n\u003c/p\u003e\n\n## Observaciones\n\nSe necesita python 3.12 para funcionar correctamente.\n\n### Visualización de datos en pantalla serial UART\n\nExiste la posibilidad de enviar datos a una pantalla (o dispositivo) por\nserial al realizar pulsaciones.\n\nEn este momento solo he planteado la aplicación para utilizar la única pantalla\nque encontré por internet asequible por pocos euros.\n\nSi pretendes utilizar otra pantalla distinta sería necesario adaptar la clase\nLCDUart.py manteniendo el mismo nombre para los métodos actuales.\n\nTambién puedes crear un modelo para tu propia pantalla y añadir una nueva\nvariable de entorno al **.env** para posteriormente controlar su carga con\nuna condición if.\n\n### Unix Socket Server (Socket Unix)\n\nSe crea un servidor socket unix en **/var/run/keycounter.socket** al que se le\npueden hacer peticiones para obtener las estadísticas de pulsaciones.\n\nEn el archivo para debug ** ./Debug/client_socket.py** se puede encontrar un\nejemplo del modo para conectar desde otras aplicaciones obteniendo los datos\ndel momento en el que se hayan pedido.\n\nSe crea un socket UNIX que permite acceder a los datos desde otras\naplicaciones y desde el propio sistema operativo a través de un socket que\nserá creado en la ruta: **/var/run/keycounter.socket**\n\nEs posible modificar el comportamiento o ruta del socket desde el modelo Socket.py\n\nEn el directorio de debug tienes algún ejemplo/prueba de como fuí depurando\npara lograr afinar esta parte.\n\nYo personalmente utilizo esto para mostrar la cantidad de pulsación en mi barra\nde navegación **i3pystatus** para el entorno gráfico o más bien gestores de\nventanas como **i3wm** o **sway** que son los que suelo utilizar.\n\nPuedes comprobar la información del socket si funciona correctamente usando\nel siguiente comando:\n\n```bash\nnc -U /var/run/keycounter.socket\n```\n\n![Imagen del Proyecto](docs/images/socket_unix1.png \"Imagen del Proyecto 1\")\n\n### Base de datos SQLite para Caché\n\nLos registros serán almacenados temporalmente en un base de datos local\nsituada en el mismo directorio del script llamada **keycounter.db** que se\ngestiona desde el modelo **DbConnection.py** representando la conexión con\ndicha base de datos.\n\nPara la base de datos se utiliza el ORM **SQLAlchemy**\n\n## Instalando (En MacOS)\n\nPara macos tenemos que instalar unos paquetes\n\n```\nsudo python3.12 -m pip install serial mouse keyboard sqlalchemy --break-system-packages\n```\n\n## Instalando (En Debian)\n\nEsta herramienta solo la he llegado a probar en Debian GNU/Linux, también\nde forma parcial en fedora.\n\n### Dependencias\n\nA continuación señalo las depenedencias que he necesitado para lograr\nejecutar con éxito esta herramienta.\n\nPuede ser que necesite alguna más y no me haya dado cuenta de ello al tenerla\npreviamente instalada de alguna otra aplicación en mi sistema.\n\n#### Con el gestor de paquetes de python, pip\n\nDependencias que instalo desde el gestor de paquetes **pip** para python:\n\n```bash\npip3 install keyboard mouse\n```\n\n_Hay que tener en cuenta que para que funcione el keycounter es necesario\nejecutarlo como root, por lo tanto el comando anterior tal vez sea necesario\nhacerlo con tal usuario de la siguiente forma_\n\n```bash\nsudo pip3 install keyboard mouse\n```\n\nEn caso de no estar en debian o no tenerlo en repositorios, deberá instalarse\ndesde pip todas las dependencias así:\n\n```bash\nsudo pip3 install keyboard mouse serial sqlalchemy python-dotenv requests\n```\n\nDe cualquier modo, adapta el comando a tu entorno.\n\n#### Desde el gestor de paquetes y repositorios oficiales para Debian stable\n\nSi estamos en debian, es mejor instalar las dependencias que existan en\nrepositorios.\n\nA continuación la línea que he utilizado para obtener las dependencias de\npython que existen en los repositorios en lugar de hacerlo desde el gestor\nde paquetes de python 3:\n\n```bash\nsudo apt install python3-serial python3-dotenv python3-sqlalchemy python3-requests\n```\n\n## Ejecución\n\nSe necesitan configurar las variables de nuestro entorno copiando el archivo\n.env.example a .env y modificando en este nuestros parámetros de configuración\nque se encuentran en su interior descritos.\n\n## Aplicación para MacOS\n\nEn el directorio \"macos\" he dejado también el código fuente de una pequeña\naplicación para conectar al socket unix que podemos crear y sacar la \ninformación de las rachas en la sesión.\n\nEsta información la podemos usar con cualquier programa, en este caso se \ncoloca en la barra superior del sistema para mantenerla visible en todo momento.\n\nAlgunas imágenes del keycounter para macos:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/macos_1.png\" alt=\"Imagen del Proyecto 1\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/macos_2.png\" alt=\"Imagen del Proyecto 2\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/macos_3.png\" alt=\"Imagen del Proyecto 3\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/macos_4.png\" alt=\"Imagen del Proyecto 4\" height=\"150\"\u003e\n\u003c/p\u003e\n\nPuedes arrastrarla (adjunto el **app** en el directorio **macos** y el código \nfuente si la quieres compilar por tu cuenta) al directorio de aplicaciones y \nposteriormente añadirla a las aplicaciones ejecutadas al inicio del sistema para \nque cargue automáticamente tras un reinicio.\n\n## Ejecutar automáticamente al iniciar el sistema\n\nPosteriormente ejecutar **main.py** como root. Puede añadirse a un cron @reboot\npara que sea ejecutado en el inicio del sistema y esté siempre funcionando en\nel background.\n\n## Renombrar pantalla UART\n\nEs posible que tengas problemas con la configuración para la pantalla si\nestás continuamente suspendiendo (en mi caso es así) o desconectando la pantalla\ncada poco tiempo.\n\nEn estos casos suele producirse un pequeño conflicto, se renombra la interfaz\npor lo que cuando conectamos ya no funcionará mostrando datos correctamente.\n\nEsto no es un gran problema ya que podemos crear una regla en nuestro sistema\noperativo para que quede de forma estática enlazando al punto de montaje de\nturno con dicha interfaz. De este modo pondremos en la configuración de esta\nherramienta el dispositivo que hemos renombrado o enlazado.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/serial1.jpeg\" alt=\"Imagen del Proyecto 1\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/serial2.jpeg\" alt=\"Imagen del Proyecto 2\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/serial3.jpeg\" alt=\"Imagen del Proyecto 3\" height=\"150\"\u003e\n  \u003cimg src=\"docs/images/serial4.jpeg\" alt=\"Imagen del Proyecto 4\" height=\"150\"\u003e\n\u003c/p\u003e\n\nA continuación explico como realizarlo en **GNU/Linux (Debian)**.\n\n### Listar dispositivo conectado\n\n```bash\nsudo dmesg | grep ttyUSB\n```\n\n### Listar atributos\n\n```bash\nudevadm info --name=/dev/ttyUSB0 --attribute-walk\n```\n\n### Añadir regla udev\n\nAbrimos el archivo y añadimos la regla modificando el \"serial\", el \"idVendor\" y el \"idProduct\"\n\n```bash\nsudo nano /etc/udev/rules.d/10-usb-serial.rules\n```\n\nSUBSYSTEM==\"tty\", ATTRS{idVendor}==\"05e3\", ATTRS{idProduct}==\"0610\", ATTRS{serial}==\"0000:00:14.0\", SYMLINK+=\"ttyUSB_KEYCOUNTER\"\n\n### Recargar nueva configuración\n\n```bash\nsudo udevadm trigger\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraupulus%2Fpython-keycounter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraupulus%2Fpython-keycounter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraupulus%2Fpython-keycounter/lists"}