Установка Armbian на планшет Icoo D70gt. Часть 3

Установка X-сервера

В предыдущих частях удалось запустить систему на планшете и настроить тачскрин.

Но как всегда хочется большего - например установить X-server, что бы получить все преимущества графического интерфейса.

Запуск X-server

Для начала я установил необходимый минимум для запуска X-сервера:

apt install xserver-xorg xserver-xorg-video-fbturbo xinit xterm

Здесь сам сервер, драйвер фреймбуфера для устнойств на Allwinner, скрипты запуска сервера и терминал.

Так же будут подтянуты необходимые зависимости. В итоге у меня было установлено 34 новых пакета.

Так же я установил рекомендованные пакеты с утилитами и шрифтами:

apt install xinput x11-utils xfonts-base xfonts-cyrillic

Для удалённого подключения к X-серверу будет полезна утилита x11vnc (apt install x11vnc). Она позволяет осуществлять полный контроль по сети.

Для мониторинга содержимого фреймбуфера (даже если не запущен X-server) можно воспользоваться утилитой framebuffer-vncserver. К сожалению, она позволяет только смотреть, но не передавать нажатия клавиш или движения мыши.

После установки запускаю X-сервер командой startx. Эта команда прекрасно выполняется из сеанса SSH и самостоятельно находит экран, на котором запустить сервер.

На экране можно наблюдать запущенный xterm: чёрные буквы на белом фоне. Терминал занимает только часть экрана и не имеет никаких элементов управления окном, но это и естественно: я ещё не ставил никакого оконного менеджера.

Xorg xterm

Что бы терминал обрёл привычную гамму “серый на чёрном” нужно дописать в файл ~/.Xdefaults Строчки xterm*background: black и xterm*foreground: gray.

Тачскрин в режиме тачпада

Тачскрин не подавал признаков жизни.

Связано это с тем, что модуль собран исключительно для режима мультитача, т.е. тачскрин прекрасно понимает несколько касаний, но не может прикинуться мышью.

В таком варианте мне удалось заставить работать тачскрин только в режиме тачпада: в иксах появился курсор мыши, и двигая пальцами по тачу можно было двигать курсор.

Для этого я установил модуль X-сервера xserver-xorg-input-multitouch

apt install xserver-xorg-input-multitouch

и создал файл /etc/X11/xorg.conf.d/99-mtouch.conf со следующим содержимым

Section "InputClass"
        Identifier "touchscreen"
        MatchDevicePath "/dev/input/event2"
        Driver "multitouch"
EndSection

И рестартовал X-сервер.

Тачскрин обрёл некоторую функциональность, но это было не совсем то, что хотелось, поэтому 99-mtouch.conf отправился в загашники до лучших времён, а я начал искать другие пути.

Тач скрин, как он есть

Поковыряв исходные коды модуля ядра, я обнаружил, что модуль можно собрать в режиме мультитача и в простом режиме.

По умолчанию он собирается в режиме мультитача и остаётся только заняться персборкой модуля.

Всё ядро конечно пересобирать не надо, я взял только нужные файлы из репозитория ядра linux-sunxi.

Понадобилось три файла ctp_platform_ops.h, goodix_touch.h и goodix_touch.c.

На планшете создал каталог под модифицированный модуль и скачал в него файлы.

mkdir -p ~/src/mygoodix
cd ~/src/mygoodix
wget https://raw.githubusercontent.com/linux-sunxi/linux-sunxi/sunxi-3.4/drivers/input/touchscreen/ctp_platform_ops.h
wget https://raw.githubusercontent.com/linux-sunxi/linux-sunxi/sunxi-3.4/drivers/input/touchscreen/goodix_touch.h
wget https://raw.githubusercontent.com/linux-sunxi/linux-sunxi/sunxi-3.4/drivers/input/touchscreen/goodix_touch.c

Так же создал в этом каталоге Makefile:

obj-m += goodix_touch.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Осталось поправить исходинки модуля. Для этого нужно открыть файл goodix_touch.h в редакторе и закомментировать одну строчку. У меня это 36-я строка, и она должна приобрести такой вид:

// #define GOODIX_MULTI_TOUCH

Теперь собираю модуль командой make. Дополнительных пакетов ставить не пришлось, в составе armbian уже идут заголовки ядра и компилятор gcc.

