ラズパイ(reTerminal)の画面ドライバを入れ直し、回転したタッチパネル判定を直す方法

Linux,お役立ち情報,プログラムLinux,Raspberry Pi,タッチパネル

訳あって reTerminal という端末を使う必要がでてきました。この端末は Raspberry Pi CM4 (Computer Model 4) が中に入っており、解像度 1280×720 のそこそこ大きなタッチパネルディスプレイがついたお手軽ラズパイパッケージのようです。

起動してみた reTerminal

ただ、販売代理店のサイト(マルツのページ)にも注意書きがあり、ソフトウェアアップデートをすると画面が映らなくなる不具合があるそうです。しかし update しないというのもセキュリティ的にどうかと思うので、対処してみました。

ディスプレイがなくても平気な状態をつくっておく

今回生じる問題は「ソフトウェアアップデートをかけると画面が映らなくなる」ということです。それを解決する前に「画面が映らなくても操作できる環境を整えておく」ことは重要です。今回は WiFi のようなネットワーク環境がある前提で ssh を使って接続することを考えます。

まず初期設定で適当な WiFi ネットワークに(無線で)接続されているとします。この状態で ip a コマンドで IP アドレスを確かめます。

ip a

これで IP アドレスがわかります。今回は無線 WiFi なので wlan0 の項目をチェックすればよいでしょう。

今回は 192.168.68.107 が割り当てられていました。このアドレスに対して他のマシンから ssh をすれば操作することができます。ssh には他の Linux 端末を使ったり、Windows なら TeraTerm などを使ってもよいでしょう。

ディスプレイドライバをインストールする

参考にしたページによれば、メーカーの GitHub リポジトリから clone してきてインストールしてやればよさそうです。

まず、初期の reTerminal には git が入っていないようなので apt install します。

sudo apt install git

続いて GitHub のリポジトリからドライバを clone してきます。その後、cd で移動し、sudo を使って管理者権限でインストールスクリプトを実行します。

git clone --depth 1 https://github.com/Seeed-Studio/seeed-linux-dtoverlays
cd seeed-linux-dtoverlays
sudo ./scripts/reTerminal.sh

インストールには数分程度 (参考にしたページにも 3 分程度と書いてあります)かかります。インストールが完了したら再起動してやります。

sudo reboot

再起動しても画面は問題なく映ります。私はここでソフトウェアアップデートをかけました。

sudo apt update
sudo apt upgrade
sudo reboot # もう一度再起動

これでソフトウェアは無事アップデートされ、もう一度再起動しても画面が映りめでたしめでたし……と思いましたがまだ駄目でした

タッチパネルの挙動がおかしいので直す

起動したマシンは画面も問題なく映るし、マウスも正常に動作しました。しかしウリであるタッチパネルを触ると、どうも挙動がおかしいのです。下の動画はその様子です。

タッチパネルで指を横に動かすとマウスポインタが縦に動き指を縦に動かすとマウスポインタが横に動きます。どうもタッチパネルの判定と実際の動作が回転してしまっているようです。

まず設定ファイルが置いてあるディレクトリに移動します。

cd /usr/share/X11/xorg.conf.d

設定ファイル 40-libinput.conf を編集します。私は普段から使っている Vim を使って編集します。人によっては Emacs とか nano を使ってください。

sudo vi 40-libinput.conf # vi を使う場合
sudo nano 40-libinput.conf # nano を使う場合

設定ファイルはいくつかのセクションに分かれているので、その中の Identifier “libinput touchscreen catchall" セクションを見ます。そのセクション中にタッチパネルの設定を 90° 回転させるオプションを追加します。

Section "InputClass"
        Identifier "libinput touchscreen catchall"
        MatchIsTouchscreen "on"
        #### この行を追加 ↓
        Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"
        #### この行を追加 ↑
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
EndSection

追加する文は回転させたい方向によって異なります。ここでは時計回りに 90° 回転させたいので、Option “TransformationMatrix" “0 1 0 -1 0 1 0 0 1" を追加しました。

回転させる方向によって設定は異なります。後半の数値はそれぞれ半角スペースで区切ってあるため、省略してはいけません。

  • 90° = Option “TransformationMatrix" “0 1 0 -1 0 1 0 0 1"
  • 180° = Option “TransformationMatrix" “-1 0 1 0 -1 1 0 0 1"
  • 270° = Option “TransformationMatrix" “0 -1 1 1 0 0 0 0 1"

これで再起動すると設定が反映され、タッチパネルが正常に動作すると思います。

sudo reboot # 再起動

参考資料