2015/05/17

Dell Inspiron 11 3000 и сенсор положения

Буду краток
для смены ориентации экрана делаем скрипт
1. тело
#!/usr/bin/python3
import sys, os, gc, time, glob
import subprocess

#const
#Touchscreen
name_screen = "ELAN Touchscreen"
inversion = "Evdev Axis Inversion"
swap = "Evdev Axes Swap"
#Touchpad
name_pad = "DLL064D:00 06CB:2985"
enab = "Device Enabled"
angle = 7.0


def proc(cmd,time = 30,sh = True ):
    p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=sh)
    try:
        outs, errs = p.communicate(timeout=time)
    except subprocess.TimeoutExpired:
        p.kill()
        outs, errs = p.communicate()
    return outs,errs

for device in glob.glob('/sys/bus/iio/devices/iio:device*'):
    if open(device + '/name').read() == 'accel_3d\n':
        scale = float(open(device + '/in_accel_scale').read())
        break

if __name__ == '__main__':
    x = open(device + '/in_accel_x_raw')
    y = open(device + '/in_accel_y_raw')
    position = ""
    try:
        while True:
            x.seek(0)
            y.seek(0)
            current_x = float(x.read()) * scale
            current_y = float(y.read()) * scale
            if current_y <= -angle and position != "normal":
                proc("xrandr -o normal")
                proc("xinput set-prop \"{}\" \"{}\" 0 0".format(name_screen,inversion))
                proc("xinput set-prop \"{}\" \"{}\" 0".format(name_screen,swap))
                proc("xinput set-prop \"{}\" \"{}\" 1".format(name_pad,enab))
                position = "normal"
            elif current_y >= angle and position != "inverted":
                proc("xrandr -o inverted")
                proc("xinput set-prop \"{}\" \"{}\" 1 1".format(name_screen,inversion))
                proc("xinput set-prop \"{}\" \"{}\" 0".format(name_screen,swap))
                proc("xinput set-prop \"{}\" \"{}\" 0".format(name_pad,enab))
                position = "inverted"
            elif current_x >= angle and position != "left":
                proc("xrandr -o left")
                proc("xinput set-prop \"{}\" \"{}\" 1 0".format(name_screen,inversion))
                proc("xinput set-prop \"{}\" \"{}\" 1".format(name_screen,swap))
                proc("xinput set-prop \"{}\" \"{}\" 0".format(name_pad,enab))
                position = "left"
            elif current_x <= -angle and position != "right":
                proc("xrandr -o right")
                proc("xinput set-prop \"{}\" \"{}\" 0 1".format(name_screen,inversion))
                proc("xinput set-prop \"{}\" \"{}\" 1".format(name_screen,swap))
                proc("xinput set-prop \"{}\" \"{}\" 0".format(name_pad,enab))
                position = "right"
            time.sleep(1)
    except KeyboardInterrupt:
        sys.exit(0)


2. делаем автозапуск
создаём файл ~/.config/systemd/user/sensor.service

[Unit]
Description=sensor polozenia
After=network.target
After=display-manager.service

[Service]
Environment=DISPLAY=:0.0
#путь до скрипта меняем на свой
ExecStart=/usr/bin/python3 /home/user/bin/sensor.py
Restart=always
RestartSec=10

[Install]
WantedBy=default.target

systemctl --u daemon-reload
systemctl --u enable sensor.service
systemctl --u start sensor.service
systemctl --u status sensor.service


Комментариев нет:

Отправить комментарий