Dane dotykowe nie obracają się: Lenovo Yoga 13 / Yoga 2 Pro

8

Po otrzymaniu Lenovo Yoga 13 na Boże Narodzenie jestem zadowolony z jego wydajności z Ubuntu. Łatwo jest zmienić orientację wyświetlacza w menu Ustawienia wyświetlacza lub wpisując np. xrandr -o invertedW terminalu. Nie powoduje to jednak obrócenia wejścia ekranu dotykowego (lub - co mniej ważne - touchpada).

Rozejrzałem się za rozwiązaniami tego problemu i znalazłem dwa obiecujące źródła.
(1) http://cc.oulu.fi/~rantalai/synaptics/ . Zainstalowanie pakietu tutaj i uruchomienie zalecanych poleceń spowodowało obrót ekranu i wprowadzania danych na touchpadzie (ale nie na ekranie dotykowym).
(2) http://www.elfsternberg.com/2013/05/25/thinkpad-yoga-ubuntu-12/ . Ta strona zaleciła aktualizację pakietu wejściowego, którego nie próbowałem.

użytkownik28549
źródło
Problem (i rozwiązanie) jest taki sam na Yoga 2 Pro
rubo77
Może możesz również dodać automatyczne obracanie za pomocą tego skryptu: krizka.net/projects/autorotate
rubo77

Odpowiedzi:

8

Znalazłem prostą odpowiedź na moje pytanie, czytając przydatne informacje na Ubuntu Wiki: X - Input Coordinate Transformation .

Poniższych poleceń można użyć do wyrównania obrotów urządzeń wejściowych i wyświetlacza:

  1. Pierwsze polecenie obraca wyświetlacz, gdzie może być lewy, prawy, normalny lub odwrócony:
    xrandr -o <orientation>

  2. przemapuj urządzenie wejściowe:
    xinput set-prop '<device name>' 'Coordinate Transformation Matrix' <matrix-elements-rowwise>

Drugie polecenie remaps urządzenie wejściowe (to jest dotykowa czy ekran dotykowy), w którym <matrix-elements-rowwise>znajduje się 0 -1 1 1 0 0 0 0 1, 0 1 0 -1 0 1 0 0 1, 1 0 0 0 1 0 0 0 1lub -1 0 1 0 -1 1 0 0 1; odpowiadające powyższym orientacjom.

Nazwy touchpada i ekranu dotykowego można znaleźć za pomocą xinput listi można je całkowicie wyłączyć za pomocą xinput disable <device-name>. Następnie xinput enable <device-name>ponownie włączy urządzenie wejściowe.

W moim przypadku i prawdopodobnie dla innych z Yoga 13 (także w Yoga 2 Pro), ekran dotykowy jest wywoływany ELAN Touchscreeni touchpad SynPS/2 Synaptics TouchPad.

Dlatego w moim katalogu domowym umieściłem krótki skrypt rotate-inverted.sho następującej treści:

    #! / bin / bash
    # Ten skrypt obraca ekran i wprowadzanie danych o 180 stopni, wyłącza touchpad i włącza wirtualną klawiaturę
    xrandr -o odwrócony
    xinput set-prop 'ELAN Touchscreen' 'Matryca transformacji współrzędnych' -1 0 1 0 -1 1 0 0 1
    xinput wyłącz „SynPS / 2 Synaptics TouchPad”
    na pokładzie &

Potem wykonałem skrypt za pomocą

chmod u+x rotate-inverted.sh

i przypisał polecenie ~/rotate-inverted.shdo skrótu klawiaturowego Ctrl+ Alt+ Iw
Ustawieniach systemu -> Klawiatura .

Po wylogowaniu i ponownym zalogowaniu mogłem obrócić klawiaturę, naciskając ten skrót.

Zrobiłem ten sam rodzaj rzeczy dla innych pozycji obrotu, używając poleceń xinput enable 'SynPS/2 TouchPad'i killall onboardzamiast xinput disable 'SynPS/2 TouchPad'i onboard &dla rotate-normal.sh.

Niektóre inne osoby w tym wątku omawiały przypisywanie takich skryptów do dodatkowych przycisków
jogi - takich jak przycisk blokady - a także automatyczne wykonywanie ich po zmianie pozycji jogi; ale nie byłem pewien, jak to zrobić.

użytkownik28549
źródło
Dziękuję za twoją szczegółową pracę. Zastanawiałem się, czy natknąłeś się na jakieś badania, które mówiłyby o tym, jak sprawić, by ta reorientacja nastąpiła natychmiast (jak sądzę, używając akcelerometru)?
A.Wan
Działa to również doskonale na moim Yoga 2 Pro! Ulepszony skrypt poniżej autorstwa user267578 działa idealnie! Dodam go do mojego Przewodnika instalacji Ubuntu na Lenovo Yoga 2 Pro
rubo77
Może dowiesz się, jak użyć odpowiedniego klucza do zmapowania skryptu tutaj ?
rubo77
4

Dodałem jeszcze kilka wierszy, drugie uruchomienie skryptu spowoduje powrót ekranu do normy i włączenie touchpada, testowanego z Ideapad 2 Pro. Nawiasem mówiąc, umieściłem program uruchamiający skrypt na panelu bocznym HowTo: nowy program uruchamiający .

Akcelerometr nie jest jeszcze obsługiwany w jądrze, ale może coś nadchodzi w następnej wersji.

utwórz skrypt /usr/local/bin/rotate-screen.sh

#!/bin/bash
# This script rotates the screen and touchscreen input 180 degrees, disables the touchpad, and enables the virtual keyboard
# And rotates screen back if the touchpad was disabled

isEnabled=$(xinput --list-props 'SynPS/2 Synaptics TouchPad' | awk '/Device Enabled/{print $NF}')

if [ $isEnabled == 1 ] 
then
    echo "Screen is turned upside down"
    xrandr -o inverted
    xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1
    xinput disable 'SynPS/2 Synaptics TouchPad'
    # Remove hashtag below if you want pop-up the virtual keyboard  
    # onboard &
else
    echo "Screen is turned back to normal"
    xrandr -o normal
    xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
    xinput enable 'SynPS/2 Synaptics TouchPad'
    # killall onboard 
fi

i nadać mu prawa do plików wykonywalnych:

sudo chmod +x /usr/local/bin/rotate-screen.sh
użytkownik267578
źródło
1
świetna robota, ulepszyłem
rubo77
Dzięki! Działa świetnie. Stworzyłem program uruchamiający, aby był jeszcze łatwiejszy w użyciu.
Guillaume Sorel,
1

Spin narzędzia jest przeznaczony do współpracy z ThinkPad Yogas, więc obsługuje informacje o rysikach i tak dalej, i oferuje wszelkiego rodzaju kontrolę orientacji (za pomocą przycisku, obrotu ekranu i akcelerometru). Może warto spróbować.

d3pd
źródło
0

Rozwiązania bez xrandr(które nie działają na Wayland)

Rozwiązaniem w Ubuntu 19.04 z wayland jest ustawienie rotate-monitorklucza do niektórych skrótów klawiszowych za pomocą gsettingslub dconf-editor.

Na przykład następujące polecenie spowoduje Ctrl+F8obrócenie ekranu w lewo:

$ gsettings set org.gnome.mutter.keybindings rotate-monitor "['XF86RotateWindows', '<Control>F8']"

Nie pozwala to użytkownikowi określić orientacji docelowej, a jedynie obrócić ekran, aż do osiągnięcia pożądanej orientacji.

(oryginał opublikowany tutaj: https://unix.stackexchange.com/a/465395/20661 )

rubo77
źródło