· windows windows 10 wsl wsl2 macbook

Переезд в Windows

Не так давно у меня появился макбук (15” 2018), который я использовал для всяких рабочих задач вроде написания кода. Для того, чтобы как-то отвлекаться, оставаясь при этом за компьютером (все-таки когнитивная нагрузка местами высока, а на связи надо быть всегда, ибо я работаю на удаленке), я решил поставить какие-нибудь игры, и выбор, конечно же, пал на Counter Strike: Global Offensive. И все было хорошо, пока не подъехала macOS Catalina, которая является отдельным сортом говна:

  1. Жесткие потери UDP пакетов. Вылечил переустановкой macOS Catalina с нуля, но не до конца. Грешил на фаервол LuLu, однако ситуация не поменялась после установки оного на только что переустановленную macOS, так что очень похоже на то, что виноват был мусор, оставшийся в системе после обновления с Mojave до Catalina.
  2. Лагающая мышь. Если ускорение (нахрен никому не нужное и только мешающее, загуглите, например, как она дрожит при микроперемещениях) чинилось с помощью SteelSeries ExactMouse, то с апдейтом на каталину мышь начала просто “проглатывать” некоторые перемещения, причем переустановка с нуля не помогла.
  3. Опять что-то наобновляли с графической подсистемой, в итоге CS:GO начала лагать - изображение дергается, FPS проседает с 200 до 60.
  4. Каталина - это Windows Vista от Apple со всеми вытекающими. Если в винде UAC на каждый чих просил одобрение, то тут оно еще и глючит. Например, Rambox (ну или электрон, окей) не может запросить доступ к видеокамере, только к микрофону, и добавление спецстрок в Info.plist ситуацию не изменили.
  5. Выкинули 32битные приложения. У меня это затронуло только игры в Steam, однако все равно неприятно, когда из коллекции из 300 игр доступно всего 40 или около того.
  6. Несколько раз (до и после переустановки) ловил “выжирание батарейки с крешем ОС”. Нет, серьезно, за 10 минут выжирало батарейку в ноль и вырубалось, после включения показывало окошко о системном креше с предложением отправить отчет в Apple.

В одни прекрасные выходные мне это все надоело, и я решил переехать в Windows 10, так как на мой макбук нормально Linux не поставить, а если и поставить - то с чем-то придется распрощаться (например, с нормальным охлаждением, скоростью, звуком или 3D ускорением).

Из плюшек свеженькой винды:

  1. Есть WSL2, виртуалка с линуксом для работы не нужна, как и тонны другого софта типа PuTTY. Попутно есть возможность работы в WSL из VSCode.
  2. Не выкинули поддержку 32битных приложений, поэтому все игры доступны.
  3. На моей памяти ни у кого адовых нефиксабельных проблем с мышкой не было.

А после установки Windows добавились еще и следующие “плюшки”:

  1. Винда реально не глючит (чему я был сильно удивлен). Всегда ж что-то где-то да глючило, а тут бац - и все норм. Даже сон на макбуке работает. И это ниразу не про раздел “Внезапные лаги” ниже, ибо тут я грешу именно на железо с драйверами, на Thinkpad T480 все нормально работает без лагов неделями.
  2. Винда работает (по ощущениям, конечно) в разы быстрее и плавнее, чем Mojave и Catalina.
  3. Макрософаг сделал отличное приложение для работы с телефоном на Android - получение уведомлений, работа с СМС и звонками стала возможной даже забыв телефон где-то в другой комнате (но надо, чтобы работал Bluetooth, ага).
  4. Windows 10 жрет намного меньше памяти, чем и Mojave, и Catalina. В последних после старта, с запуском всего мне нужного и без учета кешей, сжиралось от 7 до 10 гигов оперативы. Windows 10 остановился на отметке от 4.5 до 6 ГБ, что вполне сопоставимо с показателями Linux. При этом смотри п.2.

Далее я опишу то, с чем столкнулся на этапе тюнинга всего своего добра и как это поборол.

Внезапные лаги

Не лечится никак, кроме стандартного метода быстрой починки Windows - перезагрузкой. Проявляются лаги следующим образом:

  1. Интерфейс винды начинает “подтормаживать”. Увеличивается время запуска приложений. Например, у меня VSCode с Remote WSL обычно стартует около 2х секунд, при проявлении этих лагов время запуска увеличивается до 10 секунд (а может быть и больше).
  2. В играх увеличивается пинг, начинает “тормозить” управление и “дергается” картинка. Например в CS:GO параметр var в net graph вместо обычных для моего ноутбука 0.3-1.5 показывал значения 4+.
  3. Начинает отваливаться Bluetooth мышка и телефон от приложения “Ваш телефон” с частотой примерно раз в несколько минут.

Драйвера для макбука

При начальной настройке и работе с виндой на макбуке выяснились следующие две штуки:

  1. Драйвера для видеокарты, которые синжектил bootcamp, откровенное устаревшее (внезапно) говно. По-умолчанию ставилась версия 17.90 (или 17.80, уже не вспомню), хотя на сайте AMD доступны уже 18.40 (на момент написания поста). Обновление драйверов дало некоторый буст по FPS в играх (CS:GO - с средних 100-150 до средних 200-250, в зависимости от карты и количества народа на сервере), плюс все начало отрисовываться намного плавнее.
  2. Драйвера для WiFi - тоже откровенное говно. Оно работало точно так же, как и под самой macOS - теряло пакеты при использовании UDP, что очень сильно отражается на всяких мультиплеерных игрушках. Решилось с помощью обновления драйвера для сетевой карты из Диспетчера Устройств.

Учитывая все это, рекомендую также поставить все обновления драйверов из необязательных обновлений (см. в “Настройки” - “Обновления и безопасность”, там будет про необязательные обновления).

