Скрипт для инициализации Wi-Fi

Не понравилось мне как реализована система инициализации Wi-Fi в Slackware. Поэтому написал свой собственный скрипт. Он расчитан только на один тип Wi-Fi контроллера. Если вы используете другой контроллер, перепишите функции загрузки и выгрузки модуля.

Основной скрипт wireless.sh:

#! /bin/bash

#(c) 2007 Artur Kryukov
# License GNU GPL v2.

# Директория в которой должны находится файлы *.net
# с описанием Wi-Fi сетей.
CONF_DIR=/usr/local/etc/wireless.sh
PATH=/bin:/sbin:/usr/sbin

# !!!!!! ВНИМАНИЕ !!!!!
# Эта функция поддерживает загрузку ТОЛЬКО модуля ipw3945
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
load_module()
{
remove_module
modprobe ipw3945
sleep 1
/sbin/ipw3945d --quiet
}

remove_module()
{
echo remove
if [ -f /var/run/ipw3945d.pid ] ; then
/sbin/ipw3945d --kill
fi
if lsmod | grep ipw3945 > /dev/null 2>&1; then
modprobe -r ipw3945
fi
}

usage()
{
echo "Usage: wireless.sh start - start Wi-Fi network"
echo " wireless.sh stop - stop Wi-Fi network"
echo " wireless.sh --help - this screen"
echo "----"
echo "Current config directory:"
echo "$CONF_DIR"
echo "Current config files:"
echo "$(ls ${CONF_DIR}*.net)"
}

start()
{
load_module
sleep 4
for I in $CONF_DIR/*.net
do
. $I
# Проверка на наличие такой сети
if iwlist scan 2> /dev/null | grep $SSID > /dev/null 2>&1
then
# Если сеть есть, настраиваем ее
# Проверяем метод аутентификации
case $MET in
share)
set_share $IF $SSID $KEY $KEYN $DHCP
;;
WPA)
set_wpa $IF $SSID $CONF_WPA_FILE $DHCP
;;
esac
fi
done
}

stop()
{
remove_module
}

# Настройка сети с прешареными ключами
# $1 - сетевой интерфейс
# $2 - SSID
# $3 - KEY
# $4 - номер ключа
# $5 - DHCP
set_share()
{
iwconfig $1 essid $2 key $3 [$4] key open key [$4]
if [ $5 = "yes" ]; then
# Пытаемся получить IP по DHCP
if route -n | grep ^0.0.0.0 ; then
route del default
fi
sleep 2
dhcpcd $1
fi
}

# Настройка сети с поддержкой WPA
# $1 - сетевой интерфейс
# $2 - SSID
# $3 - CONF_WPA_FILE
# $4 - DHCP
set_wpa()
{
# Проверим наличие конфигурационного файла
if [ ! -f $3 ]; then
echo "Cant't finde config file this WPA attributes!!!"
echo "File $3 not found"
exit 21
fi
iwconfig $1 essid $2
wpa_supplicant -i$1 -c$3 -Dwext -B
if [ $4 = "yes" ]; then
if route -n | grep ^0.0.0.0 ; then
route del default
fi
# Пытаемся получить IP по DHCP
sleep 10
dhcpcd $1
fi
}

case $1 in
start) start ;;
stop) stop ;;
--help) usage ;;
*) usage ;;
esac

Для работы скрипта требуется определить директорию, в которой будут находиться конфигурационные файлы, описывающие Wi-Fi сети. Для определения такой директории используется параметр

CONF_DIR=/usr/local/etc/wireless.sh

В нашем случае необходимо создать директорию /usr/local/etc/wireless.sh, в которой будут размещаться конфигурационные файлы с расширением *.net и *.wpa

Пример конфигурации open Wi-Fi.

Создаём файл /usr/local/etc/wireless.sh/My.net, следующего содержания:

SSID=Ngrade
MET=share
KEY=1a2d-4cd7-8901-a2aa-5abc-aa1a-23
KEYN=3
IF=eth1
DHCP=yes # or no

При помощи переменных указываем параметры:

  • MET — share или wpa
  • KEY — ключ шифрования (о формате записи ключей смотрите man iwconfig)
  • KEYN — номер используемого ключа
  • IF — имя интерфейса
  • DHCP — yes — получить атрибуты интерфейса по DHCP, no — не получать по DHCP. В последнем случае придётся в командной строке самостоятельно задавать параметры интерфейса.

Пример конфигурации WPA соединения.

В этом случае необходимо создать два файла: *.net и *.wpa
Net файл (Ngrade_wpa.net):

SSID=Ngrade_WPA
MET=WPA
IF=eth1
CONF_WPA_FILE=/root/bin/Ngrade_wpa.wpa
DHCP=yes # or no

Параметр CONF_WPA_FILE определяет путь к файлу, описывающему параметры WPA соединения. Я не стал выдумывать свой формат для этого файла, я взял стандартный формат файла программы wpa_supplicant.

Файл Ngrade_wpa.wpa:

ctrl_interface=/var/run/wpa_supplicant
# By default, only root (group 0) may use wpa_cli
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

# WPA protected network, supply your own ESSID and WPAPSK here:
network={
scan_ssid=0
ssid="Ngrade_WPA"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk="TheSecretPassword"
}

Работать со скриптом просто:

  • wireless.sh start — запускает сеть, Причём скрипт самостоятельно ищет одну из описанных сетей, и подключает её.
  • wireless.sh stop — выгружает модуль.

По поводу stop, тут я еще не до конца разобрался что к чему, поэтому просто выгружаю модуль. Хотя, наверное надо сначала гасить интерфейс. Вообщем я еще поколдую над этим вопросом.

Multimedia клавиатуры в Linux

Решил заставить работать дополнительные кнопки на ноутбуке. После долгого перебора программ остановился на keytouch.
С программой поставляется большой набор уже описанных клавиатур. Также в поставке есть очень удобный редактор клавиатур, при помощи которого я и добавил все функциональные клавиши.
Единственно, что пришлось доставить в Slackware — это gnome-menu. Ну нет в Слаке Гнома по умолчанию 🙂

Все же Slackware

На ноутбуке остался жить Slackware 12.
Поставил SLED 10, обнаружились проблемы со звуком и Wi-Fi. Хваленый Ubuntu вообще не поставился, в режиме LiveCD грузится и работает, но при установке зависает. CentOS как рабочая станция мне не нравится.
Поскольку, в результате пришлось много делать руками, решил поставить самый приспособленный для этого дистрибутив — Slackware 12.

Кстати, поставил на него vmware server тот, который бесплатный. Обнаружил интересную фичу: он собака съедает под себя всю свободную память! Даже если я в настройках ограничиваю его 2Г, все равно ест сволочь все что можно. Правда в своп не лезет. Наверно создатели решили, что ОС выступает в роли платформы для запуска виртуалок и память ей не нужна 🙂 Надо будет посмотреть как ведет себя на vmware player.

Wi-Fi на моем DELL

Как всегда Linux со слишком новыми девайсами имеет небольшие проблемы. Мой Wi-Fi адаптер Intel 3945 стандартно в ядре не поддерживается. Но… но, все знают, что если чего то нет в ванилла ядре — это не значит, что этого нет в Интернет 🙂 Google рулит.

Нашел специализированный сайтик Intel® PRO/Wireless 3945ABG Driver for Linux. Там все было. Быстро скачал и настроил как рекомендовалось в документе INSTALL.

В файлике /etc/rc.d/rc.wireless.conf (да… я все таки поставил на ноут Slackware) прописал:

00:1B:77:*)
INFO=»Home net»
ESSID=»Ngrade»
MODE=»Managed»
KEY=»1a2b-abab-8901-a23c-cbcb-901a-ab [2] key open key [2]»
RTS=»2346″
FRAG=»2346″
;;

И вот сижу и пишу об этом через домашний Wi-Fi

Решение проблемы с модулем snd-hda-intel

Поставил на ноутбук Linux. Возникла проблема: не грузится модуль звуковой карты. Эта проблема не зависит от дистрибутива!
При загрузке модуль snd-hda-intel на ноутбуке DELL inspiron выдает сообщение об ошибке:
hda-intel: no codecs initialized

Решение проблемы.

Прийдется руками внести изменения в исходные коды ядра. У меня ядро 2.6.22, но думаю, что это поможет и в более старых версиях.

Ищем файл: /usr/src/linux-2.6.22/sound/pci/hda/patch_sigmatel.c

Ищем строку:
spec->num_pins = 8;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);

Ищем строку:
spec->num_pins = 8;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);

Ищем строку:
spec->num_pins = 10;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac922x_pin_nids);

Ищем строку:
spec->num_pins = 14;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac927x_pin_nids);

Ищем строку:
spec->num_pins = 14;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac9205_pin_nids);

Или все тоже самое в формате diff:

--- a/pci/hda/patch_sigmatel.c Thu Jul 05 13:10:51 2007 +0200
+++ b/pci/hda/patch_sigmatel.c Fri Jul 06 11:30:50 2007 +0200
@@ -1958,7 +1958,7 @@ static int patch_stac9200(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 8;
+ spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);
spec->pin_nids = stac9200_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS,
stac9200_models,
@@ -2008,7 +2008,7 @@ static int patch_stac925x(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 8;
+ spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);
spec->pin_nids = stac925x_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS,
stac925x_models,
@@ -2080,7 +2080,7 @@ static int patch_stac922x(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 10;
+ spec->num_pins = ARRAY_SIZE(stac922x_pin_nids);
spec->pin_nids = stac922x_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_922X_MODELS,
stac922x_models,
@@ -2181,7 +2181,7 @@ static int patch_stac927x(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 14;
+ spec->num_pins = ARRAY_SIZE(stac927x_pin_nids);
spec->pin_nids = stac927x_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_927X_MODELS,
stac927x_models,
@@ -2259,7 +2259,7 @@ static int patch_stac9205(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 14;
+ spec->num_pins = ARRAY_SIZE(stac9205_pin_nids);
spec->pin_nids = stac9205_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_9205_MODELS,
stac9205_models,

Пересобираем модуль. Звук работает.

Это… Vista

Вчера вечером супер Vista завалилась к чертям. То, что она делала с моим компьютером… эээ… я давно такого не наблюдал. И ЭТО они продают за деньги?
В 2 часа ночи я устал бороться с Вистой. Выключил комп, решил утром поставить Linux. Проснулся, включил Висту и… она скотина работает как будто ничего не случилось… Нифига дорогуша, в сад… сейчас я тебя снесу (злобно потирая руки). В приводе уже стоит SLED 10 SP1.

Бабье лето.

В комплексе Радио уже второй день не работает кондей (там централизированная система на все здание). Говорят, что был пожар и кондеи сгорели. На улице бабье лето, а за окном Рафшаны и Джамшуды дом строят. Закроешь окно — жарко, откроешь — ничего не слышно. Вот вам и обратная сторона луны. Все же лучше иметь маленький, но свой и ни от кого не зависеть.

Vista

На новом ноутбуке стоит предустановленная Vista Home Prerium. Я ожидал, что все будет плохо и мне прийдется ее снести и поставить ХР. Хмм… не снес. Удивительно но все работает и работает шустро. Конечно надо учитывать, что это новый комп, с 4Г памяти и двухголовым КореДуо 🙂
Все проги, которые я установил работают нормально. Новый интерфейс вполне достойный. Правда боковую панель от Микрософт я не запускаю, пользуюсь Google 🙂
Были проблемы с привыканием к новому расположению конфигурационных штучек, но этот этап пройден быстро.

Вообщем пока позитив. Но смущает цена и требования к железу… 🙁 Мне то Vista досталась в комплекте, а вот сам бы я ее не купил. На домашнем компе как стояла ХР, так и будет стоять 🙂

З.Ы. Я таки завалил висту 🙂 Между собой подрались vmware и антивирус 🙂 Виста ушла в ступор из которого ее вывела только кнопка reset. Надо будет сказать антивирусу, что бы он не проверял файлы виртуальной машины.

Ура! Я победил ASUS :)

Наконец то это свершилось! Я победил ASUS!

В начале весны 2007 года у меня сломался ноутбук. Я подробно описал всю историю хождения по мукам тут. Почитайте — это интересно.

Итак, я написал письмо с просьбой вернуть мне деньги и отнес его в компанию где покупал ноутбук — www.nexus.ru. Я пришел в отдел продаж, отдал письмо и попросил расписаться на моем экземпляре. Ух как они забегали 🙂 Не скажу, что мне были очень рады, но стоить отметить, что реакция была практически мгновенная.
Через 2 дня мне позвонил начальник их сервисного центра (очень вежливый человек). Сказал, что они подняли всю историю ремонта ноута в сервисных центрах компании ASUS. Что действительно странно, что мне 2 раза меняли матрицу. И в итоге сказал, что ASUS дал добро на окончательное решение их сервис центру (слава богу не АСК 🙂 ).
Меня попросили принести ноут в сервис центр, что бы удостовериться в наличии проблемы и в том, что я адекватно обращался с ноутом 🙂 Я привез, его смотрели в моем присутствии ровно 2 минуты и согласились с тем, что у меня таки действительно поломанный ноут! О чудо! Я, честно говоря, не надеялся на это и собирался нести ноут в независимую экспертизу.
Затем меня отвели в отдел продаж и предложили новый ноутбук на выбор, по цене моего старого ноута. Ух ты! Я обомлел! Ну и выбрал DELL inspiron 1720. Меня попросили привезти старый ноут со всем, что к нему шло в комплекте: диски, блок питания и т.д. Поскольку у меня все этого с собой не было, договорились что обмен состоится на следующий день.

Хех… вот сижу и пишу все это на новеньком DELL 🙂

Итак, что я понял из этой истории:

  1. Если вы хозяин оборудования компании ASUS. И, не дай бог, оно у вас сломалось. Не несите его в сервисный центр АСК сервис, там с большой вероятностью вам его доломают. Пользуйтесь сервисным центром компании NEXUS! Очень адекватные люди. Если не могут сделать, так и говорят — не можем, а не рассказывают вам какой вы лох и что так должно быть на самом деле.
  2. Если вы уверены, что вы правы — идите до конца. Почитайте закон о правах потребителя. Обязательно сходите на сайт http://www.ozpp.ru он мне очень помог.

Чего я добился в результате.
У меня теперь новый ноутбук, по своим параметрам превосходящий предыдущий.
Было: CoreDuo2 1.8, стало CoreDuo2 2.2 SantaRosa.
Было: ATI 1600, стало GForce 8600 GT
Было: 2Г памяти, стало 4Г
Было: Винт 80Г, стало 160Г
Ну и матрица: было 1440х900, стало 1920х1200

Вот так. Хеппи енд!!!

З.Ы. И самое главное — теперь ASUS у меня в черном списке, благодаря их сервисному центру АСК сервис. Удачи тебе ASUS.

Как же немцам не повезло :(

В Германии официально запретили копировать диски

Верхняя палата парламента Германии одобрила законопроект, согласно которому немцам запрещено делать копии любых дисков, CD и DVD, даже для домашнего использования. В действие новый закон вступит в 2008 году, сообщается на сайте Variety.com