GithubHelp home page GithubHelp logo

linux-magic-trackpad-2-driver's Introduction

Driver is mainlined

This driver was merged into the official Linux kernel in 4.20 (see update 2018-12-15 below). If uname -srm shows 4.20 or greater, you already have this driver installed and likely have no use for the driver in this repo.

Update 2019-04-19

Installed today Xubuntu 19.04 and the pressure problem was back. I had to add the following file:

/usr/share/X11/xorg.conf.d/90-magictrackpad.conf

Section "InputClass"
  Identifier      "Touchpads"
  Driver          "libinput"
  MatchProduct    "Apple Inc. Magic Trackpad 2"
  MatchDevicePath "/dev/input/event*"
EndSection

To pair via Bluetooth disconnect from USB, then turn it off and on again and you will find it when you search for devices.

Update 2019-04-10

Tried today the beta of Ubuntu 19.04 with Kernel 5.0 and the Magic Trackpad 2 works out of the box. No quirks needed.

Update 2019-01-07

As the pressure offsets have been removed from the official release, the driver needs a libinput quirks file. schmunk42 suggested the following quirks file in his comment torvalds/linux#332 (comment):

/etc/libinput/local-overrides.quirks

[Touchpad touch override]
MatchUdevType=touchpad
MatchName=*Magic Trackpad 2
AttrPressureRange=4:0

Update 2018-12-15

The driver will be included in the 4.20 release of the official linux kernel.

This means that the active development in this repository is stopped and you should use the official code for modifications.

Thanks

Linux-Magic-Trackpad-2-Driver

This repository contains the linux hid-magicmouse driver with Magic Trackpad 2 support for Linux 4.18. For older kernels you might have to diff and backport.

The driver is tested in combination with the xf86-libinput and xf86-mtrack driver.

The driver supports bluetooth and USB. To connect the Trackpad via bluetooth, it must be clicked once after it is turned on, then the Trackpad tries to reconnect to the last paired (and trusted) connection.

Please help to test this driver and report issues.

libinput

You can just use the standard xf86-libinput driver and configure it through your Window-Manager-Settings. This driver works very well, but does not support three-finger-drag, but tap-to-drag.

mTrack

An example configuration for mtrack can be found in:

usr/share/X11/xorg.conf.d/90-magictrackpad.conf 

This configuration supports tap-to-click, two-finger-scroll and three-finger-drag. Though scrolling is not as smooth as with xf86-libinput. It can be used as starting point for your own configuration. Make sure, that you have xf86-input-mtrack-git installed and it gets loaded. You find more information about the options here: https://github.com/p2rkw/xf86-input-mtrack

DKMS

@adam-h made a DKMS which can be used for testing:

Setup/install with:

cd scripts
sudo ./install.sh

Remove with:

sudo ./remove.sh

Or just use regular dkms commands once you've added ./linux/drivers/hid.

Troubleshooting

If the driver is not working, please make sure that the correct hid-magicmouse driver gets loaded and try the following steps:

cd linux/drivers/hid
make
sudo rmmod hid_magicmouse
sudo insmod ./hid-magicmouse.ko
tail -f ~/.local/share/xorg/Xorg.0.log

or for Ubuntu

tail -f /var/log/Xorg.0.log

Now unplug the trackpad and plug it back in, to see which driver gets loaded.

linux-magic-trackpad-2-driver's People

Contributors

adam-h avatar bobbysue22 avatar curiousercreative avatar mwyborski avatar rohitpid avatar wyborski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

linux-magic-trackpad-2-driver's Issues

Can't get it to work on Ubuntu 18:04 insmod: ERROR: could not insert module ./hid-magicmouse.ko: Invalid module format

Hi i'm a noob, i have Ubuntu 18.04 with Kernel 4.18.6-041806-generic

`gjung@gjung-Lenovo-G570:/Linux-Magic-Trackpad-2-Driver/scripts$ sudo ./install.sh

  • dkms_name=hid-magicmouse-dkms
  • dkms_version=4.18+magictrackpad2
    +++ dirname ./install.sh
    ++ cd .
    ++ pwd
  • DIR=/home/gjung/Linux-Magic-Trackpad-2-Driver/scripts
  • dkms status -m hid-magicmouse-dkms -v 4.18+magictrackpad2
  • egrep '(added|built|installed)'
  • dkms add /home/gjung/Linux-Magic-Trackpad-2-Driver/scripts/../linux/drivers/hid

Creating symlink /var/lib/dkms/hid-magicmouse-dkms/4.18+magictrackpad2/source ->
/usr/src/hid-magicmouse-dkms-4.18+magictrackpad2

DKMS: add completed.

  • egrep '(built|installed)'
  • dkms status -m hid-magicmouse-dkms -v 4.18+magictrackpad2
  • dkms build hid-magicmouse-dkms/4.18+magictrackpad2

Kernel preparation unnecessary for this kernel. Skipping...

Building module:
cleaning build area....
make -j4 KERNELRELEASE=4.18.6-041806-generic KERNEL_VERSION=4.18.6-041806-generic all.....
cleaning build area...

DKMS: build completed.

  • dkms status -m hid-magicmouse-dkms -v 4.18+magictrackpad2
  • egrep '(installed)'
  • dkms install --force hid-magicmouse-dkms/4.18+magictrackpad2

hid-magicmouse:
Running module version sanity check.

  • Original module
    • This kernel never originally had a module by this name
  • Multiple same named modules!
    • 3 named hid-magicmouse.ko in /lib/modules/4.18.6-041806-generic/
  • Installation
    • Installing to /lib/modules/4.18.6-041806-generic/updates/dkms/

depmod...

Backing up initrd.img-4.18.6-041806-generic to /boot/initrd.img-4.18.6-041806-generic.old-dkms
Making new initrd.img-4.18.6-041806-generic
(If next boot fails, revert to initrd.img-4.18.6-041806-generic.old-dkms image)
update-initramfs.............

DKMS: install completed.
`

After reboot

lsmod | grep hid hidp 24576 1 bluetooth 548864 48 btrtl,hidp,btintel,btbcm,bnep,btusb,rfcomm mac_hid 16384 0 hid_magicmouse 20480 0 hid_generic 16384 0 usbhid 49152 0 hid 126976 4 hidp,usbhid,hid_generic,hid_magicmouse
after this i will look if the driver was loaded correctly

`gjung@gjung-Lenovo-G570:~/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid$ make
make -C /lib/modules/4.18.6-041806-generic/build M=/home/gjung/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid modules
make[1]: Verzeichnis „/usr/src/linux-headers-4.18.6-041806-generic“ wird betreten
Building modules, stage 2.
MODPOST 1 modules
make[1]: Verzeichnis „/usr/src/linux-headers-4.18.6-041806-generic“ wird verlassen

gjung@gjung-Lenovo-G570:~/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid$ sudo rmmod hid_magicmouse
[sudo] Passwort für gjung:

gjung@gjung-Lenovo-G570:~/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid$ sudo insmod ./hid-magicmouse.ko
insmod: ERROR: could not insert module ./hid-magicmouse.ko: Invalid module format
`

and this is my problem can enyone help?

Ubuntu 18.04.2 no scrolling

My System:
Ubuntu 18.04.2 (amd64)
Kernel: 4.18.0-16-generic

