{"id":16410324,"url":"https://github.com/ctrlcctrlv/qkeysonscreen","last_synced_at":"2025-03-21T03:31:21.078Z","repository":{"id":41539818,"uuid":"43540031","full_name":"ctrlcctrlv/QKeysOnScreen","owner":"ctrlcctrlv","description":"Make your presentations easier to follow by showing the keys you're pressing on the screen (QiPress/Keypose/KeyCastr for Linux)","archived":false,"fork":false,"pushed_at":"2022-09-03T13:37:37.000Z","size":137,"stargazers_count":35,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-17T20:13:21.610Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"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/ctrlcctrlv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-02T07:10:30.000Z","updated_at":"2024-11-15T22:37:14.000Z","dependencies_parsed_at":"2023-01-17T20:02:43.738Z","dependency_job_id":null,"html_url":"https://github.com/ctrlcctrlv/QKeysOnScreen","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2FQKeysOnScreen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2FQKeysOnScreen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2FQKeysOnScreen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2FQKeysOnScreen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ctrlcctrlv","download_url":"https://codeload.github.com/ctrlcctrlv/QKeysOnScreen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244733597,"owners_count":20501011,"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":[],"created_at":"2024-10-11T06:23:54.179Z","updated_at":"2025-03-21T03:31:20.753Z","avatar_url":"https://github.com/ctrlcctrlv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QKeysOnScreen \u0026 QKeysOnConsole\n\n[Demo video](https://www.youtube.com/watch?v=oOToCqTvW6U\u0026feature=youtu.be)\n\n- [![Video preview](https://i.ytimg.com/vi/oOToCqTvW6U/hqdefault.jpg)](https://www.youtube.com/watch?v=oOToCqTvW6U\u0026feature=youtu.be)\n\n## Synopsis\n\nQKeysOnScreen shows the current keys you're pressing on the screen. It is\nQiPress / Keypose / KeyCastr for GNU/Linux.\n\nQKeysOnConsole does the same but on the current terminal.\n\nIt uses PyQt5 for the GUI and evdev to read your keys, making it much better\nthan `key-mon`. See \"Comparison with key-mon\" below.\n\nQKeysOnScreen was inspired by the widget in the top right of the screen in\nTempleOS. I had never written a non-trivial Qt application before, and needed\nto make an ED25519 key manager. I started writing this to learn Qt, but by the\ntime I was finished it was a full featured application.\n\n## Usage\n\nQKeysOnScreen is completely GUI driven and has no command line options. You can\nconfigure it by right clicking the main window to see a list of options.\nQKeysOnScreen is very configurable, just about every aspect of it can be\nconfigured. You can change the font, color, window size, divider, ignored keys,\nand fadeout behavior. If you can think of more useful options, please open a\nGitHub issue.\n\nQKeysOnConsole has no options as yet but may some day.\n\n## Dependencies\n\n* Qt 5 (tested only on Qt 5.5.0)\n* PyQt5\n* Python 3\n* [python-evdev](https://python-evdev.readthedocs.org/en/latest/) \n\n### Install on Debian/Ubuntu\n\nNext packages should be installed using your package manager:\n\n- `python3-pyqt5.qtx11extras`\n- `python3-evdev`\n\n## Troubleshooting\n\nQKeysOnScreen uses the Linux kernel's `evdev` interface. This makes it very\nfast and accurate, but also makes setup a bit tricky.\n\nOwing to the Linux kernel's security, it does not just allow any unprivileged\nuser to capture keyboard events. This is a good thing™, because in its essence\nQKeysOnScreen is a keylogger, except it doesn't save or send the keys anywhere,\nit just displays them on the screen.\n\nThere are three ways to give QKeysOnScreen the permissions it needs:\n\n* Run it with `sudo`. This is by far the simplest and most secure way, as it\n  only gives permission to QKeysOnScreen and no other applications. However, it\nmay not be ideal if you want your Qt widget styling to carry over, or if you\nwant to run it from the desktop menu.\n\n* Add yourself to the group that the input devices are in, so your user can\n  read them. This group is usually called `input` or `plugdev`, but you can\ncheck for sure by doing `ls -l /dev/input/event0`. The word after `root` is the\ninput group. Then do `sudo gpasswd -a your_username input_group_here`. Then,\nlog out and log in, and QKeysOnScreen should now start under your user.\n\n* Add a udev rule. I don't know how (and believe me, I tried _really_ hard), so\n  please open a GitHub issue if you find out how so I can write how here.\n\n## Comparison with `key-mon`\n\n1. key-mon uses GTK, and that's just for heretics.\n2. key-mon does not persist keys properly. It has a key timeout, but it has no\n   way to show keys until the next one is pressed.\n3. key-mon is unmaintained, and is hosted on Google Code. RIP\n4. key-mon has no key history window.\n5. key-mon is buggy. For example, key-mon does not understand Ctrl-C if the\n   Preferences window is open, and can only be killed by `kill -9`. key-mon's\n\"Highly Visible Click\" functionality, while there (I'll add it to QKOS soon),\nis incredibly buggy. Sometimes the circle around clicks persists for _minutes_\nlonger than it should.\n6. key-mon is bound to X11 in an unhealthy way. key-mon uses the X11 RECORD\n   extension, which means it doesn't work with Wayland. QKeysOnScreen uses\nevdev. If you open a tty on one monitor, QKeysOnScreen will continue to work\nwith the keys you are pressing in that tty, and [QKeysOnScreen works perfectly\nwith Wayland.](http://web.archive.org/web/20190326095102if_/https://track3.mixtape.moe/bttmbn.png)\n\n![QKeysOnScreen in Wayland! :)](http://web.archive.org/web/20190326095102if_/https://track3.mixtape.moe/bttmbn.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrlcctrlv%2Fqkeysonscreen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fctrlcctrlv%2Fqkeysonscreen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrlcctrlv%2Fqkeysonscreen/lists"}