Как выяснилось, косорез с моим сервисом, из-за моих кривых рук. Устаканивание привело к варианту Speccyfighter. Кратко: работает. Все свелось к созданию init-файлу. Никаких добавлений больше не потребовалось.
Размышления о wicd:
Убийство процесса wicd-daemon.py и его дочернего процесса monitor.py не рушат соединение, но после убийства не позволено редактировать соединение.
Как это работает?
В листинге init-файла wicd (который есть слакварный init-файл),
https://bugzilla.altlinux.org/show_bug.cgi?id=31181#c4
нужно слегка поправить секцию wicd_force_stop, - т.е. добавить к kill сигнал 9, чтобы процессы гарантированно умерли, приведя секцию к виду:
wicd_force_stop() {
echo "Stopping wicd daemon..."
if [ -e $PIDFILE ]; then
kill -9 $(cat $PIDFILE) 2>/dev/null
rm -f $PIDFILE 2>/dev/null
else
pkill -f python.*wicd-daemon.py 2>/dev/null
fi
}
Процессы после нормального старта
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
9041 root wpa_supplicant -B -i eth1 -c /var/lib/wicd/configurations/f4ec38fc6592 -Dwext
9352 user /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py --tray
9491 root /usr/bin/python -O /usr/share/wicd/daemon/wicd-daemon.py
9505 root /usr/bin/python -O /usr/share/wicd/daemon/monitor.py
9520 root grep --color=auto wicd
Остановить демон wicd - убить демон + его дочерний процесс monitor.py
# /etc/init.d/wicd force_stop
Stopping wicd daemon...
Убьётся и pid-файл
# cat /var/run/wicd.pid
cat: /var/run/wicd.pid: Нет такого файла или каталога
Процессы после /etc/init.d/wicd force_stop
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
9041 root wpa_supplicant -B -i eth1 -c /var/lib/wicd/configurations/f4ec38fc6592 -Dwext
9352 user /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py --tray
9568 root grep --color=auto wicd
После force_stop демона, сетевое соединение не разрывается, но редактирование сетевых соединений невозможно
# ping -c1 mail.ru
PING mail.ru (217.69.139.202) 56(84) bytes of data.
64 bytes from mail.ru (217.69.139.202): icmp_req=1 ttl=54 time=38.7 ms
После force_stop демона, pid-файл уничтожается
# cat /var/run/wicd.pid
cat: /var/run/wicd.pid: Нет такого файла или каталога
После '/etc/init.d/wicd force_stop' можно стартануть демон снова
# /etc/init.d/wicd start
Starting wicd daemon: /usr/sbin/wicd &
# cat /var/run/wicd.pid
9580
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
9041 root wpa_supplicant -B -i eth1 -c /var/lib/wicd/configurations/f4ec38fc6592 -Dwext
9352 user /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py --tray
9580 root /usr/bin/python -O /usr/share/wicd/daemon/wicd-daemon.py
9594 root /usr/bin/python -O /usr/share/wicd/daemon/monitor.py
9612 root grep --color=auto wicd
Если сетевое соединение до этого было установлено, оно продолжает работать.
# ping -c1 mail.ru
PING mail.ru (217.69.139.200) 56(84) bytes of data.
64 bytes from cp.mail.ru (217.69.139.200): icmp_req=1 ttl=54 time=49.5 ms
В init-файле по линку, секцию wicd_force_stop можно изменить и до такого состояния добавив первой командой убить демон
wicd_force_stop() {
echo "Stopping wicd daemon..."
if [ -e $PIDFILE ]; then
$DAEMON -k
kill -9 $(cat $PIDFILE) 2>/dev/null
rm -f $PIDFILE 2>/dev/null
else
pkill -f python.*wicd-daemon.py 2>/dev/null
fi
}
Тогда можно получить:
Исходное состояние wicd в GUI-сессии
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
15654 user /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py --tray
15769 root /usr/bin/python -O /usr/share/wicd/daemon/wicd-daemon.py
15783 root /usr/bin/python -O /usr/share/wicd/daemon/monitor.py
15824 root wpa_supplicant -B -i eth1 -c /var/lib/wicd/configurations/f4ec38fc6592 -Dwext
26768 root grep --color=auto wicd
Выполняем полную остановку демона
# /etc/init.d/wicd force_stop
Stopping wicd daemon...
с убийством всех процессов кроме процесса клиента
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
15654 user /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py --tray
26844 root grep --color=auto wicd
и уничтожением pid-файла
# cat /var/run/wicd.pid
cat: /var/run/wicd.pid: Нет такого файла или каталога
В этот момент аплет wicd в трее лучше всего не трогать, иначе он вылетит с выводом сообщения в окно
Error connecting to wicd service via D-Bus.
Please ensure the wicd service is running.
Перед повторным запуском аплета, вас просят запустить сначала сервис wicd.
После остановки через force_stop, если и клиент вылетел, демон убит, процессы сервиса убиты
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
26851 root grep --color=auto wicd
Запускаем сервис wicd
# /etc/init.d/wicd start
Starting wicd daemon: /usr/sbin/wicd &
pid-файл создан
# cat /var/run/wicd.pid
26859
Если на первом старте wicd вы уже настроили сетевое соединение, то после запуска сервиса, GUI-аплет wicd, не очень-то и нужен
# ps -eo pid,user,args|grep wicd
7536 root mcedit /etc/rc.d/init.d/wicd
26859 root /usr/bin/python -O /usr/share/wicd/daemon/wicd-daemon.py
26873 root /usr/bin/python -O /usr/share/wicd/daemon/monitor.py
26913 root wpa_supplicant -B -i eth1 -c /var/lib/wicd/configurations/f4ec38fc6592 -Dwext
27022 root grep --color=auto wicd
# ping -c1 mail.ru
PING mail.ru (94.100.180.200) 56(84) bytes of data.
64 bytes from cp.mail.ru (94.100.180.200): icmp_req=1 ttl=54 time=37.7 ms
потому, что
управлять сетевым соединением можно и из командной строки.
Вы о ней вспомните, если по неизвестной причине у вас рухнут Х-сы.
Список настроенных беспроводных соединений
$ wicd-cli -y -l
# BSSID Channel ESSID
0 XX:XX:XX:XX:XX:XX 4 Wirenet
0 - номер сети (запомните его, будем использовать её)
Подробности по беспроводной сети 0
$ wicd-cli -y -d -n 0
Статус беспроводных соединений
$ wicd-cli -y -i
Connection status: Нет соединения
Поднять беспроводное соединение сети 0
$ wicd-cli -y -c -n 0
Connecting to Wirenet with wpa on eth1
done!
Посмотреть статус беспроводного сетевого соединения 0
$ wicd-cli -y -i -n 0
Connection status: Соединение установлено
Connection type: Wireless
Подключён к Wirenet (сигнал: 26%, IP: 192.168.1.213)
Network ID: 0
Разорвать беспроводное соединение 0
$ wicd-cli -y -x -n 0
Disconnecting from Wirenet on eth1
Посмотреть статус беспроводных соединений
$ wicd-cli -y -i
Connection status: Нет соединения
help соответственно
$ wicd-cli -h
Usage: wicd-cli.py [options]
Options:
-h, --help show this help message and exit
-n NETWORK, --network=NETWORK
-p NETWORK_PROPERTY, --network-property=NETWORK_PROPERTY
-s SET_TO, --set-to=SET_TO
-m NAME, --name=NAME
-S, --scan
-w, --save
-l, --list-networks
-d, --network-details
-x, --disconnect
-c, --connect
-e, --list-encryption-types
-y, --wireless
-z, --wired
-o, --load-profile
-i, --status
[wilder@host-nx ~]$ wicd-cli -n eth1
Usage: wicd-cli.py [options]
Но абсолютно то же, т.е.
управлять сетевыми соединениями можно и
из GUI-аплета, щёлкнув двойным кликом в GUI-командере по файлу
/etc/xdg/autostart/wicd-tray.desktop
GUI-аплет запустится и сядет в трей.
Файл вызова окна настроек
/usr/share/applications/wicd.desktop
Опция в меню делает то же.
Листинги инитов разных Линукс, онлайном можно просмотреть здесь
http://bazaar.launchpad.net/~wicd-devel/wicd/experimental/files/head:/in/(Дальше?, - поживём-увидим)