Calibração da tela sensível ao toque com monitores duplos (NVidia e xinput)

6

Tenho uma placa NVidia GTX260 com uma tela normal acima de uma tela sensível ao toque usando o driver eGalax.

Eu tentei configurar a tela sensível ao toque usando xinput, mas não consigo acertar. Com a tela normal desconectada e mexendo na opção "Evdev Axis Calibration", ela funciona bem, mas quando eu conecto a tela normal novamente, o mapeamento rígido é deslocado. Se eu tocar na tela sensível ao toque, o mouse se moverá para a posição correspondente na outra tela.

Nem "Matriz de Transformação de Coordenadas" nem "mapa-a-saída" parecem funcionar ...

Qualquer ajuda é muito apreciada!

/ Henrik

    
por user129955 10.02.2013 / 12:39

5 respostas

6

Eu agora (em 13.04) tive um problema semelhante, mas xinput map-to-output ajudou, se eu fiz as coisas na ordem correta.

xinput map-to-output tweaks a "Matriz de Transformação de Coordenadas".% xinput_calibrator conjuntos "Evdev Axis Calibration" e é completamente inconsciente de "Matriz de Transformação de Coordenadas". Ele também sempre abre esticado para a área de saída total disponível.

Isso significa que você deve executar xinput_calibrator em uma única tela.

  1. xrandr --output <non-touch-output> --off

  2. xinput map-to-output <touch input device> <touch-output>
    (para redefinir "Matriz de Transformação de Coordenadas" no caso de você ter tocado antes).

  3. Calibre com xinput_calibrator .
    Agora você deve ter um toque bem calibrado na tela única.
    (Meu touchscreen estava inicialmente fora - X / Y trocou, Y invertido - então eu tive que rodar isso duas vezes, com --misclick 0 . Acredito que isso seja uma propriedade da minha touchscreen, não relacionada à situação do monitor duplo).

  4. Reabilite a segunda tela.
    xrandr --output <non-touch-output> --on

  5. Faça map-to-output novamente.

por Beni Cherniavsky-Paskin 10.05.2013 / 06:11
2

para mim com o Ubuntu 12.04 LTS (64 bits) ele não foi infectado até que eu vi no xinput --help que o comando correto é

  

xinput map-to-crtc 'Nome do dispositivo de entrada' Nome do dispositivo de saída

enquanto Nome do dispositivo de entrada é mostrado por $ xinput --list, nome do dispositivo de saída é mostrado em $ xrandr e pode ser LVDS1 oder VGA1, por exemplo

    
por user188030 28.08.2013 / 11:22
1

Se você quiser uma ferramenta gráfica na bandeja do sistema, basta criar uma e gostar de ver se ela é útil para qualquer outra pessoa: Basta selecionar seu dispositivo de caneta de entrada e qual tela mapeá-lo para:

link

Acabamos de começar para que possa haver problemas na identificação do seu tablet ou de suas telas. Então, informe-nos. Nós vamos corrigir isso imediatamente. Também planejamos que ele mantenha sua configuração anterior após a inicialização - talvez até se lembre de qual configuração foi usada para a configuração de tela se algumas pessoas continuarem adicionando e removendo monitores.

    
por Hrobjartur Thorsteinsson 19.01.2016 / 08:43
0

Eu não conseguia fazer com que meu painel de toque genérico / eGalax USB funcionasse corretamente, no meu sistema Mint 18.2, com qualquer resposta que encontrasse por conta própria, mas achei que deveria compartilhar o que funcionou para mim.

Primeiro desativei meu monitor sem toque (como sugerido por Beni Cherniavsky-Paskin) e calibrou meu painel de toque usando xinput_calibrator .

Liguei meu outro monitor novamente (através da seção de exibição do painel Configurações do sistema). Nesse ponto, o painel de toque está bem calibrado, mas a entrada ainda mapeia através de ambos os monitores.

Para compensar até o monitor / área desejada, eu mapeei novamente a "Matriz de Transformação de Coordenadas" do painel, conforme recomendado em este manual usando

$ xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" c0 0 c1 0 c2 c3 0 0 1

Para Device Name , usei xinput --list para obter o ID do painel de toque. Da seguinte saída eu tenho o id 13 :

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SIGMACH1P USB Keyboard                    id=10   [slave  pointer  (2)]
⎜   ↳ SOAI Gaming Mouse                         id=12   [slave  pointer  (2)]
⎜   ↳ eGalax Inc. USB TouchController           id=13   [slave  pointer  (2)]

Calcifiquei os params como explicado no manual mencionado. por exemplo. Para mim, um offset de área de toque de 768px no meu monitor de 1900px, me rendeu um c0 = 768/(1900+768) = 0.287856 . Terminou com este comando:

$ xinput set-prop 13 --type=float "Coordinate Transformation Matrix" 0.287856, 0.000000, 0.712114, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

Isso tudo funcionou bem. btw eu tive alguns problemas, que parecem desaparecer quando eu usei apenas precisão de 6 casas decimais para o params idk se isso é realmente necessário ou, mais provavelmente eu só tinha estragado-se sth mais.

    
por Simmo Andreev 27.01.2018 / 03:27
0

Embora a resposta do Beni provavelmente funcione para algumas pessoas (se não a maioria), no meu caso xinput_calibrator ainda estava ficando confuso apesar dos outros monitores estarem desativados. Eu também não era parcial para instalar drivers de código fechado do fornecedor.

