Я устанавливал интернет-соединение на ноуте Roverbook Voyager FT6, оснащенном модемом Smart Link. Установил туда Mandrake 10.1 и официальный драйвер slmodem-2.9.10 с сайта Smart Link. Загрузил slamr и запустил /usr/sbin/slmodemd --country=RUSSIA /dev/ttySL0. В результате файлу ttySL0 сопоставлено устройство, и на этот файл ссылается /dev/modem (последнее было сделано отдельно для kppp - в readme к драйверу сказано, что без этого kppp нормально работать не будет, но я проверил и разницы не заметил). Запустил kppp, настроил соединение, опросил модем и попробовал подключиться. Первое, что заметил, - это отключение управления во время дозвона (не работают ни мышь, ни клава). После дозвона и "разговора" с другим модемом на экране появилось NO CARRIER и вновь включилось управление. Я попробовал использовать встроенный в mdk дозвонщик, но он стал звонить в тоновом режиме. Изменить это в drakconf нельзя. Но я нашел файл /etc/sysconfig/...-script/..., где прописан дозвон ATDT, что было изменено. Воспользовавшись еще раз этим дозвонщиком, я вновь потерял управление (в тоновом режиме в предыдущей попытке тоже был этот эффект, причем избавиться от него удалось лишь судорожными нажатиями alt-ctrl-backspace). Когда оно вернулось, вроде ничего не изменилось. При пользовании этим дозвонщиком ведется запись в messages, где я обнаружил все тот же NO CARRIER.
Да, еще я автоматизировал загрузку модема, перегнав пример скрипта из архива в /etc/rc.d/init.d и заменив там страну на RUSSIA. В результате после перезагрузки запустился лишь slamr, а slmodemd - нет. Я попробовал напрямую указать путь к программе - не помогло, тогда я прописал ее в /etc/rc.d/rc.local. Это исправило положение.
В общем, у меня 3 вопроса: почему отключается управление при дозвоне и нельзя ли с этим справиться; NO CARRIER при дозвоне - откуда и как с этим бороться; как переписать скрипт, чтобы не пользоваться rc.local. Последний вопрос волнует меньше всего. Вот так выглядит файл примера скрипта для Mandrake:
#!/bin/sh
#
# slmodemd: Starts the SmartLink Modem Daemon
#
# chkconfig: 345 90 10
# description: SmartLink Modem : Autoload slarm + slmodem
# processname: slmodemd
# config: /etc/sysconfig/slmodem
# Source function library.
. /etc/init.d/functions
prog=slmodemd
RETVAL=0
# Default configuration
SLMODEMD_DEVICE=slamr0
SLMODEMD_COUNTRY=ITALY
# Source configuration
CONFIG=/etc/sysconfig/$prog
if [ -f $CONFIG ]; then
. $CONFIG
fi
# uncomment this if you want this feature (if necessary edit module pattern):
# do not try to start on a kernel which does not support it
# grep -q 'slamr\.o' /lib/modules/`uname -r`/modules.dep || exit 0
start() {
cat /proc/modules | grep 'slamr' >/dev/null || {
echo -n "Loading SmartLink Modem driver into kernel ... "
modprobe slamr && echo "done." || {
echo "failed."
exit -1
}
}
echo -n "Starting SmartLink Modem driver for $SLMODEMD_DEVICE: "
# if you want ALSA comment next line and uncomment last
$prog </dev/null >/dev/null 2>/dev/null --country=$SLMODEMD_COUNTRY /dev/$SLMODEMD_DEVICE &
# $prog </dev/null >/dev/null 2>/dev/null --country=$SLMODEMD_COUNTRY --alsa /dev/$SLMODEMD_DEVICE &
RETVAL=$?
[ $RETVAL -eq 0 ] && success $"$prog startup" || failure $"$prog startup"
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
stop() {
echo -n "Shutting down SmartLink Modem driver: "
killproc $prog
RETVAL=$?
modprobe -r slamr slusb
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
RETVAL=$?
fi
;;
*)
echo "*** Usage: $prog {start|stop|status|restart|condrestart}"
exit 1
esac
exit $RETVAL