Kablosuz bir ağa bağlandıktan sonra çağrı komut dosyası


14

Belirli bir kablosuz ağa bağlandıktan sonra kabuk komut dosyasını çağırmamın bir yolu var mı? Bunu yapmak için neden, kullanmaya başlamadan önce ağa giriş yapmak zorundayım ve mümkünse bunu otomatikleştirmek istiyorum.

Bu soruyu okudum: Belirli bir kablosuz ağa her bağlandığımda bir komut dosyası çalıştırmanın bir yolu var mı?

Ama bunu yapmak için uptart'ı nasıl kullanacağımdan gerçekten emin değilim.

Yanıtlar:


16

Önceki cevabım için özür dilerim, bu da yıllar önce yapmış olduğum yöntemdi. Görünüşe göre işler değişti.

/etc/NetworkManager/dispatcher.d/Bir bağlantı değiştiğinde (yukarı, aşağı, ön hazırlık, önayar) Ağ Yöneticisinin dizindeki TÜM komut dosyalarını (root'a ait olan, yürütülebilir, diğer kullanıcılar tarafından okunamayan ve setuid olmayan) çalıştırdığı ortaya çıkar. .

Ortam değişkenleri Ağ yöneticisi tarafından ayarlanır ve bu betiğe iletilir. CONNECTION_UUID ortam değişkeniyle ilgileneceksiniz (benzersiz bir dize içeriyor).

Bu nedenle, sorununuzu çözmek için (belirli bir kablosuz ağa bağlandığında bir komut dosyası çalıştırın):

1) ilgilendiğiniz kablosuz bağlantı uuid'ini bulun ( /etc/NetworkManager/system-connections/dizindeki uygun bağlantı dosyasının içine bakarak ).

2) CONNECTION_UUID ortam değişkeni yukarıdaki (1) 'deki kablosuz ağın kullanıcı arabirimiyle eşleşiyorsa, istediğinizi yapan bir bash (veya perl veya python veya her neyse) komut dosyası yazın.

3) bu betiği /etc/NetworkManager/dispatcher.d/sahibine ve izinlerini uygun şekilde yerleştirin.

daha fazla okuma: adam networkmanager (ve yukarıda belirtilen dizinlerde betiklerin etrafında alay eden bir litte).

Örnek bir komut dosyası:

#!/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 $?

Hey, / etc / NetworkManager / sistem bağlantılarında hiçbir şey yok. Görünüşe göre, UUID sadece bağlantı yeni ise (daha önce hiç kullanılmamışsa) orada saklanır. Yine de, /etc/network/if-up.d içinde bir bash betiği oluşturarak işe başladım. Ben olsa bağlanmak herhangi bir kablosuz ağda komut dosyasını çalıştırır ama iwconfig | grep -q "bazı SSID". Doğru yöne doğru çarpma için teşekkürler, yardımınız olmadan anlayamazdım!
Brock Dute

benim gentoo kurulumu için çalışıyor, ipucu için teşekkürler :)
Jeffrey04

Ubuntu 16.04'te. dizinlerde /etc/NetworkManager/dispatcher.d/01ifupdownkomut dosyaları yürütür/etc/networking/if-*
peter

Bilgi için teşekkürler. Komut dosyamdaki bir UUID'yi kodlamak yerine (birden çok dizüstü bilgisayara taşınabilir olmasını istiyorum), grepsistem bağlantıları dosyaları üzerinde kullandım . Güzel çalışıyor. essid=$(grep -l "uuid=$CONNECTION_UUID" /etc/NetworkManager/system-connections/*)Ardından gelen gibi bir şey essid=$(basename $essid).
David Faure

Bunu her kullanıcı için ayrı ayrı yapmak mümkün müdür? O anda bağlı olan ağa bağlı olarak yazıcı yapılandırmasını otomatik olarak seçmek istiyorum. ( askubuntu.com/questions/1204645/… )
Ketil Malde

1

Ağ Yöneticisi ile yapmanın bir yolu olup olmadığını bilmiyorum, muhtemelen bir tane var ama sizin için başka bir çözümüm var. Wicd yükleyebilirsiniz:

sudo apt-get install wicd

Wicd, bağlayabileceğiniz her ağa kod öncesi ve kod sonrası desteği eklemek için doğrudan gtk arayüzünde desteğe sahiptir. Wicd'nin çalışmak için Network-Manager'ı (her ikisinin de çakışmada olduğunu) kaldıracağına dikkat edin.

Wicd'nin kullanımı kolaydır ve bağlanması daha hızlıdır, ancak Ağ Yöneticisi'nin (VPN gibi) bazı gelişmiş özelliklerinden yoksundur. İşte bir ekran görüntüsü:

Wicd


1

Evet, /etc/NetworkManager/dispatcher.d/NetworkManager için Shell komut dosyaları çok iyi bir fikirdir.

NetworkManager, daha eğlenceli bir Dbus yöntemi de vardır, daha karmaşık: man nm-settings.

NetworkManager'ın Man sayfasından mermi argümanlarının özgeçmişi dispatcher:

Her komut dosyası iki argüman alır; bunlardan ilki, henüz etkinleştirilen cihazın arabirim adı ve ikincisi bir eylemdir.

Eylem şunlar olabilir: yukarı, aşağı, vpn-up, vpn-down, ana bilgisayar adı, dhcp4-change, dhcp6-change. (El sayfasının yayınlanması: 17 Ocak 2012)

İşte bir ağ arayüzü olduktan sonra OpenVPN'i yeniden başlatmak için çok basit bir komut dosyası up:

if [ "$2" = "up" ]; then  
       /etc/init.d/openvpn restart  
fi  
exit $? 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.