Як подружити Surface Pro 3 і Linux

Напевно багато хто, хто користувався ноутбуком, хоч раз думали про те, що незважаючи на свою портативність, у ноутбуків ця характеристика залишає бажати кращого — в одній руці не втримаєш, в екран не потикати, шрифти на низькій роздільній здатності поблизу ріжуть очі. Все це типово для більшості ноутбуків. З іншого боку, існують планшети, які частково позбавлені цих недоліків, але натомість ми втрачаємо клавіатуру, процесор зазвичай не дозволяє ставити сторонні ОС, та й продуктивність так собі. Лінійка Surface Pro, як мені здавалося, може стати хорошим компромісом в даному питанні.
 
Сам по собі Surface Pro 3 (SP3) дуже цікавий. У ньому виправлено багато недоліків попередніх поколінь, таких, як тривалість роботи від батареї, розміри екрану і дозвіл. А процесор Intel Core i3 / i5 / i7 практично повністю розв'язує руки, даючи можливість встановити повноцінний GNU / Linux. Не роздумуючи, я почав шукати шляхи його роздобути, і незабаром після початку продажів він опинився у мене.
 
В даній статті я б хотів поділитися досвідом установки Debian на SP3, а так же виниклими труднощами і їх подоланням. Якщо вам цікаво, що у мене з цього вийшло — прошу під кат.
 
 

Введення

В доважок до самих SP3 і Type Cover 3, нам тимчасово знадобиться наступне:
 
     
  • USB хаб
  •  
  • USB клавіатура і миша
  •  
  • Ethernet / WLAN USB адаптер або телефон, який вміє роздавати (tethering) інтернет по USB. Наприклад, у мене з цим непогано впорався Nexus 5.
  •  
 
SP3, як і його попередники, поставляється тільки з UEFI. Тому, навіть на сьогоднішній день, більшість інсталяторів Linux та інші Live CD можна навіть і не намагатися запускати, якщо в корені їхнього способу відсутній директорія EFI.
 
Мій вибір припав на Debian, який, на даний момент, вже підтримує установку в UEFI. Костьольна версії, нам знадобиться саме amd64 реліз, з огляду на те, що девайс на борту має 64-х бітний UEFI. Щоб не витрачати час на скачування купи CD / DVD образів, можна скористатися мініатюрної netinst, яка важить всього лише ~ 250 Мб, де все необхідне скачується вже в процесі установки. В теорії, можна було б встановити стабільну гілку Debian 7 Wheezy, але для себе я вирішив вибрати Testing варіант, в репозиторіях якого доступні більш свіжі версії пакетів.
 
Незалежно від того, чи вибрали ви netinst або установку c образів, далі нам все одно знадобиться доступ в інтернет. На жаль, інсталятор Debian не може розпізнавати вбудований в SP3 бездротової адаптер, тому слід роздобути небудь зовнішній Ethernet / WLAN USB адаптер, або телефон, який вміє роздавати інтернет по USB.
 
Все готово? Тоді приступимо.
 
 

Підготовка Windows

 
 
Крім пари основних системних розділів і розділу з встановленою Windows, на SSD ще відводиться приблизно 5 Гб під Factory Recovery, який може легко опинитися абсолютно марним, якщо щось трапиться з іншими системними розділами. Я настійно рекомендую "скопіювати" його на флешку заздалегідь. Необхідна буде флешка мінімум 8 Гб. У пошуку Windows шукаємо Create a recovery drive .
 
 
 
  
Вибираємо нашу флешку і вперед. Коли по закінченню копіювання буде запропоновано видалити Recovery розділ — погоджуйтеся. Згодом, з цією завантажувальної флешки можна буде повернути первісну розбивку SSD, включаючи встановлену Windows і сам Recovery розділ.
 
Так як Windows ми видаляти не збираємося, ми його трохи потіснимо. По правому кліку на (C :) розділі вибираємо Shrink Volume .
 
У діалозі виставляємо бажаний розмір вільного місця в мегабайтах.
 
 
 
Також нам потрібно вимкнути Hibernate, інакше SP3 буде постійно йти у глибокий сон при виключенні. Для цього відкриваємо cmd.exe з правами адміністратора, і виконуємо:
 
 
powercfg.exe /hibernate off

 
Нарешті, вимикаємо SP3 і запускаємо із затиснутою кнопкою "+" гучності. Це дозволить нам потрапити в настоянки UEFI, щоб ми змогли відключити Secure Boot і дати можливість вантажити ОС відмінні від Windows. Виходимо і погоджуємося зберегти зміни. Вимикаємо SP3 знову.
 
 

