| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/usr/bin/python3
- # -*- coding: utf-8 -*-
- from typing import Dict
- # ließ und schreibt RGB Daten für die farbige Tastaturbeleuchtung auf Clevo NL51 Laptops
- # Notwendigerweise müssen die Treiber von NovaCustom oder Tuxedo kompiliert und geladen sein
- # siehe: https://wiki.siningsoft.de/doku.php?id=terra:1500p
- # Kernelmodul: tuxedo_keyboard
- # 2026-02-02 - devnull - initial
- # 2026-02-03 - devnull - added Brightness restore
- # 2026-02-04 - devnull - JSON statefile
- # 2026-02-11 - devnull - Einführung einer Klasse
- ver="1.1"
- import os
- import sys
- import argparse
- import json
- class kbdLED_class:
- # 2026-02-11 - devnull - Einführung einer Klassendefinition
- # diese Versionsnummer wird getrennt vom Programmcode geführt, da es sich getrennt entwickeln wird
- __version__ = 1.1
- config = Dict()
- # Objekt erzeugen
- def __init__(self, cmd, kbd_state_fp='/var/lib/kbdLED.state.json', sysfs_color_fp='/sys/devices/platform/tuxedo_keyboard/leds/rgb:kbd_backlight/multi_intensity', sysfs_bri_fp='/sys/devices/platform/tuxedo_keyboard/leds/rgb:kbd_backlight/brightness'):
- self.config['sysfs']['color']=sysfs_color_fp
- self.config['sysfs']['bri']=sysfs_bri_fp
- self.config['state']=kbd_state_fp
- if cmd=="start":
- self.readStateFile(self.config['state'])
- self.writeColor()
- self.writeBrightness()
- elif cmd=="stop":
- self.readColor()
- self.readBrightness()
- self.writeStateFile(self.config['state'])
- def readStateFile(kbd_state_fp):
- config = {"color":
- {"R": 255,
- "G": 255,
- "B": 255},
- "Brightness": 255
- }
- try:
- with open(kbd_state_fp, 'r') as kbd_state_fh:
- config = json.load(kbd_state_fh)
- except FileNotFoundError:
- print("keine Statusdatei gefunden, nutze Standardwerte")
- except PermissionError:
- print("Fehler beim lesen")
- return config
- def writeStateFile(kbd_state_fp):
- try:
- with open(kbd_state_fp, 'w') as kbd_state_fh:
- json.dump(self.config, kbd_state_fh)
- except FileNotFoundError:
- print("Verzeichnis nicht gefunden")
- return True
- # color String nach Config Dict
- def color2dict(self,color_string):
- ca=color_string.split(" ")
- self.config['color']['R'] = int(ca[0])
- self.config['color']['G'] = int(ca[1])
- self.config['color']['B'] = int(ca[2])
- # color Confi Dict nach String
- def dict2color(self):
- return self.config['color']['R'] + " " + self.config['color']['G'] + " " + self.config['color']['B']
- # reads the color Values from sysfs
- def readColor(self):
- try:
- with open(self.config['sysfs']['sysfs_color_fp']) as fh:
- self.color2dict(fh.read())
- except FileNotFoundError:
- print("- fehler beim Öffnen der Sysfs Datei " + self.config['sysfs']['sysfs_color_fp'])
- sys.exit(1)
- except PermissionError:
- print("- keine Rechte die Datei zu lesen " + self.config['sysfs']['sysfs_color_fp'])
- sys.exit(1)
- # writes the color values to sysfs
- def writeColor(self):
- try:
- with open(self.config['sysfs']['color']) as fh:
- fh.write(self.dict2color())
- except FileNotFoundError:
- print("- fehler beim Schreiben der Sysfs Datei " + self.config['sysfs']['color'])
- sys.exit(1)
- except PermissionError:
- print("- keine Rechte die Datei zu schreiben " + self.config['sysfs']['color'])
- sys.exit(1)
- # reads Brightness from sysfs
- def readBrightness(self):
- try:
- with open(self.config['sysfs']['bri']) as fh:
- self.config['Brightness'] = int(fh.read())
- except FileNotFoundError:
- print("- fehler beim Öffnen der Sysfs Datei " + self.config['sysfs']['bri'])
- sys.exit(1)
- except PermissionError:
- print("- keine Rechte die Datei zu lesen " + self.config['sysfs']['bri'])
- sys.exit(1)
- # writes Brightness to sysfs
- def writeBrightness(self):
- try:
- with open(self.config['sysfs']['bri']) as fh:
- fh.write(self.config['Brightness'])
- except FileNotFoundError:
- print("- fehler beim Schreiben der Sysfs Datei " + self.config['sysfs']['bri'])
- sys.exit(1)
- except PermissionError:
- print("- keine Rechte die Datei zu schreiben " + self.config['sysfs']['bri'])
- sys.exit(1)
- # Press the green button in the gutter to run the script.
- if __name__ == '__main__':
- parser = argparse.ArgumentParser(
- prog='T1500_KeyboardLED',
- description='saves and restore LED Colors',
- epilog='GPL')
- startstop = parser.add_mutually_exclusive_group()
- startstop.add_argument('--start', action='store_true', help='will be used for system starts')
- startstop.add_argument('--stop', action='store_true', help='will be used for system shutdowns')
- startstop.add_argument('--version', action='version', version='%(prog)s ' + ver, default='d')
- args = parser.parse_args()
- if args.start:
- print("Keyboard: read and set Color and Brightness")
- kL = kbdLED_class("start")
- elif args.stop:
- print("Keyboard: read and save Color and Brightness")
- kL = kbdLED_class("stop")
- else:
- parser.print_help()
- sys.exit((1))
- sys.exit(0)
|