LINUX.ORG.RU

Buildroot. Заставить работать нормально X11. Raspberry pi 3.

 , , ,


0

1

Пытаюсь на досуге заставить работать иксы собранные в buildroot. В каком-то виде их даже получается запустить. Но не работает клавиатура, а мышь, если получается заставить работать, то работает ужасно. А ещё хочу работающий тачскрин…

Вот всё в конфиге связанное с иксами:

BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR=y
BR2_PACKAGE_XSERVER_XORG_SERVER_XVFB=y
BR2_PACKAGE_LIBXCB=y
BR2_PACKAGE_XLIB_LIBICE=y
BR2_PACKAGE_XLIB_LIBSM=y
BR2_PACKAGE_XLIB_LIBX11=y
BR2_PACKAGE_XLIB_LIBXAU=y
BR2_PACKAGE_XLIB_LIBXAW=y
BR2_PACKAGE_XLIB_LIBXCURSOR=y
BR2_PACKAGE_XLIB_LIBXDAMAGE=y
BR2_PACKAGE_XLIB_LIBXDMCP=y
BR2_PACKAGE_XLIB_LIBXEXT=y
BR2_PACKAGE_XLIB_LIBXFIXES=y
BR2_PACKAGE_XLIB_LIBXFONT2=y
BR2_PACKAGE_XLIB_LIBXFT=y
BR2_PACKAGE_XLIB_LIBXI=y
BR2_PACKAGE_XLIB_LIBXINERAMA=y
BR2_PACKAGE_XLIB_LIBXMU=y
BR2_PACKAGE_XLIB_LIBXPM=y
BR2_PACKAGE_XLIB_LIBXRANDR=y
BR2_PACKAGE_XLIB_LIBXRENDER=y
BR2_PACKAGE_XLIB_LIBXRES=y
BR2_PACKAGE_XLIB_LIBXT=y
BR2_PACKAGE_XLIB_LIBXXF86VM=y
BR2_PACKAGE_XLIB_LIBFONTENC=y
BR2_PACKAGE_XLIB_LIBXCVT=y
BR2_PACKAGE_XLIB_LIBXKBFILE=y
BR2_PACKAGE_XLIB_LIBXSHMFENCE=y
BR2_PACKAGE_XLIB_XTRANS=y
BR2_PACKAGE_XAPP_SESSREG=y
BR2_PACKAGE_XAPP_TWM=y
BR2_PACKAGE_XAPP_XAUTH=y
BR2_PACKAGE_XAPP_XCLOCK=y
BR2_PACKAGE_XAPP_XDM=y
BR2_PACKAGE_XAPP_XEYES=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XAPP_XKBCOMP=y
BR2_PACKAGE_XAPP_XRDB=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_EVDEV=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_LIBINPUT=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XFONT_FONT_UTIL=y
BR2_PACKAGE_XFONT_ENCODINGS=y
BR2_PACKAGE_XFONT_FONT_ALIAS=y
BR2_PACKAGE_XFONT_FONT_CURSOR_MISC=y
BR2_PACKAGE_XFONT_FONT_MISC_MISC=y
BR2_PACKAGE_XCB_PROTO=y
BR2_PACKAGE_XORGPROTO=y
BR2_PACKAGE_MCOOKIE=y
BR2_PACKAGE_XDATA_XBITMAPS=y
BR2_PACKAGE_XTERM=y
BR2_PACKAGE_XKEYBOARD_CONFIG=y

X -configure не работает (да и все остальные иксовые команды), в логе следующая ошибка:

... fbdev_drv.so: undefined symbol: fbdevHWSave

Лечится созданием файла /etc/X11/xorg.conf со следующим содержанием:

Section "Module"
  Load "fbdevhw"
  Load "shadow"
EndSection

Таким образом иксы запускаются, но X -configure сделать нельзя, т.к. он начинает работу как если бы конфигов нет, а если нет конфига, то теряется fbdevHWSave.

Далее пытался заставить работать мышь.

Section "InputDevice"
        Identifier "Mouse"
        Driver "mouse"
        Option "Protocol" "Logitech" # "auto" делает PS/2
        Option "Device" "/dev/input/event1"
EndSection

И она даже как-то работает. Если протокол поставить auto, ставится по умолчанию PS/2 и курсор улетает куда-то… Если поставить Logitech (поскольку мышь у меня logitech), то курсор как-то хаотично двигается по оси X (и иногда по оси Y) и, судя по всему, ещё и клики делает при движении.

Пробовал ещё такое, но никакого видимого результата не дало, курсор не двигается:

Section "InputClass"
        Identifier "libinput mouse catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
EndSection

А с клавиатурой много перепробовал, всё приводить не хочется. Единственное, сделаю замечание, что драйвер kbd отсутствует, ибо в buildroot он в LEGACY.

Кто тут силён в иксах?



Последнее исправление: Jullyfish (всего исправлений: 1)

И по традиции, как только написал на волшебный форум, что-то начало получаться.

Мышь хорошо работает, если сделать так:

Section "InputDevice"
        Identifier "Mouse"
        Driver "evdev"
        Option "Protocol" "auto"
        Option "Device" "/dev/input/event1"
EndSection
Jullyfish
() автор топика

Так и с клавиатурой получилось.

Section "InputDevice"
        Identifier "Keyboard"
        Driver "evdev"
        Option "Device" "/dev/input/event0"
EndSection

И теперь иксы надо запускать с указанием идентификатора клавиатуры через флаг:

X -keyboard Keyboard

Почему?..

Ну, осталось дело за тачскрином. :^)

Jullyfish
() автор топика
Ответ на: комментарий от mord0d

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

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Прикольно, не слышал что про такой термин

Удивительно! (=

Ещё был teddybearing, но не прижилось. Да и с весёлой жёлтой резиновой уточкой как-то приятнее вести беседу, нежели со скучным серо-коричневым плюшевым медведем. (%

Я регулярно начинаю писать пост, а в процессе разбираюсь до публикации.

Так оно и задумывалось: Стараешься понятно объяснить свою проблему собеседнику (причём работает даже если он неодушевлённый, в нашем случае резиновая уточка, но можешь даже кактусу объяснять — эффект будет тот же), в процессе разъяснения сам детальнее вникаешь в детали и находишь суть проблемы.

Как можете видеть, не всегда.

Если бы rubberducking работал в 100% случаев, форумов бы не существовало. (= А до них юзергрупп и почтовых рассылок.

mord0d ★★★★★
()
Ответ на: комментарий от yars068

Потому что надо явно указать через ServerFlags.

Если иксы собраны без поддержки udev, то Option "AutoAddDevices" и Option "AutoEnableDevices" работать не будут.

Тем более по умолчанию обе включены.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от Jullyfish

Для начала дам ссылку, которая должна была быть в моём посте выше: https://www.x.org/releases/current/doc/man/man5/xorg.conf.5.xhtml

И дам выдержку оттуда:

The ServerLayout sections are at the highest level. They bind together the input and output devices that will be used in a session.

The input devices are described in the InputDevice sections. Output devices usually consist of multiple independent components (e.g., a graphics board and a monitor). These multiple components are bound together in the Screen sections, and it is these that are referenced by the ServerLayout section. Each Screen section binds together a graphics board and a monitor. The graphics boards are described in the Device sections, and the monitors are described in the Monitor sections.

И, чуть ниже:

In addition to options specific to this section (described below), the ServerFlags section is used to specify some global Xorg server options. All of the entries in this section are Options, although for compatibility purposes some of the old style entries are still recognised. Those old style entries are not documented here, and using them is discouraged. The ServerFlags section is optional, as are the entries that may be specified in it.

Какая версия иксов используется? В итоге, признаю, я несколько неправ, что надо использовать именно ServerFlags, более правильным будет использовать ServerLayout, как-то так:

Section "ServerLayout"
  Identifier  "My cool X.org configuration"
  Screen   0  "Screen 0" 0
  InputDevice "Mouse 0" "CorePointer"
  InputDevice "Keyboard 0" "CoreKeyboard"
EndSection

Section "InputDevice"
        Identifier "Mouse 0"
        Driver     "evdev"
        Option     "Protocol" "auto"
        Option     "Device" "/dev/input/event1"
EndSection

Section "InputDevice"
        Identifier "Keyboard"
        Driver     "evdev"
        Option     "Device" "/dev/input/event0"
EndSection

P.S. Насчёт CorePointer и CoreKeyboard не уверен – устарели.

yars068 ★★★★★
()
Последнее исправление: yars068 (всего исправлений: 4)
Ответ на: комментарий от mord0d

Если иксы собраны без поддержки udev,

Да вроде с поддержкой. Нужен драйвер клавиатуры. kbd нет, т.к. он в легаси. Я взял xf86-input-libinput и xf86-input-evdev, но они оба требуют, чтобы был udev BR2_PACKAGE_HAS_UDEV.

Так что, увы, даже не знаю как тут без udev

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Ага, то есть, вполне себе актуальная версия, значит, ссылку на документацию я дал правильную :)

Пробовал ещё такое, но никакого видимого результата не дало, курсор не двигается:

Section "InputClass"
        Identifier "libinput mouse catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
EndSection

Это не сработало, потому что для libinput устройства ввода нужно правилами udev помечать тегами.

yars068 ★★★★★
()