Nylig måtte jeg utvikle en applikasjon (kiosksystem) for / på en Raspberry Pi 4. Det spesielle med det var at 2 touch-skjermer skulle kobles til via HDMI, som måtte roteres 90 grader mot høyre. Så portrettformater, 2 skjermer oppå hverandre.
Å rotere skjermen og ordne den oppå hverandre forårsaket ingen problemer, da dette lett er mulig via brukergrensesnittet - en "Raspbian Buster med skrivebord og anbefalt programvare" ble installert.
For å gjøre dette, i menyen "Raspberry -> Preferences -> Screen Configuration", vri de to HDMI-skjermene til høyre, ordne dem oppå hverandre og lagre deretter innstillingene.
Problemet med dette er at berøringskonfigurasjonen ikke roteres automatisk, ordnes oppå hverandre og resulterer i et stort berøringsområde over 2 skjermer.
For at berøringsatferden skal fungere skikkelig, må 2 oppsettsfiler - /usr/share/X11/xorg.conf.d/40-libinput.conf og /home/pi/.profile - justeres.
Først må du lese ID-ene til de tilkoblede skjermene. For å gjøre dette, åpne en terminal og bruk kommandoen
xinput list
innspill. Som et resultat får du de tilkoblede skjermene oppført med de tilsvarende ID-ene. I mitt tilfelle hadde skjermene IDene 6 og 7.
Deretter i filen /usr/share/X11/xorg.conf.d/40-libinput.conf justerer du seksjonen "Section InputClass" med "Identifier libinput touchpad catchall" som følger:
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
Dette fører til at berøringsoverflaten roterer.
Til slutt setter du inn underinndelingen av berøringsgrensesnittet i 2 like deler på slutten av filen /home/pi/.profile, slik at den lastes inn hver gang systemet startes.
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