특정 무선 네트워크에 연결 한 후 쉘 스크립트를 호출 할 수있는 방법이 있습니까? 내가 이것을하고 싶은 이유는 내가 그것을 사용하기 전에 네트워크에 로그인해야하고 가능한 경우 이것을 자동화하고 싶습니다.
이 질문을 읽었습니다 . 특정 무선 네트워크에 연결할 때마다 스크립트를 실행하는 방법이 있습니까?
그러나 upstart를 사용하여 수행하는 방법에 대해서는 확실하지 않습니다.
특정 무선 네트워크에 연결 한 후 쉘 스크립트를 호출 할 수있는 방법이 있습니까? 내가 이것을하고 싶은 이유는 내가 그것을 사용하기 전에 네트워크에 로그인해야하고 가능한 경우 이것을 자동화하고 싶습니다.
이 질문을 읽었습니다 . 특정 무선 네트워크에 연결할 때마다 스크립트를 실행하는 방법이 있습니까?
그러나 upstart를 사용하여 수행하는 방법에 대해서는 확실하지 않습니다.
답변:
이전 답변에 대한 사과는 몇 년 전의 방식이었습니다. 상황이 바뀐 것 같습니다.
/etc/NetworkManager/dispatcher.d/연결이 변경 될 때 (up, down, preup, predown) Network Manager는 디렉토리 (루트 소유, 실행 가능, 다른 사용자가 읽을 수없고 setuid가 아닌)의 모든 스크립트를 실행하는 것으로 나타났습니다. .
네트워크 관리자가 환경 변수를 설정하고이 스크립트에 전달합니다. CONNECTION_UUID 환경 변수 (고유 문자열 포함)에 관심이 있습니다.
따라서 문제를 해결하려면 (특정 무선 네트워크가 연결되어있을 때 스크립트를 실행하십시오) :
1) 관심있는 무선 연결의 UUID를 찾으십시오 ( /etc/NetworkManager/system-connections/디렉토리 의 적절한 연결 파일 내부를 보면 ).
2) 환경 변수 CONNECTION_UUID가 위의 (1)에서 무선 네트워크의 uuid와 일치하는 경우 원하는 것을 수행하는 bash (또는 perl, python 또는 기타) 스크립트를 작성하십시오.
3)이 스크립트를 넣고 /etc/NetworkManager/dispatcher.d/소유자와 권한을 적절하게 설정하십시오.
추가 읽기 : man networkmanager (그리고 위에서 언급 한 디렉토리의 스크립트 주위에 약간의 파킹).
예제 스크립트 :
#!/bin/bash
#####################################
# MounterBeast Script
# /etc/NetworkManager/dispatcher.d/02remotemount
# Copyright 2011 Nathan E. Williams
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Usage:
# This script must be customized for your configuration.
# By default, the script will attempt to mount a CIFS share
# when a specified MAC address is found at the network gateway,
# or over sshfs if the MAC address of the gateway is not the specified MAC.
# e.g. I mount over CIFS to the servers internal IP when at home, and
# over sshfs when away from home.
#
# id gateway mac without physically checking the sticker:
# $ arp -n -a $(ip route show 0.0.0.0/0 | awk '{print $3}') | awk '{print $4}'
#
# Testing:
# up) sudo /etc/NetworkManager/dispatcher.d/02remotemount wlan0 up
# down) sudo /etc/NetworkManager/dispatcher.d/02remotemount wlan0 down
#####################################
#
# Configuration:
#
targetmac='xx:xx:xx:xx:xx:xx'
mount_user='$USER'
mount_pass='pass'
internal_server_name='192.168.1.102'
external_server_name='my.dyndns.com'
share_name="music"
mount_point='/mnt/remote'
ssh_port='22'
#
# Should not need to edit below
#
gateway=$(ip route show 0.0.0.0/0 | awk '{print $3}')
mactest=$(arp -n -a $gateway | awk '{print $4}')
if [[ "$mactest" == "$targetmac" ]]
then
case "$2" in
up)
sleep 5
mount -t cifs -o username=$mount_user,password=$mount_pass //$internal_server_name/$share_name $mount_point
;;
down)
umount -l $mount_point
;;
esac
else
case "$2" in
up)
sleep 5
sshfs -p $ssh_port $external_server_name:$share_name $mount_point
;;
down)
umount -l $mount_point
;;
esac
fi
exit $?
/etc/NetworkManager/dispatcher.d/01ifupdown에서 스크립트를 실행/etc/networking/if-*
grep시스템 연결 파일을 사용했습니다. 잘 작동합니다. essid=$(grep -l "uuid=$CONNECTION_UUID" /etc/NetworkManager/system-connections/*)다음에 나오는 것이 essid=$(basename $essid)있습니다.
Network Manager를 사용하여 수행 할 수있는 방법이 있는지 모르겠지만, 아마도 하나는 있지만 다른 해결책이 있습니다. Wicd를 설치할 수 있습니다 :
sudo apt-get install wicd
Wicd는 gtk 인터페이스에서 직접 지원하여 연결할 수있는 모든 네트워크에 사전 스크립트 및 사후 스크립트 지원을 추가합니다. Wicd가 작동하기 위해 Network-Manager를 제거 (둘 다 충돌)하도록주의하십시오. 문제가 발생하면 Network-Manager의 .deb를 다운로드하거나 Live-CD / Live-USB를 가져와야합니다.
Wicd는 사용하기 쉽고 빠르게 연결할 수 있지만 VPN과 같은 Network-Manager의 일부 고급 기능이 없습니다. 다음은 스크린 샷입니다.

예, /etc/NetworkManager/dispatcher.d/NetworkManager 용 셸 스크립트 는 매우 좋습니다.
NetworkManager에는 더 재미 있고 복잡한 Dbus 방법도 있습니다 man nm-settings.
대한 네트워크 매니저의 남자 페이지에서 조개 인수의 이력서 dispatcher:
각 스크립트는 두 개의 인수를받습니다. 첫 번째는 방금 활성화 된 장치의 인터페이스 이름이고 두 번째는 동작입니다.
작동은 up, down, vpn-up, vpn-down, hostname, dhcp4-change, dhcp6-change 일 수 있습니다. (설명서 페이지 공개 : 2012 년 1 월 17 일)
네트워크 인터페이스가 끝난 후 OpenVPN을 다시 시작하는 매우 간단한 스크립트는 다음과 같습니다 up.
if [ "$2" = "up" ]; then
/etc/init.d/openvpn restart
fi
exit $?