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


onboard в debian 8 с systemd

Купил себе ноутбук с сенсорным экраном.
Собственно решил настроить экранную клавиатуру
1. скачиваем с сайта ubuntu пакеты http://packages.ubuntu.com/vivid/onboard
потребуются два пакта onboard и onboard-data
2. ставим их 
sudo dpkg -i ./onboard-data.deb
sudo dpkg -i ./onboard.deb
3. т.к. я использую awesome (а может это и не связано ) выявиться глюк в том что не работало переключение раскладки + если переключить на русский то при нажатии на onboard писало  на английском 
решение [1]
суть надо предварительно выполнить setxkbmap 
4. сделаем автозапуск у своего пользователя onboard через systemd
создаём файл ~/.config/systemd/user/onboard.service
[Unit]
Description=onboard
After=display-manager.service

[Service]
Environment=DISPLAY=:0.0
ExecStartPre=/usr/bin/setxkbmap
ExecStart=/usr/bin/onboard
Restart=always
RestartSec=10

[Install]
WantedBy=default.target


systemctl --u daemon-reload
systemctl --u enable onboard.service
systemctl --u start onboard.service
systemctl --u status onboard.service
смысл команд можно почитать [2]
единственное поясню ключ --u запускает systemd в пространстве пользователя
ссылки: 1. http://www.lubuntu.ru/forum/viewtopic.php?f=19&t=440&start=50#p4923 2. https://wiki.archlinux.org/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) 3. https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/ 4. http://www2.kangran.su/~nnz/pub/s4a/s4a_latest.pdf