☆ Linux Mint ☆

воскресенье, 11 апреля 2010 г.

Решение проблем с WiFi в Ubuntu 9.10

После обновления Ubuntu на ноутбуке (Dell Vostro A860) до версии 9.10 перестал
работать Wifi при абсолютной тишине в логах. Модуль ath5k грузится без ошибки и
правильно распознает чип от Atheros. А Network Manager скупо пишет "Устройство
не готово".

После продолжительного гугления выяснилось, что все дело в некорректной работе
функциональной кнопки (Fn + F11), отвечающей за включение/отключение Wifi и Bluetooth:

$ tail /sys/class/rfkill/*/{state,name,type,persistent}
==> /sys/class/rfkill/rfkill1/state <==
0
==> /sys/class/rfkill/rfkill2/state <==
0
==> /sys/class/rfkill/rfkill3/state <==
0
==> /sys/class/rfkill/rfkill1/name <==
phy0
==> /sys/class/rfkill/rfkill2/name <==
dell-wifi
==> /sys/class/rfkill/rfkill3/name <==
dell-bluetooth
==> /sys/class/rfkill/rfkill1/type <==
wlan
==> /sys/class/rfkill/rfkill2/type <==
wlan
==> /sys/class/rfkill/rfkill3/type <==
bluetooth
==> /sys/class/rfkill/rfkill1/persistent <==
0
==> /sys/class/rfkill/rfkill2/persistent <==
0
==> /sys/class/rfkill/rfkill3/persistent <==
0

Как видим, rfkill1 и rfkill2 имеют тип wlan. Состояние (state) у обоих равно 0,
означающему SOFT LOCK. Кроме состояния 0 могут быть 1 и 2, UNLOCK и HARD LOCK соответственно.

Вся проблема состоит в том, что при нажатии на упомянутую ранее функциональную
кнопку состояние переключается только между значениями SOFT LOCK и HARD LOCK,
минуя UNLOCK. Из-за этого блокируется переход интерфейса Wifi в активный режим,
наглядно демонстрируемый командой

$ sudo ifconfig wlan0 up
SIOCSIFFLAGS: Unknown error 132

Решение состоит в принудительном переводе в состояние UNLOCK.
Для этого пишем простой скрипт

#!/bin/sh
for i in /sys/class/rfkill/rfkill*/type;
do
type="`cat $i`"
if [ "$type" = "wlan" ];
then
n="`echo $i | sed -r 's%/type$%%'`";
echo 1 > ${n}/state;
fi;
done;

Сохраняем скрипт в файл "/usr/local/sbin/unlock-wlan" и делаем его исполняемым

$ sudo chmod +x /usr/local/sbin/unlock-wlan

После ручного запуска скрипта надо перезапускать Network Manager - иначе
он ничего не заметит.
Теперь настраиваем Upstart для исполнения нашего скрипта при загрузке системы,
перед стартом Network Manager. Для этого создаем файл "/etc/init/unlock-wlan.conf"

# unlock-wlan - unlock wireless device
#
description "unlock wireless device"

# Скрипт запускается перед настройкой сетевых интерфейсов
start on starting networking

task

exec /usr/local/sbin/unlock-wlan


Источник: www.propheta.ru



FREE PROXY SERVERS



0 Коментарии::

Отправить комментарий

Написать комментарий

Подписаться

Twitter Delicious Facebook Digg Stumbleupon Favorites More