A screencast tool to display your keys, inspired by Screenflick.
This is an almost-complete rewrite of screenkey 0.2, featuring:
Latest 5 available releases of screenkey (most recent first):
Full archive in releases/.
Files as found in the latest release of screenkey:
|Summary of changes between releases.
All the relevant source/developer information can be found on Gitlab:
Screenkey is available on other distributions too.
Execute without installation:
sudo ./setup.py install
Install dependencies (on Debian/Ubuntu):
sudo apt-get install python3-gi gir1.2-gtk-3.0 sudo apt-get install python3-gi-cairo python3-cairo sudo apt-get install python3-setuptools python3-babel sudo apt-get install python3-dbus fonts-font-awesome slop
When using GNOME also install:
sudo apt-get install gir1.2-appindicator3-0.1
Note: Screenkey makes use of low-level X11 functions directly via libX11.so.6.
Choose the translation method of keyboard events.
“Composed” attempts to show only the final results of key composition. Dead keys and any intermediate output during composition is not shown. Currently works correctly with XIM/IBUS, but only for on-the-spot editing. It can cause problems with complex input methods (support for wider compatibility is underway).
“Translated” shows the result of each keypress on the keyboard, accounting for the current keyboard locale and modifiers, but not composition. Pressing a dead key followed by a letter will show both keys.
“Raw” shows which key caps were pressed on the keyboard, without translation. For example, typing “!” (which is often located on top of the key “1”) requires pressing “Shift+1”, which is what this output mode shows. “Backspace mode”, “Always visible Shift” and “Modifiers only” have no effect in this mode.
“Keysyms” shows the keysyms (“symbolic” names) of each pressed key as received by the server. Mostly useful for debugging.
Controls the effect of “backspace” on the text in the output window.
“Normal” always inserts a backspace symbol in the output window.
“Baked” simulates the effect of backspace in the text only if the last keypress is a regular letter and no caret movement has been detected. In any other case, a backspace symbol is inserted instead.
“Full” is similar to “baked”, but will eat through several other, less safe keys, such as tabs and returns.
Shift is normally hidden when the control sequence includes a letter that can differentiate between a shifted/non-shifted key. For example, Shift + “Control+a” is normally shown just as “Control+A” (notice the capital “A”).
When “Always show Shift” is used, Shift is always included in modifier sequences, if pressed. Has no effect when using the “Emacs” modifiers mode.
To disable screenkey while recording (for example, during password prompts), press both control keys, or both shift keys, or both alt keys at the same time.
Press the same combination again to resume it.
This has the same effect of toggling the state from the system tray icon, but it’s completely stealth: there’s no feedback that screenkey is being switched on/off.
If you need the viewer to focus on a sentence you just typed, you can press a silent modifier (such as Shift, or Control) to keep the output window visible a little longer without prolonging the default timeout.
screenkey is normally positioned on the top/center/bottom part of the screen.
If you’re recording a screencast only for a specific application, you can click on “Select window/region” to select on which window the output should be overlaid (slop must be installed for this task). When a window has been selected, top/center/bottom refer to the window’s contents. Press “Reset” to restore the original behavior.
When “fixed” is chosen, the position of the output is specified directly. The cursor turns immediately into a crossbar: drag over the desired screen region (where the text should appear), or press “Esc” to abort. Again, press “Reset” to restore the original behavior.
The “geometry” argument follows the standard X11 geometry format (WxH[+X+Y]) and can be provided by slop, which allows to select windows and/or drag over the desired region interactively without the need of calculating the coordinates manually.
When a geometry argument has been provided, the position (top/middle/bottom) becomes relative to the selected rectangle. For example, to overlay screenkey on top of an existing window, you can simply do:
./screenkey -g $(slop -n -f '%g')
To set the actual text rectangle instead, use “fixed” positioning. Using slop, you can combine both and simply drag the desired rectangle during selection:
./screenkey -p fixed -g $(slop -n -f '%g')
X and Y coordinates can be negative and in such cases they refer to a distance from opposite side of the screen (+10 would be 10 pixels from the left side of the screen, while -10 being 10 pixels from the right).
As an extension to the geometry format, all numbers can be written with a trailing % to refer as a percentage to the selected screen size. For example, the following:
./screenkey -p fixed -g 90%x10%+5%-10%
specifies an horizontally centered rectangle filling 90% of the width of screen at 10% from the bottom.
The default font is “Sans Bold”, which is usually mapped to “DejaVu Sans” on most Linux installations (look for the ttf-dejavu package). It’s a good all-around font which provides all the required glyphs and has excellent readability.
For screencasts about programming, we recommend “DejaVu Sans Mono Bold” instead, which provides better differentiation among similar letterforms (0/O, I/l, etc).
“screenkey” supports several multimedia keys. To display them with symbols instead of text abbreviations, FontAwesome needs to be installed.
On Debian/Ubuntu, the font is available in the fonts-font-awesome package. On Arch Linux the package is instead ttf-font-awesome.
“screenkey” should work correctly by default with any tiling window manager.
The original version of screenkey used to require customization for the output window to work/float correctly. These settings are no longer required with this fork, and can be safely removed.
If you don’t have a system tray, you can either configure screenkey through command line flags or use --show-settings to test the configuration interactively.
To get transparency you need a compositor to be running. For example, “compton” or “unagi” are popular for their low impact on performance, but “xcompmgr” also works correctly without any additional configuration.
Screenkey is very sensitive to improperly configured input methods or keyboard settings. Installing, removing or “playing around” with some packages such as im-config, ibus, fcitx or scim might leave the current settings in a half-broken state. Some distributions are also known to have broken settings by default.
In short: the various environment flags (XMODIFIERS, GTK_IM_MODULE, QT_IM_MODULE to name a few) need to be consistent. They either should be all unset, or all set to the same input method. When using ibus, fcitx or other complex methods, the corresponding daemon must be running.
An “input method” is the mechanism which handles the task of transforming key presses into characters. Latin languages mostly use a straightforward key -> character mechanism, but other languages don’t have a key for each possible character and thus need extra logic. Programs need to be told which input method to use, and this is usually done through environment variables. There is one environment variable for each graphical toolkit and it’s set at the start of the session, usually by a command in the ~/.profile file. Screenkey can only record a program correctly if it’s using the same input method as the target.
To check the status of the environment, run the following inside a terminal:
echo XMODIFIERS=$XMODIFIERS echo GTK_IM_MODULE=$GTK_IM_MODULE echo QT_IM_MODULE=$QT_IM_MODULE
On a system with a Latin language and without any complex input method running you should see everything empty:
XMODIFIERS= GTK_IM_MODULE= QT_IM_MODULE=
On a system running “ibus” you should see:
XMODIFIERS=@im=ibus GTK_IM_MODULE=ibus QT_IM_MODULE=ibus
Additionally, the ibus package must be installed and the ibus daemon should be running. Check the output of:
$ pgrep -ax ibus-daemon 982 /usr/bin/ibus-daemon --xim
ibus-daemon should be present and must include --xim in the command line. If not, the daemon must be restarted with it! Consult the documentation of your distribution for more information.
On a system using “fcitx” the following output has to be expected:
XMODIFIERS=@im=fcitx GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx
In this case fcitx daemon should be running as well:
$ pgrep -ax fcitx 1053 /usr/bin/fcitx
If you see any mixture of the above, your system is likely to be incorrectly configured.
If the “ibus” or “fcitx” packages are not installed, there are no daemons running and the variables are mostly empty, then try simply unsetting all of them before running Screenkey in a terminal:
unset XMODIFIERS unset GTK_IM_MODULES unset QT_IM_MODULES screenkey
If screenkey runs correctly after these changes, check your startup files such as ~/.profile, ~/.bash_profile or ~/.pam_environment and remove the offending variables to make the change permanent. You must log-out and log-in in order to be able to run Screenkey normally after the change.
If you’re running either ibus or fcitx but the variables contain mixed values, try to reset them manually using:
export XMODIFIERS=@im=ibus export GTK_IM_MODULE=ibus export QT_IM_MODULE=ibus screenkey
Again, if Screenkey works correctly after the change, inspect the contents of your startup files as above to make the change permanent.
You should always check the documentation of your distribution to see which input method should be running and how it should be configured. The above guide is not meant to be exhaustive. If nothing works, get in touch with the authors or file an issue on Gitlab to get more help.
You can exit from Screenkey by right-clicking on it’s status icon and selecting “Quit”.
If you’re using GNOME/Unity and cannot see any status icon please make sure the gir1.2-appindicator3-0.1 package is installed. Run the following inside a terminal to install as required:
sudo apt-get install gir1.2-appindicator3-0.1
On any other desktop system Screenkey uses the regular system tray. If you don’t have a systray or you cannot quit an existing Screenkey, use the following command in a terminal to kill it:
pkill -f screenkey
The proper way to exit when running Screenkey from a terminal is simply by interrupting it with Ctrl+C.
Screenkey cannot currently capture any input directed to native Wayland programs such as the GNOME Terminal: only X11 programs are supported.
If you need to record a terminal session you’ll have to switch to another X11 terminal emulator such as xterm, urxvt, mlterm, …
After cloning the source repository, initialize a fresh new localization as following:
./setup.py extract_messages ./setup.py init_catalog -l <locale>
Where <locale> is the locale name such as de_DE.
The generated template is located in Screenkey/locale/<locale>/LC_MESSAGES/screenkey.po and can be edited with a text editor or using a PO editing tool such as poedit.
To update a pre-exiting language translation, execute:
./setup.py extract_messages ./setup.py update_catalog -l <locale>
then review the updated localization in Screenkey/locale/<locale>/LC_MESSAGES/screenkey.po.
Localization can be tested by compiling the language catalog and running screenkey from the source directory:
./setup.py compile_catalog -l <locale> ./screenkey
The catalog needs to be compiled every time the localization has been changed to reflect the newest changes.