Felizmente, usando as informações neste mesmo QA e outras fontes (o Documentação do EVDEV xorg , e esta resposta ), Acontece que é completamente possível configurar tudo manualmente contanto que você esteja usando EVDEV e Xorg (padrão para o Kubuntu atualmente pelo menos) .

Configuração de sessão única (via xinput)

  1. Encontre o ID do dispositivo por meio de xinput --list . Isso será referido como <DEVICE_ID> .
  2. Execute xinput --list-prop <DEVICE-ID> e anote os valores padrão apenas no caso.
  3. Configure a propriedade Matriz de transformação de coordenadas. A maneira mais fácil seria instalar ptxconf de Hrobjartur responda e use sua opção de configuração.
  4. Agora você está pronto para configurar eixos. O primeiro passo é verificar se as coordenadas X e Y são trocadas entre si. Para fazer isso:
    • pressione seu dedo / caneta na parte superior da tela,
    • e na parte inferior. Se o ponteiro do mouse aparecer à esquerda e à direita (ou vice-versa), execute: %código%. Caso contrário, deixe esta propriedade inalterada.
  5. Agora, verifique se os eixos X e / ou Y precisam ser invertidos. Isso é controlado pela propriedade xinput --set-prop <DEVICE_ID> "Evdev Axes Swap" 1 , com dois valores - Evdev Axis Inversion , em que 0 é normal e 1 é invertido. Assim:
    • verifique se pressionar o lado esquerdo da tela posiciona o cursor à direita. Se assim for, você precisa inverter X.
    • verifique se pressionar o topo da tela coloca o cursor na parte inferior. Em caso afirmativo, você precisa inverter Y.
    • Por exemplo, inverter X e deixar Y inalterado significa executar: X Y .
  6. Agora chegamos às coisas divertidas - calibração. A propriedade xinput --set-prop <DEVICE_ID> "Evdev Axis Inversion" 1 0 a controla e, teoricamente específica do fornecedor , mas é possível descobrir com um pouco de estímulo (literalmente). Veja o que você precisa fazer:
    • verifique se Evdev Axis Calibration foi redefinido (aconteceu no meu caso depois de executar o ptxconf). Nesse caso, execute Evdev Axis Calibration (observe que, embora os valores sejam separados por vírgula na saída, eles devem ser separados por espaço na entrada).
    • os valores podem ser descritos, pelo menos no meu caso, como xinput --set-prop <DEVICE_ID> "Evdev Axis Calibration" <DEFAULT_VALUES_FROM_POINT_1> .
    • pegue sua caneta e comece a cutucar o deslocamento da extrema direita. Ajuste o primeiro valor até que o ponteiro esteja sob sua caneta. Não se preocupe se o ponteiro estiver fora do alvo no outro eixo.
    • faça o mesmo para o deslocamento da extrema esquerda. Verifique se o deslocamento à direita ainda está correto, se não, ajuste os dois valores até que você tenha uma correspondência.
    • faça o mesmo com os outros dois deslocamentos.
    • verifique se o ponteiro está posicionado corretamente no meio da extrema esquerda, centro da extrema direita, centro superior e centro inferior da tela. Se sim, você é bom para ir.
  7. Execute <FAR_RIGHT_OFFSET> <FAR_LEFT_OFFSET> <VERY_TOP_OFFSET> <VERY_BOTTOM_OFFSET> e anote seus valores finais. É isso!

Configuração permanente (via xorg conf)

Como as notas de saída de xinput --list-props <DEVICE_ID> , para obter a configuração, você precisa adicionar um arquivo de cofiguração ao diretório do seu xorg conf (é xinput_calibration no Ubuntu, nomeado com uma prioridade suficientemente baixa - como /usr/share/X11/xorg.conf.d/ no exemplo fornecido).

Prepare os valores da propriedade xinput e verifique o nome do dispositivo em 99-calibration.conf . Agora, tudo o que você precisa fazer é criar o arquivo da seguinte maneira:

Section "InputClass"
        Identifier                      "calibration"
        MatchProduct                    "<DEVICE_NAME_FROM_XINPUT_LIST>"
        Option  "TransformationMatrix"  "<VALUES_FROM(Coordinate Transformation Matrix)>"
        Option  "Calibration"           "<VALUES_FROM(Evdev Axis Calibration)>"
        Option  "SwapAxes"              "<VALUE_FROM(Evdev Axes Swap)>"
        Option  "InvertX"               "<X_VALUE_FROM(Evdev Axis Inversion)>"
        Option  "InvertY"               "<Y_VALUE_FROM(Evdev Axis Inversion)>"
EndSection

Por exemplo:

Section "InputClass"
        Identifier                      "calibration"
        MatchProduct                    "ACME USB Touch"
        Option  "TransformationMatrix"  "0.5656 0.000000 0.676576 0.000000 0.765756 0.756233 0.000000 0.000000 1.000000"
        Option  "Calibration"           "50 1366 25 2876"
        Option  "SwapAxes"              "1"
        Option  "InvertY"               "1"
EndSection

Verifique se tudo funciona depois de uma reinicialização. E agora está tudo pronto!

    
por mikołak 07.06.2017 / 22:04