I can't scroll with my Magic Mouse 2.

There was no libinput directory in /etc, so I created it (sudo mkdir /etc/libinput) and placed the local-overrides.quirks file in it. But it still doesn't work.

Installation instructions

I tried to get this working in my Kubuntu 17.04 dist with the following:

  1. Cloned the Kernel from git://kernel.ubuntu.com/ubuntu/ubuntu-zesty.git
  2. Applied your changes from torvalds/linux#332
  3. Built it and installed it this way and rebooted.

Is there anything else I need to do to make it work? I'm quite lost after this, it feels like I need to do something more. I still only get the single finger movement and taps from the trackpad.

Ubuntu 18.04 - libinput installation help

I have Ubuntu 18.04 and I have installed libinput with sudo apt-get install xserver-xorg-input-libinput which works fine.
My magic trackpad 2 connects fine over bluetooth but requires too much pressure so I wanted to update/etc/libinput/local-overrides.quirksas mentioned in update 2019-01-07.

However, there is no such libinput folder in etc even though I have installed libinput. Any guidance would be greatly appreciated. I am brand new to Ubuntu and have started using it for work.

Support for Force-Feedback

Hello @robotrovsky
may I ask in the first play, how you where able to determine all the values for the driver? Reverese-Engineering by intercepting the communications?

I am interested in the force-feedback functionality, disabeling the default force-touch and sending my own events. If possible with different profiles.

Magic Mouse Scrolling not working in Ubuntu 19.04

I had this module working in 18.04 with the 4.20... kernel without issues. I know it has been implemented into the release but the scrolling isn't working. I've tried rmmod and insmod under the 5.0.0-13 kernel with 19.04 but no joy. This is with the Magic Mouse 2 and not the trackpad.

Am I missing something? Any info that could be relevant I can provide?

Drag stops when pressing a bit harder while dragging

Does anyone know how to make the Magic Trackpad 2 keep dragging, even though you're pressing hard? As it is now, I have to drag with a feather-light touch, and it's hard to get used to.

I've tried changing AttrPressureRange, but it doesn't seem to do anything.
Perhaps someone knows what to change in regards to dragging pressure?

When I press hard while dragging, the pointer just stops moving completely.

Debian Buster, 5.3.0-0.bpo.2-amd64
xorg-server 2:1.20.4-1

xorg log when plugging in:

[  5076.799] (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/mouse0)
[  5076.799] (II) No input driver specified, ignoring this device.
[  5076.799] (II) This device may have been added with another device file.
[  5076.989] (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/event1)
[  5076.989] (**) Apple Inc. Magic Trackpad 2: Applying InputClass "libinput touchpad catchall"
[  5076.989] (**) Apple Inc. Magic Trackpad 2: Applying InputClass "Touchpads"
[  5076.989] (II) Using input driver 'libinput' for 'Apple Inc. Magic Trackpad 2'
[  5076.989] (**) Apple Inc. Magic Trackpad 2: always reports core events
[  5076.989] (**) Option "Device" "/dev/input/event1"
[  5076.989] (**) Option "_source" "server/udev"
[  5077.049] (II) event1  - Apple Inc. Magic Trackpad 2: is tagged by udev as: Touchpad
[  5077.050] (II) event1  - Apple Inc. Magic Trackpad 2: device is a touchpad
[  5077.050] (II) event1  - Apple Inc. Magic Trackpad 2: device removed
[  5077.080] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-7/1-7:1.1/0003:05AC:0265.0010/input/input31/event1"
[  5077.080] (II) XINPUT: Adding extended input device "Apple Inc. Magic Trackpad 2" (type: TOUCHPAD, id 8)
[  5077.082] (**) Option "AccelerationScheme" "none"
[  5077.084] (**) Apple Inc. Magic Trackpad 2: (accel) selected scheme none/0
[  5077.084] (**) Apple Inc. Magic Trackpad 2: (accel) acceleration factor: 2.000
[  5077.084] (**) Apple Inc. Magic Trackpad 2: (accel) acceleration threshold: 4
[  5077.145] (II) event1  - Apple Inc. Magic Trackpad 2: is tagged by udev as: Touchpad
[  5077.145] (II) event1  - Apple Inc. Magic Trackpad 2: device is a touchpad

xinput list-props 8

Device 'Apple Inc. Magic Trackpad 2':
        Device Enabled (155):   1
        Coordinate Transformation Matrix (157): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Tapping Enabled (291): 0
        libinput Tapping Enabled Default (292): 0
        libinput Tapping Drag Enabled (293):    1
        libinput Tapping Drag Enabled Default (294):    1
        libinput Tapping Drag Lock Enabled (295):       1
        libinput Tapping Drag Lock Enabled Default (296):       0
        libinput Tapping Button Mapping Enabled (297):  0, 1
        libinput Tapping Button Mapping Default (298):  1, 0
        libinput Natural Scrolling Enabled (299):       1
        libinput Natural Scrolling Enabled Default (300):       0
        libinput Disable While Typing Enabled (301):    1
        libinput Disable While Typing Enabled Default (302):    1
        libinput Scroll Methods Available (303):        1, 1, 0
        libinput Scroll Method Enabled (304):   1, 0, 0
        libinput Scroll Method Enabled Default (305):   1, 0, 0
        libinput Click Methods Available (306): 1, 1
        libinput Click Method Enabled (307):    0, 1
        libinput Click Method Enabled Default (308):    0, 1
        libinput Middle Emulation Enabled (309):        0
        libinput Middle Emulation Enabled Default (310):        0
        libinput Accel Speed (311):     0.155378
        libinput Accel Speed Default (312):     0.000000
        libinput Left Handed Enabled (313):     0
        libinput Left Handed Enabled Default (314):     0
        libinput Send Events Modes Available (276):     1, 1
        libinput Send Events Mode Enabled (277):        0, 0
        libinput Send Events Mode Enabled Default (278):        0, 0
        Device Node (279):      "/dev/input/event1"
        Device Product ID (280):        1452, 613
        libinput Drag Lock Buttons (315):       <no items>
        libinput Horizontal Scroll Enabled (316):       1

on x start I run this:

xinput set-prop 8 "libinput Tapping Enabled" 1
xinput set-prop 8 "libinput Disable While Typing Enabled" 0 
xinput set-prop 8 "libinput Accel Speed" 0.2
xinput set-prop 8 "libinput Middle Emulation Enabled" 1

How to disable USB and only use Bluetooth?

I noticed that since I have connected my TrackPad via USB mainly due to loading it (#34) it also uses USB as the "main control channel". Since then I am experiencing kernel panics from time to time - I don't know if this is directly related, but I'd like to know if there's a way to disable the USB control connection and only load via USB?

Not able to change acceleration profile

After installing the driver everything seems to work ok, except that acceleration is forced on. libinput list-devices gives Accel profiles: none instead of Accel profiles: flat *adaptive. So I'm unable to set it to flat.

failed to make it work on Debian 9.4; 4.16.0-0.bpo.2-amd64

should it work at all on 4.16?

host:
Linux xxx 4.16.0-0.bpo.2-amd64 #1 SMP Debian 4.16.12-1~bpo9+1 (2018-06-03) x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.4 (stretch)
Release:	9.4
Codename:	stretch

device: https://en.wikipedia.org/wiki/Magic_Trackpad (bluetooth)

i tried both DKMS, and then removed it and used the insmod ./ method to be sure.

symptom: pointer doesn't work, and xinput only returns mouse 1 events when any (!) of the physical buttons are pressed.

$ xinput 
⎜   ↳ Apple Wireless Trackpad                 	id=19	[slave  pointer  (2)]
$ xinput test 19
button press   1 
button release 1 
button press   1 
button release 1 
...
[  3563.773] (II) config/udev: Adding input device Apple Wireless Trackpad (/dev/input/mouse3)
[  3563.774] (II) No input driver specified, ignoring this device.
[  3563.774] (II) This device may have been added with another device file.
[  3563.864] (II) config/udev: Adding input device Apple Wireless Trackpad (/dev/input/event23)
[  3563.865] (**) Apple Wireless Trackpad: Applying InputClass "evdev touchpad catchall"
[  3563.865] (**) Apple Wireless Trackpad: Applying InputClass "libinput touchpad catchall"
[  3563.865] (II) Using input driver 'libinput' for 'Apple Wireless Trackpad'
[  3563.865] (II) systemd-logind: got fd for /dev/input/event23 13:87 fd 53 paused 0
[  3563.865] (**) Apple Wireless Trackpad: always reports core events
[  3563.865] (**) Option "Device" "/dev/input/event23"
[  3563.865] (**) Option "_source" "server/udev"
[  3563.866] (II) input device 'Apple Wireless Trackpad', /dev/input/event23 is tagged by udev as: Touchpad
[  3563.866] (II) input device 'Apple Wireless Trackpad', /dev/input/event23 is a touchpad
[  3563.866] (**) Option "config_info" "udev:/sys/devices/virtual/misc/uhid/0005:05AC:030E.0007/input/input27/event23"
[  3563.866] (II) XINPUT: Adding extended input device "Apple Wireless Trackpad" (type: TOUCHPAD, id 19)
[  3563.866] (**) Option "AccelerationScheme" "none"
[  3563.866] (**) Apple Wireless Trackpad: (accel) selected scheme none/0
[  3563.867] (**) Apple Wireless Trackpad: (accel) acceleration factor: 2.000
[  3563.867] (**) Apple Wireless Trackpad: (accel) acceleration threshold: 4
[  3563.867] (II) input device 'Apple Wireless Trackpad', /dev/input/event23 is tagged by udev as: Touchpad
[  3563.867] (II) input device 'Apple Wireless Trackpad', /dev/input/event23 is a touchpad

i'm a kernel noob, but i noticed something strange: i saw this once in /var/log/syslog: hid_magicmouse: loading out-of-tree module taints kernel., but afterwards no amount of rmmod and insmod ./ produced that message again.

Issues with click and drag

This is a bit hard to explain, but I am having issues with physical click and drag using one finger. This causes problems with, for example, selecting files in the file manager, moving windows, selecting text on a webpage, etc. holding with thumb and dragging, as well as double tap and drag work fine. I'm using the latest version of the driver on Linux 4.18.

Here is a video demonstrating the problem: https://youtu.be/L-U8M6quwXA

Abnormal behaviour after installing in Ubuntu 16.04

Following #16 , I reverted ecfde9f and installed the driver in Ubuntu 16.04. However, after installation, the magic trackpad does not work properly. I can only move the cursor when keeping pressing. And the scrolling does not work at all. Does anyone have any ideas?

How to integrate usr/share/X11/xorg.conf.d/90-magictrackpad.conf

Hello,

I'm fairly new to the linux world. Thanks a lot for the repo! my trackpad2 works, but I don't know how to integrate the 90-magictrackpad.conf into my system. I copied it with sudo in the corresponding folder usr/share/X11/xorg.conf.d/90-magictrackpad.conf
And did a system reboot. But the tap to click function is not working.

Do I need to add the 90-magictrackpad.conf somewhere to be loaded?
Thanks for your help in advance.

mtrack: cannot open device

OS: Ubuntu 18.04
Kernel: 4.15

After install the driver and the mtrack config, my trackpad2 can't be loaded, with the error Cannot open device /dev/input/event* Permission denied. I have tested usb and bt, the error log is the same.

Full log:

[  1076.764] (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/mouse2)
[  1076.764] (II) No input driver specified, ignoring this device.
[  1076.764] (II) This device may have been added with another device file.
[  1076.799] (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/event18)
[  1076.799] (**) Apple Inc. Magic Trackpad 2: Applying InputClass "evdev pointer catchall"
[  1076.799] (**) Apple Inc. Magic Trackpad 2: Applying InputClass "libinput pointer catchall"
[  1076.800] (**) Apple Inc. Magic Trackpad 2: Applying InputClass "Touchpads"
[  1076.800] (II) Using input driver 'mtrack' for 'Apple Inc. Magic Trackpad 2'
[  1076.800] (**) Apple Inc. Magic Trackpad 2: always reports core events
[  1076.800] (**) Apple Inc. Magic Trackpad 2: always reports core events
[  1076.800] (**) Option "FingerHigh" "10"
[  1076.800] (**) Option "FingerLow" "10"
[  1076.800] (**) Option "ButtonIntegrated" "true"
[  1076.800] (**) Option "TapButton1" "1"
[  1076.800] (**) Option "TapButton2" "3"
[  1076.800] (**) Option "TapButton3" "2"
[  1076.800] (**) Option "TapButton4" "0"
[  1076.800] (**) Option "ClickTime" "25"
[  1076.800] (**) Option "ScrollDistance" "75"
[  1076.800] (**) Option "ScrollUpButton" "5"
[  1076.800] (**) Option "ScrollDownButton" "4"
[  1076.800] (**) Option "ScrollLeftButton" "7"
[  1076.800] (**) Option "ScrollRightButton" "6"
[  1076.800] (**) Option "SwipeDistance" "1"
[  1076.800] (**) Option "SwipeUpButton" "1"
[  1076.800] (**) Option "SwipeDownButton" "1"
[  1076.800] (**) Option "SwipeLeftButton" "1"
[  1076.800] (**) Option "SwipeRightButton" "1"
[  1076.800] (**) Option "TapDragEnable" "false"
[  1076.800] (**) Option "Sensitivity" "0.55"
[  1076.800] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.1/0003:05AC:0265.000C/input/input25/event18"
[  1076.800] (II) XINPUT: Adding extended input device "Apple Inc. Magic Trackpad 2" (type: TOUCHPAD, id 16)
[  1076.800] (II) device control: init
[  1076.800] (**) Option "Device" "/dev/input/event18"
[  1076.800] (EE) xf86OpenSerial: Cannot open device /dev/input/event18
	Permission denied.
[  1076.800] (EE) mtrack: cannot open device
[  1076.801] (EE) Couldn't init device "Apple Inc. Magic Trackpad 2"
[  1076.802] (II) UnloadModule: "mtrack"

Have to manually run sudo insmod ./hid-magicmouse.ko after each restart (on Arch Linux/Manjaro)

Sorry if this question is noobish. I'm not familiar with dkms. I ran the install.sh script, and it seems that dkms does install a module called 4.18+magictrackpad2. However, after each restart I can only perform single click with no other actions available.

If I run sudo rmmod hid_magicmouse, apparently the module is not currently loaded. After I run sudo insmod ./hid-magicmouse.ko, the magic trackpad works correctly (I still don't exactly know how to configure it though. The settings manager provided by the WM doesn't seem to work. Should I manually write an XOrg .conf file?).

The output of dkms status is as such:

hid-magicmouse-dkms, 4.18+magictrackpad2, 4.18.12-1-MANJARO, x86_64: installed

I wonder why hid-magicmouse-dkms and 4.18+magictrackpad2 exist at the same time. It seems that I didn't do something correctly?

How to get the battery state?

My problem is that I currently need to have my touchpad almost always connected via USB to have it working. I suppose this is due a low battery state, but I am not sure since I can't see the loading percentage at the moment.

I found only #19 when looking for "battery", do you have any advice how to get the actual battery level?

not working with Ubuntu 20.04

Hello everyone,

This code has always just worked for me with magic mouse 2 and is excelent- I have reinstalled after upgrading to ubuntu 20.04 and performed the troubleshooting steps on the read.me, to no avail:

[   826.825] (**) rabbit’s Mouse: Applying InputClass "libinput pointer catchall"
[   826.825] (II) Using input driver 'libinput' for 'rabbit’s Mouse'

sudo insmod ./hid-magicmouse.ko executes without an error

I've never dabbled in any driver development before and am probably too newbie to solve this myself but i'm happy to be the guinea pig before anybody elses system breaks...

Magic Mouse 2 - Scroll not working

I finish instalation by instructions in readme file.

I still cannot scroll on my MM2. Is there a something which I missing?

kernel: 
4.18.5-041805-generic
+ dkms_name=hid-magicmouse-dkms
+ dkms_version=4.18+magictrackpad2
+++ dirname ./install.sh
++ cd .
++ pwd
+ DIR=/***/***/Linux-Magic-Trackpad-2-Driver/scripts
+ dkms status -m hid-magicmouse-dkms -v 4.18+magictrackpad2
+ egrep '(added|built|installed)'
+ dkms status -m hid-magicmouse-dkms -v 4.18+magictrackpad2
+ egrep '(built|installed)'
+ dkms status -m hid-magicmouse-dkms -v 4.18+magictrackpad2
+ egrep '(installed)'
Dist: 

Ubuntu 18.04

If I used kernel v.4.20 or 4.15 still had a same problem with scroll. Thank you for advice.

AUR package

Hi there,

Is anyone looking at doing an AUR package for this?

inconsistent USB vs bluetooth

When using the trackpad via bluetooth, a quirks override is still necessary to fix the pressure issues. Additionally, for some reason palm rejection doesn't work at all (just picks up palm as mouse movements).

When using the trackpad via USB, pressures work as expected without any quirks and palm rejection works reliably.

Tested this with both live USB ubuntu 19.04 (kernel 5.0) and elementary juno (kernel 5.0.11), same issues.

Trouble with installing

Hi, I use Ubuntu 18.04.2 LTS, try to install with Makefile, but I changed it to the next:
`KERNEL_VERSION := $(shell uname -r)
KERNEL_MODULES := /lib/modules/$(KERNEL_VERSION)/build

hid-y := hid-magicmouse.o

obj-m += hid-magicmouse.o

all:
$(MAKE) -C $(KERNEL_MODULES) M=$(shell pwd) modules

clean:
$(MAKE) -C $(KERNEL_MODULES) M=$(shell pwd) clean
`

and after sudo make command I get:

make -C /lib/modules/4.15.0-48-generic/build M=/home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid modules make[1]: Entering directory '/usr/src/linux-headers-4.15.0-48-generic' CC [M] /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.o /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c: In function ‘magicmouse_probe’: /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:629:12: error: too many arguments to function ‘hid_register_report’ report = hid_register_report(hdev, HID_INPUT_REPORT, ^~~~~~~~~~~~~~~~~~~ In file included from /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:18:0: ./include/linux/hid.h:860:20: note: declared here struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); ^~~~~~~~~~~~~~~~~~~ /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:633:13: error: too many arguments to function ‘hid_register_report’ report = hid_register_report(hdev, HID_INPUT_REPORT, ^~~~~~~~~~~~~~~~~~~ In file included from /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:18:0: ./include/linux/hid.h:860:20: note: declared here struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); ^~~~~~~~~~~~~~~~~~~ /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:636:13: error: too many arguments to function ‘hid_register_report’ report = hid_register_report(hdev, HID_INPUT_REPORT, ^~~~~~~~~~~~~~~~~~~ In file included from /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:18:0: ./include/linux/hid.h:860:20: note: declared here struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); ^~~~~~~~~~~~~~~~~~~ /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:639:12: error: too many arguments to function ‘hid_register_report’ report = hid_register_report(hdev, HID_INPUT_REPORT, ^~~~~~~~~~~~~~~~~~~ In file included from /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:18:0: ./include/linux/hid.h:860:20: note: declared here struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); ^~~~~~~~~~~~~~~~~~~ /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:641:12: error: too many arguments to function ‘hid_register_report’ report = hid_register_report(hdev, HID_INPUT_REPORT, ^~~~~~~~~~~~~~~~~~~ In file included from /home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.c:18:0: ./include/linux/hid.h:860:20: note: declared here struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); ^~~~~~~~~~~~~~~~~~~ scripts/Makefile.build:337: recipe for target '/home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.o' failed make[2]: *** [/home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid/hid-magicmouse.o] Error 1 Makefile:1552: recipe for target '_module_/home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid' failed make[1]: *** [_module_/home/rleshchenko/Documents/Linux-Magic-Trackpad-2-Driver/linux/drivers/hid] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-48-generic' Makefile:9: recipe for target 'all' failed make: *** [all] Error 2
Can you help me?

Mainlining code?

Have you started the process to mainline this? I have code for the magic mouse 2 that I'd also like to mainline sometime. I'm still working on improving it but it'd be nice to know what kind of timeline you were thinking of. I could do that separately after yours to keep the patches smaller or would it be better to create a PR for this repo?

Support for Secondary Click

Hi, I was wondering if this driver can support a secondary click that can be activated and have option to choose to click in bottom right corner as well? If not, it would be great to support it.

Thanks

Cannot load (unsigned) DKMS module with secure boot enabled

Putting this out there for people experiencing the same problem because it took me a while to install this driver properly.

My setup is a Lenovo Thinkpad 5th gen. notebook with Ubuntu 18.04.2 LTS running kernel 4.18.0-25-generic.

After installing the driver using scripts/install.sh I didn't enroll the new key using MOK (for some reason the password I set wasn't accepted). Which I think lead to module not being loaded on startup due to secure boot, this was evident when rmmod said the module was not loaded. When I tried insmod then I got the error "insmod: ERROR: could not insert module ./hid-magicmouse.ko: Operation not permitted".

