Комп’ютерні замітки на полях macbook pro і проблеми з wifi

Це сталося! Я, старий, пропалений віндузятнікі і початківець лінуксоїд, пишу про MacBook. Єдине, що мене втішає, писати я буду не про перевагу яблучної продукції. Взагалі, коли не стикалися з якимось продуктом, так би мовити, особисто, уявлення про нього складається з прочитаних публікацій і почутих історій, і все це доповнюється величезною порцією власного сприйняття, не завжди об'єктивного. І це власне сприйняття, как не странно, виявляється найбільш вагомим при формуванні нашого ставлення до чого-небудь.

Отже, якийсь час назад у дочки відбулася зміна ноута: вона перебралася з Samsung-а на MacBook Pro. Як я вже писав вище, перехід цей, крім позитивних емоцій володіння, ознаменувався також деякою кількістю прикрих ляпів. Всі вони, до пори до часу, обходили мене стороною, але було ясно, що god mode рано чи пізно закінчиться. І ось, в якийсь момент, доча раптом заявляє рішучий протест.

Виявляється, її MacBook дуже часто взагалі не бачить домашніх мереж. Ось вчора все нормально підключилося і працювало, а сьогодні в мережу не вийти, точніше, не зайти. У списку доступних мереж перераховані всі мережі нашого і сусіднього під'їздів, а рідних, домашніх, мереж немає і в помині. Чому у множині? Тому, що мережі дві: в діапазоні 2.4 ГГц одна мережа і ще одна - в діапазоні 5 ГГц. І це при тому, що Мак повинен вміти чіплятися до обох!

Але я ж тертий калач. Що стосується тієї мережі, яка працює в діапазоні 2.4 ГГц - у мене відразу з'явилася здогадка, чому її не видно. Справа в тому, що щось схоже відбувалося з деяким обладнанням і раніше. А все тому, що я загнав цю сітку на 13-ий канал. З іншого боку, відомо, що доступність каналів сильно залежить від країни. У мене був ноут від HP, який теж відмовлявся бачити домашню сітку, так як в настройках драйвера WiFi була виставлена ​​країна США, а там 13-ий канал під забороною. Правда, 5 ГГц сітка використовує нічим не примітний 36 канал, який, на мій погляд, захищений від цих юридичних казусів (як з'ясувалося пізніше, я помилявся). Але я вирішив тимчасово забути про цей діапазон - Apple любить випендрюватися і пред'являти якісь вимоги, які сам виконує, а інші фірми-виробники - не завжди; хіба мало, що він міг придумати для сіток в діапазоні 5 ГГц.

Загалом, я почав пошуки в тому напрямку, в якому попереду маячив сякий-такий світло - треба зрозуміти, чи є у маків настройка країни для драйвера WiFi, і, якщо є, то де можна подивитися, яке значення там виставлено. І найголовніше - як його можна змінити, якщо, звичайно, можна.

Перший же запит до Гуглу показав мені, що в питаннях роботи з WiFi мережами у маків не всі добре - розрослися гілки безлічі форумів говорили про велику кількість людей, що зазнали проблеми з доступом. Звичайно, подібні форуми розквітають буйним цвітом і для інших операційних систем і виробників обладнання. Левова ж частина питань в таких гілках пов'язана з відсутністю елементарних знань у більшості користувачів, і це зрозуміло - не можна вимагати від користувача занадто глибоких знань в областях, в яких він не спеціалізується. Але, адже Apple свою продукцію позиціонує як найкращу user friendly, доброзичливу, чи то пак. А на ділі вона виявляється нітрохи не завжди готовий допомогти ненависної вінди?

Ну гаразд, не буду занадто сильно язувати з цього приводу, хоча, звичайно, дуже хочеться. Головне, що на форумах я отримав відповідь на пару своїх ламерскіх питань: так, настройки країни для драйвера WiFi є, і подивитися поточне значення можна в в додаток "Відомості про систему", в розділі WiFi.