Установка Debian

Підключаємо флешку з Debian і включаємо SP3 із затиснутою на цей раз кнопкою "-" гучності, яка активує завантаження з USB носія. Вибираємо графічний або текстової тип інсталятора та підключаємо мережевий адаптер або телефон до USB порту. Для тих, хто вже ставив Debian, процес нічим не примітний, за винятком деяких моментів. Коли справа доходить до розбивки диска, вибираємо Partitioning method: manual і ділимо виділене місце між кореневим розділом "/" та розділом під swap . За звичкою, я зазвичай ще створюю окремий / boot розділ.
 
 
 
Так як для UEFI використовується GPT розбивка, GRUB не буде встановлено в MBR. Замість цього в розділі EFI буде додано новий файл
EFI/debian/grubx64.efi
. Приймаємо зміни розбивки і продовжуємо установку звичайним ходом. По завершенню SP3 сам перезавантажиться і ми знову потрапимо в Windows.
 
 

Допилювання GRUB

Відкриваємо пошук в Windows, вбиваємо recovery і в результатах пошуку вибираємо Recovery options . У вікні, знаходимо Advanced startup і вибираємо Restart now .
 
 
 
Ми потрапляємо в синє меню завантаження, де потрібно вибрати спочатку Use a device , і потім debian .
 
 
 
  
Після цього нам явиться GRUB, який на такому дозволі буде виглядає катастрофічно.
 
 
 
У такому стані при спробі вибрати Windows, все буде виснути. Щоб це виправити, нам знадобиться знизити дозвіл меню. Завантажуємося в Debian і редагуємо
/etc/defaults/grub
, де потрібно розкоментувати строчку:
 
 
GRUB_GFXMODE=640x480

 
Далі оновлюємо GRUB:
 
 
$ update-grub

 
Наступний крок опціонален і дозволяє відмовитися від попереднього завантаження Windows кожного разу. Замість цього при включенні SP3 потраплятиме відразу в GRUB. Для цього йдемо в консоль і перевіряємо порядок завантаження. Потім виставляємо номер соотвутсвующій debian перед номером Windows Boot Manager, таким чином помінявши 0002 і 0001 місцями.
 
 
$ efibootmgr
...
Boot Order: 0000,0002,0001
Boot0000* USB Drive
Boot0001* debian
Boot0002* Windows Boot Manager
$ efibootmgr --bootorder 0000,0001,0002

 
 

Затишний Debian

Отже, оцінимо ситуацію. На даний момент у нас все ще не працюють:
 
     
  • WiFi
  •  
  • Type Cover 3 з тачпадом
  •  
  • Перо
  •  
  • Тачскрин
  •  
  