So what I did is disable secure boot altogether by following this website: https://wiki.ubuntu.com/UEFI/SecureBoot/DKMS. Then after boot the driver worked perfectly.

Also on Ubuntu 18.04 you can install mtrack using sudo apt install xserver-xorg-input-mtrack, which will uninstall all the xserver-xorg-input-*-hwe-18.04 packages due to a conflict. So you should not forget to directly install xserver-xorg-input-all afterwards to replace the removed input packages. Because if you don't, you cannot use your keyboard and mouse after reboot

how to get driver into Fedora?

Hello,

I got the trackpad to work on Fedora 28 (wirelessly & wired) with this driver by renaming it as per ticket #6 .

Considering I work as Software Engineer at Red Hat, I was wondering if we can somehow get this driver into upstream kernel and/or fedora. Perhaps I could nudge our guys to include this driver?

Have you looked into this, do you have any suggestions? Should I submit a fedora kernel report and ask them to take a look at this driver?

Needs too much pressure (Ubuntu 18.04)

I'm on Ubuntu 18.04 with 4.20 kernel, on wireless mode scrolling needs a lot of pressure. When connected it works fine.
I have added the quirks file to /usr/share/libinput/.quirks as suggested by this comment #24 (comment)
But the problem still persists.

Can click but not move

