Pull to refresh

Пара слов о Debian на Asus C90s и наглядное пособие по runlevel'ам для новичков

Reading time3 min
Views856
В Debian Lenny на моём ноутбуке практически всё работает «из коробки». Но существует несколько досадных мелочей, об исправлении которых я расскажу.

Начну с того, что существует баг, мешающий нормальной работе с wi-fi на ноутбуках Asus C90s (возможно, что и на некоторых других) с карточкой Intel PRO/Wireless 3945ABG. Суть в том, что через interfaces вафля работает, но если она в этом файле не упомянута, либо не произошло соединения, то wi-fi отваливается напрочь, и поднять его обычными способами не получается. Невозможно использовать network-manager, wicd подключает нестабильно, сильно осложняется работа.
Я с довольно большим трудом нашёл информацию по проблеме, и этот пост — попытка помочь товарищам по несчастью.

Итак, мы имеем отрубающийся при загрузке вайфай, dmesg выводит
iwl3945: Radio disabled by HW RF Kill switch
Alt+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 предложил упомянутое в самом начале решение проблемы, за что ему огромное спасибо и почёт. Он хоть и написал в багтрак о своей находке, но в гугле решение не всплыло (или не было замечено), а нерешённых тем и вопросов на форумах замечено было предостаточно. Хабр исправно индексируется гуглом, так что я надеюсь, что мой пост поможет хоть кому-нибудь.

Если кому-то интересно, то я подумываю периодически писать обзоры различных линуксовых софтин, сделав из личного блога какое-то подобие «записок дебианщика». У меня самого раньше периодически возникали вопросы вида «какой программой лучше сделать то-то», я тратил почти бесплатный траффик и драгоценное время на гугл и сравнение программ, направленных на решение одинаковых задач или настройку чего-то под себя или своё железо, так что мои знания могут кому-нибудь что-нибудь сэкономить.
Tags:
Hubs:
Total votes 12: ↑10 and ↓2+8
Comments2

Articles