Как запустить простой скрипт Zenity после отключения от WiFi?

Я использую Kubuntu 12.10 64bit. Я пытаюсь заставить скрипт bash выполняться, когда я отключен от сети. Я создал файл в папке /etc/network/if-down.d/ с именем test, который имеет одну строку:

zenity --info --text="network down!"

Я могу выполнить этот скрипт без каких-либо проблем; набрав /etc/network/if-down.d/test в моем терминале, появится всплывающее окно с сообщением «сеть отключена!». Когда я отключаюсь от своей сети Wi-Fi через сетевой менеджер, ничего не происходит. Отключение моего Wi-Fi USB-ключа также не приводит к появлению окна сообщения. Мое единственное предположение, что по какой-либо причине сценарии в /etc/network/if-down.d/ не выполняются. Добавление #!/bin/bash в качестве первой строки также не сработало.


РЕДАКТИРОВАТЬ: 2013-01-02

У меня были некоторые проблемы с использованием ответа gertvdijk (старые изменения и комментарии перепутаны), которые теперь разбираются. Запуск zenity с su и DISPLAY=:0 решил мою проблему.

3
задан 3 January 2013 в 07:18

3 ответа

Если вы используете Network Manager (в отличие от файла командной строки /etc/network/interfaces), вам следует вместо этого использовать диспетчерские сценарии Network Manager.

Просто поместите ваш скрипт в каталог /etc/NetworkManager/dispatcher.d/, аналогично подходу if-down.d. Сценарии с диспетчерскими сценариями Network Manager довольно просты, и я предлагаю прочитать этот (базовый) пример на основе Arch Wiki :

#!/bin/sh

INTERFACE=$1  # The interface which is brought up or down
STATUS=$2     # The new state of the interface
USERNAME=gert # ENTER YOUR USERNAME HERE

case "$STATUS" in
    'up') # $INTERFACE is up
    # you could do something here...
    ;;
    'down') # $INTERFACE is down
    # Check for other active interfaces and only act on all down
    if [ ! `nm-tool|grep State|cut -f2 -d' '` = "connected" ]; then
        /bin/su -l ${USERNAME} -c 'DISPLAY=:0 /usr/bin/zenity --info --text="all network interfaces down"'
    fi
    ;;
esac

. этот ответ .

И обязательно перезапустите Network Manager, чтобы продолжить работу с этим новым сценарием.

sudo service network-manager restart
0
ответ дан 3 January 2013 в 07:18

Я попробовал это (10.04) и у меня та же проблема. Похоже, что скрипт не знает, на каком дисплее выводить диалог.

Попробуйте заменить свою строку на:

DISPLAY=0:0 zenity --info --text="network down!"

(Если у вас есть несколько дисплеев, вам может потребоваться что-то более тонкое.)

0
ответ дан 3 January 2013 в 07:18

Другие ответы являются большими - вероятно, еще лучше, чем этот, но, как обычно, существует другой способ сделать это - на этот раз, не нуждаясь в системных утилитах или поднятых полномочиях (sudo).

Мой системный kubuntu 12.04 выполнений, таким образом, этот код будет, вероятно, работать над Вашей системой. Это должно также работать над гномом 2.x также за исключением того, что сценарий автоматического запуска входит в другое место.

У меня была подобная проблема, где я хотел знать, когда мой компьютер пошел офлайн (потому что мой ноутбук, кажется, иногда делает это путем отключения Wi-Fi отдельно, и я часто не замечал небольшой красный x в панели задач.)

Что я сделал должен был добавить маленький (исполняемый) сценарий к ~/.kde/Autostart каталог, который запускает мой основной скрипт каждый раз, когда KDE запускается (это заботится о нем имеющий дисплей и клавиатуру для использования):

#!/bin/bash
if [ -x "$HOME/bin/offline_alert" ] ; then
  offline_alert & 
fi

Основной сценарий, offline_alert, тесты, чтобы видеть, использую ли я офлайн ping с несколькими повторениями для предотвращения ложных аварийных сигналов и затем генерирую всплывающее окно с помощью yad (то же как zenity, только улучшенный путь!) и игры звук. Промежуточное тестирование на изменения в онлайн-статусе, это спит так, это не использует слишком много ресурсов.

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

Код, который тестирует на офлайновый, находится в "офлайновой" функции, таким образом, это может легко быть изменено, не влияя на остальную часть сценария.

Изображения, значки и звук, который это использует, трудно кодируются, таким образом, необходимо было бы заменить собственным. Я нашел прохладный Wi-Fi офлайновым значком в сети.

Это создает файл журнала, который Вы можете или не можете хотеть.

Сценарий является установкой для использования уведомлений, но код комментируется, потому что уведомления ушли слишком быстро и казались большим количеством неприятности, чем справка.

Это - просто другой способ сделать это, и возможно кто-то найдет код полезным.

Joe

0
ответ дан 3 January 2013 в 07:18

Другие вопросы по тегам:

Похожие вопросы: