В общем, я являюсь счастливым обладателем ноута Toshiba Satellite M100 - 233, в котором включение/выключение Wi-Fi адаптера осуществляется "железной" кнопкой - переключателем. В то же время ноут я использую как на работе, так и дома. На работе ноут цепляется к проводной сети, со статическим IP и шлюзом 192.168.0.3. Дома же, у меня стоит Wi-Fi роутер, который раздает инет по DHCP и имеет адрес 192.168.0.1. При этом, когда я приношу ноут домой, Nework Manager далеко не с первой попытки цепляет Wi-Fi. Таким образом, возникла у меня идея во-первых отрубить Network Manager, а во-вторых осуществить переключение сетевых профилей дом/работа по состоянию переключателя Wi-Fi. Т.е. когда Wi-Fi включен - компьютер должен игнорировать проводной интерфейс и соединяться с беспроводным, а когда Wi-Fi выключен - наоборот.
Проверка состояния переключателя осуществляется так:
cat /sys/bus/pci/drivers/ipw3945/*/rf_kill
Где ipw3945 - Intel Pro Wireles 3945 - модель моего wi-fi адаптера.
Приведенная команда может выдать 4 результата:
0 = RF kill not enabled (radio on) - т.е. выключатель адаптера не включен, т.е. wi-fi включен.
1 = SW based RF kill active (radio off) - т.е. адаптер выключен програмно, wi-fi выключен.
2 = HW based RF kill active (radio off) - т.е. адаптер выключен на уровне железа, wi-fi выключен. (как раз мой случай).
3 = Both HW and SW RF kill active (radio off) - т.е. адаптер выключен и програмно и железно, wi-fi выключен.
Инфу о переключателе нашел
тут.Соответственно, можно создать скрипт, который проверял-бы при загрузке состояние переключателя и в зависимости от его положения грузил-бы тот или иной конфиг.
Что я собственно и сделал:
1. Выключил NM. (tnx 2 Malamut

)
2. Написал скритик netinit:
#! /bin/sh
#
# Если включен Wi-Fi...
wifi_enable()
{
# Путь до файла interfaces
IFACES="/etc/network/interfaces"
# Путь до файла resolv.conf
RESOLV="/etc/resolv.conf"
# Путь до файла conky.rc
CONKY="/home/madkox/.conkyrc"
CONKYS_GOOD="/home/madkox/.conkys/wifi_good"
CONKYS_BAD="/home/madkox/.conkys/wifi_bad"
# Роутер
ROUTA="192.168.0.1"
# Интерфейс
INT="eth1"
# Имя точки доступа
SSID="MYSSID"
# Пароль
PASS="superstrongwifissidwpa2passwordyoucouldneverguess"
# Настраиваем интерфейс.
echo "auto lo" > $IFACES
echo "iface lo inet loopback" >> $IFACES
echo >> $IFACES
echo >> $IFACES
echo "iface "$INT" inet dhcp" >> $IFACES
echo "gateway "$ROUTA >> $IFACES
echo "wpa-ap-scan 1" >> $IFACES
echo "wpa-pairwise CCMP" >> $IFACES
echo "wpa-group CCMP" >> $IFACES
echo "wpa-psk "$PASS >> $IFACES
echo "wpa-driver wext" >> $IFACES
echo "wpa-key-mgmt WPA-PSK" >> $IFACES
echo "wpa-proto WPA2" >> $IFACES
echo "wpa-ssid "$SSID >> $IFACES
echo "auto "$INT >> $IFACES
# Настраиваем DNS.
echo "nameserver "$ROUTA > $RESOLV
# Поднимаем сеть.
/etc/init.d/networking stop
sleep 10
/etc/init.d/networking start
# Убиваем Ethernet
ifconfig eth0 down
# Настраиваем маршруты
route del default
route add default gw $ROUTA
# Проверяем, запустилась ли.
ping $ROUTA -c 1
if [ $? = 0 ]
then
PINGOK="0"
else
PINGOK="1"
fi
# Настраиваем conky.
if [ $PINGOK = 0 ]
then
cp $CONKYS_GOOD $CONKY
else
cp $CONKYS_BAD $CONKY
fi
}
# Если выключен Wi-Fi...
ethernet_enable()
{
# Путь до файла interfaces
IFACES="/etc/network/interfaces"
# Путь до файла resolv.conf
RESOLV="/etc/resolv.conf"
# Путь до файла conkyrc
CONKY="/home/madkox/.conkyrc"
CONKYS_GOOD="/home/madkox/.conkys/eth_good"
CONKYS_BAD="/home/madkox/.conkys/eth_bad"
# Роутер
ROUTA="192.168.0.3"
# Интерфейс
INT="eth0"
# IP адрес.
IP="192.168.0.5"
# Маска подсети.
SM="255.255.255.0"
# Настраиваем интерфейс.
echo "auto lo" > $IFACES
echo "iface lo inet loopback" >> $IFACES
echo >> $IFACES
echo >> $IFACES
echo "iface "$INT" inet static" >> $IFACES
echo "address "$IP >> $IFACES
echo "netmask "$SM >> $IFACES
echo "gateway "$ROUTA >> $IFACES
echo "auto "$INT >> $IFACES
# Настраиваем DNS.
echo "nameserver "$ROUTA > $RESOLV
# Поднимаем сеть.
/etc/init.d/networking stop
sleep 10
/etc/init.d/networking start
# Убиваем Wi-Fi
ifconfig eth1 down
# Настраиваем маршруты
route del default
route add default gw $ROUTA
# Проверяем, запустилась ли.
ping $ROUTA -c 1
if [ $? = 0 ]
then
PINGOK="0"
else
PINGOK="1"
fi
# Настраиваем conky.
if [ $PINGOK = 0 ]
then
cp $CONKYS_GOOD $CONKY
else
cp $CONKYS_BAD $CONKY
fi
}
# Проверка Wi-Fi переключателя.
SWITCH=`cat /sys/bus/pci/drivers/ipw3945/*/rf_kill`
if [ $SWITCH = 0 ]
then
wifi_enable
else
ethernet_enable
fi
exit 0
(Wi-Fi настраивал по
этому мануалу.)
3. Переписал скрипт в /etc/init.d
sudo cp /home/madkox/netinit /etc/init.d/netinit
4. Сделал его исполняемым
sudo chmod +x /etc/init.d/netinit
5. "Повесил" его запускаться последним
sudo update-rc.d netinit defaults 99
6. Создал 4 разных конфига для conky и сложил в ~/.conkys/
Конфиги сделал так:
Один конфиг загружается, если wifi нормально поднялась, показывает статусы сети, погоду.
Второй конфиг загружается, если wifi переключателем включена, но не работает. Он показывает что включен режим wifi, но подключения в SSID нет.
Третий конфиг грузится, если wifi выключен, а проводная сеть нормально поднялась - он также показывает статусы сети и погоду.
Четвертый конфиг грузится, если wifi выключен, проводная сеть не поднялась. Он, как и во втором случае говорит, что wifi выключен, а сети нет.
7. Потестил настройки поочередно перезагружаясь в разных режимах.
Собственно все

Осталось только добавить, что подобные переключатели есть у многих ноутов различных производителей. Легко проверить отражает ли rf_kill работу переключателя или нет так:
1. Перейти в консоль - CTRL+ALT+F1
2. Набрать свои логин/пароль.
3. Подергать переключатель туда-сюда, должно появиться что-то типа
ipw3945 Radio Frequency Kill Switch is On:
ЗЫ система Ubuntu 7.10, но по идее (см. ссылки) должно работать и в 8.04.
UPD:
Вот, как это выглядит - режим работы с проводной сетью (типа на работе).