#!/usr/bin/env python #-*- coding:utf-8 -*- import os,time,sys,signal """ lightup - thinkpad keyboard light control tool Author: 吕毅 http://lvscar.info version: 090715 使用: lightup --start 闪烁键盘灯 lightup --stop 停止闪烁键盘灯 特性: 多次运行 lightup --start 只会占用一个进程。 适合于第三方软件(邮件提醒)调用 当电脑没有ThinkLight时,使用键盘Scroll Lock灯进行闪烁提醒 配置: 0. 如果你电脑没有ThinkLight,或只想使用ScrollLock灯进行闪烁提醒,只需执行步骤3,4中的操作. 1. 首先把当前用户添加到root用户组 $sudo usermod -aG root `whoami` 2. 修改键盘灯控制文件权限 $sudo chmod g+w /proc/acpi/ibm/light 2.1 开机自动调整键盘灯权限 $sudo su root #echo -e '#!/bin/bash \nchmod g+w /proc/acpi/ibm/light' > /etc/init.d/thinkpad-light ; ln -s /etc/init.d/thinkpad-light /etc/rc5.d/S90thinkpad-light 3. 设置lightup为可执行 $chmod +x lightup 4. 把lightup复制到/usr/local/bin/ $sudo cp lightup /usr/local/bin/ """ LIGHT_CONTROL_FILE = "/proc/acpi/ibm/light" PID_MARK_FILE = "/tmp/lightup.pid" BLINK_INTERVAL_SECOND = 1 control_file_obj = None def getControlFileObj(): global control_file_obj if not control_file_obj: control_file_obj = open(LIGHT_CONTROL_FILE,"w") return control_file_obj def lightup(): try: control_file_obj = getControlFileObj() control_file_obj.seek(0) control_file_obj.write("on") control_file_obj.flush() except: xset_result = os.system("xset led on") if xset_result != 0: print "xset command not available. if you use debian or ubuntu ,run \n$sudo apt-get x11-xserver-utils\nfor install " def lightdown(): try: control_file_obj = getControlFileObj() control_file_obj.seek(0) control_file_obj.write("off") control_file_obj.flush() except: xset_result = os.system("xset led off") if xset_result != 0: print "xset command not available. if you use debian or ubuntu ,run \n$sudo apt-get x11-xserver-utils\nfor install " def blink(): while True: lightup() time.sleep(BLINK_INTERVAL_SECOND) lightdown() time.sleep(BLINK_INTERVAL_SECOND) def writePidMark(): current_pid = os.getpid() try: pid_mark_file = open(PID_MARK_FILE,"w") pid_mark_file.write(str(current_pid)) finally: pid_mark_file.close() def deletePidMark(): if os.path.isfile(PID_MARK_FILE): os.remove(PID_MARK_FILE) def getPid(): if os.path.isfile(PID_MARK_FILE): try: return int(open(PID_MARK_FILE).read()) except: return None else: return None def start(): try: writePidMark() blink() finally: lightdown() deletePidMark() def main(): argv = sys.argv if len(argv) != 2 : print "Usage:lightup --start|--stop" sys.exit(0) if argv[1] == "--start": current_pid = getPid() if current_pid: try: os.kill(current_pid,signal.SIGTERM) finally: start() else: start() elif argv[1] == "--stop": current_pid = getPid() if not current_pid: sys.exit(0) else: try: os.kill(current_pid,signal.SIGTERM) finally: deletePidMark() lightdown() sys.exit(0) else: print "Usage:lightup --start|--stop" if __name__ == "__main__": main()