#!/usr/bin/python import os,time,re,sys; from xrandr import xrandr def log(txt): print txt def listDevices(): return ["stylus"]; def rotateWacom(mode): codes={xrandr.RR_ROTATE_0:"0", xrandr.RR_ROTATE_90:"2", xrandr.RR_ROTATE_180:"3", xrandr.RR_ROTATE_270:"1"} for i in listDevices(): os.system("xsetwacom set "+i+" Rotate "+codes[mode]) def rotateButtons(mode): keysim=["71","6d","6f","6e"] keycodes={xrandr.RR_ROTATE_0:[105,108,106,103], xrandr.RR_ROTATE_90:[103,105,108,106], xrandr.RR_ROTATE_180:[106,103,105,108], xrandr.RR_ROTATE_270:[108,106,103,105]} for i in keysim: toCode=keycodes[mode].pop(); os.system("sudo setkeycodes "+str(i)+" "+str(toCode)) # log("setkeycodes "+str(i)+" "+str(toCode)) def rotate(mode): codes={xrandr.RR_ROTATE_0:"0", xrandr.RR_ROTATE_90:"2", xrandr.RR_ROTATE_180:"3", xrandr.RR_ROTATE_270:"1"} if(mode!=screen.get_current_rotation()): # log(str(x)+","+str(y)) # log(str(screen.get_current_rotation())+"rotate"+str(mode)) screen.set_rotation(mode) screen.apply_config() rotateWacom(mode) rotateButtons(mode) time.sleep(1) def main(): i=0 f=open('/sys/devices/platform/hdaps/calibrate','r') line=f.readline().replace("\n","").replace("\r",""); m=re.search('.(-?[0-9]*),(-?[0-9]*).',line); xCal=int(m.group(1)) yCal=int(m.group(2)) while True: time.sleep(0.1); try: # Check mode f=open('/etc/tabletmode','r'); line=f.readline() # log("Mode: "+line) if(line == "laptop\n"): #laptop mode, check if in normal mode rotate(xrandr.RR_ROTATE_0) else: #tabletmode f=open('/sys/devices/platform/hdaps/position','r') line=f.readline() m=re.search('.(-?[0-9]*),(-?[0-9]*).',line) x=int(m.group(2))-xCal y=int(m.group(1))-yCal #log(str(x)+","+str(y)) #Sensitivity seting if(abs(x)<70 and abs(y)<70): continue if(abs(y)>abs(x)): if(y>0): nextMode=xrandr.RR_ROTATE_90 else: nextMode=xrandr.RR_ROTATE_270 else: if(x<0): nextMode=xrandr.RR_ROTATE_0 else: nextMode=xrandr.RR_ROTATE_180 # log(str(x)+","+str(y)) if(screen.get_current_rotation()==nextMode): i=0; if(i>2): rotate(nextMode); else: i=i+1 log(i) except: print "Unexpected error: ",sys.exc_info()[0] raise screen=xrandr.get_current_screen() main()