ワイヤレスネットワークに接続した後にスクリプトを呼び出す


14

特定のワイヤレスネットワークに接続したら、シェルスクリプトを呼び出す方法はありますか?私がこれをしたい理由は、使用を開始する前にネットワークにログインする必要があり、可能であればこれを自動化することです。

この質問を読みました。特定のワイヤレスネットワークに接続するたびにスクリプトを実行する方法はありますか?

しかし、私はそれを行うためにupstartをどのように使用するかについて本当に確信がありません。

回答:


16

私が数年前にそれをしたであろう方法であった私の以前の答えに謝罪します。物事は変化したようです。

ネットワークマネージャーは/etc/NetworkManager/dispatcher.d/、接続が変更された(up、down、preup、predown)ときに、ディレクトリ内のすべてのスクリプト(rootが所有し、実行可能で、他のユーザーが読み取れず、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 / system-connectionsには何もありません。どうやら、UUIDは、接続が新しい場合にのみ保存されます(以前は使用されていません)。それでも、/ etc / network / if-up.dにbashスクリプトを作成することで機能するようになりました。接続するワイヤレスネットワークでスクリプトを実行しますが、iwconfig | grep -q "いくつかのSSID"。しかし、正しい方向へのバンプのおかげで、あなたの助けがなければそれを理解できなかったでしょう!
ブロックデュート

私のgentooのインストールでも機能します。ヒントをありがとう:)
ジェフリー04

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)ます。
デビッドフォール

これをユーザーごとに行うことは可能ですか?現在接続されているネットワークに基づいてプリンター構成を自動的に選択したいと思います。(askubuntu.com/questions/1204645/...
Ketil Malde

1

Network Managerでそれを行う方法があるかどうかはわかりません。おそらくありますが、別の解決策があります。Wicdをインストールできます:

sudo apt-get install wicd

Wicdはgtkインターフェースを直接サポートしており、接続可能なすべてのネットワークにプリスクリプトとポストスクリプトのサポートを追加します。WicdがNetwork-Managerを削除して動作するように注意してください(両者は競合しています)。

Wicdは使いやすく、接続も高速ですが、Network-Managerの高度な機能(VPNなど)が欠けています。これがスクリーンショットです:

Wicd


1

はい、/etc/NetworkManager/dispatcher.d/NetworkManagerのシェルスクリプトは非常に良いアイデアです。

NetworkManagerを使用したDbusメソッドもあり、より楽しく、より複雑ですman nm-settings

NetworkManagerのManページからのシェル引数の履歴dispatcher

各スクリプトは2つの引数を受け取ります。1つ目はアクティブ化されたばかりのデバイスのインターフェイス名で、2つ目はアクションです。

アクションには、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 $? 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.