lentinj / tp-compact-keyboard

Fn-Lock switcher for ThinkPad Compact Bluetooth Keyboard with TrackPoint
GNU General Public License v2.0
350 stars 33 forks source link

ThinkPad keyboard II #51

Open dal00 opened 4 years ago

dal00 commented 4 years ago

This looks interesting. Is anybody planning on getting it? https://www.lenovo.com/us/en/accessories-and-monitors/new-arrivals/KBD-BO-TrackPoint-KBD-US-Eng/p/4Y40X49493

cblegare commented 4 years ago

I got it with a fr-ca layout. It's very nice.

I'm looking in this repository because Fn and FnLock do not seam to work out of the box. I could post back when I find my way around that


EDIT

As per the readme, I tried to control whether fn_lock is enabled by issuing:

echo 0 > /sys/bus/hid/devices/*17EF\:604*/fn_lock 

and no folder matched this pattern. On my laptop, the /sys/bus/hid/devices/ folder contains

And I am out of my confort zone here. any advice?

dal00 commented 4 years ago

I think you should probably create another issue for the fn/fnlock thing

But are you able to compare it to the old one in quality and function?

cblegare commented 4 years ago

@dal00

I think you should probably create another issue for the fn/fnlock thing

I will do, thanks

But are you able to compare it to the old one in quality and function?

I didn't try the old one, but I can compare it with the P50s, E560, Yoga and T500 I use daily.

The disposition is precise, keys feel less flacky when compared to an internal keyboard. It is thin and feels robust. Even though it is not a proper mecanical keyboard with actual mecanical switches, there is a feel of a "click", even if the sound itself is quieter than a internal keyboard.

I found it was quite easy to pluck out by accident one the the legs that make the angle, which should not be an issue when handled with a least a bit of care.

The three buttons below the space bar are flat and low, not concave like they used to be. The plastic finish looks a bit more textured and silky than it used to be, which is good in my opinion.

All in all, I am pleased with it!

cblegare commented 4 years ago

Somewhat important thing to note: You can't register your product for this keyboard online, and must send a proof of purchase to get any warranty manually.

jeroney commented 4 years ago

Works great out of the box. Though needs kernel level support for a few things.

It has 2 modes. Android & Windows. Really Windows is full keyboard mode. Where Android mode looks like it disables the FnLock functionality.

Thinkpad II USB summary: Vendor=0x17ef Product=0x60ee

Thinkpad II Bluetooth summary: Vendor=0x17ef Product=0x60e1

Thinkpad II Keyboard USB

lsusb -v

Bus 003 Device 002: ID 17ef:60ee Lenovo TrackPoint Keyboard II Couldn't open device, some information will be missing Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 32 idVendor 0x17ef Lenovo idProduct 0x60ee bcdDevice 1.24 iManufacturer 1 iProduct 2 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x0054 bNumInterfaces 3 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 1 Keyboard iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 59 Report Descriptors: UNAVAILABLE Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 4 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 2 Mouse iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 252 Report Descriptors: UNAVAILABLE Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 4 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 26 Report Descriptors: UNAVAILABLE Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0020 1x 32 bytes bInterval 1

cat /proc/bus/input/devices

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II" P: Phys=usb-0000:00:14.0-6/input0 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/0003:17EF:60EE.0001/input/input2 U: Uniq= H: Handlers=sysrq kbd leds event2 B: PROP=0 B: EV=120013 B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe B: MSC=10 B: LED=1f

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II Mouse" P: Phys=usb-0000:00:14.0-6/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.1/0003:17EF:60EE.0002/input/input3 U: Uniq= H: Handlers=mouse0 event3 B: PROP=0 B: EV=17 B: KEY=70000 0 0 0 0 B: REL=1943 B: MSC=10

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II" P: Phys=usb-0000:00:14.0-6/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.1/0003:17EF:60EE.0002/input/input4 U: Uniq= H: Handlers=event4 B: PROP=0 B: EV=9 B: ABS=10000000000

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II Consumer Control" P: Phys=usb-0000:00:14.0-6/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.1/0003:17EF:60EE.0002/input/input5 U: Uniq= H: Handlers=kbd event5 B: PROP=0 B: EV=1f B: KEY=3f000301ff 0 0 483ffff17aff32d bfd4444600000000 1 130ff38b17c000 677bfad9415fed 19ed68000004400 10000002 B: REL=1040 B: ABS=100000000 B: MSC=10

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II System Control" P: Phys=usb-0000:00:14.0-6/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.1/0003:17EF:60EE.0002/input/input6 U: Uniq= H: Handlers=kbd event6 B: PROP=0 B: EV=13 B: KEY=c000 10000000000000 0 B: MSC=10

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II" P: Phys=usb-0000:00:14.0-6/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.1/0003:17EF:60EE.0002/input/input7 U: Uniq= H: Handlers=event7 B: PROP=0 B: EV=13 B: KEY=1 0 0 0 0 B: MSC=10

I: Bus=0003 Vendor=17ef Product=60ee Version=0111 N: Name="Lenovo TrackPoint Keyboard II"