Що ж, будемо виправляти.
 
 
WiFi
Драйвера на Wifi вже є в репозиторії, і нам лише потрібно їх встановити. У файлі
/etc/apt/sources.list
знаходимо першу строчку з адресою основного сховища та до секції main дописуємо non-free , щоб вийшло приблизно таке:
 
 
deb http://ftp.us.debian.org/debian/ jessie main non-free

 
Потім відкриваємо консоль і виконуємо:
 
 
$ apt-get update
$ apt-get install firmware-libertas

 
Якщо все пройшло успішно, WiFi повинен ожити після перезавантаження. Але з бездротовим адаптером ще залишається одна проблема: він відвалюється при переході USB контролера в енергозберігаючий режим. Лікується це тільки перезавантаженням, і мені поки не вдалося знайти повноцінного вирішення проблеми.
 
 
Type Cover 3
Проблема з Type Cover 3 тривіальна донезмоги, але вимагає пересборки ядра. Справа в тому, що невірно визначається тип пристрою у Type Cover 3 і завантаження драйвер не підходить.
 
 
$ dmesg | grep -i “045e”
[    2.080282] usb 1-3: New USB device found, idVendor=045e, idProduct=07dc
[    2.400862] usb 1-7: New USB device found, idVendor=045e, idProduct=07be
[    2.697423] usb 1-8: New USB device found, idVendor=045e, idProduct=07bf
[    6.827574] input: Microsoft Surface Type Cover as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:045E:07DC.0003/input/input14
[    6.827969] hid-multitouch 0003:045E:07DC.0003: input,hiddev0,hidraw3: USB HID v1.11 Keyboard [Microsoft Surface Type Cover] on usb-0000:00:14.0-3/input0

 
Параметр idVendor = 045e відповідає Microsoft. За ним слід idProduct , і нас цікавить той, який 07dc . Як видно, завантажується hid-multitouch драйвер. Нам же потрібен hid-microsoft. Оскільки в уже запущеної системі складно як-небудь вплинути на ситуацію, доведеться патчити ядро, дописавши одну єдину строчку в код драйвера. Нам потрібно ядро ​​версії не нижче 3.13, в яку до речі вже додана підтримка тачськріна і пера. Тому перед всією процедурою проапгрейдить систему і перезапускати.
 
 
$ apt-get update
$ apt-get upgrade

 
На даним момент, в репозиторіях Testing є вже версія 3.14, яку ви теж повинні отримати після апгрейда. Тепер встановимо все необхідне для складання ядра.
 
 
$ apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

 
Після чого викачуємо исходники поточного ядра.
 
 
$ apt-get source linux
$ cd linux-`uname -r`

 
Створюємо файл typecover3.patch з наступним вмістом:
 
 
--- a/drivers/hid/hid-microsoft.c    2014-08-10 16:10:39.115505811 +0300
+++ b/drivers/hid/hid-microsoft.c    2014-08-10 22:15:29.976642978 +0300
@@ -208,7 +208,7 @@ static const struct hid_device_id ms_dev
         .driver_data = MS_NOGET },
     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
         .driver_data = MS_DUPLICATE_USAGES },
-
+     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, 0x07dc), .driver_data = 0 },
     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT),
         .driver_data = MS_PRESENTER },
     { }

 
І виконуємо:
 
 
$ patch -p1 < typecover3.patch

 
Тепер сконфігуріруем ядро. За основу візьмемо конфігурацію ядра, встановленого в системі.
 
 
$ cp /boot/config-`uname -r` ./.config
$ make menuconfig

 
В меню вибираємо Load an Alternate Configuration File і погоджуємося на запропонований .config .
 
 
 
Далі тиснемо Exit і зберігаємо конфігурацію. Приступимо до найголовнішого, до складання. Для довідки, процес на самому SP3 у мене зайняв близько години.
 
 
$ make-kpkg clean
$ fakeroot make-kpkg --initrd --append-to-version=-typecover3 kernel_image kernel_headers

 
Тут значення параметра "-typecover3" можна замінити на будь-яке інше, воно особливого навантаження не несе. По ньому, наприклад, можна надалі визначити, з яким ядром система завантажилася.
 
Отже, встановлюємо обидва .deb пакета
 
 
$ cd /usr/src
$ dpkg -i linux-image-`uname -r`-typecover3_`uname -r`-typecover3-10.00.Custom_amd64.deb
$ dpkg -i linux-headers-`uname -r`-typecover3_`uname -r`-typecover3-10.00.Custom_amd64.deb

 
І, нарешті, останній штрих. Щоб завести тачпад, створимо файл
/etc/X11/xorg.conf 
з наступним вмістом:
 
 
Section "InputClass"
        Identifier "Surface Pro 3 cover"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "vendor" "045e"
        Option "product" "07dc"
        Option "IgnoreAbsoluteAxes" "True"
EndSection

 
Перезавантажуємося востаннє і насолоджуємося робочою системою.
 
 

Післямова

Якщо порівняти з Windows, енергоспоживання в Linux трохи вища, заряду батареї вистачає приблизно на 6-7 годин, у той час як в Windows її вистачає годин на 8-9. Так що результат дуже навіть непоганий.
 
Незважаючи на те, що система встановлена ​​і працює як треба, залишаються ще деякі проблеми. Якщо говорити точніше, то не працює вбудованим модуль Bluetooth. Теоретично, проблема вже вирішена в ядрі версії 3.16, але воно поки ще не дійшло до репозиторіїв в Testing. Також, не працюють кнопки регуляції гучності і кнопки на пере.
 
 

Корисні посилання

 https://bugzilla.kernel.org/show_bug.cgi?id=64811
 http://ubuntuforums.org/showthread.php?t=2183946
 http://ubuntuforums.org/showthread.php?t=2231207
 https://github.com/rubiojr/surface3-kernel
 https://github.com/rubiojr/surface3-ubuntu-trusty

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.