Сразу переходите в Insiders на поздний круг

Чтобы получить все плюшки WSL2 и при этом не мучиться с обновлениями или крешами, которые случаются на раннем круге довольно часто (судя по интернетам) - переходите сразу на поздний круг.

WSL

Если вы разраб или админ (ну или devops) - сразу ставьте WSL и форсируйте вторую версию по-умолчанию:

wsl.exe --set-default-version 2

После чего ставьте желаемый дистрибутив из Microsoft Store. Рекомендую Ubuntu, так как большая часть софта, типа Docker, ориентируется именно на этот дистрибутив.

WSL <> Windows - файлы в Windows лучше не редактировать

Заголовок говорящий. Проблема в том, что в NTFS нету нормальной альтернативы линуксовым правам доступа, в итоге файлики могут или “побиться”, или вообще стать с правами 777, что, мягко говоря, несекурно. Поэтому не стоит.

Это же касается редактирования в обоих направлениях.

Запуск всякого от root

По-умолчанию можно попробовать запустить некий сервис от root командой service SERVICENAME start, однако это не работает для pure-systemd сервисов, которые не предоставляют скрипт для upstart. Я решил попробовать запускать эти сервисы в tmux. Например, я довольно активно использую yggdrasil, который как раз для upstart в пакете для Debian/Ubuntu ничего не предоставляет.

Попутно я решил использовать давно известный мне tmuxinator для управления “воркспейсами”. Воркспейс с сервисами назван просто - services. Итак, поехали:

sudo apt install tmuxinator
sudo su                         # введите тут ваш пароль
tmuxinator create services

Эти команды поставят tmuxinator и запустят создание воркспейса от root. Для yggdrasil я использовал такой конфиг:

name: services
root: ~/

windows:
  - yggdrasil:
      layout: main-vertical
      panes:
        - yggdrasil: yggdrasil -useconffile /etc/yggdrasil.conf

Для удобства я сделал в домашней директории пользователя файл start-root-services.sh, который и запускает tmuxinator (и может запускать что-то еще, если будет нужно):

#!/bin/bash

sudo -i -- tmuxinator start services

Делаем ему chmod +x и можно пользоваться.

Windows Terminal Preview

Сразу ставьте Windows Terminal Preview, у него есть интеграция с WSL2 и в нем возможно сразу “проваливаться” в WSL2. Ну и табы, терминал без табов (стандартный виндовый) неудобен. А тут табы есть.

Настройка

После установки WSL и терминала я провел следующую “доконфигурацию”:

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
    "$schema": "https://aka.ms/terminal-profiles-schema",
    "defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}",
    "launchMode": "maximized",
    "profiles": [
        {
            // Make changes here to the powershell.exe profile
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false,
            "fontFace": "Go Mono",
            "fontSize": 9
        },
        {
            // Make changes here to the cmd.exe profile
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "cmd",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        },
        {
            "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
            "hidden": false,
            "name": "Ubuntu",
            "source": "Windows.Terminal.Wsl",
            "fontFace": "Go Mono",
            "fontSize": 9,
            "cursorColor": "#111111",
            "historySize": 65000,
            "startingDirectory": "//wsl$/Ubuntu/home/pztrn",
            "colorScheme": "pozitivelight"
        }
    ],
    // Add custom color schemes to this array
    "schemes": [
        {
            "background": "#F9F9F9",
            "black": "#111111",
            "blue": "#1916cc",
            "brightBlack": "#535353",
            "brightBlue": "#5858ce",
            "brightCyan": "#47b3c6",
            "brightGreen": "#52e574",
            "brightPurple": "#dd5da6",
            "brightRed": "#ea3838",
            "brightWhite": "#cccccc",
            "brightYellow": "#d6d63b",
            "cyan": "#0896b2",
            "foreground": "#111111",
            "green": "#159635",
            "name": "pozitivelight",
            "purple": "#ba2178",
            "red": "#b70b0b",
            "white": "#aaaaaa",
            "yellow": "#a5af16"
        }
    ],
    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

Что тут “нестандартного”:

  1. Мой любимый моношрифт “Go Mono” везде.
  2. По-умолчанию открывать окно распахнутым на весь экран (параметр launchMode).
  3. Своя светлая тема для терминала, потому что я на самом деле люблю светлые темы. Нет, глаза не выжигает. Используется эта тема только для Linux.

Если будете использовать этот конфиг - учтите, что GUID для профилей у вас могут быть другие, и бездумно лучше не копировать.

Docker

Сам Docker, если погуглить, для WSL2 предоставляет Docker Desktop из канала Edge (то есть нестабильный и с частыми обновлениями), который интегрируется со всем этим добром. Да, оно вполне себе работает, но я решил, что мне оно не нужно, так как с Docker я работаю только из Linux. Поэтому я решил поставить Docker в сам WSL2, и в общем-то, не прогадал - оно тупо работает. Однако есть два момента, которые некоторым могут показаться неудобствами:

  1. Нету автозапуска докера. После ребута (ноутбука или самого WSL) я делаю sudo service start docker в консоли. Неудобство совсем минорное - мне и не надо, чтобы Docker всегда работал.
  2. Чтобы получить доступ с хоста к контейнеризированным приложениям (например, БД) необходимо биндить порты на 127.0.0.1. То есть для той же PostgreSQL строка проброса портов примет вид - "127.0.0.1:5432:5432".

В общем, жизнь для разработчика под Windows в принципе есть. Мой эксперимент оказался удачным, и с Windows я в настоящий момент никуда уходить не планирую.

Updates:

23.11.2019: добавил информацию про запуск не-upstart’овых сервисов от root с помощью tmuxinator.

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket