Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Скрипт поворота экрана на экране логина и калибровки устройства сенсорного ввода на устройствах с проблемами ориентации экрана и инвертированном сенсорном устройстве ввода. Проблема возникает на устройствах с сенсорным вводом, например DEPO Sky M70.

Информация
iconfalse

Оглавление




Скрипт fly-rotate-no-wm.sh

Раскрыть
titlefly-rotate-no-wm.sh

Скачать

Блок кода
themeFadeToGrey
languagebash
titlefly-rotate-no-wm.sh
#!/bin/sh 

name=
#nameWacom=

connected=$(xrandr -q --verbose | grep " connected primary")
output=$(echo "$connected" | head -n 1 | sed -e "s/\([a-zA-Z0-9]\+\) connected.*/\1/")

if [ -z "$output" ] ; then
  echo Не найден экран для поворота
  exit 1
fi

name="11;4"
IFS=';'

COMPTON_PID=`ps -C compton -o pid=`
[ ! -z $COMPTON_PID ] && kill $COMPTON_PIDconnected=$(xrandr -q --verbose | grep " connected")
  output=$(echo "$connected" | head -n 1 | sed -e "s/\([a-zA-Z0-9]\+\) connected.*/\1/")
  if [ -z "$output" ] ; then
    echo "Не найден экран для поворота"
    exit 1
  fi
fi

#Try to guess about current orientation and rotate

# Find
#Find the line in "xrandr -q --verbose" output that contains current screen orientation and "strip" out current orientation. 
#rotationrotation="$(xrandr -q --verbose | grep 'connected' echo "$connected" | egrep -o  '\) (normal|left|inverted|right) \(' | egrep -o '(normal|left|inverted|right)')"
#cut the first connected
rotation="$(echo $rotation | cut "$connected" | egrep -o  '\) (normal|left|inverted|right) \(' | egrep -o '(normal|left|inverted|right)')"


if ! test -z "$1"; then

# Workaroiund left<->right rotation failed in Qt!
VKBD-d' ' -f1)"

#Get input devices to rotate too
#\t is default delimiter, to set other use -d option, i.e. -d' ' for space
#name=`fly-wmfunc FLYWM_GET_INPUT_DEVICES   0x5 | grep -v Wacom | cut -f1  2> /dev/null | tr '\n' ';'`
#nameWacom=`fly-wmfunc FLYWM_GET_INPUT_DEVICES 0x5 | grep Wacom | cut -f1  2> /dev/null | tr '\n' ';'`
#name=`fly-wmfunc FLYWM_GET_INPUT_DEVICES   0x5 | cut -f1  2> /dev/null | tr '\n' ';'`
name="4;11"
IFS=';'

#stop compton to restart
COMPTON_PID=`ps -C fly-vkbdcompton -o pid=`
[ ! -z $VKBD$COMPTON_PID ] && fly-vkbd --minimizetotray kill $COMPTON_PID


if ! test -z "$1"; then

case "$1" in 
    left)
    if [ "$rotation" = "right" ]; then 
	xrandr --output $output --rotate normal
	if [ "$?" = 1 ]; then
	    fly-dialog --caption "Вращение экрана" --msgbox "Не удалось выполнить вращение"
	    exit 1
	fi
	sleep 3
    fi
    ;;
    right)
    if [ "$rotation" = "left" ]; then 
	xrandr --output $output --rotate normal
	if [ "$?" = 1 ]; then
	    fly-dialog --caption "Вращение экрана" --msgbox "Не удалось выполнить вращение"
	    exit 1
	fi
	sleep 3
    fi
    ;;
esac

#Do required rotation
xrandr --output $output --rotate "$1"
if [ "$?" = 1 ]; then
    fly-dialog --caption "Вращение экрана" --msgbox "Не удалось выполнить вращение"
    exit 1
fi

case "$1" in 
    left) 
    for name_i in ${name}; do
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axes Swap" 1
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 1 0
    done
    xinput set-prop --type=int --format=8 4 "Evdev Axis Inversion" 1 0 "${name_i}" "Wacom Rotation" 2
    done
    ;;
    right) 
    for name_i in ${name}; do
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axes Swap" 1
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 0 1
    done
    xinput set-prop --type=int --format=8 4 "Evdev Axis Inversion" 0 1 "${name_i}" "Wacom Rotation" 1
    done
    ;;
    normal) 
    for name_i in ${name}; do
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axes Swap" 0
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 0 0
    done
    xinput set-prop --type=int --format=8 4"${name_i}" "EvdevWacom Axis InversionRotation" 0
   0 done
    ;; 
    inverted) 
    for name_i in ${name}; do
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axes Swap" 0
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 1 1
    done
    xinput set-prop --type=int --format=8 4 "Evdev Axis Inversion" 1 1 "${name_i}" "Wacom Rotation" 3
    done
    ;;
