वायरलेस नेटवर्क से कनेक्ट होने के बाद कॉल स्क्रिप्ट


14

क्या एक विशिष्ट वायरलेस नेटवर्क से कनेक्ट होने के बाद मेरे लिए शेल स्क्रिप्ट को कॉल करने का कोई तरीका है? कारण मैं यह करना चाहता हूं कि मुझे इसका उपयोग शुरू करने से पहले नेटवर्क में लॉगिन करना होगा और यदि संभव हो तो मैं इसे स्वचालित करना चाहूंगा।

मैं इस प्रश्न को पढ़ता हूं: क्या एक स्क्रिप्ट को चलाने के लिए हर बार जब मैं एक विशिष्ट वायरलेस नेटवर्क से जुड़ता हूं?

लेकिन मैं वास्तव में अनिश्चित हूं कि इसे करने के लिए अपस्टार्ट का उपयोग कैसे किया जाए।

जवाबों:


16

मेरे पिछले उत्तर के लिए क्षमायाचना जिस तरह से मैंने इसे सालों पहले किया था। लगता है चीजें बदल गई हैं।

यह पता चलता है कि नेटवर्क प्रबंधक /etc/NetworkManager/dispatcher.d/निर्देशिका में सभी स्क्रिप्ट चलाता है (जो रूट के स्वामित्व वाले हैं, जो निष्पादन योग्य हैं, जो अन्य उपयोगकर्ताओं द्वारा पठनीय नहीं हैं, और सेट्यूड नहीं हैं), जब कोई कनेक्शन बदलता है (ऊपर, नीचे, पूर्व-पूर्व, पूर्वनिर्धारित) ।

पर्यावरण चर नेटवर्क प्रबंधक द्वारा इस स्क्रिप्ट पर सेट और पारित किए जाते हैं। आपको CONNECTION_UUID पर्यावरण चर में रुचि होगी (जिसमें एक अद्वितीय स्ट्रिंग है)।

इसलिए, अपनी समस्या को हल करने के लिए (किसी विशेष वायरलेस नेटवर्क से कनेक्ट होने पर स्क्रिप्ट निष्पादित करें):

1) आप जिस वायरलेस कनेक्शन में रुचि रखते हैं, उसका यूआईडी पता करें ( /etc/NetworkManager/system-connections/निर्देशिका में उपयुक्त कनेक्शन फ़ाइल के अंदर देखकर )।

2) एक बैश (या पर्ल, या पाइथन, या जो भी) स्क्रिप्ट लिखता है वह वही करता है जो आप चाहते हैं कि पर्यावरण चर CONNECTION_UUID ऊपर (1) में वायरलेस नेटवर्क के uid से मेल खाता है।

3) इस स्क्रिप्ट को डालें /etc/NetworkManager/dispatcher.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 $?

अरे, / etc / NetworkManager / system-कनेक्शन में कुछ भी नहीं है। यदि कनेक्शन नया है (पहले कभी उपयोग नहीं किया गया है) फिर भी, मैंने इसे /etc/network/if-up.d में बैश स्क्रिप्ट बनाकर काम करने के लिए प्राप्त किया। यह स्क्रिप्ट को किसी भी वायरलेस नेटवर्क में चलाता है जिसे मैं कनेक्ट करता हूं, लेकिन मैंने इसके चारों ओर iwconfig करके काम किया है grep -q "कुछ SSID"। हालांकि सही दिशा की ओर टक्कर के लिए धन्यवाद, यह आपकी मदद के बिना नहीं लगा होगा!
ब्रॉक ड्यूट

मेरे gentoo स्थापना के लिए भी काम करता है, टिप के लिए धन्यवाद :)
Jeffrey04

उबंटू 16.04 पर। निर्देशिकाओं /etc/NetworkManager/dispatcher.d/01ifupdownमें लिपियों /etc/networking/if-*
पीटर

सूचना के लिए धन्यवाद। अपनी स्क्रिप्ट में UUID को हार्डकोड करने के बजाय (जो मैं कई लैपटॉप के लिए पोर्टेबल होना चाहता हूं), मैंने grepसिस्टम-कनेक्शन फ़ाइलों का उपयोग किया। अच्छी तरह से काम करता है। essid=$(grep -l "uuid=$CONNECTION_UUID" /etc/NetworkManager/system-connections/*)उसके बाद कुछ इस तरह essid=$(basename $essid)
डेविड फ्यूरे

क्या प्रति-उपयोगकर्ता के आधार पर ऐसा करना संभव है? मैं वर्तमान में कनेक्टेड नेटवर्क के आधार पर स्वचालित रूप से प्रिंटर कॉन्फ़िगरेशन का चयन करना चाहता हूं। ( askubuntu.com/questions/1204645/… )
केटिल माल्डे

1

मुझे नहीं पता कि नेटवर्क मैनेजर के साथ ऐसा करने का कोई तरीका है या नहीं, लेकिन शायद आपके लिए एक और उपाय है। आप Wicd स्थापित कर सकते हैं:

sudo apt-get install wicd

Wicd को सीधे कनेक्ट होने वाले हर नेटवर्क पर प्री-स्क्रिप्ट और पोस्ट-स्क्रिप्ट सपोर्ट जोड़ने के लिए gtk इंटरफेस पर सीधे सपोर्ट है। ध्यान रखें कि Wicd नेटवर्क-मैनेजर को काम करने के लिए अनइंस्टॉल करेगा (वे दोनों संघर्ष में हैं) इसलिए यदि कुछ गलत होता है तो आपको नेटवर्क-मैनेजर के .deb को डाउनलोड करना चाहिए या आपके साथ लाइव-सीडी / लाइव-यूएसबी होना चाहिए।

Wicd का उपयोग करना आसान है और कनेक्ट करने के लिए तेज है लेकिन नेटवर्क-मैनेजर (जैसे वीपीएन) की कुछ उन्नत सुविधाओं का अभाव है। यहाँ एक स्क्रीनशॉट है:

Wicd


1

हाँ, /etc/NetworkManager/dispatcher.d/NetworkManager के लिए शेल स्क्रिप्ट बहुत अच्छा विचार है।

NetworkManager के साथ एक Dbus विधि भी है, अधिक मज़ेदार, अधिक जटिल man nm-settings:।

NetworkManager के मैन पेज से गोले तर्कों का फिर से शुरू dispatcher:

प्रत्येक स्क्रिप्ट को दो तर्क मिलते हैं, पहला है डिवाइस का इंटरफ़ेस नाम जो केवल सक्रिय है, और दूसरा एक एक्शन।

क्रिया हो सकती है: ऊपर, नीचे, vpn-up, vpn-down, hostname, dhcp4-change, dhcp6-change। (पुरुष पृष्ठ का विमोचन: १ 2012 जनवरी २०१२)

नेटवर्क इंटरफ़ेस के बाद OpenVPN को पुनरारंभ करने के लिए यहां एक बहुत ही सरल स्क्रिप्ट है up:

if [ "$2" = "up" ]; then  
       /etc/init.d/openvpn restart  
fi  
exit $? 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.