7

I have moved from win 10 to Ubuntu 16.04. I've tried following this article and this video, but still run into problems as the latest kernel version is 4.6.3.
I'm still running on the kernel that came installed with Ubuntu which is 4.4.0.

Long story short, my keyboard, touch pad, touch screen, volume and power buttons, the stylus, wifi indicator (top right corner) and camera are not working.
I've managed to get the Wifi and Bluetooth working.

Can anyone help me out with writing/finding some patches and re-compiling the kernel?


Please post all updates and issues on My GitHub organization and any contribution is appreciated

deriver-config and Modules

To get the type cover working run SP4-1 script from deriver-config

3
  • Any help would be awesome and really appreciated, I'm having the exact same issue. Touch screen doesn't work, neither does the surface pro pen and the mouse pad gestures. @Amir If you find a solution, please tell it here. Jun 28, 2016 at 22:00
  • The kernel in Ubuntu 17.04 is 4.10 and includes additional support for Microsoft Surface.
    – James
    Apr 3, 2017 at 14:14
  • I've upgraded to17.04, the scaling is awful and the touchpad gestures are gone.
    – Amir
    May 17, 2017 at 11:18

6 Answers 6

2

I have a fairly nice Surface Pro 4 kernel running on my Ubuntu installation.

The Rundown

What works:

  • wifi/bluetooth
  • multi-touch
  • pen
  • trackpad on the typing cover

What works somewhat:

  • hibernate - after resume there is no touch or pen

