Перейти с Linux на macOS и не сойти с ума
Ноутбук — главный девайс в моей жизни, я провожу за ним бо́льшую часть суток. Он должен быть лёгким, компактным и мощным. Долгое время лидером по этим параметрам был Dell XPS 13, но всё поменялось с выходом MacBook Air на процессоре M1.
Air всего на 100 граммов тяжелее XPS 13, но примерно в три раза мощнее, автономнее и не нуждается в активном охлаждении. Никогда не думал, что скажу подобное про технику Apple, но MacBook Air — самое крутое устройство в своей весовой категории на рынке, оставившее конкурентов далеко позади.
Я фанат Линукса, эта операционная система для меня больше, чем просто окружение. Это философия, новостная повестка и постоянный предмет обсуждения. Поэтому сама идея отказа от Linux в пользу другой ОС меня всегда отталкивала. Да и тот эпизодический опыт, когда приходилось что-то делать в macOS, был эмоционально неприятным.
Но появление M1 посеяло во мне зерно сомнений: мой ноутбук больше не был самым крутым и навязчивой мыслью было то, что я отказываю себе в чём-то большем. Это зерно прорастало и проросло: я купил MacBook Air с 16GB ОЗУ и 512GB SSD, с удивлением обнаружив, что он ещё и стоит дешевле моего XPS. Впереди меня ожидали настройка окружения, борьба с Docker, грусть от отсутствия привычного автодополнения в консоли и много чего ещё.
Проблема: Dock занимает много места, принося минимальную пользу.
Решение: убрать влево, включить автоскрытие.
Пространство на экране ноутбука — ценный ресурс и жалко тратить его на Dock, который сильно проигрывает по функционалу аналогичным инструментам в других операционных системах. Почему Dock не нужен очень хорошо написано в этой статье на Хабре: 7 причин почему вам не стоит переходить на Mac, или как справиться с этой демонической машиной.
Тем не менее Dock можно скрыть, продолжая получать от него некоторую пользу: если удалить из него всё ненужное, оставить нужное, сместить в сторону, настроить автоскрытие, назначить сочетание клавиш Option + Tab на активацию.
Тогда, кроме подведения указателя к левой стороне экрана, Dock будет появляться и по нажатию сочетания клавиш, а стрелочками вверх/вниз уже можно выбрать нужный элемент и нажать Enter. Ну и свободное пространство не страдает.
Проблема: Command + Tab (аналог Alt + Tab в других ОС) показывает все приложения со всех рабочих столов, непригоден для переключения между несколькими окнами одного приложения.
Решение: использовать альтернативный переключатель окон AltTab, использовать жесты тачпада.
Переключение по Command + Tab настолько бестолковое, что, как я понял в результате опроса коллег и знакомых, им не пользуется почти никто. Своей бессмысленностью оно вдохновлено Dock — собирает все приложения (включая те, у которых нет открытых окон) со всех пространств (они тут называются Spaces, аналог рабочих столов в Линуксе и Винде):
Заметьте, тут нет окон, только приложения: если у приложения несколько окон, например, у вас открыто несколько проектов в VSCode, то переключатель становится абсолютно бесполезен, потому что переключать он начинает на какое ему вздумается окно. Тут, конечно, можно возразить, что переключаться между окнами удобно жестами на тачпаде. Удобно, да. Но нажать один раз Command + Tab гораздо быстрее, чем свайпнуть тремя пальцами вниз, навести на окно и кликнуть по нему.
Лирическое отступление и сказ о том, как я подарил свой макбук жене
В первые часы использования свежекупленного макбука, когда я понял, что Apple мне предлагает вот это в качестве инструмента, которым я пользуюсь чаще всего, у меня пригорело настолько, что я восстановил систему до заводских настроек, сказал жене «держи, дарю» и пошёл спать. Но уснуть у меня не получилось.
Много раз друзья, коллеги, и просто случайные собеседники в соцсетях советовали мне попробовать macOS, говоря, что это удобная и простая в использовании операционная система, с прекрасным UX и UI. С таким же мнением я неоднократно сталкивался на Хабре, в Твитере: всё просто работает, не надо ничего настраивать. На деле же оказалось, что в macOS отсутствует банальный функционал, который есть у других из коробки.
Я не привык сдаваться, поэтому, отказавшись ото сна, я забрал макбук у жены (пришлось вскоре ей купить такой же, только золотистый) и начал сначала.
UPD: в комментах советуют использовать Command + ~ для переключения между окнами одного приложения. К сожалению, этот способ не решает проблему переключения между окнами разных приложений.
Проблема с Command + Tab решилась использованием приложения AltTab. Но пришёл я к нему не сразу, а недели за две. Пришлось попробовать самые популярные: Witch, Contexts и Command-Tab Plus.
Оказалось, что опенсорсная программа лучше проприетарных и платных альтернатив. Возможно потому, что у платных аналогов один-два разработчика, а тут их больше и каждый старается решить свою проблему, в результате получается удобный и гибкий инструмент:
Жесты оказались действительно удобной штукой. Если распределить окна по пространствам, то менеджмент окон с помощью Command + Tab и жестов на тачпаде становится действительно удобным:
Проблема: Тайлинг окон, нормальное разворачивание окна на весь экран.
Решение: Rectangle.
Закончу тему менеджмента окон одной из самых бесполезных покупок приложений в моей жизни, утилитой Magnet. Насколько я понял концепцию macOS, отсутствие элементарных вещей, тут является нормой. Например, тут нет тайлинга окон. Это стало сюрпризом, потому что я всегда считал, что тайлинг пришёл сперва в Линукс из макоси, а потом уже и в Windows. Но нет. Есть Split View, которым невозможно пользоваться, потому что он, как и разворачивание окон на весь экран, уводит окна в отдельное пространство.
Magnet помогает и тайлить окна и разворачивать их на весь экран по-нормальному (альтернативный способ развернуть окно без создания отдельного пространства — это двойной клик по заголовку):
Потом оказалось, что есть опенсорсный проект с ещё большим функционалом. Это Rectangle, которым я теперь и пользуюсь. Опять победил опенсорс.
Проблема: Переключение раскладки клавиатуры по CapsLock для тех, кто быстро печатает и часто переключает раскладки.
Решение: Использование Karabiner-Elements.
В macOS возможность переключения раскладки клавиатуры по CapsLock есть из коробки, но, к сожалению, пользоваться ей мне оказалось невозможно. Проблема в том, что если печатать быстро, без паузы нажать на CapsLock и без паузы продолжить печатать, то раскладка не переключится.
Я решил отказаться от переключения по CapsLock в пользу клавиши fn, которая также при однократном нажатии переключает язык ввода. Но у этого способа оказалось две проблемы. Первая заключается в том, что если переключить раскладку и тут же начать набирать текст с шифтом, то в половине случаев пропечатывается строчная буква, а не прописная. Это само по себе раздражает, но добавляется вот ещё какая проблема. Если в момент переключения этим способом указатель мыши оказался в центре (не обязательно его при этом двигать), то всегда будет выбран тот язык, над которым висит указатель:
Оставался последний вариант: использовать сочетание из двух клавиш Command + Space или Option + Space, или Control + Space. Но я никогда не понимал, зачем использовать две клавиши там, где можно использовать одну? Apple не заставит меня быть менее продуктивным, поэтому я обратился к способу с использованием мощного инструмента Karabiner-Elements.
Проблема: Непривычная русская раскладка.
Решение: Использование раскладки «Russian - PC».
В macOS по-умолчанию используется немного непривычная для пользователя ПК русская раскладка, где точка находится в цифровом ряду и печатается через шифт. Я так скажу: человеку, который для набора точки всю жизнь нажимал клавишу в нижнем правом углу, переучиться очень сложно. Хорошо, что у этой проблемы решение очень простое, нужно просто выбрать раскладку «Russian - PC»:
Ода клавиатуре MacBook
За 20 лет использования различных клавиатур самой любимой была Logitech K750 Wireless Solar Keyboard, чудесный девайс. От клавиатур лэптопов многого ожидать не приходится, ты просто довольствуешься тем, что тебе дал производитель. У премиальных моделей ноутбуков клавиатуры, в целом, хорошие.
Но клавиатура макбука меня удивила. Я ставлю её на первое место по удобству и удовольствию от использования среди всех клавиатур, которыми я пользовался. Мне кажется, что здесь идеальное для моих пальцев расстояние между клавишами, отличный ход и срабатывание.
Проблема: Autocomplete в терминале.
Решение: Fig.
По-умолчанию автокомплит в терминале macOS по функционалу такой же, как в cmd.exe в Windows: подсказка при вводе команды в самом начале и помощь при вводе директории. Если набрать ca
и нажать Tab, то будет напечатана подсказка, а вот если набрать sudo ca
и нажать Tab, то подсказка уже напечатана не будет.
У этой проблемы есть два решения. Первое — использование встроенной Completion System:
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
source ~/.zshrc
Второе — использование крутой утилиты Fig, которая совсем недавно вышла из закрытого тестирования в публичный доступ:
Лучшего автокомплита, чем тот, который предоставляет Fig, для macOS не найти. Однако, у этого решения для меня есть два минуса: во-первых, он использует графический интерфейс, что при работе в консоли не очень привычно и я, бывало, ошибался в выборе. Во-вторых, мне показалось, что это ресурсоёмкое приложение и на генерацию некоторых подсказок требует времени (и ресурсов, соответственно).
Я рекомендую использовать Fig (опенсорс опять победил), хотя сам остановился на варианте с Completion System — автокомплит тут не такой мощный, но достаточный для ускорения написания команд и аргументов к ним.
В любом случае тем, кто перешёл на macOS с Линукса, придётся свыкнуться с тем, что терминал здесь не такой удобный. Набираешь rm -Rf *
, а тебе всё равно задают вопрос:
shibaon@shibaon-air temp % rm -Rf *
zsh: sure you want to delete all 5 files in /Users/shibaon/temp [yn]? y
Проблема: Docker-контейнеры тормозят.
Решение: нет.
Когда основное окружение настроено, время перейти к настройке dev-окружения и столкнуться с проблемами, которые несёт Docker.
Во-первых, если вы на M1, то забудьте про контейнер с MySQL, придётся вместо этого использовать MariaDB.
Во-вторых, на M1 готовый образ memcached лучше не использовать, почему-то именно на macOS с Apple Silicon запускается x86 контейнер в режиме совместимости. Возможно, на момент публикации эта проблема устранена. Решается самостоятельной сборкой образа.
В третьих, опять же на M1 необходимо быть готовым к различным проблемам внутри контейнеров. Например, мы с коллегами на работе столкнулись с тем, что в некоторых случаях на самых обычных запросах может падать curl с Segmentation fault.
Рекомендую включить настройку «Use the new virtualization framework», это улучшит производительность Docker и позволит не так сильно страдать от проблемы медленной работы с файловой системой.
Это самая большая боль пользователей Docker на macOS и распространяется она и на M1 и на x86 архитектуры. Если вы монтируете локальную директорию к контейнеру, будьте готовы к тому, что операции записи-чтения будут выполняться достаточно медленно для того, чтобы сделать работу с приложениями внутри контейнера некомфортной.
Сама проблема и пути её решения хорошо описаны в этой статье. Среди прочего даже предлагается запускать Docker внутри виртуальной машины на Linux, что я, разумеется, делать не стал. Но опробовал способ с Mutagen и могу сказать, что он настолько прожорлив, что автономность (как и температура корпуса) мака на M1 становится сравнима с его x86-собратьями.
Пришлось отказаться от Mutagen. В смирении даже нашёлся свой плюс: можно заметить места в UI сайта, где нужно поработать с прелоадерами.
Проблема: Виртуальная машина с Windows и Linux.
Решение: UTM или QEMU.
Эту проблему я взялся решать больше в качестве факультатива и исследования возможностей эмуляции на MacBook с процессором M1. Что удалось выяснить:
С хорошей производительностью можно запускать виртуалки только с arm64 архитектурой, x86 тормозит настолько, что работать невозможно.
VirtualBox непригоден, т.к. поддерживает запуск только x86 (не 64);
VmWare Fusion Player для Apple Silicon сейчас в состоянии Technology Preview и у меня не получилось завести на нём имеющиеся у меня образы Windows 10/11 ARM64, потому что загружаются они только по интерфейсу USB, а Fusion Player предлагает смонтировать .iso образ только как CD/DVD по интерфейсу IDE. Другие архитектуры эта версия Fusion Player не поддерживает; версия для macOS на процессорах Intel работает через Rosetta с соответствующей производительностью;
Parallels Desktop работает хорошо,
но непригоден для запуска чего-то, отличного от WindowsUPD: в комментариях мне подсказали, что Parallels Desktop может запускать и Linux-виртуалки;UTM (надстройка над QEMU) — работает на макосовском Virtualization framework, можно запускать и Linux и Windows-машины, поддерживает эмуляцию x86, хоть и с большими тормозами. Я пробовал запускать Ubuntu 21.10 и Windows 10 ARM64, обе виртуальные машины работали очень быстро.
Победил опенсорс, как иначе.
«И как тебе MacBook?»
Я нарочно поместил впечатления от работы с macOS в спойлеры, чтобы акцентировать внимание на проблемах и неудобствах, с которыми я столкнулся и которые решил, а не на эмоциях.
Изначально я относился к переходу на Мак как к эксперименту: мне не только было интересно освоиться в новом окружении, но любопытно было узнать останусь ли я на macOS или вернусь к Линуксу.
Освоился и чувствую себя комфортно. А возможность возврата на Linux вижу только при условии появления на рынке достойной альтернативы на архитектуре arm64. Дело в том, что к высокой автономности и почти всегда прохладному корпусу ноутбука быстро привыкаешь. Но сильнее всего привыкаешь к скорости: текущие проекты собираются примерно в 2.8 раза быстрее, чем на Dell XPS 13, это ощутимая разница в производительности, делающая работу за компьютером заметно комфортнее.
В остальном, на macOS можно делать всё то же самое, что и на Linux или на Windows, я не могу сказать, что мне стало удобнее или моя эффективность увеличилась. Некоторые моменты меня подбешивают, но над некоторыми привычными задачами работать стало приятнее.
Кроме того, за макбуком я стал проводить гораздо больше времени: не смотря на то, что мой интерес к работе на компьютере и так велик, мне стало ещё интереснее. Я не знаю чем это объяснить, просто факт. Надеюсь, это не пройдёт.
P.S. Кроме того, что я веду Telegram-канал «IT Монах», недавно я завёл аккаунт в Twitter, где пишу и общаюсь более неформально. Буду рад новым подписчикам и фолловерам.