Recentemente tive que desenvolver um aplicativo (sistema de quiosque) para/em um Raspberry Pi 4. O especial era que 2 monitores de toque deveriam ser conectados via HDMI, que tinha que ser girado 90 graus para a direita. Então, formatos retrato, 2 monitores um em cima do outro.
Girar a tela e organizá-la em cima uma da outra não causou problemas, pois isso é facilmente possível através da interface do usuário - um "Raspbian Buster com desktop e software recomendado" foi instalado.
Para fazer isso, no menu "Raspberry -> Preferences -> Screen Configuration", vire os dois monitores HDMI para a direita, organize-os um sobre o outro e salve as configurações.
O problema com isso é que a configuração de toque não é girada automaticamente, organizada uma sobre a outra e resulta em uma grande área de toque sobre 2 monitores.
Para que o comportamento de toque funcione corretamente, 2 arquivos de configuração - /usr/share/X11/xorg.conf.d/40-libinput.conf e /home/pi/.profile - precisam ser ajustados.
Primeiro você tem que ler os IDs dos monitores conectados. Para fazer isso, abra um terminal e use o comando
xinput list
entrada. Como resultado, você obtém os monitores conectados listados com os IDs correspondentes. No meu caso, os monitores tinham IDs 6 e 7.
Em seguida, no arquivo /usr/share/X11/xorg.conf.d/40-libinput.conf ajuste a seção "Section InputClass" com o "Identificador libinput touchpad catchall" da seguinte maneira:
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchscreen "on"
Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection
Isso faz com que a superfície de toque gire.
Finalmente, insira a subdivisão da interface de toque em 2 partes iguais no final do arquivo /home/pi/.profile, para que ele seja carregado toda vez que o sistema for iniciado.
xinput set-prop "6" --type=float "Coordinate Transformation Matrix" 1 0 0 0 0.5 0 0 0 1
xinput set-prop "7" --type=float "Coordinate Transformation Matrix" 1 0 0 0 0.5 0.5 0 0 1