Recentemente ho dovuto sviluppare un'applicazione (sistema kiosk) per/su un Raspberry Pi 4. La particolarità era che 2 monitor touch dovevano essere collegati tramite HDMI, che dovevano essere ruotati di 90 gradi a destra. Quindi formati verticali, 2 monitor uno sopra l'altro.
Ruotare lo schermo e disporlo uno sopra l'altro non ha causato alcun problema, in quanto ciò è facilmente possibile tramite l'interfaccia utente: è stato installato un "Raspbian Buster con desktop e software consigliato".
Per fare ciò, nel menu "Raspberry -> Preferences -> Screen Configuration", ruotare i due monitor HDMI verso destra, disporli uno sopra l'altro e quindi salvare le impostazioni.
Il problema è che la configurazione touch non viene ruotata automaticamente, disposta l'una sopra l'altra e si traduce in un'ampia area touch su 2 monitor.
Affinché il comportamento touch funzioni correttamente, è necessario regolare 2 file di configurazione - /usr/share/X11/xorg.conf.d/40-libinput.conf e /home/pi/.profile.
Per prima cosa devi leggere gli ID dei monitor collegati. Per fare ciò, apri un terminale e usa il comando
xinput list
immissione. Di conseguenza, i monitor collegati vengono elencati con gli ID corrispondenti. Nel mio caso, i monitor avevano ID 6 e 7.
Quindi nel file /usr/share/X11/xorg.conf.d/40-libinput.conf regolare la sezione "Section InputClass" con il "Identifier libinput touchpad catchall" come segue:
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
In questo modo la superficie di tocco ruota.
Infine, inserire la suddivisione dell'interfaccia touch in 2 parti uguali alla fine del file /home/pi/.profile, in modo che venga caricata ogni volta che il sistema viene avviato.
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