Thinkpad II Keyboard Bluetooth [root@desktop jerone]# bluetoothctl info D3:0D:A0:D7:D1:8B Device D3:0D:A0:D7:D1:8B (random) Name: TrackPoint Keyboard II Alias: TrackPoint Keyboard II Appearance: 0x03c1 Icon: input-keyboard Paired: yes Trusted: yes Blocked: no Connected: BrightnesBrightnesyes WakeAllowed: no LegacyPairing: no UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb) UUID: Human Interface Device (00001812-0000-1000-8000-00805f9b34fb) Modalias: usb:v17EFp60E1d0035 ManufacturerData Key: 0x0006 ManufacturerData Value: 03 00 80 ...
RSSI: -67 [CHG] Device 7E:86:29:5E:A3:27 RSSI: -58

dmesg

[ 796.811220] input: TrackPoint Keyboard II Keyboard as /devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input33 [ 796.811635] input: TrackPoint Keyboard II Mouse as /devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input34 [ 796.811793] input: TrackPoint Keyboard II Consumer Control as /devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input35 [ 796.811880] input: TrackPoint Keyboard II System Control as /devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input36 [ 796.811993] input: TrackPoint Keyboard II as /devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input38

cat /pf Product=60e1roc/bus/input/devices

I: Bus=0005 Vendor=17ef Product=60e1 Version=0035 N: Name="TrackPoint Keyboard II Keyboard" P: Phys=8c:c6:81:15:25:d8 S: Sysfs=/devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input33 U: Uniq=d3:0d:a0:d7:d1:8b H: Handlers=sysrq kbd leds event23 B: PROP=0 B: EV=120013 B: KEY=1000000000007 ff800000000007ff febeffdfffefffff fffffffffffffffe B: MSC=10 B: LED=1f

I: Bus=0005 Vendor=17ef Product=60e1 Version=0035 N: Name="TrackPoint Keyboard II Mouse" P: Phys=8c:c6:81:15:25:d8 S: Sysfs=/devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input34 U: Uniq=d3:0d:a0:d7:d1:8b H: Handlers=mouse2 event24 B: PROP=0 B: EV=17 B: KEY=70000 0 0 0 0 B: REL=903 B: MSC=10

I: Bus=0005 Vendor=17ef Product=60e1 Version=0035 N: Name="TrackPoint Keyboard II Consumer Control" P: Phys=8c:c6:81:15:25:d8 S: Sysfs=/devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input35 U: Uniq=d3:0d:a0:d7:d1:8b H: Handlers=kbd event25 B: PROP=0 B: EV=1f B: KEY=3f000301ff 0 0 483ffff17aff32d bfd4444600000000 1 130ff38b17c000 677bfad9415fed 19ed68000004400 10000002 B: REL=1040 B: ABS=100000000 B: MSC=10

I: Bus=0005 Vendor=17ef Product=60e1 Version=0035 N: Name="TrackPoint Keyboard II System Control" P: Phys=8c:c6:81:15:25:d8 S: Sysfs=/devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input36 U: Uniq=d3:0d:a0:d7:d1:8b H: Handlers=kbd event26 B: PROP=0 B: EV=13 B: KEY=c000 10000000000000 0 B: MSC=10

I: Bus=0005 Vendor=17ef Product=60e1 Version=0035 N: Name="TrackPoint Keyboard II" P: Phys=8c:c6:81:15:25:d8 S: Sysfs=/devices/virtual/misc/uhid/0005:17EF:60E1.0008/input/input38 U: Uniq=d3:0d:a0:d7:d1:8b H: Handlers=event27 B: PROP=0 B: EV=9 B: ABS=10000000000

lentinj commented 4 years ago
* Some keys need fixing (through kernel or udev?)
  - Project (sending WINDOWS+P) (F7) - need to fix somehow?
  - Quote box? (F8) - not sending anything
  - Settings (F9) - not sending anything
  - Bluetooth (F10) - not sending anything
  - Keyboard (F11) - not sending anything
  - Favorite (F12) - not sending anything

It would be interesting to use hcidump (for bluetooth) or hidraw (cat /dev/hidraw1 | xxd -b -c6 roughly) to see what these keys produce at that level. Although there's a high chance they all produce the same code until some special mode is enabled (this is what all the other keyboards I've tried do).

jeroney commented 4 years ago

Pressing F8 & F11 don't produce anything.

[root@desktop jerone]# cat /dev/hidraw1 | xxd -b -c6 00000000: 00000101 11000001 00000101 00000000 00000101 10111100 ...... <-- Quote box / Action Center (F8) 00000006: 00000101 00000000 00000101 10110110 00000101 00000000 ...... <-- Settings (F9) 0000000c: 00000101 10110111 00000101 00000000 00000101 10111000 ...... <-- Favorite (F12)

Also figured I did try updating the lenovo-hid driver in the kernel. That's when I realized this thing is nothing like the previous model under the hood.

So the keyboard has two modes. Android & WIndows. Windows it's a normal keyboard. Android mode does two things:

So in Android mode everything is HID compliant. In Windows Mode it's not.