I've managed to compile and load the module, but upon Blueeoth connection I can only click through the trackpad, not move the cursor.

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.4 LTS
Release:	16.04
Codename:	xenial
$ uname -r
4.4.0-130-generic

The module appears to be loaded:

$ dkms status | head -n 1
hid-magicmouse-dkms, 4.17+magictrackpad2, 4.4.0-130-generic, x86_64: installed
$ lsmod | grep magic
hid_magicmouse         20480  0
hid                   122880  6 hidp,i2c_hid,hid_multitouch,hid_generic,usbhid,hid_magicmouse

This is what /var/log/Xorg.0.log shows when connecting the device:

[  1381.594] (II) config/udev: Adding input device Magic Trackpad 2 (/dev/input/mouse4)
[  1381.594] (II) No input driver specified, ignoring this device.
[  1381.594] (II) This device may have been added with another device file.
[  1381.658] (II) config/udev: Adding input device Magic Trackpad 2 (/dev/input/event23)
[  1381.658] (**) Magic Trackpad 2: Applying InputClass "evdev pointer catchall"
[  1381.658] (**) Magic Trackpad 2: Applying InputClass "Touchpads"
[  1381.658] (II) Using input driver 'mtrack' for 'Magic Trackpad 2'
[  1381.658] (**) Magic Trackpad 2: always reports core events
[  1381.658] (**) Magic Trackpad 2: always reports core events
[  1381.658] (**) Option "FingerHigh" "10"
[  1381.658] (**) Option "FingerLow" "10"
[  1381.658] (**) Option "ButtonIntegrated" "true"
[  1381.658] (**) Option "TapButton1" "1"
[  1381.658] (**) Option "TapButton2" "3"
[  1381.658] (**) Option "TapButton3" "2"
[  1381.658] (**) Option "TapButton4" "0"
[  1381.658] (**) Option "ClickTime" "25"
[  1381.658] (**) Option "ScrollDistance" "75"
[  1381.658] (**) Option "ScrollUpButton" "5"
[  1381.658] (**) Option "ScrollDownButton" "4"
[  1381.658] (**) Option "ScrollLeftButton" "7"
[  1381.658] (**) Option "ScrollRightButton" "6"
[  1381.659] (**) Option "SwipeDistance" "1"
[  1381.659] (**) Option "SwipeUpButton" "1"
[  1381.659] (**) Option "SwipeDownButton" "1"
[  1381.659] (**) Option "SwipeLeftButton" "1"
[  1381.659] (**) Option "SwipeRightButton" "1"
[  1381.659] (**) Option "TapDragEnable" "false"
[  1381.659] (**) Option "Sensitivity" "0.55"
[  1381.659] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:4/0005:004C:0265.000D/input/input32/event23"
[  1381.659] (II) XINPUT: Adding extended input device "Magic Trackpad 2" (type: TOUCHPAD, id 21)
[  1381.659] (II) device control: init
[  1381.659] (**) Option "Device" "/dev/input/event23"
[  1381.659] (II) mtrack: devname: Magic Trackpad 2
[  1381.659] (II) mtrack: devid: 4c 265 70
[  1381.659] (II) mtrack: caps: left right
[  1381.680] (**) Magic Trackpad 2: (accel) keeping acceleration scheme 1
[  1381.680] (**) Magic Trackpad 2: (accel) acceleration profile 0
[  1381.680] (**) Magic Trackpad 2: (accel) acceleration factor: 2.000
[  1381.681] (**) Magic Trackpad 2: (accel) acceleration threshold: 4
[  1381.681] (II) device control: on
[  1381.681] (WW) Touchpad has minimal capabilities. Some features will be unavailable.

I am a complete noob in kernel/driver world, but those lines look suspicious:

[  1381.594] (II) config/udev: Adding input device Magic Trackpad 2 (/dev/input/mouse4)
[  1381.594] (II) No input driver specified, ignoring this device.
[  1381.594] (II) This device may have been added with another device file.

Could the cursor movements somehow go through /dev/input/mouse4 for which the driver is not used?

Thanks in advance!

NixOS / kernel 4.19 -- none of the gestures work

I run NixOS 18.09 with kernel 4.19.

I can connect the trackpad over bluetooth and can "basically" use it (navigate and click), but none of the gestures including basic two-finger scroll or double tap work. What could have I done wrong?

Kernel module is loaded:

# lsmod | grep magic
hid_magicmouse         16384  0
hid                   131072  7 i2c_hid,hidp,usbhid,hid_generic,hid_logitech_dj,hid_logitech_hidpp,hid_magicmouse
# 

Here's the relevant NixOS config:

serices.xserver = {
  libinput.enable = true;
  multitouch.enable = true;
};

Installation without DKMS

Hi, I'm running the SOLUS distro, without access to DKMS.

How to install these drivers without it?

Thank you so much for the effort you've put on this so far!!

Acceleration

I've installed this driver on Ubuntu 18.04, Kernal 4.18, and I notice that acceleration is enabled.

Can I disable it?

Windows Support

Hello everyone, I know it may not be a related issue, but I wonder if anyone was able or has information on how to make this as starting point to support Windows, IE. Make a reliable driver for apple magic mouse on Windows, the issue with the official driver is that it doesn't support scrolling, but only mouse movement and it disconnects frequently, I made a tiny windows service that prevents disconnection and it's working fine but the scrolling issue remains.
I have tried Magic Mouse Utilities also, which solves this problem, but it's closed source and paid program, you have to pay for a license per device per year, or you may buy a multiyear license which is a joke.
So if anyone has a hint or a starting point we may collaborate to solve this issue. Thank you.

Can't get it to work on Fedora?

Hello,

I'm running Fedora 28 and I can't get it to work. (I have not tried earlier fedora versions).

I.e,
0) I build via makefile

  1. I installed via ./install script.
  2. after reboot, right click/scrolling doesn't work.
  3. Following troubleshooting I get errors:
    [08:05:44 hid]$ sudo rmmod hid_magicmouse
    rmmod: ERROR: Module hid_magicmouse is builtin.
    [08:05:58 hid]$ sudo insmod ./hid-magicmouse.ko
    insmod: ERROR: could not insert module ./hid-magicmouse.ko: Invalid module format

Install log:

