Using the Logitech Wireless Rechargeable Touchpad T650 on OpenBSD

       974 words, 5 minutes

With my recent desk changes, I’m not using the ThinkPad keyboard and touchpad anymore. But I really like touchpads in general. So I got myself a refurbished Logitech Wireless Rechargeable Touchpad T650.

Spoiler Alert: it works pretty well on OpenBSD.

First contact

The Logitech T650 is a quite old device. According to Wikipedia, it was launched on 2012. I could get a refurbished one for 30€. I have no real idea about the battery health but after a few days of use, it still reports 90% full. It seems to perform better than my recent MX Keys…

It is in good shape and feels like the ThinkPad’s trackpad. If the fingers are a bit sweaty, it doesn’t slide that well. Probably because of the glass surface. So clean your hands before swipping!!! :D

It has the same resolution as my X1 Carbon Gen10 TrackPad. It is just bigger. So it is nicer to use with a 27" 4K monitor.

By default, the TrackPad is recognised in OpenBSD and Windows using the Logi Unifying USB dongle. Using the fingers move the cursor. A click requires physically pushing down the TrackPad (no Tap to Click). A right-click is available on the bottom right side of it. There is no Single / Dual / Tripple finger(s) tapping. On Windows, you need the SetPointer software to enable those. On OpenBSD, it doesn’t work (yet).

Update your device

This old reddit thread explains that a firmware upgrade allows hardware management of multi-touch.

The Logitech Unifying software can be installed on Windows. Then using it to manage the device, it will upgrade the TrackPad firmware.

My TrackPad came with firmware 041.000.00033. The Logitech software updated the firmware to 041.001.00038.

Since this upgrade, the Logitech SetPoint software is not required anymore on Windows to have the TrackPad support multi-touch.

Use with OpenBSD

Now that the T650 has been updated to 041.001.00038, it provides multi-touch when used with OpenBSD :D

The relevant dmesg(8) part is:

bsd: uhidev1 at uhub1 port 7 configuration 1 interface 0 "Logitech USB Receiver" rev 2.00/24.00 addr 6
bsd: uhidev1: iclass 3/1
bsd: ukbd0 at uhidev1: 8 variable keys, 6 key codes
bsd: wskbd1 at ukbd0 mux 1
bsd: wskbd1: connecting to wsdisplay0
bsd: uhidev2 at uhub1 port 7 configuration 1 interface 1 "Logitech USB Receiver" rev 2.00/24.00 addr 6
bsd: uhidev2: iclass 3/1, 8 report ids
bsd: ums0 at uhidev2 reportid 2: 16 buttons, Z and W dir
bsd: wsmouse3 at ums0 mux 0
bsd: ucc0 at uhidev2 reportid 3: 652 usages, 20 keys, array
bsd: wskbd2 at ucc0 mux 1
bsd: wskbd2: connecting to wsdisplay0
bsd: uhid1 at uhidev2 reportid 4: input=1, output=0, feature=0
bsd: uhid2 at uhidev2 reportid 8: input=1, output=0, feature=0
bsd: uhidev3 at uhub1 port 7 configuration 1 interface 2 "Logitech USB Receiver" rev 2.00/24.00 addr 6
bsd: uhidev3: iclass 3/0, 33 report ids
bsd: uhidpp0 at uhidev3 device 1 touchpad "T650"
bsd: uhid3 at uhidev3 reportid 32: input=14, output=14, feature=0
bsd: uhid4 at uhidev3 reportid 33: input=31, output=31, feature=0

Xorg(1) reports the hardware as:

(II) config/wscons: checking input device /dev/wsmouse1
(II) Using input driver 'ws' for '/dev/wsmouse1'
(**) /dev/wsmouse1: always reports core events
(II) ws: /dev/wsmouse1: debuglevel 0
(**) Option "Device" "/dev/wsmouse1"
(**) ws: /dev/wsmouse1: ZAxisMapping: buttons 4 and 5
(**) ws: /dev/wsmouse1: WAxisMapping: buttons 6 and 7
(**) ws: /dev/wsmouse1: associated screen: 0
(II) ws: /dev/wsmouse1: minimum x position: 0
(II) ws: /dev/wsmouse1: maximum x position: 5759
(II) ws: /dev/wsmouse1: minimum y position: 0
(II) ws: /dev/wsmouse1: maximum y position: 2159
(==) ws: /dev/wsmouse1: Buttons: 7
(**) ws: /dev/wsmouse1: YAxisMapping: buttons 4 and 5
(II) XINPUT: Adding extended input device "/dev/wsmouse1" (type: MOUSE, id 8)
(**) /dev/wsmouse1: (accel) keeping acceleration scheme 1
(**) /dev/wsmouse1: (accel) acceleration profile 0
(**) /dev/wsmouse1: (accel) acceleration factor: 2.000
(**) /dev/wsmouse1: (accel) acceleration threshold: 4

What works

Clicking the pad triggers a left-click (button 1).
Clicking on the lower right end of the pad triggers a right-click (button 3).
Moving a finger accross the pad moves the cursor.

Tapping the pad with one finger triggers a left-click (button 1).
Tapping the pad with two fingers triggers a right-click (button 3).
Tapping the pad with three fingers triggers a middle-click (button 2).

Tap’n’Drag triggers a window move in the window manager.
Tap’n’Drag triggers an object move in applications such as a file manager.

Sliding two fingers from top to bottom triggers button 5.
Sliding two fingers from bottom to top triggers button 4.
Sliding two fingers from left to right triggers button 7.
Sliding two fingers from right to left triggers button 6.
In Firefox, this allows Page and History navigation as expected.

What fails

Zooming in or out with two fingers triggers random unexpected reactions.
Long story short, it doesn’t work / zoom. Depending on the fingers position, it triggers either button 4 or button 5. I tested it on Linux Mint and macOS, and the hardware does not seem to support hardware pinch / zoom.

Swiping a single finger from one edge does not trigger any output in xev(1).
Nor does swiping three or four fingers.

Tuning and monitoring

Using wsconsctl(8), “Tap to Click” can be configured with mouse.tp.tapping=1. The so-called “Natural scrolling” can be configured using mouse3.reverse_scrolling=1. The latter applies to any device connected to this USB dongle. During my testings, the USB dongle was shared between the TrackPad and a mouse. In that case, natural scrolling for the mouse wheel is probably not what you want.

The scaling parameter does not seem to be applicable here.

Thanks to support for Logitech Bolt receivers and the Unified Battery feature, the TrackPad battery level can be monitored using:

# sysctl hw.sensors.uhidpp0
hw.sensors.uhidpp0.indicator0=Off (charger)
hw.sensors.uhidpp0.raw0=4 (number of battery levels)
hw.sensors.uhidpp0.percent0=90.00% (battery level), OK

All in all, a great piece of hardware. Only the speed / resolution limit makes it difficult to use with a 23" monitor.