Really not sure why Lenovo keeps doing this. Just make HID compliant keys and there wouldn't be a problem anywhere.

On Sun, Oct 4, 2020 at 5:18 AM Jamie Lentin notifications@github.com wrote:

  • Some keys need fixing (through kernel or udev?)
    • Project (sending WINDOWS+P) (F7) - need to fix somehow?
    • Quote box? (F8) - not sending anything
    • Settings (F9) - not sending anything
    • Bluetooth (F10) - not sending anything
    • Keyboard (F11) - not sending anything
    • Favorite (F12) - not sending anything

It would be interesting to use hcidump (for bluetooth) or hidraw (cat /dev/hidraw1 | xxd -b -c6 roughly) to see what these keys produce at that level. Although there's a high chance they all produce the same code until some special mode is enabled (this is what all the other keyboards I've tried do).

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/lentinj/tp-compact-keyboard/issues/51#issuecomment-703233707, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAFR37ASLW2FCQ5YI2OKXELSJBDWJANCNFSM4MWVFNNA .

ValdikSS commented 3 years ago

https://lore.kernel.org/linux-input/20211017083246.977096-1-iam@valdikss.org.ru/T/

This patch enables "native mode", in which middle button works properly (does not emulate press-release before scrolling) and horizontal scrolling is supported. It also handles trackpoint sensitivity and proper button mapping.

leoluk commented 3 years ago

@ValdikSS Working horizontal scrolling? That's awesome! Do you need any help with testing?

jeroney commented 2 years ago

Tested @ValdikSS patches posted on linux-input mailing list. Not sure what the hold up is. But works really well for both USB & Bluetooth modes of the keyboard.

I came up with udev rules to have fn-lock disabled. The bluetooth one definitely took some work to figure out. But old work actually came in handy and probably needs updating on the side for the original Thinkpad keyboard.

cat <<'EOF' > /etc/udev/rules.d/99-disable-fn-lock-thinkpad-trackpoint-keyboard-II.rules

ThinkPad TrackPoint Keyboard II USB

SUBSYSTEM=="hid", \ DRIVER=="lenovo", \ ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="60ee", \ ATTR{fn_lock}="0"

ThinkPad TrackPoint Keyboard II Bluetooth

SUBSYSTEM=="input", \ ATTRS{id/vendor}=="17ef", ATTRS{id/product}=="60e1", \ TEST=="/sys/$devpath/device/fn_lock", \ RUN+="/bin/sh -c 'echo 0 > \"/sys/$devpath/device/fn_lock\"'" EOF

jeroney commented 2 years ago

Oh also latest version of the patches (trying) to make their way upstream: https://patchwork.kernel.org/project/linux-input/list/?submitter=188019

jeroney commented 2 years ago

Good news. The patches are on their way to the Linux kernel in 5.19

Staging for the patches can be found here: https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git/log/?h=for-5.19/lenovo

bertogg commented 2 years ago

Hi, I have the Bluetooth keyboard (17ef:60ee) and I'm trying to use the special keys. In my case:

I'm using Linux 5.18.2 with this patch and udev 247.3.

ValdikSS commented 2 years ago

@bertogg, are you on Xorg? Xorg has 8-bit key codes, while the KEY_NOTIFICATION_CENTER is 444 for example.

bertogg commented 2 years ago

I'm with a GNOME Wayland session with Xwayland

bertogg commented 2 years ago

Ah yeah, I see them with libinput debug-events. How can I use them in GNOME?

managervcf commented 2 years ago

Hi, I have the Bluetooth keyboard (17ef:60ee) and I'm trying to use the special keys. In my case:

  • Manage external display (F7) - works fine out of the box white_check_mark
  • Action center (F8) - not sending anything x
  • Settings (F9) - works fine out of the box white_check_mark
  • Bluetooth (F10) - works fine out of the box white_check_mark
  • Keyboard (F11) - not sending anything x
  • Favorite (F12) - acpi_listen gives me button/prog1, and it's mapped to XF86Launch1, it doesn't do anything by default but I can configure it white_check_mark

I'm using Linux 5.18.2 with this patch and udev 247.3.

That's exactly what is happening with my keyboard as well. Also I found that the FnLock indicator always turns on on startup, even though I disable it before rebooting.

jeroney commented 2 years ago

@managervcf

To have FnLock disable you have to use udev to do it. I wrote a udev rule.

Run this command to install the udev rule, then restart udev or the system for it to take affect:

cat <<'EOF' > /etc/udev/rules.d/99-disable-fn-lock-thinkpad-trackpoint-keyboard-II.rules

ThinkPad TrackPoint Keyboard II USB

SUBSYSTEM=="hid", DRIVER=="lenovo", ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="60ee", ATTR{fn_lock}="0"

ThinkPad TrackPoint Keyboard II Bluetooth

SUBSYSTEM=="input", ATTRS{id/vendor}=="17ef", ATTRS{id/product}=="60e1", TEST=="/sys/$devpath/device/fn_lock", RUN+="/bin/sh -c 'echo 0 > "/sys/$devpath/device/fn_lock"'" EOF