В Debian Lenny на моём ноутбуке практически всё работает «из коробки». Но существует несколько досадных мелочей, об исправлении которых я расскажу.Начну с того, что существует баг, мешающий нормальной работе с wi-fi на ноутбуках Asus C90s (возможно, что и на некоторых других) с карточкой Intel PRO/Wireless 3945ABG. Суть в том, что через interfaces вафля работает, но если она в этом файле не упомянута, либо не произошло соединения, то wi-fi отваливается напрочь, и поднять его обычными способами не получается. Невозможно использовать network-manager, wicd подключает нестабильно, сильно осложняется работа.
Я с довольно большим трудом нашёл информацию по проблеме, и этот пост — попытка помочь товарищам по несчастью.
Итак, мы имеем отрубающийся при загрузке вайфай, dmesg выводит
iwl3945: Radio disabled by HW RF Kill switchAlt+F2 не работает, хардварных переключателей на ноутбуке нет.
Решение
Оно оказалось несложным:$ echo 1 > /sys/devices/platform/asus-laptop/wlanПосле этого адаптер сразу включился, о чём сигнализировал загоревшийся светодиод. Но как сделать, чтобы этот костыль работал автоматом?
Вафля отваливалась при загрузке, следовательно, решил я, надо копать запускаемые
init'ом скрипты. Был написан простенький скрипт, делавший echo и пятисекундный sleep, который выполнением команды$ update-rc.d myscript start XX a b c d. stop YY d e f .помещался после проверяемых на вшивость запускаемых системой скриптов.
Про runlevel'ы
Пара слов о процедуре загрузке системы, раз уж я начал так подробно объяснять. Существует семь т.н. «уровней запуска» (runlevels). Нулевой соответствует остановке системы, шестой — перезагрузке, первый — однопользовательскому режиму. Согласно официальной вики, Дебиан не делает различий между остальными пятью. Каждому режиму соответствует набор скриптов, запускаемых при входе в режим и при выходе из него. Ссылки на скрипты хранятся в /etc/rcX.d, где X — номер уровня. (Сами запускаемые скрипты лежат в /etc/init.d/)Ссылка на скрипт, начинающаяся с S, запускается при входе, с K — при выходе. Двузначное число, стоящее после S или K, показывают приоритет запуска: сначала запускаются скрипты с наименьшим приоритетом. Упомянутая выше команда
update-rc.d позволяет правильно назначить для скрипта эти ссылки, либо удалить их. В упомянутой мной форме синтаксиса этой команды мы даём нашему скрипту myscript приоритет XX при запуске в runlevel a, b, c и d, и приоритет YY при остановке в runlevel d, e и f. Удалить программу из автозапуска можно так:$ update-rc.d -f myscript remove
Ну а теперь опять вернёмся к практическому применению. Sh-скрипт, делавший
sleep 5, будучи запихан до и после разных запускаемых системой при загрузке скриптов, показал, что светодиод беспроводного адаптера гаснет аккурат после запуска acpi-support. Так как его приоритет запуска был 99, то пришлось поменять его на 98 командой $ update-rc.d acpi-support start 98 2 3 4 5. stop 20 1 .Приоритет 20 при останове в runlevel 1 я сохранил. Теперь осталось только переписать мой скрипт, чтобы он поднимал wi-fi:
#! /bin/sh<br># /etc/init.d/mywififix<br><br>touch /var/lock/mywififix<br>case "$1" in<br> start)<br> echo 1 > /sys/devices/platform/asus-laptop/wlan <br> ;;<br> stop)<br> echo 0 > /sys/devices/platform/asus-laptop/wlan <br> ;;<br> *) echo "Usage: /etc/init.d/mywifiscript {start|stop}"<br> exit 1<br> ;;<br>esac<br><br>exit 0и выполнить$ update-rc.d mywififix defaults 99 99чтобы вписать его в автозагрузку. Отмечу другой синтаксис, в котором скрипту передаётся только приоритет, а параметры ранлевелов берутся дефолтными (старт в 2, 3, 4 и 5, остановка в 0, 1 и 6 ранлевелах).
После введения подобного костыля вафля перестала падать, стала нормально восприниматься
network-manager'ом, а светодиод при загрузке гаснет на долю секунды.Решение самой проблемы с интеловской карточкой было найдено спустя многие часы гугления и одну переустановку системы (один товарищ заявил, что ему это помогло, да и я на новый винчестер как раз переезжал, заодно и попробовал предлагаемый пользователю коробочный Дебиан, но об этом в другой раз).
Нашлись IRC-логи, в который некий tvakah предложил упомянутое в самом начале решение проблемы, за что ему огромное спасибо и почёт. Он хоть и написал в багтрак о своей находке, но в гугле решение не всплыло (или не было замечено), а нерешённых тем и вопросов на форумах замечено было предостаточно. Хабр исправно индексируется гуглом, так что я надеюсь, что мой пост поможет хоть кому-нибудь.
Если кому-то интересно, то я подумываю периодически писать обзоры различных линуксовых софтин, сделав из личного блога какое-то подобие «записок дебианщика». У меня самого раньше периодически возникали вопросы вида «какой программой лучше сделать то-то», я тратил почти бесплатный траффик и драгоценное время на гугл и сравнение программ, направленных на решение одинаковых задач или настройку чего-то под себя или своё железо, так что мои знания могут кому-нибудь что-нибудь сэкономить.