sudo ./install.sh

  • dkms_name=hid-magicmouse-dkms
  • dkms_version=4.17+magictrackpad2
    +++ dirname ./install.sh
    ++ cd .
    ++ pwd
  • DIR=/home/lufimtse/git/Linux-Magic-Trackpad-2-Driver/scripts
  • dkms status -m hid-magicmouse-dkms -v 4.17+magictrackpad2
  • egrep '(added|built|installed)'
  • dkms add /home/lufimtse/git/Linux-Magic-Trackpad-2-Driver/scripts/../linux/drivers/hid

Creating symlink /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/source ->
/usr/src/hid-magicmouse-dkms-4.17+magictrackpad2

DKMS: add completed.

  • dkms status -m hid-magicmouse-dkms -v 4.17+magictrackpad2
  • egrep '(built|installed)'
  • dkms build hid-magicmouse-dkms/4.17+magictrackpad2

Kernel preparation unnecessary for this kernel. Skipping...

Building module:
cleaning build area...
make -j8 KERNELRELEASE=4.16.5-300.fc28.x86_64 KERNEL_VERSION=4.16.5-300.fc28.x86_64 all...
cleaning build area...

DKMS: build completed.

  • dkms status -m hid-magicmouse-dkms -v 4.17+magictrackpad2
  • egrep '(installed)'
  • dkms install --force hid-magicmouse-dkms/4.17+magictrackpad2

hid-magicmouse.ko.xz:
Running module version sanity check.

  • Original module
    • No original module exists within this kernel
  • Installation
    • Installing to /lib/modules/4.16.5-300.fc28.x86_64/extra/
      Adding any weak-modules

/etc/sysconfig/kernel: line 7: blacklist: command not found
depmod....

Backing up initramfs-4.16.5-300.fc28.x86_64.img to /boot/initramfs-4.16.5-300.fc28.x86_64.img.old-dkms
Making new initramfs-4.16.5-300.fc28.x86_64.img
(If next boot fails, revert to initramfs-4.16.5-300.fc28.x86_64.img.old-dkms image)
dracut........

DKMS: install completed.

x11 event log: (at 181.646, I unplug & plug mouse back in).

tail -f ~/.local/share/xorg/Xorg.0.log
[ 61.044] (II) event4 - Apple Inc. Magic Trackpad 2: device is a pointer
[ 61.044] (II) event4 - Apple Inc. Magic Trackpad 2: device removed
[ 61.044] () Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/0003:05AC:0265.000F/input/input20/event4"
[ 61.044] (II) XINPUT: Adding extended input device "Apple Inc. Magic Trackpad 2" (type: MOUSE, id 13)
[ 61.044] (
) Option "AccelerationScheme" "none"
[ 61.045] () Apple Inc. Magic Trackpad 2: (accel) selected scheme none/0
[ 61.045] (
) Apple Inc. Magic Trackpad 2: (accel) acceleration factor: 2.000
[ 61.045] () Apple Inc. Magic Trackpad 2: (accel) acceleration threshold: 4
[ 61.045] (II) event4 - Apple Inc. Magic Trackpad 2: is tagged by udev as: Mouse
[ 61.045] (II) event4 - Apple Inc. Magic Trackpad 2: device is a pointer
[ 177.318] (II) config/udev: removing device Apple Inc. Magic Trackpad 2
[ 177.318] (
) Option "fd" "61"
[ 177.318] (II) event4 - Apple Inc. Magic Trackpad 2: device removed
[ 177.322] (II) UnloadModule: "libinput"
[ 177.322] (II) systemd-logind: releasing fd for 13:68
[ 181.524] (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/mouse0)
[ 181.524] (II) No input driver specified, ignoring this device.
[ 181.524] (II) This device may have been added with another device file.
[ 181.593] (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/event4)
[ 181.593] () Apple Inc. Magic Trackpad 2: Applying InputClass "evdev pointer catchall"
[ 181.593] (
) Apple Inc. Magic Trackpad 2: Applying InputClass "libinput pointer catchall"
[ 181.593] (II) Using input driver 'libinput' for 'Apple Inc. Magic Trackpad 2'
[ 181.645] (II) systemd-logind: got fd for /dev/input/event4 13:68 fd 62 paused 0
[ 181.645] () Apple Inc. Magic Trackpad 2: always reports core events
[ 181.645] (
) Option "Device" "/dev/input/event4"
[ 181.645] () Option "_source" "server/udev"
[ 181.646] (II) event4 - Apple Inc. Magic Trackpad 2: is tagged by udev as: Mouse
[ 181.646] (II) event4 - Apple Inc. Magic Trackpad 2: device is a pointer
[ 181.646] (II) event4 - Apple Inc. Magic Trackpad 2: device removed
[ 181.646] (
) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/0003:05AC:0265.0013/input/input21/event4"
[ 181.646] (II) XINPUT: Adding extended input device "Apple Inc. Magic Trackpad 2" (type: MOUSE, id 13)
[ 181.648] () Option "AccelerationScheme" "none"
[ 181.650] (
) Apple Inc. Magic Trackpad 2: (accel) selected scheme none/0
[ 181.650] () Apple Inc. Magic Trackpad 2: (accel) acceleration factor: 2.000
[ 181.650] (
) Apple Inc. Magic Trackpad 2: (accel) acceleration threshold: 4
[ 181.651] (II) event4 - Apple Inc. Magic Trackpad 2: is tagged by udev as: Mouse
[ 181.651] (II) event4 - Apple Inc. Magic Trackpad 2: device is a pointer
q^C

USB: no movement after suspend-resume cycle

(it probably should get reported to kernel's bugzilla too at this point, but let's do it here first)

When Magic Trackpad 2 is connected via USB, it stops responding after a suspend/resume cycle. Only left button clicking works. I suspect that the multitouch capability needs to be enabled again at this point, but currently the driver does nothing on resume.

Driver not loading for bluetooth connection (Ubuntu 18.04)

The driver is not loaded when connecting the Magic Trackpad 2 via bluetooth in Ubuntu 18.04.

Jul 03 08:54:59 hostname kernel: hid-generic 0005:004C:0265.0096: unknown main item tag 0x0
Jul 03 08:54:59 hostname kernel: input: Magic Trackpad 2 as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096/input/input131
Jul 03 08:54:59 hostname kernel: hid-generic 0005:004C:0265.0096: input,hidraw4: BLUETOOTH HID v0.70 Mouse [Magic Trackpad 2] on e0:9d:31:da:51:5a
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) config/udev: Adding input device Magic Trackpad 2 (/dev/input/mouse2)
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) No input driver specified, ignoring this device.
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) This device may have been added with another device file.
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) config/udev: Adding input device Magic Trackpad 2 (/dev/input/event9)
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Magic Trackpad 2: Applying InputClass "libinput pointer catchall"
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) Using input driver 'libinput' for 'Magic Trackpad 2'
Jul 03 08:54:59 hostname upowerd[1327]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) systemd-logind: got fd for /dev/input/event9 13:73 fd 98 paused 0
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Magic Trackpad 2: always reports core events
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "Device" "/dev/input/event9"
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "_source" "server/udev"
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Magic Trackpad 2: is tagged by udev as: Mouse
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Magic Trackpad 2: device is a pointer
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Magic Trackpad 2: device removed
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096/input/input131/event9"
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) XINPUT: Adding extended input device "Magic Trackpad 2" (type: MOUSE, id 11)
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "AccelerationScheme" "none"
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Magic Trackpad 2: (accel) selected scheme none/0
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Magic Trackpad 2: (accel) acceleration factor: 2.000
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Magic Trackpad 2: (accel) acceleration threshold: 4
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Magic Trackpad 2: is tagged by udev as: Mouse
Jul 03 08:54:59 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Magic Trackpad 2: device is a pointer

