Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ThinkPad keyboard II #51

Open
dal00 opened this issue Apr 30, 2020 · 18 comments
Open

ThinkPad keyboard II #51

dal00 opened this issue Apr 30, 2020 · 18 comments

Comments

@dal00
Copy link

dal00 commented Apr 30, 2020

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
Copy link

cblegare commented Sep 16, 2020

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

  • 0003:046D:4016.0005
  • 0003:046D:401B.0004
  • 0003:046D:C52B.0001
  • 0003:046D:C52B.0002
  • 0003:046D:C52B.0003
  • 0003:17EF:60EE.0009
  • 0003:17EF:60EE.000A
  • 0003:17EF:60EE.000B

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

@dal00
Copy link
Author

dal00 commented Sep 16, 2020

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
Copy link

@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
Copy link

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
Copy link
Contributor

jeroney commented Oct 3, 2020

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.

  • FN control through sysfs

    • The keybaord now has a light to tell you that Fnlock is on or not.
      It's controlled via the keyboard
  • 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

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
Copy link
Owner

lentinj commented Oct 4, 2020

* 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
Copy link
Contributor

jeroney commented Oct 4, 2020 via email

@ValdikSS
Copy link

https://lore.kernel.org/linux-input/[email protected]/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
Copy link

leoluk commented Oct 19, 2021

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

@jeroney
Copy link
Contributor

jeroney commented Feb 20, 2022

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
Copy link
Contributor

jeroney commented Feb 20, 2022

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

@jeroney
Copy link
Contributor

jeroney commented May 2, 2022

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
Copy link

bertogg commented Jul 4, 2022

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 ✅
  • Action center (F8) - not sending anything ❌
  • Settings (F9) - works fine out of the box ✅
  • Bluetooth (F10) - works fine out of the box ✅
  • Keyboard (F11) - not sending anything ❌
  • 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 ✅

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

@ValdikSS
Copy link

ValdikSS commented Jul 4, 2022

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

@bertogg
Copy link

bertogg commented Jul 4, 2022

I'm with a GNOME Wayland session with Xwayland

@bertogg
Copy link

bertogg commented Jul 4, 2022

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

@managervcf
Copy link

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
Copy link
Contributor

jeroney commented Jul 10, 2022

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants