From fc1c079170ce7a35bd5c097f6d9fde70ba575be4 Mon Sep 17 00:00:00 2001 From: Adrian Iain Lam <adrianiainlam@gmail.com> Date: Thu, 25 Aug 2016 04:15:26 +0800 Subject: [PATCH 1/1] Initial commit --- README.md | 86 +++++++++++++++++++++++++++++++++++++++++ icon.svg | 88 ++++++++++++++++++++++++++++++++++++++++++ indicator-keyboard-led.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++ screenshots/sc1.png | Bin 0 -> 4154 bytes screenshots/sc2.png | Bin 0 -> 6940 bytes screenshots/sc3.png | Bin 0 -> 2312 bytes 6 files changed, 270 insertions(+) create mode 100644 README.md create mode 100644 icon.svg create mode 100755 indicator-keyboard-led.py create mode 100644 screenshots/sc1.png create mode 100644 screenshots/sc2.png create mode 100644 screenshots/sc3.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..86240b9 --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +# indicator-keyboard-led - simulate keyboard lock keys LED + +This is a Unity application indicator designed for keyboards without lock +keys LED. It allows the user to check the state of the three locks (Caps lock, +Num lock and Scroll lock) without requiring any mouse or keyboard action. It +also allows the lock keys to be toggled with mouse clicks, which could be +useful for keyboards without Scroll lock keys or malfunctioning keyboards. + +## Screenshots + +![indicator default][sc1] +Default appearance of the indicator with Num lock on and Caps and Scroll locks +off. + +![indicator menu][sc2] +Menu of the indicator, shown on click. The locks can be toggled by clicking +the respective item in the menu. + +![indicator short][sc3] +Alternative (short) appearance of the indicator. + +[sc1]: screenshots/sc1.png +[sc2]: screenshots/sc2.png +[sc3]: screenshots/sc3.png + +## Dependencies + - Python 3 (*) + - GTK+ 3 (*) + - AppIndicator 3 (*) + - Python 3 GObject introspection (python3-gi) + - xdotool + +Those marked with (*) are probably installed by default in recent Ubuntu +distributions. To install the rest, run: + + sudo apt-get install python3-gi xdotool + +## Usage + + 1. Install the dependencies listed above. + 2. Clone this repository. + 3. Add the script as a startup application. (Use option `--short` for short + appearance if desired.) + 4. Run the script manually for the first time. (Alternatively, log out + and log in again.) + 5. The indicator should be shown at the top right corner, with a filled circle + representing a lock turned on and an unfilled circle representing a lock + turned off. + 6. Clicking on the indicator should result in a menu with the three locks. + Clicking on the menu item would cause the corresponding lock to toggle. + +## License + +The program "indicator-keyboard-led.py" is released under the MIT License. +Please refer to the file for the full text of the license. + +The icon "icon.svg" is released to the public domain. + +## Credits + +I would like to thank [Tobias Schlitt](https://github.com/tobyS), who wrote +[indicator-chars](https://github.com/tobyS/indicator-chars) which I used +as a reference when writing this software. + +The icon used in the indicator (icon.svg) is modified from the file +"emblem-readonly.svg" by [Jakub Steiner](http://jimmac.musichall.cz) +who released it to the public domain for the +[Tango Icon Library](http://tango.freedesktop.org/Tango_Icon_Library). + +--- + +## Motivation + +I was a user of [indicator-keylock][ind-kl], but only one key lock can be shown +on the panel. I didn't like the Notify OSD events either. + +I then came across [lks-indicator][lks] and [indicator-xbdmod][xbdmod], but +I didn't like the fact that they refresh the indicator on a regular time +interval (every *x* milliseconds) rather than on state changes (only when +the locks are toggled). + +I also thought it would be fun to be able to toggle the locks on-screen. + +[ind-kl]: https://launchpad.net/~tsbarnes/+archive/ubuntu/indicator-keylock +[lks]: https://github.com/SergKolo/lks-indicator +[xbdmod]: https://github.com/sneetsher/indicator-xkbmod diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..d711e58 --- /dev/null +++ b/icon.svg @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg11300" + sodipodi:version="0.32" + inkscape:version="0.91 r13725" + sodipodi:docname="icon.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + version="1.1"> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:creator> + <dc:Agent> + <dc:title>Jakub Steiner</dc:title> + </dc:Agent> + </dc:creator> + <dc:contributor>Adrian I Lam</dc:contributor> + <dc:source>http://jimmac.musichall.cz</dc:source> + <cc:license + rdf:resource="http://creativecommons.org/licenses/publicdomain/" /> + <dc:title>Caps Lock icon</dc:title> + <dc:subject>caps lock</dc:subject> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/publicdomain/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + style="fill:#dfdbd2;" + d="M 22.9375 3.0058594 C 15.653591 3.2371063 10.824219 6.7870543 + 10.824219 14.107422 L 10.824219 21.578125 L 9.1855469 21.578125 C + 7.9827519 21.578125 7 22.41744 7 23.46875 L 7 43.109375 C 7 44.160685 + 7.9827519 45.000002 9.1855469 45 L 38.84375 45 C 40.046563 45 41 + 44.160684 41 43.109375 L 41 23.46875 C 41 22.417442 40.046563 + 21.578125 38.84375 21.578125 L 37.175781 21.578125 L 37.205078 + 14.228516 C 37.205078 6.4577795 31.964524 3.1017737 24.03125 + 3.0058594 C 23.661384 3.0013294 23.295735 2.9944354 22.9375 3.0058594 + z M 23.666016 7.9160156 C 23.79987 7.9129356 23.953309 7.9160156 + 24.091797 7.9160156 C 32.893949 7.9160156 32.217687 14.260075 + 32.347656 16.150391 L 32.347656 21.578125 L 15.773438 21.578125 L + 15.773438 16.181641 C 15.742128 14.306334 15.227932 8.1089033 + 23.666016 7.9160156 z M 22.21875 24 L 25.75 24 C 26.442384 25.281385 + 27.114759 26.580467 27.767578 27.896484 C 28.420397 29.212502 + 29.073744 30.598189 29.726562 32.052734 C 30.399164 33.50728 + 31.083007 35.048076 31.775391 36.675781 C 32.487557 38.303487 + 33.228487 40.077922 34 42 L 29.964844 42 C 29.68789 41.290043 + 29.400252 40.589125 29.103516 39.896484 C 28.80678 39.203844 + 28.521094 38.492898 28.244141 37.765625 L 19.578125 37.765625 C + 19.301171 38.492898 19.015486 39.211918 18.71875 39.921875 L + 17.886719 42 L 14 42 C 14.771513 40.077922 15.502929 38.303487 + 16.195312 36.675781 C 16.887696 35.048076 17.560072 33.50728 + 18.212891 32.052734 C 18.885492 30.598189 19.548353 29.212502 + 20.201172 27.896484 C 20.853991 26.580467 21.526366 25.281385 + 22.21875 24 z M 23.910156 27.480469 C 23.455161 28.398218 22.931362 + 29.516014 22.337891 30.832031 C 21.764201 32.148049 21.16038 + 33.576062 20.527344 35.117188 L 27.292969 35.117188 C 26.659932 + 33.576062 26.046597 32.138021 25.453125 30.804688 C 24.859653 + 29.471354 24.345369 28.363586 23.910156 27.480469 z " + id="path2086" /> + </g> +</svg> diff --git a/indicator-keyboard-led.py b/indicator-keyboard-led.py new file mode 100755 index 0000000..44e02a0 --- /dev/null +++ b/indicator-keyboard-led.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# indicator-keyboard-led - simulate keyboard lock keys LED +# Copyright (c) 2016 Adrian I Lam <adrianiainlam@gmail.com> +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHOR OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# I would like to thank Tobias Schlitt <toby@php.net>, who wrote +# indicator-chars <https://github.com/tobyS/indicator-chars> which I used +# as a reference when writing this software. + +import signal +import subprocess +from os import path +import argparse +import gi +gi.require_version('Gdk', '3.0') +gi.require_version('Gtk', '3.0') +gi.require_version('AppIndicator3', '0.1') +from gi.repository import Gdk, Gtk, AppIndicator3 + +class IndicatorKeyboardLED: + locks = { 'caps': 'Caps', 'num': 'Num', 'scr': 'Scroll' } + + def __init__(self, short=False): + self.indicator = AppIndicator3.Indicator.new( + 'indicator-keyboard-led', + path.join(path.dirname(path.realpath(__file__)), 'icon.svg'), + AppIndicator3.IndicatorCategory.APPLICATION_STATUS) + self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) + + if short: + self.locks = { 'caps': 'C', 'num': 'N', 'scr': 'S' } + + keymap = Gdk.Keymap.get_default() + keymap.connect('state-changed', self.update_indicator) + self.update_indicator(keymap) + + menu = Gtk.Menu() + items = { + 'caps' : Gtk.MenuItem.new_with_label('Caps Lock'), + 'num' : Gtk.MenuItem.new_with_label('Num Lock'), + 'scr' : Gtk.MenuItem.new_with_label('Scroll Lock') + } + menu.append(items['caps']) + menu.append(items['num']) + menu.append(items['scr']) + + items['caps'].connect('activate', self.send_keypress, 'Caps_Lock') + items['num' ].connect('activate', self.send_keypress, 'Num_Lock') + items['scr' ].connect('activate', self.send_keypress, 'Scroll_Lock') + + self.indicator.set_menu(menu) + menu.show_all() + + def update_indicator(self, keymap): + label = 'â«' if keymap.get_caps_lock_state() else 'âª' + label += self.locks['caps'] + ' ' + label += 'â«' if keymap.get_num_lock_state() else 'âª' + label += self.locks['num'] + ' ' + label += 'â«' if keymap.get_scroll_lock_state() else 'âª' + label += self.locks['scr'] + self.indicator.set_label(label, '') + + def send_keypress(self, menuitem, keystroke): + subprocess.call(['xdotool', 'key', keystroke]) + +if __name__ == '__main__': + signal.signal(signal.SIGINT, lambda signum, frame: Gtk.main_quit()) + + parser = argparse.ArgumentParser( + description='indicator-keyboard-led - simulate keyboard lock keys LED') + parser.add_argument('-s', '--short', dest='short', action='store_true', + help='use short label, i.e. â«C â«N â«S instead of â«Caps â«Num â«Scroll', + required=False) + args = parser.parse_args() + + IndicatorKeyboardLED(short=args.short) + Gtk.main() diff --git a/screenshots/sc1.png b/screenshots/sc1.png new file mode 100644 index 0000000000000000000000000000000000000000..394422e20c28d876d7e37578fa9eac9bbb074c2e GIT binary patch literal 4154 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 Ef`Y;6hyVZp literal 0 HcmV?d00001 diff --git a/screenshots/sc2.png b/screenshots/sc2.png new file mode 100644 index 0000000000000000000000000000000000000000..da9d3b56a4748263a1a9b1fa891f1d5aeb4f12b9 GIT binary patch literal 6940 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 literal 0 HcmV?d00001 diff --git a/screenshots/sc3.png b/screenshots/sc3.png new file mode 100644 index 0000000000000000000000000000000000000000..2424054bb61b2306c55d0b107ee705b2b4757ed5 GIT binary patch literal 2312 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 literal 0 HcmV?d00001 -- 2.7.4