- PVSM.RU - https://www.pvsm.ru -
Привет всем! Некоторое время назад я приобрёл себе Chromebook модели Toshiba Chromebook 2 CB35-B3330 и заменил на нём Chrome OS на традиционный GNU/Linux. Это была не установка через crouton, а именно «чистая» установка с полным удалением Chrome OS. Борьба с плохой поддержкой Линуксом этого хромбука заняла неожиданно много времени (несколько вечеров), но в итоге все проблемы решились и хромбук стал полноценной рабочей машиной.
В итоге я решил написать статью, в которой:
Здесь и далее красным отмечены распространённые неправильные решения по настройке, жёлтым — работающие, но некрасивые (костыли), зелёным — правильные.
Модель CB35-B3330 построена на бюджетном чипе (SoC) Intel Baytrail N2840. Основные характеристики:
Плюсы: ноутбук очень лёгкий и компактный. Довольно симпатичный — цвета металлик с рифлёной поверхностью, собран аккуратно. В нём пассивное охлаждение, так что шума он не издаёт от слова «совсем». В силу слабого железа у него очень низкое энергопотребление (2.5 — 5 Вт) и большое время работы при питании от батареи. Производитель заявляет 13 ч работы, индикатор батареи в Chrome OS это в целом подтверждает, а после установки линукса, ради интереса поотключав всё ненужное и слегка приглушив яркость, я получил прогноз в 24 часа работы без нагрузки и 16-18 часов с нагрузкой текстовый редактор + аудиоплеер + веб-браузер + просмотрщик pdf:
Очень большим плюсом является низкая стоимость. Эта модель стоит в США в районе 150-200$ за восстановленный или б/у вариант, и 230-250$ за новый. Замечу, что многие Chromebook-и схожих характеристик от других производителей, в частности от HP и Acer, даже дешевле этой модели.
Минусы: ИМХО основной минус — это низкокачественный дисплей (TN, низкое разрешение и белёсая поверхность). У этого хромбука есть старший брат — Toshiba Chromebook 2 CB35-B3340 с FullHD IPS дисплеем и чуть более мощным железом, и вот он, похоже, является почти идеальным хромбуком.
Слабое железо и ограниченный объём ОЗУ и диска исключают многие сценарии использования.
Очень неприятен также тот факт, что Toshiba делает вид, что к хромбукам, ей произведённым, она не имеет никакого отношения. На офсайте Toshiba моделям Toshiba Chromebook посвящены пустые страницы без спеков с куцым руководством пользователя [4].
Ещё одним минусом этого хромбука является его полное отсутствие в продаже в России, так что к цене можно сразу прибавлять стоимость доставки из-за рубежа или искать обходные пути. (Но это общая проблема — по неизвестной мне причине хромбуки почему-то почти полностью исчезли из продажи в России в последние года 2-3).
Установка происходит примерно как и для любого другого линукса на любой другой лэптоп, за исключением пары тонкостей:
Выход один — размещать загрузчик на MBR стороннего носителя, например флешки, и грузиться с флешки.
Правильным способом являлось бы использование UEFI.
Бич всех хромбуков на чипе Baytrail. Обсуждения в Интернете про нативную установку Линукса на такие хромбуки пестрят сообщениями «не работает звук» (пример [5]). Чаще всего это происходит по следующим причинам.
Во-первых, byt-max98090 (модуль ядра, отвечающий за звук из колонок и наушников) не входит в стандартную сборку ядра большинства дистрибутивов. (Пример дистрибутива, включающего byt-max98090, — Ubuntu.) Если этого модуля нет, звука из колонок и наушников естественно не будет ни при каких условиях и нужно будет пересобирать ядро с включением byt-max98090. Проверить наличие этого модуля в системе можно несколькими способами:
— В конфиге ядра должно стоять CONFIG_SND_SOC_MAX98090=m.
— Команда lsmod должен выдавать этот модуль в списке прочих (если он загружен).
Во-вторых, что ещё хуже, byt-max98090 не работает во многих новых релизах ядра. Методом тыка и веб-поиска я выяснил следующее:
[ 6.001164] byt-max98090 byt-max98090: ASoC: CPU DAI baytrail-pcm-audio not registered [ 6.001298] byt-max98090 byt-max98090: snd_soc_register_card failed -517 [ 6.041935] baytrail-pcm-audio baytrail-pcm-audio: FW version: 04.05.13.a0 [ 6.042029] baytrail-pcm-audio baytrail-pcm-audio: Build type: a0 [ 6.042129] baytrail-pcm-audio baytrail-pcm-audio: Build date: Apr 2 2014 14:14:39 [ 6.046272] usb 1-3: new high-speed USB device number 2 using xhci_hcd [ 6.066088] max98090 i2c-193C9890:00: MAX98090 REVID=0x43 [ 6.070340] max98090 i2c-193C9890:00: use default 2.8v micbias [ 6.072733] sst-acpi 80860F28:00: ASoC: Cannot get gpio at index 1: -2 [ 6.072888] byt-max98090 byt-max98090: ASoC: failed to init Baytrail Audio: -2 [ 6.073021] byt-max98090 byt-max98090: ASoC: failed to instantiate card -2 [ 6.073251] byt-max98090 byt-max98090: snd_soc_register_card failed -2 [ 6.073354] byt-max98090: probe of byt-max98090 failed with error -2
TL;DR: 4.4.23 — звук работает, в любом следующем релизе ядра — нет.
В-третьих, даже если поставить byt-max98090 и ядро нужной версии, звук из коробки не работает — необходимо произвести пару действий с выгрузкой модулей ядра (см ниже) и выставить некоторые нужные настройки ALSA. На этом этапе обычно дают некорректный совет использовать другой дистрибутив или использовать asound.state из Chrome OS (причём такие советы замечены [7] даже за такими гуру, как John Lewis — автором самой известной SeaBios прошивки для хромбуков). Такой совет в принципе может сработать, но является чистым шаманством, потому что если в одном дистре звук работает, а в другом нет, это значит что проблема или в различных сборках ядра, или в различных конфигах alsa/pulseaudio, других ситуаций быть не может. То же самое с asound.state. Asound.state — это просто снимок настроек alsa. Всё, что кто-то другой выставил в своём asound.state, можно выставить у себя через утилиту alsamixer или в более низкоуровневой alsactl, не копируя asound.state ниоткуда никуда.
Так вот, следующие действия включают звук на baytrail хромбуке и не требуют менять дистрибутив или копипастить asound.state:
aplay -D sysdefault:CARD=bytmax98090 /usr/share/sounds/alsa/Noise.wav > ALSA lib pcm_dmix.c:1030:(snd_pcm_dmix_open) unable to open slave > aplay: main:786: audio open error: No such file or directory
modprobe -r snd_soc_sst_byt_max98090_mach snd_hda_codec_hdmi
aplay -L
pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }
modprobe snd_soc_sst_byt_max98090_mach
Аналогичные устройства есть для выхода наушников. Обратите внимание, что звук в динамиках и звук в наушниках конфигурируется независимо — это скорее всего баг.
Эти действия — очевиднейший костыль с выдёргиванием-вставкой звуковых модулей, призванный решить неправильный порядок инициализации звуковых устройств при загрузке. Правильным решением было бы исправление кода ядра, так чтобы звук работал из коробки, но ИМХО это вряд ли исправят в ближайшем будущем.
Очень распространённая проблема как для этого хромбука, так и для многих других. Внутренний накопитель на нём — это впаянный в плату eMMC, а значит — его невозможно заменить в домашних условиях и время жизни хромбука равно времени жизни этого накопителя. А у него, как и у любого MMC, очень ограниченный запас циклов перезаписи. Для Chrome OS этой проблемы нет, тк она каждый раз распаковывается из фиксированного образа в память и почти не пишет на накопитель, но обычный Линукс постоянно производит запись на диск: в логи, в домашний каталог и т.д. Есть несколько решений этой проблемы:
Самые активно используемые каталоги — это /home и /tmp, поэтому у меня следующий /etc/fstab:
/dev/mmcblk0p1 / ext3 defaults 1 1 devpts /dev/pts devpts gid=5,mode=620 0 0 proc /proc proc defaults 0 0 tmpfs /home/cheater tmpfs defaults,noatime,nosuid,size=800m 0 0 tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0 tmpfs /var/cache tmpfs defaults,noatime,nosuid,mode=0755,size=190m 0 0 tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0 tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=80m 0 0 tmpfs /var/run tmpfs defaults,noatime,nosuid,mode=0755,size=2m 0 0 tmpfs /var/spool/mqueue tmpfs defaults,noatime,nosuid,mode=0700,gid=12,size=30m 0 0
Так как файлы, размещаемые в ОЗУ, живут только до отключения питания, приходится регулярно делать бэкапы этих файлов куда-нибудь в более надёжное место, например на тот же внутренний накопитель, на домашний сервер или в облачное хранилище. Как это реализовать — каждый решает для себя, универсального рецепта тут быть не может.
Добавлю, что полное отключение питания на ноутбуке — это крайне редкое событие, проще при необходимости отправлять ноутбук в сон или гибернацию. Принудить выключить лэптоп может разве что необходимость обновления ядра, kernel panic или разрядка батареи в ноль. (Я выключал свой хромбук только в первые 2-3 недели после покупки, пока ещё не устоялось окружение, после этого не выключал ни разу, только отправлял в сон). Ещё одно важное замечание — установив Linux, нельзя ни в коем случае допускать полной разрядки хромбука, так как это приводит к переходу хромбука в Recovery Mode.
Правда, есть ещё одна неприятная причина выключения, о которой следующий пункт —
Я до сих пор не понимаю, чем руководствовались создатели этого хромбука (который по идее не надо выключать почти никогда) и всех остальных хромбуков, делая кнопку Power обычной клавишей клавиатуры рядом с Backspace.
В нормальных лэптопах Power — это крохотная кнопка где-то в стороне, которую невозможно нажать случайно. На хромбуке же, чтобы случайно нажать на Power, достаточно промахнуться по Backspace или соседней F-клавише.
Выход один — софтверно отключить или переназначить Power. Это не лишает возможности выключать ПК, т.к. во-первых, это всегда можно сделать из консоли через /sbin/init 0, poweroff и т.д., а во-вторых, комбинации «Esc+Power+F3» (перезагрузка в recovery mode) и «удерживать Power 5 секунд» (отключение) действуют абсолютно всегда — они обрабатываются на уровне BIOS-а хромбуков.
Для дистрибутивов, основанных на systemd, это очень просто делается в настройках systemd:
достаточно выставить HandlePowerKey=ignore в /etc/systemd/logind.conf и перезапустить systemd-logind или ПК.
Для прочих дистрибутивов (среди которых и Slackware) обработка ACPI события «нажата кнопка power» задаётся в /etc/acpi/handler.sh:
case "$1" in
button)
case "$2" in
power)
# /sbin/init 0
logger "Power button is hit"
;;
*) logger "ACPI action $2 is not defined"
;;
esac
;;
*)
logger "ACPI group $1 / action $2 is not defined"
;;
esac
Ещё одна родовая травма хромбуков. Клавиши Caps Lock на них нет, вместо неё кнопка Search. Без переключения регистра капсом как-нибудь можно прожить, но проблема в том, что многие линуксоиды используют Caps Lock для смены раскладки и хотелось бы иметь клавишу Search, работающую как Caps, чем мы сейчас и займёмся.
Эта клавиша распознаётся не как медиа-клавиша поиска (XF86XK_Search), как можно было бы ожидать, а как левая Win-клавиша. Поэтому кому лень выполнять долгие настройки, можно просто забить LWin на переключение раскладки в настройках DE или xkb по вашему выбору.
Настройка через xkb делается (в моём случае) так:
vi /usr/share/X11/xorg.conf.d/90-keyboard-layout.conf
И добавляем опцию:
Option "XkbOptions" "grp:lwin_toggle"
Способ не совсем идеальный, тк:
Итого, правильный способ — перезабить LWin на Caps на низком уровне xkb, в xmodmap. Маппинг xmodmap каждый настраивает в своём месте (~/.Xmodmap, стартовый скрипт...), но действие всюду одно и то же:
keysym Super_L = Caps_Lock
Замечание: Всё сказанное про клавиатуру относится только к настройке клавиш под X-сервером (xkb). В консоли используется другие утилиты (в Slackware они представлены пакетом kbd) и основным средством перезабивания клавиш является loadkeys. Настройка kbd в статье рассмотрена не будет.
Про работу на этом ноуте со стоковой Chrome OS рассказывать особо нечего — там всё то же самое, что и в любом другом хромбуке и на эту тему десятки статей и роликов. Центральной частью системы для пользователя становится браузер Chrome. Приложений в классическом понимании нет — в качестве них выступают плагины к Chrome и веб-сервисы, открываемые в браузере. Среди привычных — GMail, Google Docs, Google Drive, Hangouts. Если покопаться в плагинах, можно найти SSH клиент [8], VNC клиент [9], RDP клиент [10], Samba клиент [11], разнообразные редакторы текста, графики и т.д. Быстродействие и функциональность таких плагинов, как правило, в районе плинтуса. В теории, можно ставить и нативные приложения через замену Chrome OS на Chromium OS и перепаковку образа [12], но это развлечение только для сильных духом, и явно выходит за рамки данной статьи. Работает всё без особых тормозов, Chrome исправно грузит страницы, играются фильмы и музыка, хотя набор видео- и и аудиокодеков далеко не полный и некоторые форматы проигрывать нельзя (и, в отличие от десктопных ОС, доустановить кодеки нет никакой возможности).
В Developer Mode всё несколько веселее, появляется доступ к bash, файловой системе и работе под рутом. В такой среде самым прямолинейным способом расширения функциональности хромбука является chroot в корневой каталог с обычным линуксом (на флешке или на внутреннем накопителе), что как раз и делает известная утилита crouton. На сегодняшний день актуальны более современные, чем chroot, средства контейнеризации, такие как LXC, но о возможности/трудоёмкости их использования в рутованном Chrome OS мне ничего не известно.
Более фундаментальной модификацией хромбука является полное удаление Chrome OS с накопителя и установка своей ОС (Здесь и далее буду предполагать, что это Линукс, хотя на деле, естественно, есть и другие варианты).
Что получает пользователь, поставивший нативный GNU/Linux:
На моём лэптопе реализован именно этот вариант — установлена «чистая» Slackware 14.2.
Инструментарий довольно аскетичный, так что требования к мощности лэптопа очень низкие. Графическая среда — dwm, небольшой тайловый оконный менеджер на C. Практически все приложения, которыми я пользуюсь, используют текстовый интерфейс. Центральным среди них является Emacs — в нём я пишу код и любой текст, читаю электронную почту и RSS (Gnus), общаюсь в jabber и irc, веду заметки и планы дел (Org-mode), посещаю текстовые веб-страницы (w3m). Других пользовательских приложений немного, основные — это dwm (веб-браузер), mpd + ncmpc (музыка), zathura (средство просмотра pdf, djvu и т.д.) и TeX Live (система вёрстки математических текстов). Иногда смотрю фильмы (mplayer) и играю в игры, такие как Warsow, ADOM, Aquaria и Вангеры. Разработку веду в основном на C++, Perl, C.
Мощности хромбука для перечисленного софта хватает. Притормаживать он начинает на веб-страницах, активно использующих js и флеш, и к сожалению почти на всех играх, кроме совсем уж минималистичных (Aquaria, Вангеры, и естественно ADOM).
Система со всем инструментарием (названные выше приложения, TeX, Perl, GCC и все сопутствующие средства разработки) занимает 2.7 Гб из доступных 16 Гб, остальное место пока никак не используется. Все данные большого объёма (медиафайлы, бэкапы, образы виртуалок) и вообще все перманентные данные хранятся на домашнем сервере, к диску которого я подключаюсь по sshfs или nfs. Локально на хромбуке я обычно храню только то, с чем работаю на текущий день — обычно это пара книг, копия содержимого почтового ящика, копии 2-3 репозиториев с кодом и копия базы Org-mode. В начале и в конце рабочего дня синхронизируюсь с сервером. Таким образом, хромбук получает очень высокую автономность, невозможную в Chrome OS.
Автор: Oleg
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/262498
Ссылки в тексте:
[1] Toshiba Chromebook 2: #part1
[2] Установка и настройка Slackware Linux 14.2: #part2
[3] Сценарий использования: #part3
[4] пустые страницы без спеков с куцым руководством пользователя: http://support.toshiba.com/support/modelHome?freeText=1200009072
[5] пример: https://bugzilla.redhat.com/show_bug.cgi?id=1335196
[6] пруф: https://bugs.archlinux.org/task/48936
[7] замечены: https://johnlewis.ie/baytrail-release/#comment-33868
[8] SSH клиент: https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo
[9] VNC клиент: https://chrome.google.com/webstore/detail/vnc-viewer/ekheahfpmopcbpignadjolnfllioomba
[10] RDP клиент: https://chrome.google.com/webstore/detail/vnc-viewer/ekheahfpmopcbpignadjolnfllioomba?hl=ru
[11] Samba клиент: https://chrome.google.com/webstore/detail/file-system-for-windows/mfhnnfciefdpolbelmfkpmhhmlkehbdf
[12] перепаковку образа: https://www.chromium.org/chromium-os/developer-guide#TOC-Building-Chromium-OS
[13] Источник: https://habrahabr.ru/post/336044/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.