Проблемка казалось бы локальная, но решена комплексно. Посему выступать пришел в "Администрирование".
Имеется ноут, одна штука. Также имелось желание быть онлайн как можно в более количестве мест. По проводному и вайфаю с задачей вполне себе справляется wicd. Для большего существуют пресловутые два свистка: Yota LITE LTE LU150 и Skylink ADU-310A. Хотелось не судорожно вводить консольные команды и втыкать-перетыкать, а делать как у мачехи-винды: сунуть, ткнуть кнопсу, радоваться. А тут, в гудок гуди, в свисток - свисти, и смотри не перепутай.
Готовых решений не нашел. NetworkManager отпал - не могу с ним глюкать еще со времен третьего альта. На сайте wicd большое количество букв о том, как плохо, что нельзя сейчас, и как хорошо будет потом. Количество превышает объем иходного кода в разы. И значит на грязной волосатой коленке был сооружен сабж. Дешево и сердито.
На первом этапе озаботился процессом втыкания-вытыкания. Поиск в сети выдал в основном многочисленные сеансы столоверчения с уже написанными кем-то рулесами для udev. Основная мантра звучит: ищите ID своих устройств и подставляйте в эти рулезные рулесы. Учитывая судорожное развитие самой udev, чисто шаманские пляски в натуре.
Позрил в корень командой udevadm monitor --env, и все стало хорошо. Может и неправильно с точки зрения высоких сфер, но работает. Особенность была в ключике --env, который нашелся почему-то не в man-е, а в гугле.
Рулезные файлики в тарбол положил на оба свистка, но обладая сокровенным ключиком, можно их десятками делать.
В результате вставляния-вынимания под рутом стартует врапер с параметрами. О врапере позже - на третьем этапе.
Второй этап состоял в унификации конекта/дисконекта. Если написано openrc, то пусть оно и пашет универсально. Т.е. /etc/init.d/net.* <start|stop>
Фрагмент /etc/conf.d/net привожу:
Код: Выделить всё
#-----------------------------------------------------------------------------
# eth3 -> Yota
config_eth3="static"
config_eth3="10.0.0.10/24"
routes_eth3="default via 10.0.0.1"
dns_domain_eth3="dimbor.ru"
dns_servers_eth3="10.0.0.1"
#config_eth3="dhcp"
#preup() {
# if [[ ${IFACE} == "eth3" ]] ; then
# rm -f /var/lib/dhcpcd/dhcpcd-eth3.lease
# fi
#}
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# ppp0 SkyLink
config_ppp0="ppp"
link_ppp0="/dev/ttyUSB0"
plugins_ppp0=""
username_ppp0='mobile'
password_ppp0='internet'
phone_number_ppp0="#777"
pppd_ppp0="
debug
460800
mru 1400
mtu 1400
modem
defaultroute
ipcp-accept-local
lcp-echo-interval 20
lcp-echo-failure 6
usepeerdns
nopcomp
noauth
noaccomp
noccp
connect '/usr/sbin/chat -v -f /etc/ppp/cdma.chat'
disconnect '/usr/sbin/chat -v -f /etc/ppp/cdma-disconnect.chat'
"
#chat_ppp0="
#'' 'ATZ'
#'OK' 'ATE1Q0X1V1&C2S0=0'
#'OK' 'AT+IPR=230400'
#'OK' 'AT+CRM=2'
#'OK' 'AT+CTA=20'
#'OK' 'AT+CQD=0'
#'OK' 'AT+CSQ?'
#'OK' 'AT+CSS?'
#'OK' 'ATDT\T'
#'CONNECT' ''
#"С Йота все относительно просто. Единственно, делать лучше статику - быстрее <подключается>. А если желать dhcp (закомменчено), надо уважать, что rebind оно не хочет - всегда все с начала.
Скаевский свисток выпил много крови. Изначально поднималось только через wvdial. И когда запустилось под openrc, мне уже давно выдавалась страница 666:"Гугл устал! - Ты его заколебал!"
Встроенный чат-скрипт закомменчен - используются внешние (в тарболе). Вот мне кто-нибудь расскажет, как с помощью внутреннего послать команду 'AT$QCDMR=115200', - можно будет раскомментить.
Но самая задница была в невозможности повторного поднятия из-за игнорирования +++ при предыдущем отключении.
Ты ему ATZ, а он в ответ поток от неоконченной прошлой сессии, да еще за твои деньги.
Меж тем, добрый БСД-шник еще в 2009-ом говорил, но его мало кто услышал. Все дело, как я пол, в важности 'AT+CRM=2' при инициализации.
Ну а любителям быстро кататься наверное поможет этот документ.
Теперь можно приступать к последней части мерлезонского балета. Учету и контролю. Изначально все было сделано на скриптах. Идея была при device add рожать иконку на десктопе, при remove - убивать. По иконке запускать скрипт, который в зависимости от состояния сетевого интерфейса дергал бы его через sudo за start или stop. Все накрылось готовой продукцией, когда меня дернуло индицировать статус интерфейса посредством гномовской эмблемы. Она прекрасно устанавливается двумя способами: dbus-send и gvfs-set-attribute. Да вот только, блин, ее не видно. Видно при рекомендуемом killall nautilus. И моргание всем экраном вызывает ощущение отсчета секунд "до полуночи". Нет бы просто успокоиться, запустил dbus-monitor, узрел структуру нехренической вложенности для перерсовки 1 (одной) иконки.
Посмотрел исходники утилит и решил, что пропатчить их в принципе можно. Потом глянул в код наутилуса и gvfs, и сильно прибавилось сомнений, что это именно та структура. Зато теперь уверен: процесс написания гнома - еще то религиозное таинство. Гномописатели же регулярно посещают врачей-мозговедов, а те им дают вещества. И прикиньте, стоит эта компания, такая вся в белом, а я к ним с топором зашел. Облом, однако.
Значит сел очередной раз писать свою первую программу на Си, которая опять получилась из одной копи-пасты. По счастью, не перевелись еще люди, производящие простые решения, да еще и рассказывающие о них. Плюс к этому оказалось, что openrc имеет какой-никакой API, т.е. статус интерфейса видно.
Получившийся простой как мычание микродемон запускается при add device, чинит суицид при remove. Висит в трее, показывает статус, интервал проверки можно задать при запуске (см.врапер). А если его стукнуть, он станет фиолетовый ©. - По любому клику пытается сменить статус на противоположный, путем возбуждения непосредственно /etc/init.d/net.* Понятно, что функционирует из под рута. Упомянутый врапер нужен, чтобы втереться в доверие пользовательскому трею. Пардон, это называется gnome-panel.
В свистки свистеть одним кликом - самое то. Подозреваю, что другие интерфейсы тоже пасти сможет таким же манером.
Мне стыдно, но даже без Makefile - скриптом собирается. Тарбол с исходниками, требухой и конфигами прилагаю.
Предполагаемое ТУДУ:
- балон с именем подключения (с другой стороны - свистки очень трудно перепутать), айпи и пр.
- диалог "Are you sure?" при опущении.
- блэкджек и монахини??? - предлагайте.
Итого хотелось бы: услышать взвешенную критику, предложения по улучшению, получить много денег, вина и женщин.
Хотя ладно, деньги и женщин - давайте! Аргументированные предложения пойти и убиться об стену будут приняты по понятным причинам конечное количество раз.