I can unbind from hid-generic and bind to magicmouse like so:

sudo /bin/bash -c "echo 0005:004C:0265.0096 > /sys/bus/hid/drivers/hid-generic/unbind"
sudo /bin/bash -c "echo 0005:004C:0265.0096 > /sys/bus/hid/drivers/magicmouse//bind"
Jul 03 08:55:17 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) config/udev: removing device Magic Trackpad 2
Jul 03 08:55:17 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "fd" "98"
Jul 03 08:55:17 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Magic Trackpad 2: device removed
Jul 03 08:55:17 hostname gnome-shell[32563]: g_array_unref: assertion 'array' failed
Jul 03 08:55:17 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) UnloadModule: "libinput"
Jul 03 08:55:17 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) systemd-logind: releasing fd for 13:73
Jul 03 08:55:17 hostname sudo[3295]: pam_unix(sudo:session): session closed for user root
Jul 03 08:55:17 hostname upowerd[1327]: unhandled action 'unbind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096
Jul 03 08:55:17 hostname kernel: magicmouse 0005:004C:0265.0096: unknown main item tag 0x0
Jul 03 08:55:18 hostname kernel: input: Apple Inc. Magic Trackpad 2 as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096/input/input132
Jul 03 08:55:18 hostname kernel: magicmouse 0005:004C:0265.0096: input,hidraw4: BLUETOOTH HID v0.70 Mouse [Magic Trackpad 2] on e0:9d:31:da:51:5a
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/mouse2)
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) No input driver specified, ignoring this device.
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) This device may have been added with another device file.
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) config/udev: Adding input device Apple Inc. Magic Trackpad 2 (/dev/input/event9)
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Apple Inc. Magic Trackpad 2: Applying InputClass "libinput pointer catchall"
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Apple Inc. Magic Trackpad 2: Applying InputClass "libinput touchpad catchall"
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) Using input driver 'libinput' for 'Apple Inc. Magic Trackpad 2'
Jul 03 08:55:18 hostname upowerd[1327]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) systemd-logind: got fd for /dev/input/event9 13:73 fd 98 paused 0
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Apple Inc. Magic Trackpad 2: always reports core events
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "Device" "/dev/input/event9"
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "_source" "server/udev"
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Apple Inc. Magic Trackpad 2: is tagged by udev as: Mouse Touchpad
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Apple Inc. Magic Trackpad 2: device is a touchpad
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Apple Inc. Magic Trackpad 2: device removed
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:004C:0265.0096/input/input132/event9"
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) XINPUT: Adding extended input device "Apple Inc. Magic Trackpad 2" (type: TOUCHPAD, id 11)
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Option "AccelerationScheme" "none"
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Apple Inc. Magic Trackpad 2: (accel) selected scheme none/0
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Apple Inc. Magic Trackpad 2: (accel) acceleration factor: 2.000
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (**) Apple Inc. Magic Trackpad 2: (accel) acceleration threshold: 4
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Apple Inc. Magic Trackpad 2: is tagged by udev as: Mouse Touchpad
Jul 03 08:55:18 hostname /usr/lib/gdm3/gdm-x-session[1640]: (II) event9  - Apple Inc. Magic Trackpad 2: device is a touchpad

And the device works as expected with basic multitouch functionality.

Is this a failure to match IDs from the linux/drivers/hid/hid-ids.h file? I don't have much experience with input drivers.

4.18.12: gen-1 magicmouse acts only as 2-button mouse

I've documented details of my observations here: https://forums.gentoo.org/viewtopic-t-1089352.html

In essence I cannot get the gen-1 magicmouse to middle click or v-scroll or h-scroll.

The hid_magicmouse module discovers and drives the device according to dmesg. Running xinput with list, list-props and set-props all act as you would expect, but the device never behaves differently, that is enabling the middle button or scroll wheel props is successful, but the device continues to behave as a 2-button mouse. Running evtest never shows any middle click or h-scroll or v-scroll activity.

This device used to operate properly but I'm unsure what's different about the driver now.

I noticed in the file /usr/share/libinput/50-system-apple.quirks

# The Apple MagicMouse has a touchpad built-in but the kernel still
# emulates a full 2/3 button mouse for us. Ignore anything from the
# ABS interface
[Apple MagicMouse]
MatchUdevType=mouse
MatchBus=bluetooth
MatchVendor=0x05AC
MatchProduct=0x030D
AttrEventCodeDisable=EV_ABS

I don't know how to interpret the comment... What does ABS mean?

EDIT-

I found this link https://www.kernel.org/doc/Documentation/input/event-codes.txt so now I kind of know what EV_ABS means... I still don't understand if it is relevant though. If I comment that out of the quirk file there is no change in the driver/device behavior.

Makefile failing

Here's the output of make.log

I honestly have no idea what's going on. This is happening with the dkms scripts when running sudo ./install.sh inside ./scripts, as well as, just running make inside ./linux/drivers/hid. Any help would be appreciated.