What doesn't:

  • suspend (see the note on power saving below)
  • freeze (the more battery draining version of suspend/sleep that doesn't reliably work)
  • the typing cover

What I haven't tried:

  • the cameras

General idea

The general idea behind this kernel is to take the changes done by Hyungwoo Yang at https://github.com/ipts-linux-org/ipts-linux-new/wiki and apply them to the Ubuntu 4.9rc3 kernel. Here are the steps to get the kernel in order. The compilation process takes about 45 minutes using all the cores of the Surface 4. Cloning the kernel repositories requires about 1.5 gigs of disk space.


Steps to produce the kernel

  1. install Ubuntu 16.10 yakkety. to accomplish this you will need a USB hub that can handle both the ubuntu live-USB and the keyboard/mouse.

  2. boot linux with a USB keyboard.

  3. prepare the Ubuntu 4.9rc3 kernel.

    • clone the Ubuntu 4.9rc3 kernel (requires ~1.5gig of space):

      git clone git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack v4.9-rc3

    • download 6 patches: Patch1 Patch2 Patch3 Patch4 Patch5 Patch6

    • apply the patches to the kernel in order: do

      git am /path/to/THEPATCH.patch

      for each of the patches.

  4. create a patch with touch/pen support from the ipts-linux-new kernel.

    • clone the kernel (requires ~1.5gig of space) in another directory:

      git clone https://github.com/ipts-linux-org/ipts-linux-new.git

    • create the patch:

      git diff 0c183d92b20b5c84ca655b45ef57b3318b83eb9e > /path/to/ipts-linux-new_patch.txt

  5. apply the ipts-linux-new patch to v4.9rc3

    `cd /path/to/v4.9rc3`
    `patch -p1 < /path/to/ipts-linux-new_patch.txt`
    `git add .`
    `git commit -m 'Patch for Surface Pro 4 taken from ipts-linux-new.'`
    
  6. compile the kernel and make ubuntu .deb packages (copied from Ubuntu Kernel Compilation)

    cd /path/to/v4.9rc3

    • initialize the debian files:

      fakeroot debian/rules clean

    • configure the kernel you will build:

      fakeroot debian/rules editconfigs

      • Say yes only to the amd64 question. This will show the "menuconfig" curses interface. activate the following two options:
        • Device Drivers -> NVM express lock device (y)
        • Device Drivers -> Misc devices -> Intel Precise Touch & Stylus (m)
    • comment or remove "do_zfs = true" in "/path/to/v4.9rc3/debian.master/rules.d/amd64.mk"

    • rename the kernel by editing "/path/to/v4.9rc3/debian.master/changelog"

  7. compile the kernel (use more threads than processors to make it faster)

    `fakeroot debian/rules clean` #necessary, but I don't know why
    `DEB_BUILD_OPTIONS=parallel=5 fakeroot debian/rules binary-headers binary-generic binary-perarch`
    
  8. four new .debs should be created in the directory next to v4.9rc3. Install the .debs with the following command:

    `sudo dpkg -i linux-image-* linux-headers-4.9.0-040900rc3*`
    
  9. copy driver files from windows to linux:

    • copy driver files from "\Windows\INF\PreciseTouch\Intel" to the linux directory "/lib/firmware/intel/ipts". There should be at least 4 files with names similar to these:

      • iaPreciseTouchDescriptor.bin
      • SurfaceTouchServicingSFTConfigMSHW0078.bin
      • SurfaceTouchServicingDescriptorMSHW0078.bin
      • SurfaceTouchServicingKernelSKLMSHW0078.bin
    • Make symbolic links to these files:

      cd /lib/firmware/intel/ipts

      ln -s iaPreciseTouchDescriptor.bin intel_desc.bin

      ln -s SurfaceTouchServicingSFTConfigMSHW0078.bin config.bin

      ln -s SurfaceTouchServicingDescriptorMSHW0078.bin vendor_desc.bin

      ln -s SurfaceTouchServicingKernelSKLMSHW0078.bin vendor_kernel.bin

You should be able to boot the new kernel now. If the links are in the right place then touch and pen will work nicely.


Note on power saving

The missing suspend functionality is a major drawback. This is a due to the Microsoft "connected standby" fiasco: https://lwn.net/Articles/580451/. Freeze uses more battery (drains the battery maybe half as fast as if you had left the computer on), and doesn't seem to be reliable. With hibernate the state is successfully kept, but unfortunately, the touch and stylus functionalities do not work after resume.

4
  • If I can figure it out, I will add the kernel to a PPA. Dec 12, 2016 at 0:15
  • @Amir: is there a reason why you named the repo Ububtu rather than Ubuntu? Dec 27, 2016 at 21:22
  • I believe it was a typo, fixed now! GitHub repo
    – Amir
    Dec 28, 2016 at 2:02
  • I just got a typecover that does not work with this kernel. I stumbled upon an already compiled kernel that where everything works. See the answer: askubuntu.com/a/888596/14747 Mar 1, 2017 at 20:00
2

I used this guide on Reddit

Had issues with fridgecow's kernel freezing up and could never restart or shut down properly, would just freeze with Ubuntu logo doing nothing.

I used cantenna's (6a and 7a) and works fine other than doesn't wake from sleep and volume buttons don't work.

Download this file (the patched kernel)

cd to the directory where it went (eg cd Downloads) and install the packages

sudo dpkg -i './linux-headers-4.4.0-rc8touchkernel+_1_amd64.deb'
sudo dpkg -i './linux-image-4.4.0-rc8touchkernel+_1_amd64.deb'

Mount your Windows partition (you can download the files from here if you deleted your Windows partition or can't find them) and copy the files to your Ubuntu root directory (you may need to adjust the path depending on the mountpoint of your Windows partition:

sudo mkdir /itouch
cp /media/$USER/Windows/Windows/INF/PreciseTouch/Intel/* /itouch

Now make symlinks to the files so that the driver can find them

sudo ln -sf /itouch/SurfaceTouchServicingKernelSKLMSHW0078.bin /itouch/vendor_kernel_skl.bin
sudo ln -sf /itouch/SurfaceTouchServicingSFTConfigMSHW0078.bin /itouch/integ_sft_cfg_skl.bin
sudo ln -sf /itouch/SurfaceTouchServicingDescriptorMSHW0078.bin /itouch/vendor_descriptor.bin
sudo ln -sf /itouch/iaPreciseTouchDescriptor.bin /itouch/integ_descriptor.bin

You'll then need to make sure you have the option to boot this kernel or set it to boot by default by configuring GRUB.

1
  • thank you for the feedback on how to make my posts better for others. Apr 3, 2017 at 23:04
1

On SP4 touch algorithms runs on GPU so traditional drivers does not work

Here is the github link: https://github.com/ipts-linux-org/ipts-linux/wiki

Touch screen, Surface Pro pen..

IPTS stands for: Intel Precision Touch and Stylus.

In this github repo there is specific kernel with Touch screen driver.

Sorry for picking up a specific kernel but patches must be applicable to any kernel after 4.4.

1
  • I've been trying to get my head round that repo, but I'm not advanced enough to do so...
    – Amir
    Aug 20, 2016 at 5:27
0

I've found the best kernel yet. It uses the same patch set that my other post describes, plus others that make the type cover work along with multi-touch on the track pad. I have it running with my 16.10 installation.

This kernel requires little work from the user since it is already compiled into .deb packages that you can download.

What works:

  • touch
  • pen
  • wifi
  • keyboard
  • trackpad
  • physical volume buttons and keyboard hotkeys

What doesn't:

  • sleep
  • occasionally buggy

There is no point in me plagiarizing the directions as they are dynamic and well put:

https://www.reddit.com/r/SurfaceLinux/comments/4t64zt/getting_the_sp4_running_with_ubuntu_1604/

1
  • @Amir : this is a really easy way to install a nice kernel! Apr 20, 2017 at 9:23
0

I'm typing / mousing from Ubuntu 16.10 on SP4, To get here I did the following:

  • load Ubuntu using USB hub for keyboard/mouse support

  • sudo apt-get install the following two packages:

  • ukuu (EASY!) update to latest RC kernel (4.10-rc8). THIS now supports the magnetic SP4 keyboard/mouse (thanks, kernel people!). ONLY NIGGLE: wireless, so off to google and patch this.

  • grub-customizer to choose Win10/Ubuntu/Mint.

Ubuntu works with no horsing around, I chose 16.10 yakkety as I don't like 16.04 xenial min/max/close on UL of screen, and never found an easy way around this.

Linux MINT also boots with keyboard support (after upgrading kernel to 4.10-rc8) but not the mouse touchpad.

5
  • 16.04 is Xenial, not Zenity.....
    – Elder Geek
    Feb 19, 2017 at 14:58
  • Could you please confirm that git clone git://git.marvell.com/mwifiex-firmware.git mkdir -p /lib/firmware/mrvl/ sudo cp mwifiex-firmware/mrvl/* /lib/firmware/mrvl/ will fix the wireless issues that you are haveing?
    – Amir
    Feb 21, 2017 at 4:30
  • Amir, SUCCESS!! I had to break your command into the 3 parts and run them individually (or else there were errors), followed by a reboot along with a few additional 'apt-get update \ apt-get upgrade \ apt-get dist-upgrade' (until there were no more updates/upgrades) and another reboot and I'm replying from hotel wireless. SINCERE THANKS!!
    – user258424
    Feb 22, 2017 at 21:47
  • Two additions: - able to add Cinnamon to Gnome 16.1 (it works fine), and -- update to kernel 4.10 (NOT a rc) using ukuu (see above). It's all rainbows, unicorns, and butterflies <G>.
    – user258424
    Feb 23, 2017 at 23:23
  • So the pen and touch work with this installation? How about hibernate or suspend or freeze? Feb 28, 2017 at 12:22
0

There is a Personal Package Archive (PPA) with the kernel packaged for you at: https://launchpad.net/~tigerite/+archive/ubuntu/kernel.

Follow the instructions "Adding this PPA to your system" and then do the apt commands specified.

It's probably better to start with an installation of Xenial (16.04) rather than Yakkety (16.10) since there has not been a recent (since May) update of the PPA.

3
  • #install linux-surface kernel sudo apt-add-repository ppa:tigerite/kernel sudo apt-get update sudo apt-get upgrade sudo apt-get install linux-surface From SP4-1 script on my github. I'm waiting for the 4.5 release! Thanks anyways :)
    – Amir
    Nov 27, 2016 at 13:55
  • Well... I tried this on my SP4 and the results were not amazing. The touch and pen did not work. Dec 7, 2016 at 17:25
  • I can't recall saying they worked!
    – Amir
    Dec 8, 2016 at 10:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .