First impression: the touchpad just works, out of the box. There is a core pointer in X, and the mouse can be moved. Great.
Second impression: not so great. There is no proper way to scroll the content of an xterm, there is no proper way to resize them, the xterm menus (ctrl + left/middle/right button) are entirely malfunctioning, and tipping the touchpad does weird things in unexpected moments.
Then there are lots of articles about configuring the touchpad, whether one should use xf86-input-libinput or xf86-input-evdev or xf86-input-synaptics or whatever, and with what options. But, libinput and evdev show all the same behaviour, and synaptics doesn't react on the device, and if explicitely forced to, states that it doesn't understand the protocol.
The problem appears to be that the device is presented to X as a mouse, not as a touchpad - from the log:
And this is consistent with
Then again there are lots of artices about how to make a touchpad actually be a touchpad and not just a simple mouse - but these circle around the configurations of ums and psm - and there is neither on the system.
What is actually on the system is this:
In hconf(4) there is something interesting, that looks like it would solve the problem (but it doesn't):
Now, is the problem with X, or with the device? This can be figured out, because /dev/input/event5 seems to be a character device; it just produces output that can be read with
And when setting dev.hconf.0.input_mode=3, it does no longer produce any output.The problem is not with X.
Searching further into the hid + hidbus stuff, I found this wonderful article.
forums.freebsd.org
Only, it doesn't apply here. I have these XF86AudioMute. XF86AudioLowerVolume, XF86AudioRaiseVolume, and they send their events, without any hid device driver present! And I have a calculator key, that immediately starts
And I also have keys for Brightness up/down, Microphone, Mouse, ECO, and Radio-Kill - and these never send events, be there a hid driver or not.
This does not help further, it only shows that things can be different on various platforms.
But then there is this article
and that explains a bit. So, we apparently have a hms driver, and that is supposed to provide mice. And we have a hmt driver, that supports touchpads - but that comes from a different source and works somehow differently. Anyway, that one doesn't find any device here.
But then we also have a hidraw driver. Ad that can be kldloaded, and it works, and creates a /dev/hidraw0:
And then we have
Now switching to dev.hconf.0.input_mode=3. I see these instead:
On that level things seem to work and make sense...
Second impression: not so great. There is no proper way to scroll the content of an xterm, there is no proper way to resize them, the xterm menus (ctrl + left/middle/right button) are entirely malfunctioning, and tipping the touchpad does weird things in unexpected moments.
Then there are lots of articles about configuring the touchpad, whether one should use xf86-input-libinput or xf86-input-evdev or xf86-input-synaptics or whatever, and with what options. But, libinput and evdev show all the same behaviour, and synaptics doesn't react on the device, and if explicitely forced to, states that it doesn't understand the protocol.
The problem appears to be that the device is presented to X as a mouse, not as a touchpad - from the log:
Code:
[ 1004.804] (II) event5 - ELAN0D07:00 04F3:3078 Mouse: is tagged by udev as: Mouse
[ 1004.809] (II) event5 - ELAN0D07:00 04F3:3078 Mouse: device is a pointer
libinput list-devices
:
Code:
Device: ELAN0D07:00 04F3:3078 Mouse
Kernel: /dev/input/event5
Group: 6
Seat: seat0, default
Capabilities: pointer
Then again there are lots of artices about how to make a touchpad actually be a touchpad and not just a simple mouse - but these circle around the configurations of ums and psm - and there is neither on the system.
What is actually on the system is this:
Code:
# devinfo
acpi0
pcib0
pci0
ig4iic0
iicbus0
iichid0
hidbus0
hms0
hconf0
When setting this to 3, the thing does just become non-functioning, no more mouse movement in X.dev.hconf.*.input_mode
HID device input mode: 0 = mouse, 3 = touchpad.
Now, is the problem with X, or with the device? This can be figured out, because /dev/input/event5 seems to be a character device; it just produces output that can be read with
cat
.And when setting dev.hconf.0.input_mode=3, it does no longer produce any output.The problem is not with X.
Searching further into the hid + hidbus stuff, I found this wonderful article.
![forums.freebsd.org](https://forums.freebsd.org/styles/freebsd/xenforo/logo.og.png)
Howto: Enabling multimedia keys, gamepads/joysticks for desktop; usbhid
Enabling usbhid usbhid gives the ability to use newer advanced hid drivers. The ability to use usbhid must be turned on from /boot/loader.conf: hw.usb.usbhid.enable="1" Then, load the driver through /etc/rc.conf: kld_list="usbhid" Turning this module on from /boot/loader.conf won't work. Once...
Only, it doesn't apply here. I have these XF86AudioMute. XF86AudioLowerVolume, XF86AudioRaiseVolume, and they send their events, without any hid device driver present! And I have a calculator key, that immediately starts
xcalc
, without anything configured (in icewm
).And I also have keys for Brightness up/down, Microphone, Mouse, ECO, and Radio-Kill - and these never send events, be there a hid driver or not.
This does not help further, it only shows that things can be different on various platforms.
But then there is this article
and that explains a bit. So, we apparently have a hms driver, and that is supposed to provide mice. And we have a hmt driver, that supports touchpads - but that comes from a different source and works somehow differently. Anyway, that one doesn't find any device here.
But then we also have a hidraw driver. Ad that can be kldloaded, and it works, and creates a /dev/hidraw0:
Code:
[2306] hidraw0: <ELAN0D07:00 04F3:3078 Raw HID Device> on hidbus0
And then we have
usbhidctl
, and, despite the name, it works on that file and delivers some output:
Code:
# usbhidctl -f /dev/hidraw0 -avl
Got input report 1 (12 bytes): 01 00 eb 0b 00 00 00 00 00 00 00 00
Generic_Desktop:Mouse.Generic_Desktop:Pointer.Button:Button_1=0
Generic_Desktop:Mouse.Generic_Desktop:Pointer.Button:Button_2=0
Generic_Desktop:Mouse.Generic_Desktop:Pointer.Generic_Desktop:X=-21
Generic_Desktop:Mouse.Generic_Desktop:Pointer.Generic_Desktop:Y=11
...
Now switching to dev.hconf.0.input_mode=3. I see these instead:
Code:
# usbhidctl -f /dev/hidraw0 -avl
Got input report 4 (12 bytes): 04 03 9d 08 d2 04 9e c5 01 80 27 55
Digitizer:Touch_Pad.Digitizer:Finger.Digitizer:Touch_Valid=1
Digitizer:Touch_Pad.Digitizer:Finger.Digitizer:Tip_Switch=1
Digitizer:Touch_Pad.Digitizer:Finger.Button:Button_2=0
Digitizer:Touch_Pad.Digitizer:Finger.Button:Button_3=0
Digitizer:Touch_Pad.Digitizer:Finger.Digitizer:Contact_Identifier=0
Digitizer:Touch_Pad.Digitizer:Finger.Generic_Desktop:X=2205
Digitizer:Touch_Pad.Digitizer:Finger.Generic_Desktop:Y=1234
Digitizer:Touch_Pad.Digitizer:0x0056=50590
Digitizer:Touch_Pad.Digitizer:Contact_Count=1
On that level things seem to work and make sense...