esac

else

rotateTo=
case "$rotation" in 
    normal) 
    rotateTo="left"
    ;;
    left) 
    rotateTo="normal"
    ;;
esac
if ! test -z "$rotateTo"; then
    xrandr --output $output --rotate $rotateTo
    if [ "$?" = 1 ]; then
      fly-dialog --caption "Вращение экрана" --msgbox "Не удалось выполнить вращение"
      exit 1
    fi
else
    fly-dialog --caption "Вращение экрана" --msgbox "Не удалось определить текущую ориентацию экрана"
    exit 1
fi

dentry=
#if [ -f $HOME/.fly/toolbar/rotate.desktop ]; then 
# dentry=$HOME/.fly/toolbar/rotate.desktop
#fi

# Using current screen orientation proceed to rotate screen and input tools. 
case "$rotation" in 
    normal) 
    #rotate to the right  left
    if ! test -z "$dentry"; then
      sed -i 's/Icon[ \t]*[\=]*.*$/Icon=object-rotate-left/' "$dentry"
    fi
    for name_i in ${name}; do
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axes Swap" 1
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 1 0
    done
    xinput set-prop --type=int --format=8 4 "Evdev Axis Inversion" 1 0 "${name_i}" "Wacom Rotation" 2
    done
    ;;
    left) 
    #rotate to the normal 
    if ! test -z "$dentry"; then
      cat $dentry | sed 's/Icon[ \t]*[\=]*.*$/Icon=object-rotate-leftright/' > /tmp/dentry.tmp
      mv -f /tmp/dentry.tmp $dentry
    fi
    for name_i in ${name}; do
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axes Swap" 0
    xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 0 0
    done
    xinput set-prop --type=int --format=8 4"${name_i}" "EvdevWacom Axis InversionRotation" 0
    0done
    ;;
esac
fi


#alex: need delay?

#restart it after all rotation#sleep 1
#TODO: do recalculation of icon positions instead of lineup
fly-wmfunc FLYWM_ORDER_ICON


[ ! -z $COMPTON_PID ] && compton &




ВНИМАНИЕ:

Предупреждение
titleВнимание

Скрипт Сценарий перед использованием необходимо модифицировать под вашу конфигурацию.

Необходимо убрать любую калибровку, любое использование xrandr и fly-rotate* в файле /etc/X11/fly-dm/Xsetup.

В сессии запустите команду xinput, в её выводе будет раздел Virtual core pointer

Блок кода
themeRDark
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=11 [slave pointer (2)]
...

4 и 11 - идентификаторы устройств типа указатель. Затем в скрипте fly-rotate-no-wm.sh найтите  найдите строку 

Блок кода
titlefly-rotate-no-wm.sh
name="11;4"

это id  устройств типа указатель, нужно вместо них через " ; " занести свои id (их может быть больше 2х)

Если  оси инвертированы у тачскрина изначально, а у мыши изначально все ОК с курсором, то в строке:

Блок кода
languagebash
titlefly-rotate-no-wm.sh
...
xinput set-prop --type=int --format=8 "${name_i}" "Evdev Axis Inversion" 1 0
...

надо попробовать все комбинации 

Блок кода
1 0 
0 1
0 0
1 1


Разместите скрипт, например в /usr/bin и вызывайте из /etc/X11/fly-dm/Xsetup (вместо fly-rotate.sh) как 

Блок кода
title/etc/X11/fly-dm/Xsetup
fly-rotate-no-wm.sh left
и никакая калибровка не будет нужна!

Отключение блокировки

Для того, чтобы тачскрин не блокировался на время гашения экрана надо 
во всех файлах 
/usr/share/fly-wm/theme/*themerc* (это для новых юзеровпользователей)
$HOME/.fly/theme/*themerc* (это для уже заходивших юзеровбывалых пользователей)
Найти и раскомментарить параметры:

Блок кода
;LockerDPMSInCallback="xinput disable %d"
;LockerDPMSOutCallback="xinput enable %d"

т.е. сделать так:

Блок кода
LockerDPMSInCallback=""
LockerDPMSOutCallback=""

а если не поможет отработает то так так:

Блок кода
LockerDPMSInCallback="xinput enable %d"
LockerDPMSOutCallback="xinput enable %d"