Наверно многие, кто пользовался ноутбуком, хоть раз думали о том, что несмотря на свою портативность, у ноутбуков эта характеристика оставляет желать лучшего — в одной руке не удержишь, в экран не потыкать, шрифты на низком разрешении вблизи режут глаза. Все это типично для большинства ноутбуков. С другой стороны, существуют планшеты, которые частично лишены этих недостатков, но взамен мы теряем клавиатуру, процессор обычно не позволяет ставить сторонние ОС, да и производительность так себе. Линейка Surface Pro, как мне казалось, может стать хорошим компромиссом в данном вопросе.
Сам по себе Surface Pro 3 (SP3) очень интересен. В нем исправлено много недостатков предыдущих поколений, таких, как продолжительность работы от батареи, размеры экрана и разрешение. А процессор Intel Core i3/i5/i7 практически полностью развязывает руки, давая возможность установить полноценный GNU/Linux. Не раздумывая, я начал искать пути его заполучить, и вскоре после начала продаж он оказался у меня.
В данной статье я бы хотел поделиться опытом установки Debian на SP3, а так же возникшими трудностями и их преодолением. Если вам интересно, что у меня из этого вышло — прошу под кат.
В довесок к самим SP3 и Type Cover 3, нам временно понадобится следующее:
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, на SSD еще отводится примерно 5 Гб под Factory Recovery, который может легко оказаться абсолютно бесполезным, если что-то случится с другими системными разделами. Я настоятельно рекомендую “скопировать” его на флешку заранее. Необходима будет флешка минимум 8 Гб. В поиске Windows ищем Create a recovery drive.
Выбираем нашу флешку и вперед. Когда по окончанию копирования будет предложено удалить Recovery раздел — соглашайтесь. Впоследствии, с этой загрузочной флешки можно будет вернуть первоначальную разбивку SSD, включая установленную Windows и сам Recovery раздел.
Так как Windows мы удалять не собираемся, мы его немного потесним. По правому клику на (C:) разделе выбираем Shrink Volume.
В появившемся диалоге выставляем желаемый размер свободного места в мегабайтах.
Также нам нужно выключить Hibernate, иначе SP3 будет постоянно уходить в глубокий сон при выключении. Для этого открываем cmd.exe с правами администратора, и выполняем:
Наконец, выключаем SP3 и запускаем с зажатой кнопкой “+” громкости. Это позволит нам попасть в настойки UEFI, чтобы мы смогли отключить Secure Boot и дать возможность грузить ОС отличные от Windows. Выходим и соглашаемся сохранить изменения. Выключаем SP3 снова.
Подключаем флешку с Debian и включаем SP3 с зажатой на этот раз кнопкой “-” громкости, которая активирует загрузку с USB носителя. Выбираем графический или текстовой тип инсталятора и подключаем сетевой адаптер или телефон к USB порту. Для тех, кто уже ставил Debian, процесс ничем не примечателен, за исключением некоторых моментов. Когда дело доходит до разбивки диска, выбираем Partitioning method: manual и делим выделенное место между корневым разделом “/” и разделом под swap. По привычке, я обычно еще создаю отдельный /boot раздел.
Так как для UEFI используется GPT разбивка, GRUB не будет устанавливаться в MBR. Вместо этого в разделе EFI будет добавлен новый файл
Открываем поиск в Windows, вбиваем recovery и в результатах поиска выбираем Recovery options. В открывшемся окне находим Advanced startup и выбираем Restart now.
Мы попадаем в синее меню загрузки, где нужно выбрать сначала Use a device, и затем debian.
После этого нам явится GRUB, который на таком разрешении будет выглядит катастрофически.
В таком состоянии при попытке выбрать Windows, все будет виснуть. Чтобы это исправить, нам понадобится понизить разрешение меню. Загружаемся в Debian и редактируем
Заодно, чтоб еще и разрешение консоли загрузки ядра понизить, дописываем ниже:
Далее обновляем GRUB:
Следующий шаг опционален и позволяет отказаться от предварительной загрузки Windows каждый раз. Вместо этого при включении SP3 будет попадать сразу в GRUB. Для этого идем в консоль и проверяем порядок загрузки. Затем выставляем номер соотвутсвующий debian перед номером Windows Boot Manager, таким образом поменяв 0002 и 0001 местами.
Итак, оценим ситуацию. Пока что у нас не работают:
Что ж, будем исправлять.
За оба отвечает Soc от Marvell. Есть два варианта как получить необходимые драйвера. Внимание: на момент написания статьи в репозитории доступен устаревший пакет драйверов версии 0.43, и с ним не заводится Bluetooth. Поэтому советую воспользоваться вторым вариантом.
Если все прошло успешно, все должно ожить после перезагрузки. Внимание: для стабильной работы WiFi необходимо ядро 3.16, инструкции сборки которого приведены ниже.
Проблема с Type Cover 3 требует пересборки ядра. Дело в том, что неверно определяется тип устройства у Type Cover 3 и загружаемый драйвер не подходит.
Параметр idVendor=045e соответствует Microsoft. За ним следует idProduct, и нас интересует тот, который 07dc. Как видно, загружается hid-multitouch драйвер. Хотя тачпад на клавиатуре и правда способен на мультитач жесты, в данный момент такой драйвер приводит к неработоспособности всей клавиатуры. Поскольку в уже запущенной системе сложно как-либо повлиять на ситуацию, придется патчить ядро.
Нам нужно ядро версии не ниже 3.13, в которую кстати уже добавлена поддержка тачскрина и пера. Но я настоятельно советую взять ядро 3.16, чтоб WiFi не отваливался каждые 10 минут. На данный момент 3.16 доступно только из experimental репозитория, которое может переехать в testing в любое время. Уточните, доступна ли уже 3.16 в testing, иначе берите из experimental.
Сборка ядра съест 10 Гб, поэтому рекомендую пощадить SSD и воспользоваться виртуальной машиной на десктопе. По окончанию нужно будет скопировать из виртуальной машины полученные два .deb пакета и установить их на SP3.
Теперь установим все необходимое для сборки ядра.
Создаем файл typecover3.patch со следующим содержимым:
И выполняем:
Теперь сконфигурируем ядро. За основу возьмем конфигурацию запущенного ядра.
Загружаем конфигурацию через пункт в меню Load an Alternate Configuration File или просто < Load > и соглашаемся на предложенный .config.
Дальше жмем < Exit > и сохраняем конфигурацию. Приступим к самому главному, к сборке. Для справки, процесс на самом SP3 у меня занял около часа.
Здесь значение параметра “-typecover3” можно заменить на любое другое, оно особой нагрузки не несет. По нему, например, можно в последствии определить, с каким ядром система загрузилась.
Итак, устанавливаем оба .deb пакета
И, наконец, последний штрих. Чтобы завести тачпад, создадим файл
Перезагружаемся в последний раз и наслаждаемся рабочей системой.
Если сравнить с Windows, энергопотребление в Linux несколько выше, заряда батареи хватает примерно на 6-7 часов, в то время как в Windows ее хватает часов на 8-9. Так что результат очень даже неплохой.
Несмотря на то, что система установлена и работает как надо, остаются еще некоторые проблемы. Если говорить точнее, то не работают кнопки регуляции громкости, кнопки на пере и датчик положения в пространстве.
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
Сам по себе 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/default/grub
, где нужно раскомментировать строчку:GRUB_GFXMODE=640x480
Заодно, чтоб еще и разрешение консоли загрузки ядра понизить, дописываем ниже:
GRUB_GFXPAYLOAD_LINUX=keep
Далее обновляем 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
- Bluetooth
- Type Cover 3 с тачпадом
- Перо
- Тачскрин
Что ж, будем исправлять.
WiFi и Bluetooth
За оба отвечает Soc от Marvell. Есть два варианта как получить необходимые драйвера. Внимание: на момент написания статьи в репозитории доступен устаревший пакет драйверов версии 0.43, и с ним не заводится Bluetooth. Поэтому советую воспользоваться вторым вариантом.
1. Из репозитория
В файле
Затем открываем консоль и выполняем:
/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
2. С сайта производителя
Открываем консоль и выполняем:
$ git clone git://git.marvell.com/mwifiex-firmware.git
$ mkdir -p /lib/firmware/mrvl/
$ cp mwifiex-firmware/mrvl/* /lib/firmware/mrvl/
Если все прошло успешно, все должно ожить после перезагрузки. Внимание: для стабильной работы WiFi необходимо ядро 3.16, инструкции сборки которого приведены ниже.
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 драйвер. Хотя тачпад на клавиатуре и правда способен на мультитач жесты, в данный момент такой драйвер приводит к неработоспособности всей клавиатуры. Поскольку в уже запущенной системе сложно как-либо повлиять на ситуацию, придется патчить ядро.
Нам нужно ядро версии не ниже 3.13, в которую кстати уже добавлена поддержка тачскрина и пера. Но я настоятельно советую взять ядро 3.16, чтоб WiFi не отваливался каждые 10 минут. На данный момент 3.16 доступно только из experimental репозитория, которое может переехать в testing в любое время. Уточните, доступна ли уже 3.16 в testing, иначе берите из experimental.
Сборка ядра съест 10 Гб, поэтому рекомендую пощадить SSD и воспользоваться виртуальной машиной на десктопе. По окончанию нужно будет скопировать из виртуальной машины полученные два .deb пакета и установить их на SP3.
Ядро из testing
Перед всей процедурой проапгрейдим систему и потом перезапускаемся.
После чего скачиваем исходники текущего ядра и переходим в директорию с исходниками.
$ apt-get update
$ apt-get upgrade
После чего скачиваем исходники текущего ядра и переходим в директорию с исходниками.
$ apt-get source linux
$ cd linux-`uname -r`
Ядро из experimental
Подлючаем experimental репозиторий, дописав эту строчки в конец
Обновляем информацию о пакетах, устанавливаем ядро и его исходники. Затем перезагружаемся в новое ядро.
Распаковываем исходники и переходим в директорию с ними:
/etc/apt/sources.list
файла:deb http://ftp.de.debian.org/debian experimental main
Обновляем информацию о пакетах, устанавливаем ядро и его исходники. Затем перезагружаемся в новое ядро.
$ apt-get update
$ apt-get -t experimental install linux-headers-3.16-trunk-amd64 linux-image-3.16-trunk-amd64 linux-source-3.16
Распаковываем исходники и переходим в директорию с ними:
$ tar -xf /usr/src/linux-source-3.16.tar.xz
$ cd linux-source-3.16
Теперь установим все необходимое для сборки ядра.
$ apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Создаем файл typecover3.patch со следующим содержимым:
Патч
--- a/drivers/hid/hid-ids.h 2014-01-19 21:40:07.000000000 -0500
+++ b/drivers/hid/hid-ids.h 2014-04-20 23:29:35.000000000 -0400
@@ -631,6 +631,7 @@
#define USB_DEVICE_ID_MS_NE4K 0x00db
#define USB_DEVICE_ID_MS_NE4K_JP 0x00dc
#define USB_DEVICE_ID_MS_LK6K 0x00f9
+#define USB_DEVICE_ID_MS_TYPE_COVER_3 0x07dc
#define USB_DEVICE_ID_MS_PRESENTER_8K_BT 0x0701
#define USB_DEVICE_ID_MS_PRESENTER_8K_USB 0x0713
#define USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K 0x0730
--- a/drivers/hid/hid-core.c 2014-01-19 21:40:07.000000000 -0500
+++ b/drivers/hid/hid-core.c 2014-04-21 03:13:54.000000000 -0400
@@ -702,6 +702,11 @@ static void hid_scan_collection(struct h
if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
type == HID_COLLECTION_PHYSICAL)
hid->group = HID_GROUP_SENSOR_HUB;
+
+ if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
+ hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 &&
+ hid->group == HID_GROUP_MULTITOUCH)
+ hid->group = HID_GROUP_GENERIC;
}
static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
--- a/drivers/hid/usbhid/hid-quirks.c 2014-01-19 21:40:07.000000000 -0500
+++ b/drivers/hid/usbhid/hid-quirks.c 2014-04-20 23:29:35.000000000 -0400
@@ -73,6 +73,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
+ { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GX680R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
И выполняем:
$ patch -p1 --ignore-whitespace -i typecover3.patch
Теперь сконфигурируем ядро. За основу возьмем конфигурацию запущенного ядра.
$ cp /boot/config-`uname -r` .config
$ make menuconfig
Загружаем конфигурацию через пункт в меню Load an Alternate Configuration File или просто < Load > и соглашаемся на предложенный .config.
Дальше жмем < Exit > и сохраняем конфигурацию. Приступим к самому главному, к сборке. Для справки, процесс на самом SP3 у меня занял около часа.
$ make-kpkg clean
$ fakeroot make-kpkg --initrd --append-to-version=-typecover3 kernel_image kernel_headers
Здесь значение параметра “-typecover3” можно заменить на любое другое, оно особой нагрузки не несет. По нему, например, можно в последствии определить, с каким ядром система загрузилась.
Итак, устанавливаем оба .deb пакета
$ cd ..
$ dpkg -i linux-image*.deb linux-headers*.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. Так что результат очень даже неплохой.
Несмотря на то, что система установлена и работает как надо, остаются еще некоторые проблемы. Если говорить точнее, то не работают кнопки регуляции громкости, кнопки на пере и датчик положения в пространстве.
Полезные ссылки
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