A entrada da tela sensível ao toque não gira: Lenovo Yoga 13 / Yoga 2 Pro

8

Depois de receber um Lenovo Yoga 13 no Natal, fiquei satisfeito com seu desempenho no Ubuntu. É fácil alterar a orientação do visor no menu Configurações do visor ou digitando, por exemplo, xrandr -o invertedno terminal. No entanto, isso não gira a entrada da tela sensível ao toque (ou, menos importante, do touchpad).

Procurei soluções para esse problema e encontrei duas fontes promissoras.
(1) http://cc.oulu.fi/~rantalai/synaptics/ . Instalar o pacote aqui e executar os comandos recomendados girou a entrada do monitor e do touchpad (mas não a da tela sensível ao toque).
(2) http://www.elfsternberg.com/2013/05/25/thinkpad-yoga-ubuntu-12/ . Este site recomendou a atualização de um pacote de entrada, que eu não tentei.

user28549
fonte
O problema (e solução) é o mesmo no Yoga 2 Pro
rubo77
Talvez você pode adicionar auto-rotação com este script também: krizka.net/projects/autorotate
rubo77

Respostas:

8

Encontrei uma resposta direta para minha pergunta, lendo as informações úteis no Ubuntu Wiki: X - Input Coordinate Transformation .

Estes comandos podem ser usados ​​para alinhar as rotações dos dispositivos de entrada e da tela:

  1. O primeiro comando gira a exibição, onde pode ser esquerda, direita, normal ou invertida:
    xrandr -o <orientation>

  2. remapear o dispositivo de entrada:
    xinput set-prop '<device name>' 'Coordinate Transformation Matrix' <matrix-elements-rowwise>

O segundo comando remaps o dispositivo de entrada (isto é, o touchpad ou o ecrã sensível ao toque), onde <matrix-elements-rowwise>é 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 1, ou -1 0 1 0 -1 1 0 0 1; correspondente às orientações acima.

Os nomes do touchpad e da tela sensível ao toque podem ser encontrados xinput liste também podem ser desativados completamente xinput disable <device-name>. Posteriormente, xinput enable <device-name>reativará o dispositivo de entrada.

No meu caso, e provavelmente para outras pessoas com um Yoga 13 (também no Yoga 2 Pro), a tela sensível ao toque é chamada ELAN Touchscreene o touchpad SynPS/2 Synaptics TouchPad.

Portanto, coloquei um script curto no meu diretório pessoal chamado rotate-inverted.shcom o seguinte conteúdo:

    #! / bin / bash
    # Este script gira a entrada da tela e da tela sensível ao toque em 180 graus, desativa o touchpad e ativa o teclado virtual
    xrandr -o invertido
    xinput set-prop 'ELAN Touchscreen' 'Matriz de transformação de coordenadas' -1 0 1 0 -1 1 0 0 1
    xinput desativar 'SynPS / 2 Synaptics TouchPad'
    a bordo &

Então eu fiz o script executável com

chmod u+x rotate-inverted.sh

e atribuiu o comando ~/rotate-inverted.shao atalho do teclado Ctrl+ Alt+ Iem
Configurações do sistema -> Teclado .

Após o logoff e o logon, consegui girar o teclado pressionando o atalho.

Fiz o mesmo tipo de coisa para as outras posições de rotação, usando os comandos xinput enable 'SynPS/2 TouchPad'e em killall onboardvez de xinput disable 'SynPS/2 TouchPad'e onboard &para rotate-normal.sh.

Alguns outros membros deste tópico discutiram sobre atribuir esses scripts aos botões extras do
Yoga - como o botão de bloqueio - e executá-los automaticamente após alterar a posição do Yoga; mas eu não tinha certeza de como fazer isso.

user28549
fonte
Obrigado pelo seu trabalho detalhado. Fiquei me perguntando se você encontrou alguma pesquisa que falasse sobre como obter essa reorientação imediatamente (usando o acelerômetro, suponho)?
precisa saber é
Isso também funciona perfeitamente no meu Yoga 2 Pro! O script aprimorado abaixo por user267578 funciona perfeitamente! Vou adicioná-lo no meu Guia para instalar o Ubuntu no Lenovo Yoga 2 Pro
rubo77
Talvez você descubra como usar a chave correta para mapear seu script aqui ?
rubo77
4

Adicionei mais algumas linhas, a segunda execução do script retornará a tela ao normal e habilitará o touchpad, testado com o Ideapad 2 Pro. A propósito, eu coloquei o iniciador do script no painel lateral HowTo: new launcher .

O acelerômetro ainda não é suportado no kernel, mas talvez algo esteja vindo no próximo lançamento.

crie o script /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

e conceda direitos executáveis:

sudo chmod +x /usr/local/bin/rotate-screen.sh
user267578
fonte
1
grande trabalho, eu aumentei o seu script aqui: gist.github.com/rubo77/daa262e0229f6e398766
rubo77
Obrigado! Funciona bem. Eu criei um lançador para torná-lo ainda mais fácil de usar.
Guillaume Sorel
1

A rotação do utilitário foi projetada para funcionar com o ThinkPad Yogas, para lidar com informações da caneta e assim por diante, e oferece todos os tipos de controle de orientação (por botão, rotação da tela e acelerômetro). Pode valer a pena tentar.

d3pd
fonte
0

Soluções sem xrandr(o que não funciona no wayland)

Uma solução no Ubuntu 19.04 com wayland é definir a rotate-monitorchave para algumas combinações de teclas usando gsettingsor dconf-editor.

Por exemplo, o seguinte comando fará com Ctrl+F8que a tela gire no sentido anti-horário:

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

Isso não permite que o usuário especifique a orientação do alvo, mas apenas gire a tela até que a orientação desejada seja alcançada.

(original publicado aqui: https://unix.stackexchange.com/a/465395/20661 )

rubo77
fonte