В предыдущих частях удалось запустить систему на планшете и настроить тачскрин.
Но как всегда хочется большего - например установить 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
: чёрные буквы на белом фоне.
Терминал занимает только часть экрана и не имеет никаких элементов управления
окном, но это и естественно: я ещё не ставил никакого оконного менеджера.
Что бы терминал обрёл привычную гамму “серый на чёрном” нужно дописать в файл
~/.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
Если всё прошло успешно, то на экране видим примерно такую картину:
Здесь я уже успел открыть окно настроек (кнопка в правом верхнем углу) и подредактировать размер заголовков, что бы удобнее было таскать окна пальцем.
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