Однак те, що я побачив, мене, м'яко кажучи, вразило - країна була прописана, як TW. то пак, Тайвань. Крім того, для зручності користувача (не забуваємо - це ж user friendly MacBook Pro) був приведений список каналів, які можна в цьому Тайвані використовувати. Що можу сказати, тайванців обмежують, ось такі канали доступні в їх країні:

en1: 802.11d country code set to 'TW'.
en1: Supported channels 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165

Що характерно - з списку доступних каналів немає не тільки 13-го каналу, а й каналу з номером 36. Саме тому дочкин MacBook Pro не бачив ні 2.4-гігагерцовий домашню сітку, ні 5-гігагерцовий. Ось так все питання "чому?" отримали відповіді, залишилося вирішити питання "як?".

Ось з пошуками відповідей на ці "як" і почалися проблеми. Відразу хочу відзначити, що алгоритми роботи продукції Apple, описувані різними знавцями в різних джерелах, дещо відрізняються, але, в основному, відмінності ці проявляються в деталях. Загалом, поглиблення в нетрі інформації по MacOS і MacBook виявило таку особливість поведінки цього призначеному для користувача-орієнтованого програмно-апаратного комплексу.

Для драйверів WiFi прийняті деякі значення країни за замовчуванням, так би мовити, базові настройки, і вони залежать від країни походження та продажу, що, в общем-то, очікувано. Але вони також залежать від адаптера WiFi, який вставлений в ноутбук. Так-так, за нібито WiFi адаптерами Apple AirPort ховаються некошерні адаптери від Atheros і Broadcom. Пора, все-таки, перестати іронізувати, але ж так і підмиває!

Але сувора правда дійсності вносить свої корективи в картину світу. На практиці виходить, що придуманий - для світу від Apple - алгоритм визначення країни для WiFi ноутбука в реальному світі елементарно дає збої. Тому, що кругом повно "сірих" роутерів від китайських та інших виробників, прошитих неофіційними прошивками і налаштованих, або НЕ налаштованих, як бог на душу покладе. Та й потім, що буде робити Apple зараз, коли в Штатах заборонили використання 802.11d?

Ну от, не мовить ваш роутер по протоколу 802.11d - ви самі відключили, або виробник не передбачив, Або, що гірше, ви його купили через АЛІБАБА, і він прийшов до вас з настройками, призначеними для Китаю або Тайваню. А ви - ні сном, ні духом. І взагалі, не в курсі будь-яких протоколів. І це не ви, а ваш сусід поверхом вище. Просто так сталося, що, згідно з алгоритмом, або всупереч йому - програмісти адже допускають помилки в програмах - його сітка просканувати раніше вашої. І все! Отримайте країну TW або CH для свого WiFi модуля. І все це неподобство буде запомнено до наступного відключення живлення. А якщо ви включили ноут в гостях або в кафе? Або. Та хіба мало таких "або" можна придумати. Воістину, остерігайтеся випадкових зв'язків! Візьміть свій MacBook, роутер AirPort, краще, AirPort Extreme, їдьте в чисте поле, або в лісову глушину, і там, далеко від цивілізації, насолоджуйтеся світом Apple. Так, не забудьте валізу з акумуляторами.

Насправді, найгірше рішення у всьому цьому. раю, це те, що вам не дали ніякої можливості виставити ці настройки явно, тобто, не можна зайти в якусь програму і вказати занадто розумному пристрою на його місце: типу, рідний, прокинься, ти в Європі, а не в Азії . Напевно, тому, що доброзичливе пристрій не повинно давати криворукості користувачеві свою криворукість проявити. Ось такі справи.

Але я вірив в людство. І не помилився. Продовження пошуків привело мене на сторінку форуму. на якій користувач навів спосіб, за допомогою якого можна пропатчити драйвер так, щоб він поводився більш простим чином - після патча в драйвер міцно прописується код певної країни і метання - в пошуках кращої країни - припиняються. Сам же патч з себе представляє так званий one-liner - виклик інтерпретатора perl з передачею йому команди, яку треба виконати (можна почитати ще і тут). Командою було вираз regex, що заміняє один набір байтів іншим - банальний бінарний патч.

Довелося влаштовувати мозковий штурм для виправлення ситуації. Трохи заспокоївшись і поміркувавши, я прийшов до висновку, що бінарний патч щось зіпсував в драйвері і той перестав завантажуватися. Ще невелике зусилля і було знайдено рішення для повернення ситуації до вихідних рубежів - раз патч замінює один набір байтів іншим, треба виконати зворотну заміну. Я попросив доньку виконати модернізовану команду (це все один рядок):

sudo perl -pi -e 's | \ x81 \ x78 \ x30 \ x6B \ x10 \ x00 \ x00 \ x90 \ xE9 | \ x81 \ x78 \ x30 \ x6B \ x10 \ x00 \ x00 \ x0F \ x85 |' / System /Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortBrcm4331.kext/Contents/MacOS/AirPortBrcm4331 sudo touch / System / Library / Extensions /

і, через хвилину, полегшено зітхнув - після перезавантаження апаратна частина повернулася до життя.

І все-таки, що з патчем не так? Адже деякі користувачі відписалися про те, що патч нормально відпрацював і виконав своє призначення. Першою, і, як виявилося надалі, правильної, думкою було копнути в сторону версій MacOS. Я подивився, що встановлено у дочки - там гордо висвічувались цифри 10.10.2, тобто, Yosemite. Більшість відписатися про вдалий досвід використовували більш ранні версії операційки, і тільки на сторінці з патчем була згадка про те, що все спрацювало і на потрібній мені версії ОС.

Деякий час я продовжував повзати - за допомогою Гугла - з англомовного сегменту інтернету. Але, в якийсь момент, чергове запитання я задав з використанням рідної і могутнього мови. Чому! Чому, я не зробив цього раніше. У видачі присутня сторінка блогу. а сам блог - це просто джерело корисної інформації, та ще з рішеннями, та ще російською.

Загалом, як я і очікував, бінарний патчер накоїв справ. Ні, він, швидше за все, все виправив правильно. Але в Yosemite ці драйвер підписані і при їх завантаженні підпис перевіряється. Природно, заміна кількох байт зробила підпис недійсною, драйвер не завантажився, MacBook, як наслідок, видав попередження про те, що апаратне забезпечення не знайдено. Виконавши дзеркальну команду, ми повернули байти на свої місця, перевірка підпису при завантаженні завершилася вдало, працездатність відновилася.

Поки я рив інтернет в пошуках всієї цієї інформації, дочка провела експеримент - вона кілька разів вимкнула / включила ноут, переміщаючись по квартирі. В якомусь місці MacBook зволив схопити роутер з правильними регіональними настройками, можливо, навіть, домашній, після чого підключився до сітки без проблем. На цьому принципі (виключення / включення WiFi модуля), до речі, було побудовано одне з обговорюваних на англомовних форумах рішень описуваної проблеми - пропонувалося написати скрипт, який би виключав і включав модуль до тих пір, поки не був би виставлений потрібний код країни.

Після невеликого консиліуму з дочкою було вирішено не проводити експерименти за сценарієм, описаним в блозі - їй потрібно було працювати, але ж існував ризик того, що щось не спрацює і ноут знову перестане коннектіться з сіткою, або знову не завантажить драйвера. Основним каменем спотикання для мене стало те, що в первісному one-liner-е і в one-liner-е, пропонованому в блозі, використовувалися різні regex вираження. Так що, сказати, що наведена в блозі інформація виправляє ситуацію, я не можу, хоча, все виглядає дуже переконливо, особливо частина, пов'язана з відключенням перевірки підпису при завантаженні драйверів. Може, коли-небудь, дочка вирішиться і ми доведемо дослідження до логічного кінця. А поки, мабуть, все.