{"id":16612928,"url":"https://github.com/ttys3/screenkey","last_synced_at":"2025-08-01T23:05:29.060Z","repository":{"id":101550761,"uuid":"261431710","full_name":"ttys3/screenkey","owner":"ttys3","description":"mirror from https://gitlab.com/screenkey/screenkey.git . A screencast tool to display your keys inspired by Screenflick https://www.thregr.org/~wavexx/software/screenkey/","archived":false,"fork":false,"pushed_at":"2021-02-19T03:26:13.000Z","size":441,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-10T20:42:09.693Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gitlab.com/screenkey/screenkey","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/ttys3.png","metadata":{"files":{"readme":"README.rst","changelog":"NEWS.rst","contributing":null,"funding":null,"license":"COPYING.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-05T10:46:21.000Z","updated_at":"2021-02-19T03:26:20.000Z","dependencies_parsed_at":"2023-06-05T10:45:43.836Z","dependency_job_id":null,"html_url":"https://github.com/ttys3/screenkey","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/ttys3/screenkey","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttys3%2Fscreenkey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttys3%2Fscreenkey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttys3%2Fscreenkey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttys3%2Fscreenkey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ttys3","download_url":"https://codeload.github.com/ttys3/screenkey/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttys3%2Fscreenkey/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268310715,"owners_count":24230182,"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","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-12T01:45:23.124Z","updated_at":"2025-08-01T23:05:29.037Z","avatar_url":"https://github.com/ttys3.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"=====================\nScreencast your keys.\n=====================\n\n.. contents::\n\nA screencast tool to display your keys, inspired by Screenflick_.\n\nThis is an almost-complete rewrite of screenkey_ 0.2, featuring:\n\n- Several keyboard translation methods\n- Key composition/input method support\n- Configurable font/size/position\n- Highlighting of recent keystrokes\n- Improved backspace processing\n- Normal/Emacs/Mac caps modes\n- Multi-monitor support\n- Dynamic recording control\n- Switch for visible shift and modifier sequences only\n- Repeats compression\n- Countless bug fixes\n- Mouse buttons support\n\n\nInstallation and basic usage\n----------------------------\n\nOfficial packages\n~~~~~~~~~~~~~~~~~\n\nArch: `Arch community package \u003chttps://www.archlinux.org/packages/community/any/screenkey/\u003e`_\n  ``sudo pacman -S screenkey``\n\nDebian / Ubuntu: `Debian tracker \u003chttps://packages.debian.org/search?searchon=sourcenames\u0026keywords=screenkey\u003e`_\n  ``sudo apt-get install screenkey``\n\nFedora / EPEL: `Fedora package \u003chttps://src.fedoraproject.org/rpms/screenkey\u003e`_\n  ``sudo dnf install screenkey``\n\nGentoo: `Gentoo package \u003chttps://packages.gentoo.org/packages/x11-misc/screenkey\u003e`_\n  ``sudo emerge -av x11-misc/screenkey``\n\nScreenkey is available on `other distributions\n\u003chttps://repology.org/project/screenkey/versions\u003e`_ too.\n\n\nFrom source\n~~~~~~~~~~~\n\nExecute without installation::\n\n  ./screenkey\n\nTo install::\n\n  sudo ./setup.py install\n\nDependencies:\n\n- Python 3.x (Python 2.x is no longer supported)\n- PyGObject (python3-gi)\n- GTK 3 (via GI bindings)\n- Pycairo (python3-cairo)\n- Cairo GI bindings (python3-gi-cairo)\n- setuptools (python3-setuptools, build only)\n- babel (python3-babel, build only)\n- slop (https://github.com/naelstrof/slop)\n- FontAwesome_ (for multimedia symbols)\n- GIR AppIndicator (only required for Unity / GNOME Shell)\n\nInstall dependencies (on Debian/Ubuntu)::\n\n  sudo apt-get install python3-gi gir1.2-gtk-3.0\n  sudo apt-get install python3-gi-cairo python3-cairo\n  sudo apt-get install python3-setuptools python3-babel\n  sudo apt-get install fonts-font-awesome slop\n\nWhen using GNOME also install::\n\n  sudo apt-get install gir1.2-appindicator3-0.1\n\nNote: Screenkey makes use of low-level X11 functions directly via\n``libX11.so.6``.\n\n\nSettings\n--------\n\nDisplay time:\n  Persistence (in seconds) of the output window after typing has\n  stopped. Defaults to 2.5 seconds. When the window is persistent,\n  display time still controls the time before the text is cleared.\n\nPersistent window:\n  Forces the output window to be always visible, irregardless of typing\n  activity. Mostly useful for interactive window placement and/or\n  \"fixed\" positioning.\n\nScreen:\n  Physical screen/monitor used for the output window.\n\nPosition:\n  Position of the output window. The position is normally relative to\n  the chosen screen. If a window has been selected with \"Select\n  window/region\", the position becomes relative to the window. If\n  \"fixed\" is chosen, the output window's position and size are specified\n  explicitly. See `Interactive placement`_ for more details.\n\nFont:\n  Font used for the output window. A scalable font and wide Unicode\n  coverage is required (the DejaVu family is *highly* recommended).\n\nSize:\n  Size of the font used in the output window. Chooses proportionally\n  between 8/12/24% of the screen size. When \"fixed\" positioning is used,\n  size is ignored and the font will fill the available height of the\n  output window.\n\nKeyboard mode:\n  Choose the translation method of keyboard events.\n\n  \"Composed\" attempts to show only the final results of key composition.\n  Dead keys and any intermediate output during composition is not shown.\n  Currently works correctly with XIM/IBUS, but only for on-the-spot\n  editing. It can cause problems with complex input methods (support for\n  wider compatibility is underway).\n\n  \"Translated\" shows the result of each keypress on the keyboard,\n  accounting for the current keyboard locale and modifiers, but not\n  composition. Pressing a dead key followed by a letter will show both\n  keys.\n\n  \"Raw\" shows which key caps were pressed on the keyboard, without\n  translation. For example, typing \"!\" (which is often located on top of\n  the key \"1\") requires pressing \"Shift+1\", which is what this output\n  mode shows. \"Backspace mode\", \"Always visible Shift\" and \"Modifiers\n  only\" have no effect in this mode.\n\n  \"Keysyms\" shows the keysyms (\"symbolic\" names) of each pressed key as\n  received by the server. Mostly useful for debugging.\n\nBackspace mode:\n  Controls the effect of \"backspace\" on the text in the output window.\n\n  \"Normal\" always inserts a backspace symbol in the output window.\n\n  \"Baked\" simulates the effect of backspace in the text only if the last\n  keypress is a regular letter and no caret movement has been detected.\n  In any other case, a backspace symbol is inserted instead.\n\n  \"Full\" is similar to \"baked\", but will eat through several other, less\n  safe keys, such as tabs and returns.\n\nModifiers mode:\n  Select how modifiers keys (such as Control, Alt) are displayed in the\n  output window. \"Normal\" uses traditional PC names (Ctrl+A) while \"Mac\"\n  uses Mac symbols directly (⌘+A). The \"Emacs\" mode will display\n  Emacs-style shortened keyboard sequences (C-A).\n\nShow Modifier sequences only:\n  Only show modifier/control sequences in the output window.\n  Bare, shifted or translated letters are not shown.\n\nAlways show Shift:\n  Shift is normally hidden when the control sequence includes a letter\n  that can differentiate between a shifted/non-shifted key. For example,\n  Shift + \"Control+a\" is normally shown just as \"Control+A\" (notice the\n  capital \"A\").\n\n  When \"Always show Shift\" is used, Shift is always included in modifier\n  sequences, if pressed. Has no effect when using the \"Emacs\" modifiers\n  mode.\n\nShow Whitespace characters:\n  Convert regular whitespace characters (tabs and spaces) to a visible\n  representation instead of showing a blank. Newlines are also hidden\n  when unambiguous in multiline mode.\n\nCompress repeats:\n  When enabled, contiguous repeated sequences are truncated after the\n  requested threshold. A counter of total occurrences is shown instead,\n  which is generally more legible.\n\nShow mouse:\n  When enabled, the mouse buttons are shown on the left of the output window.\n\nHide duration:\n  Duration (in seconds) of the fade-out animation when a button is released.\n  Defaults to 1 second.\n\n\nAdvanced usage\n--------------\n\nControlling visibility\n~~~~~~~~~~~~~~~~~~~~~~\n\nTo disable screenkey while recording (for example, during password\nprompts), press both control keys, or both shift keys, or both alt keys\nat the same time.\n\nPress the same combination again to resume it.\n\nThis has the same effect of toggling the state from the system tray\nicon, but it's completely stealth: there's no feedback that screenkey is\nbeing switched on/off.\n\nIf you need the viewer to focus on a sentence you just typed, you can\npress a silent modifier (such as Shift, or Control) to keep the output\nwindow visible a little longer without prolonging the default timeout.\n\n\nInteractive placement\n~~~~~~~~~~~~~~~~~~~~~\n\nscreenkey is normally positioned on the top/center/bottom part of the\nscreen.\n\nIf you're recording a screencast only for a specific application, you\ncan click on \"Select window/region\" to select on which window the output\nshould be overlaid (slop_ must be installed for this task). When a\nwindow has been selected, top/center/bottom refer to the window's\ncontents. Press \"Reset\" to restore the original behavior.\n\nWhen \"fixed\" is chosen, the position of the output is specified\n*directly*. The cursor turns immediately into a crossbar: drag over the\ndesired screen region (where the text should appear), or press \"Esc\" to\nabort. Again, press \"Reset\" to restore the original behavior.\n\n\nCommand-line placement\n~~~~~~~~~~~~~~~~~~~~~~\n\nThe \"geometry\" argument follows the standard X11 geometry format\n(``WxH[+X+Y]``) and can be provided by slop_, which allows to select\nwindows and/or drag over the desired region interactively without the\nneed of calculating the coordinates manually.\n\nWhen a geometry argument has been provided, the position\n(top/middle/bottom) becomes relative to the selected rectangle. For\nexample, to overlay screenkey on top of an existing window, you can\nsimply do::\n\n  ./screenkey -g $(slop -n -f '%g')\n\nTo set the actual text rectangle instead, use \"fixed\" positioning. Using\nslop, you can combine both and simply drag the desired rectangle during\nselection::\n\n  ./screenkey -p fixed -g $(slop -n -f '%g')\n\nX and Y coordinates can be negative and in such cases they refer to a\ndistance from opposite side of the screen (+10 would be 10 pixels from\nthe left side of the screen, while -10 being 10 pixels from the right).\n\nAs an extension to the geometry format, all numbers can be written with\na trailing % to refer as a percentage to the selected screen size. For\nexample, the following::\n\n  ./screenkey -p fixed -g 90%x10%+5%-10%\n\nspecifies an horizontally centered rectangle filling 90% of the width of\nscreen at 10% from the bottom.\n\n\nChoosing a good font\n~~~~~~~~~~~~~~~~~~~~\n\nThe default font is \"Sans Bold\", which is usually mapped to \"DejaVu\nSans\" on most Linux installations (look for the ``ttf-dejavu`` package).\nIt's a good all-around font which provides all the required glyphs and\nhas *excellent* readability.\n\nFor screencasts about programming, we recommend \"DejaVu Sans Mono Bold\"\ninstead, which provides better differentiation among similar letterforms\n(0/O, I/l, etc).\n\n\nMultimedia keys\n~~~~~~~~~~~~~~~\n\n\"screenkey\" supports several multimedia keys. To display them with\nsymbols instead of text abbreviations, FontAwesome_ needs to be\ninstalled.\n\nOn Debian/Ubuntu, the font is available in the ``fonts-font-awesome``\npackage. On Arch Linux the package is instead ``ttf-font-awesome``.\n\n.. _FontAwesome: http://fontawesome.io/\n\n\nTiling window managers\n~~~~~~~~~~~~~~~~~~~~~~\n\n\"screenkey\" should work correctly by default with any tiling window\nmanager.\n\nThe original version of screenkey used to require customization for the\noutput window to work/float correctly. These settings are *no longer\nrequired* with this fork, and can be safely removed.\n\nIf you don't have a system tray, you can either configure screenkey\nthrough command line flags or use ``--show-settings`` to test the\nconfiguration interactively.\n\nTo get transparency you need a compositor to be running. For example,\n\"compton\" or \"unagi\" are popular for their low impact on performance,\nbut \"xcompmgr\" also works correctly without any additional\nconfiguration.\n\n\nRelated tools\n~~~~~~~~~~~~~\n\nWhen doing screencasts involving a lot of mouse activity, or which\nrequire holding down modifiers to perform other mouse actions, key-mon_\n(Python-based) or the newer kmcaster_ (Java-based) might be a good\ncompanion to screenkey, or replace it entirely.\n\nBoth can be configured to show the state of key modifiers continuously\nand circle the location of mouse clicks (\"visible click\") and can be\nused together with screenkey.\n\n\nTroubleshooting\n---------------\n\nInitialization failure\n~~~~~~~~~~~~~~~~~~~~~~\n\nScreenkey is very sensitive to improperly configured input methods or\nkeyboard settings. Installing, removing or \"playing around\" with some\npackages such as ``im-config``, ``ibus``, ``fcitx`` or ``scim`` might\nleave the current settings in a half-broken state. Some distributions\nare also known to have broken settings by *default*.\n\nIn short: the various environment flags (``XMODIFIERS``,\n``GTK_IM_MODULE``, ``QT_IM_MODULE`` to name a few) need to be\n*consistent*. They either should be all unset, or all set to the *same*\ninput method. When using ``ibus``, ``fcitx`` or other complex methods,\nthe corresponding daemon *must* be running.\n\nAn \"input method\" is the mechanism which handles the task of\ntransforming key presses into characters. Latin languages mostly use a\nstraightforward key -\u003e character mechanism, but other languages don't\nhave a key for each possible character and thus need extra logic.\nPrograms need to be told *which* input method to use, and this is\nusually done through environment variables. There is one environment\nvariable for each graphical toolkit and it's set at the start of the\nsession, usually by a command in the ``~/.profile`` file. Screenkey can\nonly record a program correctly if it's using the *same* input method as\nthe target.\n\nTo check the status of the environment, run the following inside a\nterminal::\n\n  echo XMODIFIERS=$XMODIFIERS\n  echo GTK_IM_MODULE=$GTK_IM_MODULE\n  echo QT_IM_MODULE=$QT_IM_MODULE\n\nOn a system with a Latin language and without any complex input method\nrunning you should see everything empty::\n\n  XMODIFIERS=\n  GTK_IM_MODULE=\n  QT_IM_MODULE=\n\nOn a system running \"ibus\" you should see::\n\n  XMODIFIERS=@im=ibus\n  GTK_IM_MODULE=ibus\n  QT_IM_MODULE=ibus\n\nAdditionally, the ibus package must be installed and the ibus daemon\nshould be running. Check the output of::\n\n  $ pgrep -ax ibus-daemon\n  982 /usr/bin/ibus-daemon --xim\n\n``ibus-daemon`` should be present and *must* include ``--xim`` in the\ncommand line. If not, the daemon must be restarted with it! Consult the\ndocumentation of your distribution for more information.\n\nOn a system using \"fcitx\" the following output has to be expected::\n\n  XMODIFIERS=@im=fcitx\n  GTK_IM_MODULE=fcitx\n  QT_IM_MODULE=fcitx\n\nIn this case ``fcitx`` daemon should be running as well::\n\n  $ pgrep -ax fcitx\n  1053 /usr/bin/fcitx\n\nIf you see *any* mixture of the above, your system is likely to be\nincorrectly configured.\n\nIf the \"ibus\" or \"fcitx\" packages are not installed, there are no\ndaemons running and the variables are mostly empty, then try simply\nunsetting all of them before running Screenkey in a terminal::\n\n  unset XMODIFIERS\n  unset GTK_IM_MODULES\n  unset QT_IM_MODULES\n  screenkey\n\nIf screenkey runs correctly after these changes, check your startup\nfiles such as ``~/.profile``, ``~/.bash_profile`` or\n``~/.pam_environment`` and remove the offending variables to make the\nchange permanent. You must log-out and log-in in order to be able to run\nScreenkey normally after the change.\n\nIf you're running either ``ibus`` or ``fcitx`` but the variables contain\nmixed values, try to reset them manually using::\n\n  export XMODIFIERS=@im=ibus\n  export GTK_IM_MODULE=ibus\n  export QT_IM_MODULE=ibus\n  screenkey\n\nAgain, if Screenkey works correctly after the change, inspect the\ncontents of your startup files as above to make the change permanent.\n\nYou should always check the documentation of your distribution to see\nwhich input method *should* be running and how it should be configured.\nThe above guide is not meant to be exhaustive. If nothing works, get in\ntouch with the authors or file an issue on Gitlab to get more help.\n\n\nCannot stop Screenkey or no status icon\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can exit from Screenkey by right-clicking on it's status icon and\nselecting \"Quit\".\n\nIf you're using GNOME/Unity and cannot see any status icon please make\nsure the ``gir1.2-appindicator3-0.1`` package is installed. Run the\nfollowing inside a terminal to install as required::\n\n  sudo apt-get install gir1.2-appindicator3-0.1\n\nOn any other desktop system Screenkey uses the regular system tray. If\nyou don't have a systray or you cannot quit an existing Screenkey, use\nthe following command in a terminal to kill it::\n\n  pkill -f screenkey\n\nThe proper way to exit when running Screenkey from a terminal is simply\nby interrupting it with ``Ctrl+C``.\n\n\nNo output in GNOME Terminal\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nScreenkey cannot currently capture any input directed to native Wayland\nprograms such as the GNOME Terminal: only X11 programs are supported.\n\nIf you need to record a terminal session you'll have to switch to\nanother X11 terminal emulator such as xterm, urxvt, mlterm, ...\n\n\nLocalization\n------------\n\nAdding a new language translation\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAfter cloning the source repository, initialize a fresh new localization\nas following::\n\n  ./setup.py extract_messages\n  ./setup.py init_catalog -l \u003clocale\u003e\n\nWhere ``\u003clocale\u003e`` is the locale name such as ``de_DE``.\n\nThe generated template is located in\n``Screenkey/locale/\u003clocale\u003e/LC_MESSAGES/screenkey.po`` and can be edited\nwith a text editor or using a PO editing tool such as poedit_.\n\n.. _poedit: https://poedit.net/\n\n\nUpdating an existing translation\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo update a pre-exiting language translation, execute::\n\n  ./setup.py extract_messages\n  ./setup.py update_catalog -l \u003clocale\u003e\n\nthen review the updated localization in\n``Screenkey/locale/\u003clocale\u003e/LC_MESSAGES/screenkey.po``.\n\n\nTesting a translation\n~~~~~~~~~~~~~~~~~~~~~\n\nLocalization can be tested by compiling the language catalog and running\n``screenkey`` from the source directory::\n\n  ./setup.py compile_catalog -l \u003clocale\u003e\n  ./screenkey\n\nThe catalog needs to be compiled every time the localization has been\nchanged to reflect the newest changes.\n\n\nAuthors and Copyright\n---------------------\n\n\"screenkey\" can be found at https://www.thregr.org/~wavexx/software/screenkey/\n\n| \"screenkey\" is distributed under GNU GPLv3+, WITHOUT ANY WARRANTY.\n| Copyright(c) 2010-2012: Pablo Seminario \u003cpabluk@gmail.com\u003e\n| Copyright(c) 2015-2020: wave++ \"Yuri D'Elia\" \u003cwavexx@thregr.org\u003e\n| Copyright(c) 2019-2020: Yuto Tokunaga \u003cyuntan.sub1@gmail.com\u003e\n\nscreenkey's GIT repository is publicly accessible at:\n\nhttps://gitlab.com/screenkey/screenkey\n\n\nAdditional Thanks\n-----------------\n\n* @logix (gitlab)\n* @rhoit (github)\n* Alberto Fanjul\n* Benjamin Chrétien\n* Dmitry Bushev\n* Doug Patti\n* Farrer (launchpad)\n* Georges Khaznadar\n* Igor Bronovskyi\n* Ivan Makfinsky\n* Jacob Gardner\n* Matthew White\n* Muneeb Shaikh\n* Olivier Boesch\n* Stanislav Seletskiy\n* Zhum (launchpad)\n* Ziad El Khoury Hanna\n* 伊冲\n\n.. _Screenflick: http://www.araelium.com/screenflick/\n.. _key-mon: https://code.google.com/p/key-mon/\n.. _kmcaster: https://github.com/DaveJarvis/kmcaster/\n.. _screenkey: https://launchpad.net/screenkey\n.. _slop: https://github.com/naelstrof/slop\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttys3%2Fscreenkey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fttys3%2Fscreenkey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttys3%2Fscreenkey/lists"}