Вот так выглядит процесс сборки у меня.

# make
make -C /lib/modules/3.4.113-sun4i/build M=/root/src/mygoodix modules
make[1]: Entering directory '/usr/src/linux-headers-3.4.113-sun4i'
  CC [M]  /root/src/mygoodix/goodix_touch.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/src/mygoodix/goodix_touch.mod.o
  LD [M]  /root/src/mygoodix/goodix_touch.ko
make[1]: Leaving directory '/usr/src/linux-headers-3.4.113-sun4i'

На выходе получился модуль ядра goodix_touch.ko.

Теперь для проверки удаляю стоковый модуль rmmod goodix_tooch и добавляю свежескомпилированный insmod goodix_touch.ko в ядро.

Можно убедиться, что модуль теперь подключён:

lsmod | grep goodix
goodix_touch           14247  0 

Появилось новое устройство мыши:

ls /dev/input/mouse*
/dev/input/mouse0

А X-server подхватил новообретённого друга:

[ 79130.447] (II) Using input driver 'evdev' for 'gt80x'
[ 79130.447] (**) gt80x: always reports core events
[ 79130.448] (**) evdev: gt80x: Device: "/dev/input/event2"
[ 79130.448] (--) evdev: gt80x: Vendor 0xdead Product 0xbeef
[ 79130.448] (--) evdev: gt80x: Found absolute axes
[ 79130.448] (--) evdev: gt80x: Found x and y absolute axes
[ 79130.448] (--) evdev: gt80x: Found absolute touchscreen
[ 79130.448] (II) evdev: gt80x: Configuring as touchscreen
[ 79130.448] (**) evdev: gt80x: YAxisMapping: buttons 4 and 5
[ 79130.448] (**) evdev: gt80x: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
[ 79130.448] (**) Option "config_info" "udev:/sys/devices/virtual/input/input21/event2"
[ 79130.448] (II) XINPUT: Adding extended input device "gt80x" (type: TOUCHSCREEN, id 8)
[ 79130.449] (II) evdev: gt80x: initialized for absolute axes.
[ 79130.449] (**) gt80x: (accel) keeping acceleration scheme 1
[ 79130.449] (**) gt80x: (accel) acceleration profile 0
[ 79130.450] (**) gt80x: (accel) acceleration factor: 2.000
[ 79130.450] (**) gt80x: (accel) acceleration threshold: 4

Установка оконного менеджера

Правда насладиться рабочим тачем пока не получилось, ибо нужно ещё установить оконный менеджер.

Для проверки функционала я выбрал Window Maker - у него из коробки есть большие кнопки на экране, которые удобно нажимать пальцем.

Установка сводится к одной команде:

apt install wmaker

После установки остановил X-server и запустил его уже с использованием WMaker:

startx wmaker

Если всё прошло успешно, то на экране видим примерно такую картину:

wmaker

Здесь я уже успел открыть окно настроек (кнопка в правом верхнем углу) и подредактировать размер заголовков, что бы удобнее было таскать окна пальцем.

TabletWM

TabletWM заявлен как WM для планшетов и устройств с малым разрешением экрана.

Формально он не занимается окнами, а растягивает запущенное приложение на весь экран.

Так же в его составе идёт экранная клавиатура.

Для сборки понадобилось установить заголовочные файлы библиотек:

apt install libcairo2-dev libxkbcommon-dev \
    libxcb-randr0-dev libxcb-util0-dev libxcb-icccm4-dev libxcb-keysyms1-dev libxcb-xtest0-dev

И поправить Makefile самого TabletWM:

diff --git a/Makefile b/Makefile
index eed38f5..e69e410 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-CC=gcc -c -O2
+CC=gcc -c -O2 -std=c99
 LN=gcc
 
 PREFIX=/usr/local

Можно ещё собрать TabletLauncher для запуска приложений. Но его я собирать уже не стал.

Что дальше

Поскольку я не собираюсь использовать планшет в качестве рабочей станции, то использование стандартных оконных менеджеров избыточно, поэтому я хочу доработать оконный менеджер DWM под себя.

Так же я ещё не рассмотрел процесс установки системы на NAND диск планшета, поскольку хочу данный экзепляр пока оставить с андроидом и под информационную паналь задействовать другой планшет.

 
comments powered by Disqus