Meefik's Blog

Freedom and Open Source

Поворот экрана в режиме кадрового буфера

Ниже приводится решение для правильного поворота экрана в режиме фрейм-буфера. Т.е. чтобы была повернута картинка на 90 градусов (ландшафтная ориентация) и драйвер сенсорного экрана обрабатывал это поворот корректно. Решение опробовано на Samsung Galaxy S2 (i9100), тачскрин MXT224 (узнать модель тачскрина можно командой: cat /sys/devices/virtual/sec/sec_touchscreen/tsp_touchtype), Ubuntu 13.04 Raring Ringtail и Debian 7.0/wheezy.

Что работает:

  • позиционирование курсора к месту нажатия;
  • обработка удерживания (эмуляция удерживания левой кнопки мыши);
  • обработка двойного нажатия одним пальцем (эмуляция левой кнопки мыши);
  • обработка нажатия двумя пальцами (эмуляция правой кнопки мыши);
  • поворот координат сенсорного экрана.

Для этого нужно выполнить следующие шаги:

  • Установить дистрибутив через Linux Deploy (Debian или Ubuntu) и подключиться к консоли под пользователем root (например, по SSH).

  • Доставить необходимые пакеты:
    apt-get install build-essential wget unzip xorg-dev libmtdev-dev
    
  • Загрузить исходный код модифицированного драйвера mtev для Xorg:
    wget https://github.com/meefik/xorg-input-mtev/archive/master.zip --no-check-certificate
    unzip master.zip
    
  • Запустить сборку драйвера:
    cd ./xorg-input-mtev-master/
    make
    
  • Скопировать драйвер в каталог модулей Xorg:
    cp obj/mtev.so /usr/lib/xorg/modules/input/mtev_drv.so
    
  • Отредактировать файл /etc/X11/xorg.conf:
      Section "ServerLayout"
          Identifier "Layout0"
          Screen "Screen0"
          InputDevice "touchscreen" "CorePointer"
      EndSection
    
      Section "InputDevice"
          Identifier "touchscreen"
          Option "Device" "/dev/input/event2" #linuxdeploy
          Driver "mtev"
          Option "Rotation" "1"
      EndSection
    
      Section "Device"
          Identifier "Card0"
          Driver "fbdev"
          Option "fbdev" "/dev/graphics/fb0" #linuxdeploy
          Option "Rotate" "CW"
      EndSection
    
      Section "Screen"
          Identifier "Screen0"
          Device "Card0"
          DefaultDepth 24
          SubSection "Display"
              Depth 24
          EndSubSection
      EndSection
    
  • Запустить GNU/Linux через Linux Deploy в режиме фрейм-буфера (Параметры -> Графическая подсистема -> Framebuffer). Для набора текста можно использовать виртуальную клавиатуру florence.