DKMS make.log for hid-magicmouse-dkms-4.17+magictrackpad2 for kernel 4.17.9-041709-generic (x86_64)
Tue Jul 24 20:07:23 EDT 2018
make -C /lib/modules/4.17.9-041709-generic/build M=/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build modules
make[1]: Entering directory '/usr/src/linux-headers-4.17.9-041709-generic'
  CC [M]  /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.o
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c: In function ‘magicmouse_probe’:
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:636:12: error: too many arguments to function ‘hid_register_report’
   report = hid_register_report(hdev, HID_INPUT_REPORT,
            ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:0:
./include/linux/hid.h:868:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:639:12: error: too many arguments to function ‘hid_register_report’
   report = hid_register_report(hdev, HID_INPUT_REPORT,
            ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:0:
./include/linux/hid.h:868:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:641:12: error: too many arguments to function ‘hid_register_report’
   report = hid_register_report(hdev, HID_INPUT_REPORT,
            ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:0:
./include/linux/hid.h:868:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:645:13: error: too many arguments to function ‘hid_register_report’
    report = hid_register_report(hdev, HID_INPUT_REPORT,
             ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:0:
./include/linux/hid.h:868:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:648:13: error: too many arguments to function ‘hid_register_report’
    report = hid_register_report(hdev, HID_INPUT_REPORT,
             ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:0:
./include/linux/hid.h:868:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
                    ^~~~~~~~~~~~~~~~~~~
scripts/Makefile.build:318: recipe for target '/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.o' failed
make[2]: *** [/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.o] Error 1
Makefile:1577: recipe for target '_module_/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build' failed
make[1]: *** [_module_/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.17.9-041709-generic'
Makefile:9: recipe for target 'all' failed
make: *** [all] Error 2

quirks.c and 4.14.43

when trying to compile to the rasbian kernel, I receive the following errors:

In file included from drivers/hid/hid-core.c:34:0: drivers/hid/hid-core.c:1982:42: error: ‘USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD’ undeclared here (not in a function) { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD) }, ^ ./include/linux/hid.h:651:47: note: in definition of macro ‘HID_USB_DEVICE’ .bus = BUS_USB, .vendor = (ven), .product = (prod) ^~~~ drivers/hid/hid-core.c:2033:41: error: ‘USB_DEVICE_ID_ELECOM_DEFT_WIRED’ undeclared here (not in a function) { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) }, ^ ./include/linux/hid.h:651:47: note: in definition of macro ‘HID_USB_DEVICE’ .bus = BUS_USB, .vendor = (ven), .product = (prod) ^~~~ drivers/hid/hid-core.c:2034:41: error: ‘USB_DEVICE_ID_ELECOM_DEFT_WIRELESS’ undeclared here (not in a function) { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) }, ^ ./include/linux/hid.h:651:47: note: in definition of macro ‘HID_USB_DEVICE’ .bus = BUS_USB, .vendor = (ven), .product = (prod) ^~~~ drivers/hid/hid-core.c:2035:41: error: ‘USB_DEVICE_ID_ELECOM_HUGE_WIRED’ undeclared here (not in a function) { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRED) }, ^ ./include/linux/hid.h:651:47: note: in definition of macro ‘HID_USB_DEVICE’ .bus = BUS_USB, .vendor = (ven), .product = (prod) ^~~~ drivers/hid/hid-core.c:2036:41: error: ‘USB_DEVICE_ID_ELECOM_HUGE_WIRELESS’ undeclared here (not in a function) { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRELESS) }, ^ ./include/linux/hid.h:651:47: note: in definition of macro ‘HID_USB_DEVICE’ .bus = BUS_USB, .vendor = (ven), .product = (prod) ^~~~ scripts/Makefile.build:328: recipe for target 'drivers/hid/hid-core.o' failed

possible, that some device IDs are mixed up because of different kernel versions? What is the best way to fix this?

Support for Linux Kernel 5.2.15 please.

I used this driver well into the 5.* and until now it worked fine. I probably jumped from 5.1.* to 5 .2.15 though. I've tried this on Fedora with kernel version mentioned above and it doesn't work. Thanks so much for the wonderful work!

Build error on Linux 4.18-rc4

Driver works great on Linux 4.17 (thanks!), but there's a build error on Linux 4.18-rc4. How is the work to upstream the changes to this driver going?

Here is DKMS install:

# dkms install -m hid-magicmouse-dkms -v 4.17+magictrackpad2
Kernel preparation unnecessary for this kernel.  Skipping...
Building module:
cleaning build area...
make -j8 KERNELRELEASE=4.18.0-rc4-mainline KERNEL_VERSION=4.18.0-rc4-mainline all...(bad exit status: 2)
Error! Bad return status for module build on kernel: 4.18.0-rc4-mainline (x86_64)
Consult /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/make.log for more information.

And here is the error log:

DKMS make.log for hid-magicmouse-dkms-4.17+magictrackpad2 for kernel 4.18.0-rc4-mainline (x86_64)
Sat Jul 14 14:08:04 EEST 2018
make -C /lib/modules/4.18.0-rc4-mainline/build M=/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build modules
make[1]: Entering directory '/usr/lib/modules/4.18.0-rc4-mainline/build'
  CC [M]  /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.o
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c: In function ‘magicmouse_probe’:
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:627:12: error: too few arguments to function ‘hid_register_report’
   report = hid_register_report(hdev, HID_INPUT_REPORT,
            ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:
./include/linux/hid.h:878:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device,
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:630:12: error: too few arguments to function ‘hid_register_report’
   report = hid_register_report(hdev, HID_INPUT_REPORT,
            ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:
./include/linux/hid.h:878:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device,
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:632:12: error: too few arguments to function ‘hid_register_report’
   report = hid_register_report(hdev, HID_INPUT_REPORT,
            ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:
./include/linux/hid.h:878:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device,
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:636:13: error: too few arguments to function ‘hid_register_report’
    report = hid_register_report(hdev, HID_INPUT_REPORT,
             ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:
./include/linux/hid.h:878:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device,
                    ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:639:13: error: too few arguments to function ‘hid_register_report’
    report = hid_register_report(hdev, HID_INPUT_REPORT,
             ^~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.c:18:
./include/linux/hid.h:878:20: note: declared here
 struct hid_report *hid_register_report(struct hid_device *device,
                    ^~~~~~~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:324: /var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build/hid-magicmouse.o] Error 1
make[1]: *** [Makefile:1500: _module_/var/lib/dkms/hid-magicmouse-dkms/4.17+magictrackpad2/build] Error 2
make[1]: Leaving directory '/usr/lib/modules/4.18.0-rc4-mainline/build'
make: *** [Makefile:9: all] Error 2

Update README updates for easier to understand

its not clear which update suggestions apply to which scenarios or whether they are alternatives to one another or to be used in conjunction.

It would be good to update the README to make it clearer.

Also, the basic what-this-is should go above the updates sections.

Two sides of the trackpad not responsive

Hi @robotrovsky, thank you for the great work!

I've been using the Magic Trakpad 2 with cable on Linux (I patch the kernel with the patch you submitted to linux-input) for a bit over an afternoon, and it mostly works fine. However, I notice that sizeable portions on both sides of the touchpad aren't responsive. In those areas, click is registered, but not tap. Tracking doesn't work if the finger input begins from either side of the trackpad, but it works if the movement begins from the middle of the trackpad and moves to the sides.

Let me know if there's anything I can do to help fix the problem. Thanks again for your work!

Driver not loading on startup

I've installed the driver according to the instructions. Everything works great, however when I restart the system for any reason, the driver is not loaded at startup. I am forced to load it manually, then all is great again. I'm not exactly sure what is going on. Thanks.

Regression for Magic Mouse v1: no touch events (incl scroll/middle button)

Hello,

there's been a regression with the hid_magicmouse driver, probably related to the merge with the magic trackpad 2 work done, where no touch events are reported to userspace by the kernel.

I have been a happy MM1 user for many years, and a couple of months ago I updated my kernel on Arch (a late update because I've been busy), and I lost scrolling and middle button on my MM1.

I tried pinning down the issue, testing with both evdev and libinput, and after some research, it looks like it's the kernel driver the culprit. The last kernel version the driver was working flawlessly was 5.0.3, and it broke when I updated to 5.1.8.

Here's a summary of all the research:

https://bbs.archlinux.org/viewtopic.php?pid=1850232#p1850232
https://forums.gentoo.org/viewtopic-p-8357120.html#8357120

Until I found a related report has been made on the linux-input mailing list back last december:

https://www.spinics.net/lists/linux-input/msg59094.html

I'm trying locally to bisect and tinker the module's code to find out what's wrong or missing to enable the magic mouse events.

It feels related to #26 though I'm convinced it's not libinput's fault. Looking at my current's kernel code and the source code herein, they're the same…

Raspberry Pi Kernel 4.19

@robotrovsky Thank you massively for your work on this.

Currently, the Raspberry Pi Foundation is looking at an upgrade of their mainline kernel to 4.19, discussion here. Being that your patch landed in 4.20, is there any instructions that you could provide to getting this code working from within the Raspberry Pi 3 that I can run to get things like two finger scroll, and two finger tap, for right click?

Something along the lines of run this terminal command, do this terminal command and reboot, ect. I'm not really sure where north is on this one, as I've not really had to do something like this before.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.