File: led-toggle.py

package info (click to toggle)
python-libevdev 0.13.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 420 kB
  • sloc: python: 2,739; makefile: 14
file content (74 lines) | stat: -rwxr-xr-x 1,907 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/python3

import libevdev
import sys


def toggle(path, ledstr):
    ledmap = {
        "numlock": (libevdev.LED_NUML, libevdev.KEY_NUMLOCK),
        "capslock": (libevdev.LED_CAPSL, libevdev.KEY_CAPSLOCK),
        "scrolllock": (libevdev.LED_SCROLLL, libevdev.KEY_SCROLLLOCK),
    }

    if ledstr not in ledmap:
        print(
            'Unknown LED: "{}". Use one of "{}".'.format(
                ledstr, '", "'.join(ledmap.keys())
            )
        )
        sys.exit(1)

    led, key = ledmap[ledstr]

    with open(path, "r+b", buffering=0) as fd:
        d = libevdev.Device(fd)
        if not d.has(led):
            print("Device does not have a {} LED".format(ledstr))
            sys.exit(0)

        if not d.has(key):
            print("Device does not have a {} key".format(ledstr))
            sys.exit(0)

        state = d.value[key]
        print("{} {}".format(ledstr, "on" if state else "off"))

        while True:
            for e in d.events():
                if not e.matches(key):
                    continue

                if not e.value:
                    continue

                state = not state
                d.set_leds([(led, state)])
                print("{} {}".format(ledstr, "on" if state else "off"))


if __name__ == "__main__":
    if len(sys.argv) < 3:
        print(
            "Usage: {} /dev/input/eventX {{numlock|capslock|scrolllock}}".format(
                sys.argv[0]
            )
        )
        sys.exit(1)

    path = sys.argv[1]
    ledstr = sys.argv[2]

    try:
        toggle(path, ledstr)
    except KeyboardInterrupt:
        pass
    except IOError as e:
        import errno

        if e.errno == errno.EACCES:
            print("Insufficient permissions to access {}".format(path))
        elif e.errno == errno.ENOENT:
            print("Device {} does not exist".format(path))
        else:
            raise e