LINUX.ORG.RU

Закрытие всех приложения и окон при условии

 , ,


0

1

Добрый день знатоки у меня linux mint как можно сделать так чтобы при отключении/удалении интернет соединения закрывались все или определенные приложения? А еще лучше как сделать чтобы все закрывалось при переходе на другой рабочий стол? Очень нужна Ваша помощь



Последнее исправление: pvl88 (всего исправлений: 1)

Подставь тэг «хочется странного».

Deleted
()

есть предположение что нужно использовать pkill. но что конкретно делать не знаю)

pvl88
() автор топика

при отключении/удалении интернет соединения

Ты соединение сам отключаешь? Если да, то смотри в сторону NetworkManager dispatcher.d, он может выполнять скрипт при отключении, а там уж прибивай что тебе надо.

gasinvein ★★★
()

man netstat

anonymous
()
Ответ на: комментарий от gasinvein

соединение отключаю сам нужно чтоб отрубался pidgin firefox torbrowser

pvl88
() автор топика

Для случая с отключением соединения можно написать простенький скрипт примерно такого содержания:

#!/bin/bash

if [ -z "$(/sbin/ifconfig | grep "inet.*addr.*Bcast:.*Mask:")" ];
  then
     for i in list of programs;
        do
           killall $i;
        done;
fi

И запускать его из crontab через каждые сколько-то минут/секунд.

Как то же самое сделать при переключении рабочих столов - не скажу. Наверно искать какую-то переменную окружения или что-то ещё, содержащее номер текущего рабочего стола (если таковая существует) и отлавливать её из скрипта, запущенного в кроне.

aureliano15 ★★
()
Ответ на: комментарий от pvl88

Есть каталог /etc/NetworkManager/dispatcher.d, в который можно помещать скрипты, которые будут выполняться при определённых событиях. Например, чтобы закрыть браузер Chromium при отелючении проводного соединения, можно использовать такой:

#!/bin/bash
DEVICE="$1"
COMMAND="$2"
case "$COMMAND" in
    down)
        test "$DEVICE" -eq "eth0" && killall -SIGTERM chromium
    *)
        exit 0
esac

gasinvein ★★★
()
Ответ на: комментарий от aureliano15

для меня это все очень сложно к сожалению подскажите пожалуйста что нужно делать для pidgin к примеру

pvl88
() автор топика
Ответ на: комментарий от gasinvein

pidgin firefox torbrowser одно приложение получилось вырубить. как сделать чтобы 3 вырубало? зарание большое спасибо!

pvl88
() автор топика
Ответ на: комментарий от pvl88

killall -SIGTERM pidgin firefox torbrowser, хотя можно сделать «красиво» и хранить список приложений в отдельном файле, типа

xargs killall < /etc/close-progs.txt

gasinvein ★★★
()
Ответ на: комментарий от gasinvein
#!/bin/bash
DEVICE="$1"
COMMAND="$2"
case "$COMMAND" in
    down)
        test "$DEVICE" -eq "eth0" && killall -SIGTERM pidgin firefox torbrowser
    *)
        exit 0
esac



не работает( может не eth0? как узнать?
pvl88
() автор топика
Ответ на: комментарий от gasinvein

не помогают эти два скрипта при удалении соединения приложения не вырубаются( я нуб. убейте меня

pvl88
() автор топика
Ответ на: комментарий от pvl88

Копипастим следующий код:

#!/bin/bash

if [ -z "$(/sbin/ifconfig | grep "inet.*addr.*Bcast:.*Mask:")" ];
  then
     for i in pidgin firefox torbrowser;
        do
           killall $i;
        done;
fi

и сохраняем его в домашний каталог (или в подкаталог bin домашнего каталога, или куда-то ещё) под именем kill_inet_progs.sh (имя может быть произвольным).

Открываем терминал (например konsole или xterm), переходим в нужный каталог (если это был домашний каталог, то никуда переходить не надо) и вводим команду

chmod a+x kill_inet_progs.sh

В этом же терминале вводим команду

crontab -e

В редакторе переходим в конец открывшегося файла.

В зависимости от того, какой редактор используется crontab'ом, либо нажимаем клавишу «a» для перехода в режим добавления текста (редактор vi), либо сразу вводим с новой строки (редактор nano):

* * * * * /bin/bash /home/user/kill_inet_progs.sh

где user - имя домашнего каталога текущего пользователя, обычно совпадает с логином.

Дальше в редакторе vi нажимаем ESC и ":qw". В nano: ctrl+o и ctrl+x. Если всё верно, то попадаем обратно в командную строку. Иначе crontab спросит:

errors in crontab file, can't install. Do you want to retry the same edit? (y/n)

или что-то вроде этого. Отвечаем y, возвращаемся и исправляем ошибку. Дальше - см. выше.

Вариант

* * * * * /bin/bash /путь/имя_скрипта

запускает указанный скрипт каждую минуту. Чтоб запускать его раз в 5 минут, надо написать

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/bash /путь/имя_скрипта

и т. д.

aureliano15 ★★
()
Ответ на: комментарий от gasinvein
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 14:dd:a9:13:aa:df brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 28:c2:dd:59:c3:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.136/24 brd 192.168.0.255 scope global dynamic wlp3s0
       valid_lft 86386sec preferred_lft 86386sec
    inet6 fe80::2a7:2b91:2144:222b/64 scope link 
       valid_lft forever preferred_lft forever

какое из них вифи? я пробовал все три

pvl88
() автор топика
Ответ на: комментарий от pvl88

Это я точки с запятыми в case забыл. Вот правильный вариант:

#!/bin/bash
DEVICE="$1"
COMMAND="$2"
case "$COMMAND" in
    down)
        test "$DEVICE" -eq "wlp3s0" && killall -SIGTERM pidgin firefox torbrowser
    ;;
    *)
        exit 0
    ;;
esac
Скрипт должен быть исполняемый, т.е. после сохранения выполни chmod +x /etc/NetworkManager/dispatcher.d/killprogs или как-ты-его-назвал.

gasinvein ★★★
()
Последнее исправление: gasinvein (всего исправлений: 1)
Ответ на: комментарий от pvl88
#!/bin/bash
DEVICE="$1"
COMMAND="$2"
case "$COMMAND" in
    down)
        if [ "$DEVICE" = "wlp3s0" ]; then
            killall -SIGTERM pidgin firefox torbrowser
        fi
    ;;
    *)
        exit 0
    ;;
esac

(сейчас кто-то напишет, что я не знаю баш, и будет в значительной степени прав)

gasinvein ★★★
()
Последнее исправление: gasinvein (всего исправлений: 1)
Ответ на: комментарий от gasinvein

Спасибо огромное! Теперь все работает! Не знаю, что ты там не знаешь. Но все работает. Респект тебе Человечище

pvl88
() автор топика
21 сентября 2017 г.
Ответ на: комментарий от gasinvein

работает в mint не работает в lubuntu

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

pvl88
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.