โทรหาสคริปต์หลังจากเชื่อมต่อกับเครือข่ายไร้สาย


14

มีวิธีให้ฉันโทรเชลล์สคริปต์เมื่อฉันเชื่อมต่อกับเครือข่ายไร้สายเฉพาะหรือไม่ เหตุผลที่ฉันต้องการทำสิ่งนี้คือฉันต้องลงชื่อเข้าใช้เครือข่ายก่อนจึงจะเริ่มใช้งานได้และฉันต้องการทำให้เป็นอัตโนมัติถ้าเป็นไปได้

ฉันอ่านคำถามนี้: มีวิธีการเรียกใช้สคริปต์ทุกครั้งที่ฉันเชื่อมต่อกับเครือข่ายไร้สายที่ระบุ?

แต่ฉันไม่แน่ใจจริงๆเกี่ยวกับวิธีใช้พุ่งพรวดเพื่อทำมัน

คำตอบ:


16

ขอโทษสำหรับคำตอบก่อนหน้าของฉันซึ่งเป็นวิธีที่ฉันจะทำมันเมื่อหลายปีก่อน ดูเหมือนว่าสิ่งต่าง ๆ มีการเปลี่ยนแปลง

ปรากฎว่า Network Manager รันสคริปต์ทั้งหมดใน/etc/NetworkManager/dispatcher.d/ไดเรกทอรี (ที่เป็นของ root ที่สามารถเรียกใช้งานได้ซึ่งผู้ใช้รายอื่นไม่สามารถอ่านได้และไม่ได้ setuid) เมื่อการเชื่อมต่อเปลี่ยนไป (ขึ้นลงลงล่วงหน้านำหน้า) .

ตัวแปรสภาพแวดล้อมถูกตั้งค่าและส่งผ่านไปยังสคริปต์นี้โดยผู้จัดการเครือข่าย คุณจะสนใจตัวแปรสภาพแวดล้อม CONNECTION_UUID (มีสตริงที่ไม่ซ้ำกัน)

ดังนั้นเพื่อแก้ปัญหาของคุณ (รันสคริปต์เมื่อเชื่อมต่อเครือข่ายไร้สายเฉพาะ):

1) ค้นหา uuid ของการเชื่อมต่อไร้สายที่คุณสนใจ (โดยดูที่ไฟล์การเชื่อมต่อที่เหมาะสมใน/etc/NetworkManager/system-connections/ไดเรกทอรี)

2) เขียนสคริปต์ทุบตี (หรือ perl หรือ python หรืออะไรก็ตาม) ที่ทำสิ่งที่คุณต้องการหากตัวแปรสภาพแวดล้อม CONNECTION_UUID ตรงกับ uuid ของเครือข่ายไร้สายใน (1) ด้านบน

3) ใส่สคริปต์นี้/etc/NetworkManager/dispatcher.d/และตั้งค่าเจ้าของและสิทธิ์อย่างเหมาะสม

อ่านเพิ่มเติม: man networkmanager (และ litte poking รอบสคริปต์ในไดเรกทอรีดังกล่าวข้างต้น)

ตัวอย่างสคริปต์:

#!/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-connections เห็นได้ชัดว่า UUID จะถูกเก็บไว้ที่นั่นก็ต่อเมื่อการเชื่อมต่อใหม่ (ไม่เคยใช้มาก่อน) อย่างไรก็ตามฉันได้มันไปทำงานโดยการสร้างสคริปต์ทุบตีใน /etc/network/if-up.d มันจะเรียกใช้สคริปต์ในเครือข่ายไร้สายใด ๆ ก็ตามที่ฉันเชื่อมต่อด้วย แต่ฉันได้แก้ไขมันด้วยการทำ iwconfig | grep -q "some SSID" ขอบคุณสำหรับการชนไปในทิศทางที่ถูกต้องแม้ว่าจะไม่ได้คิดออกโดยปราศจากความช่วยเหลือของคุณ!
Brock Dute

ทำงานสำหรับการติดตั้ง Gentoo ของฉันมากเกินไปขอบคุณสำหรับเคล็ดลับ :)
Jeffrey04

บน Ubuntu 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)
David Faure

เป็นไปได้ไหมที่จะทำแบบนี้ต่อผู้ใช้งาน? ฉันต้องการเลือกการกำหนดค่าเครื่องพิมพ์โดยอัตโนมัติตามเครือข่ายที่เชื่อมต่ออยู่ในปัจจุบัน ( askubuntu.com/questions/1204645/… )
Ketil Malde

1

ฉันไม่รู้ว่าจะมีวิธีจัดการกับตัวจัดการเครือข่ายหรือไม่มีบางอย่างที่อาจเป็นไปได้ แต่ฉันมีวิธีแก้ไขปัญหาอื่นสำหรับคุณ คุณสามารถติดตั้ง Wicd:

sudo apt-get install wicd

Wicd มีการสนับสนุนโดยตรงบนอินเทอร์เฟซ gtk เพื่อเพิ่มการสนับสนุนล่วงหน้าและโพสต์สคริปต์ในทุกเครือข่ายที่คุณสามารถเชื่อมต่อได้ ระวังว่า Wicd จะยกเลิกการติดตั้ง Network-Manager ให้ทำงาน (ทั้งคู่มีข้อขัดแย้งกัน) ดังนั้นหากมีสิ่งผิดปกติคุณควรดาวน์โหลด. deb ของ Network-Manager หรือ Live-CD / Live-USB กับคุณ

Wicd ใช้งานง่ายและเชื่อมต่อได้เร็วขึ้น แต่ไม่มีคุณสมบัติขั้นสูงของ Network-Manager (เช่น VPN) นี่คือภาพหน้าจอ:

Wicd


1

ใช่เชลล์สคริปต์ใน/etc/NetworkManager/dispatcher.d/สำหรับ NetworkManager เป็นความคิดที่ดีมาก

นอกจากนี้ยังมีวิธีการ Dbus กับ NetworkManager สนุกมากขึ้น, man nm-settingsมีความซับซ้อนมากขึ้น:

ประวัติย่อของอาร์กิวเมนต์เชลล์จากหน้า Man ของ NetworkManager เกี่ยวกับdispatcher:

แต่ละสคริปต์ได้รับอาร์กิวเมนต์สองตัวชื่อแรกคือชื่ออินเตอร์เฟสของอุปกรณ์เพิ่งเปิดใช้งานและเป็นอันดับที่สองของการกระทำ

แอ็คชันสามารถ: ขึ้นลง vpn-up vpn-down ชื่อโฮสต์ dhcp4-change, dhcp6-change (เปิดตัว man page: 17 มกราคม 2555)

นี่เป็นสคริปต์ที่ง่ายมากในการรีสตาร์ท OpenVPN หลังจากอินเทอร์เฟซเครือข่ายคือup:

if [ "$2" = "up" ]; then  
       /etc/init.d/openvpn restart  
fi  
exit $? 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.