5656
Автоповорот экрана и тачскрина на ноутбуке-трансформере Dell inspiron 11
Недавно приобрел указанный в сабже девайс и установил Manjaro KDE Edition.
Указанный ноутбук является трансформером, т.е. может складываться и использоваться в качестве планшета. В таком режиме конечно хотелось бы чтобы экран поворачивался автоматом, ориентируясь на гироскоп, который в этой модели есть.
Я начал с использоования xrandr -o right. Облом: экран поворачивается, но тачскрин нет. Т.е. касания на экране отображаются неверно. Плюс это делать приходится вручную.
Потратив ощутимое время на поиски, я обнаружил скрипт который и спас положение, а также дал понимание как управлять поворотом тачскрина и получать показания с гироскопа.
Вот в этой статье
С этим скриптом есть одна проблема и одна сложность.
Проблема: скрипт сохранен с переносами, характерными для windows. Запуск вызывает странную для неопытного юзера (как я) ошибку:
Порыскав, установил dos2unix, прогнал через него файл.
Сложность: требуется точно определить местонахождение файлов положения гироскопа на пк.
Для этого я воспользовался поиском, учитывающим возможность несколько иного названия файла
После обнаружения пути, корректировки скрипта, все заработало как надо. Финальный вариант скрипта:
#!/bin/bash
echo 1
path="/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.2/1-4.2:1.0/0003:0483:91D1.0001/HID-SENSOR-200073.2.auto/iio:device4"
margin=500000
current_case=0
counter=0
num_iterations=2
function increase_counter() {
c=$1
if [[ $c -eq $current_case ]]; then
counter=$((counter + 1))
else
current_case=$c
counter=1
fi
}
sleep 1
while true; do
y=`cat $path/in_accel_y_raw`
z=`cat $path/in_accel_z_raw`
x=`cat $path/in_accel_x_raw`
# echo $x $y $z
if [[ $x -gt -$margin ]] && [[ $x -lt $margin ]]; then
if [[ "$y" -gt "$margin" ]]; then
increase_counter 2
if [[ $counter -gt $num_iterations ]]; then
xrandr -o inverted
xinput set-prop "ELAN Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1
fi
elif [[ "$y" -lt "-$margin" ]]; then
increase_counter 0
if [[ $counter -gt $num_iterations ]]; then
xrandr -o normal
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
fi
# else, x e y intorno a 0, quindi lascia l'orientazione corrente
fi
elif [[ "$x" -gt «0» ]]; then
increase_counter 3
if [[ $counter -gt $num_iterations ]]; then
xrandr -o left
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1
fi
else
increase_counter 1
if [[ $counter -gt $num_iterations ]]; then
xrandr -o right
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
fi
fi
sleep 0.02
done
Указанный ноутбук является трансформером, т.е. может складываться и использоваться в качестве планшета. В таком режиме конечно хотелось бы чтобы экран поворачивался автоматом, ориентируясь на гироскоп, который в этой модели есть.
Я начал с использоования xrandr -o right. Облом: экран поворачивается, но тачскрин нет. Т.е. касания на экране отображаются неверно. Плюс это делать приходится вручную.
Потратив ощутимое время на поиски, я обнаружил скрипт который и спас положение, а также дал понимание как управлять поворотом тачскрина и получать показания с гироскопа.
Вот в этой статье
С этим скриптом есть одна проблема и одна сложность.
Проблема: скрипт сохранен с переносами, характерными для windows. Запуск вызывает странную для неопытного юзера (как я) ошибку:
ошибка /bin/bash^M: неверный интерпретатор
Порыскав, установил dos2unix, прогнал через него файл.
Сложность: требуется точно определить местонахождение файлов положения гироскопа на пк.
Для этого я воспользовался поиском, учитывающим возможность несколько иного названия файла
find / -iname *accel* 2>/dev/null
Ошибки сыпем в null.После обнаружения пути, корректировки скрипта, все заработало как надо. Финальный вариант скрипта:
Скрипт
echo 1
path="/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.2/1-4.2:1.0/0003:0483:91D1.0001/HID-SENSOR-200073.2.auto/iio:device4"
margin=500000
current_case=0
counter=0
num_iterations=2
function increase_counter() {
c=$1
if [[ $c -eq $current_case ]]; then
counter=$((counter + 1))
else
current_case=$c
counter=1
fi
}
sleep 1
while true; do
y=`cat $path/in_accel_y_raw`
z=`cat $path/in_accel_z_raw`
x=`cat $path/in_accel_x_raw`
# echo $x $y $z
if [[ $x -gt -$margin ]] && [[ $x -lt $margin ]]; then
if [[ "$y" -gt "$margin" ]]; then
increase_counter 2
if [[ $counter -gt $num_iterations ]]; then
xrandr -o inverted
xinput set-prop "ELAN Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1
fi
elif [[ "$y" -lt "-$margin" ]]; then
increase_counter 0
if [[ $counter -gt $num_iterations ]]; then
xrandr -o normal
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
fi
# else, x e y intorno a 0, quindi lascia l'orientazione corrente
fi
elif [[ "$x" -gt «0» ]]; then
increase_counter 3
if [[ $counter -gt $num_iterations ]]; then
xrandr -o left
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1
fi
else
increase_counter 1
if [[ $counter -gt $num_iterations ]]; then
xrandr -o right
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
fi
fi
sleep 0.02
done
3 комментария
Возникла такая же проблема. Можешь помочь? В арчеподобных линуксах еще новичок, не могу сообразить как акселерометр найти. И я так понимаю строку с найденым акселерометром нужно в скрипт вставить. У меня он на 42 и 57 строки ругается