Xin lỗi cho câu trả lời trước đây của tôi, đó là cách tôi sẽ làm nó từ nhiều năm trước. Có vẻ mọi thứ đã thay đổi.
Hóa ra Trình quản lý mạng chạy TẤT CẢ các tập lệnh trong /etc/NetworkManager/dispatcher.d/
thư mục (những sở hữu bởi root, có thể thực thi được, mà người dùng khác không thể đọc được và không được thiết lập), khi kết nối thay đổi (lên, xuống, trước, trước) .
Các biến môi trường được đặt và chuyển đến tập lệnh này bởi Trình quản lý mạng. Bạn sẽ quan tâm đến biến môi trường CONNMENT_UUID (chứa một chuỗi duy nhất).
Vì vậy, để giải quyết vấn đề của bạn (thực thi tập lệnh khi một mạng không dây cụ thể được kết nối với):
1) tìm ra uuid của kết nối không dây mà bạn quan tâm (bằng cách xem bên trong tệp kết nối thích hợp trong /etc/NetworkManager/system-connections/
thư mục).
2) viết tập lệnh bash (hoặc perl, hoặc python hoặc bất cứ thứ gì) làm những gì bạn muốn nếu biến môi trường CONNMENT_UUID khớp với uuid của mạng không dây ở (1) ở trên.
3) đặt tập lệnh này vào /etc/NetworkManager/dispatcher.d/
và thiết lập chủ sở hữu và quyền thích hợp.
đọc thêm: man Networkmanager (và một litte chọc quanh các tập lệnh trong các thư mục được đề cập ở trên).
Một kịch bản ví dụ:
#!/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 $?