|
Moderator - Level 7
Регистрация: 23.04.2007
Сообщений: 646
Провел на форуме: 4901399
Репутация:
1035
|
|
А — попроще?
Можно. Даже — нужно. Потому как затем и wi-fi у ноутбука, чтобы можно было им воспользоваться дома, на работе, в аэропорту, гостинице и т.п. Создавать соединение описанным выше способом где-нибудь в интернет-кафе выглядит явным извращением. И попытки упростить, если не полностью автоматизировать этот процесс ведутся.
Прежде всего, в рамках "unix-way" напрашивается создание надстроек над безукоризненными, в общем-то, в своём качестве Wireless Tools и wpa_supplicant. По этому пути пошли создатели wifi-radar (http://www.bitbuilder.com/wifi_radar). Python и Gtk-2 — вполне подходящие для этой задачи инструменты. Мне, правда, пришлось немного повозиться, пока я добился от wifi-radar работоспособности, но — возможно. Знай, следи за "эфиром" и подключайся к наиболее подходящей в данный момент сети. Некоторые трудности, однако, остаются. Всё то же асинхронное аппаратное включение, например. Есть, одним словом, над чем работать.
И — работают. В недрах Gnome разрабатывается так называемый NetworkManager — демон, задачей которого является поддержание активного сетевого соединения при любых условиях. NetworkManager использует wpa_supplicant, но уже не использует Wireless Tools. Демон этот ориентирован исключительно на десктопы (на ноутбуки — прежде всего), интегрирован с hal и dbus (что не позволяет ему работать в "чистой" консоли), и, вообще... специфичен. Не unix-boy, я бы сказал. Но и задача — специфична. Приходится считаться.
NetworkManager настолько специфичен, что обычной инсталляцией отделаться не удастся. Загрузив пакет (а заодно и его фронтенды: апплет network-manager-gnome для Gnome или knetworkmanager для KDE), потребуется:
- удалить все конфигурации из /etc/network/interfaces;
- создать файл /etc/default/wpasupplicant и внести в него строку: ENABLED=0;
- выполнить sudo /etc/init.d/dbus restart;
- загрузить апплет командой nm-applet;
- если после этого иконка NetworkManager не появится на панели, то, очевидно, на панели отсутствует "область уведомления" (Notification Area).
Интеграция с hal/dbus не всегда обеспечивает желаемый результат. Так, вполне может оказаться, что, после загрузки с аппаратно выключенным адаптером, NetworkManager ни одной Wireless Network вам не предложит: сколько этот адаптер ни включай/выключай. Разумеется, sudo /etc/init.d/dbus restart спасает положение, но это значит, что и при наличии NetworkManager опять потребуется иконка-запускатель и редактирование /etc/sudoers (рано или поздно вам надоест вводить пароль при каждом включении сети).
Несколько огорчают бессмысленные попытки поиска "пропавшей" сети, после того, как вы аппаратно выключаете адаптер, но продолжается это сравнительно недолго. При повторном включении адаптера соединение автоматически не восстанавливается (как можно было бы ожидать): приходится "вручную" выбирать нужную сеть. Из этого можно сделать вывод, что аппаратное включение адаптера не является событием для hal а, следовательно, и dbus нечего передавать апплету NetworkManager-а. Подход wpa_supplicant (периодической опрос) оказался в данном случае более эффективным.
Ещё одна неприятная мелочь — это то, что ключ доступа к сети nm-applet хранит в так называемых "брелоках" (keyrings), для доступа к которым тоже нужно пройти идентификацию. Так что даже избавившись от запроса пароля на выполнение необходимого каждый раз после аппаратного выключения адаптера (sudo /etc/init.d/dbus restart), По крайней мере один раз (при первом включении) потребуется идентифицироваться для доступа к своему keyrings. Справедливости ради отмечу, что в следующей версии Ubuntu (7.04) уже имеется достаточно известный пакет pam_keyrings (известный в Debian и его клонах как libpam-keyring http://www.hekanetworks.com/opensource/pam_keyring/), который автоматически выдаёт пароль регистрации пользователя в ответ на запрос идентификации к keyring. Для Ubuntu Dapper (6.10) можно самому странслировать pam_keyrings, но только исходники нужно взять версии 0.8.
На этом этапе можно попытаться сохранять работоспособность NetworkManager при переходе в suspend или hibernate. Для этого нужно создать файл /etc/acpi/suspend.d/07-network-manager.sh с содержимым:
#!/bin/sh
/etc/dbus-1/event.d/25NetworkManager stop
и файл /etc/acpi/resume.d/63-network-manager.sh с содержимым:
#!/bin/sh
/etc/dbus-1/event.d/25NetworkManager start
Наибольшим же недостатком NetworkManager, является, на мой взгляд то, что он не обеспечивает соединение в режиме Ad Hoc. И, хотя, по оценкам экпертов этот режим используют менее 10% провайдеров wi-fi сервиса, лишиться в аэропорту доступа к Сети только потому, что сеть зала ожидания попала в эти 10% — обидно.
Проблема известна. Желающие могут даже воспользоваться патчем, предлагаемым Роберотом Лав (Robert Love) и, будем надеяться, что в очередной версии NetworkManager соединение в режиме Ad Hoc не будет проблемой.
А пока NetworkManager не вполне соответствует нашим пожеланиям для запрета его работы (без деинсталляции) нужно сначала остановить его командами:
sudo /etc/dbus-1/event.d/26NetworkManagerDispatcher stop
sudo /etc/dbus-1/event.d/25NetworkManager stop
А затем создать два файла:
/etc/default/NetworkManager
/etc/default/NetworkManagerDispatcher
Поместив в них по одному слову: exit.
Coda
Выводы из этого всего достаточно обычны при оценке Linux-ПО:
функциональность базового ПО находится на достаточно высоком уровне;
при наличии желания и определённой подготовки, достижение положительного результата вполне вероятно;
некоторые передовые разработки содержат инновационные моменты, неизвестные доселе в распространяемом проприетарном ПО. Автоматическое переключение сетей NetworkManager — как раз один из них;
дружественность пользовательского ПО оставляет желать лучшего. Как и всегда, впрочем, уже хотя бы потому, что достижение этой самой "дружественности" никогда не является приоритетом для разработчика, а обратная связь в форме оплаты за получаемый продукт по определению отсутствует.
Последнее, кстати, не означает невозможности появления как бесплатных, так и коммерческих продуктов, использующих идеи или конкретные разработки, зародившиеся в мире open source.
(с) Владимир Попов, взято тут:citkit.ru
|