Bir komut dosyasından internet paylaşımını başlat / durdur?


21

İnternet paylaşımını komut satırından veya belki bir elma komut dosyasından başlatmanın / durdurmanın bir yolu var mı?

Mesele şu ki, dizüstü bilgisayarımla ev ve iş arasında dolaşıyorum. Bir yerde kablosuz internet alıyorum (ve böylece internet paylaşımını devre dışı bırakmak zorunda kalıyorum), diğeri ise interneti bir ethernet kablosundan alıyorum ve bilgisayarı küçük bir kablosuz ağ oluşturarak interneti diğer cihazlarla paylaşacak şekilde kurdum.

Ancak, ne zaman yer değiştirdiğimde Sistem Tercihleri'ne girmek ve internet paylaşımını başlatmak / durdurmak zorunda kalmak biraz sıkıcı oluyor, bu yüzden hızlı bir komut veya komut dosyası başlatmak ve talep üzerine geçiş yapmak istiyorum.

Herhangi bir ipucu veya fikir?


Mankoff, önerinizi yürüttüğümde: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist düzgün çalışıyor gibi görünüyor ve paylaşım tercihleri ​​gui bile doğru bir şekilde yenilendi, ancak bağlantı gerçekte güncellenmedi Çalışma. Eğer komutu tekrar çalıştırırsam, zaten yüklü olduğunu düşündüğü için bile başarısız olur. Ayrıca, çalışan işlemi görmek için "top" komutunu çalıştırdığımda "InternetSharing" göremiyorum, ancak tercihler gui'de başlattığımda "InternetSharing" işleminin gerçekten çalıştığını göreceğim ve bağlantı çalışıyor. Neden h olduğumu herhangi bir fikir

Bu davranışı neden aldın bilmiyorum. "InternetSharing" i üstte görüyorum (veya daha kolay, ps aux | grep -i internet ).

OS X 10.6 kullanıyorum. Eğer farklı bir sürümünüz varsa belki de bu yüzden ...

Ayrıca, bu muhtemelen kendi cevabım değil, cevabım için bir yorum olmalıdır. Cevabı silmek isteyebilir ...

Evet, kesinlikle bu cevabınıza bir yorum olmalı, ama nedense birileri daha önce yorum yapmadıysa, oradaki cevapları yorumlayamıyorum. Belki de yeni bir kullanıcı olduğum için. OS X 10.6.4 kullanıyorum. Dikkatimi çeken bir diğer şey ise, gui tercihlerinde internet paylaşımını başlattığım zaman, işlemin (ağ adresi çeviri arka plan programı) da başlamış olmasıdır. Bu süreci başlatmam gerekip gerekmediğini, şu anda bunun nasıl yapıldığını araştıracağımı merak ediyorum, bu süreci başlatmak için gereken karmaşık argümanlar var gibi görünüyor.

Yanıtlar:


19

İnternet Paylaşımını CLI'den başlatmak için:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist

Durağının için, değiştirmek yük için boşaltma .

Bunu çalıştırdığınızda ön bölmeyi açık tutarsanız, değişikliğin derhal yürürlüğe gireceğini görmeyeceğinizi (kullanıcı arayüzünün güncellenmeyeceğini), ancak işe yaramadığını unutmayın.


Garip, bir süre sonra çalışmayı bıraktı. Komutu çalıştırıp ön bölmeyi açarsam paylaşımın etkin olduğunu görüyorum, ancak bağlantı aslında paylaşılmıyor. Ön bölmede manuel olarak durduğumda ve paylaşmaya başladığımda, sorunsuz bir şekilde çalışıyor. Neyin yanlış olabileceği hakkında herhangi bir ipucu var mı?
Juan A. Navarro

2
Ken'in makbuzu çalışıyor! Ama ... bir böcek var (avlanıyorum). Tekrar unloadyapabilmek için 30 saniyelik bir gecikme bırakmanız gerekir load. İyi bir kontrol komutu ps ax | egrep '[ /](PID|boo|nat)'.
dan

1
10.11.2 El Capitan'da çalışmıyor:/System/Library/LaunchDaemons/com.apple.InternetSharing.plist: No such file or directory
Yohaï Berreby

3
deneyin: /System/Library/LaunchDaemons/com.apple.NetworkSharing.plist bunun yerine;)
guerrerocarlos

1
Sistem Tercihleri ​​uygulaması kimlik doğrulaması gerektirmediğinden sudo / root kullanmadan nasıl yapabiliriz?
Michele Dall'Agata

4

Bunu yapmanın bir yolu GUI komut dosyasıyla yazmaktır - Sistem Tercihleri ​​varsayılan olarak herhangi bir Applescript desteğine sahip değildir.

tell application "System Preferences" to set current pane to pane "com.apple.preferences.sharing"
delay 1
tell application "System Events" to tell process "System Preferences"
    click checkbox 1 of row 8 of table 1 of scroll area 1 of group 1 of window "Sharing" -- change to row 10 if you are using anything before Snow Leopard
    delay 1
    if (exists sheet 1 of window "Sharing") then
        click button "Start" of sheet 1 of window "Sharing"
    end if
end tell
ignoring application responses
    tell application "System Preferences" to quit
end ignoring

3
Belki de işe yarar ve cevap OP'nin sorusunun kısıtları dahilindedir: “İnternet paylaşımını komut satırından veya bir elma senaryosundan başlatmanın / durdurmanın bir yolu var mı ?” Aşağılık oylama, gerçekten korkunç cevaplar için gerçekten kurtarılmalıdır. Teşekkürler
Philip Regan

1
Bu nedenle "resmi" hiçbir oy kullanmadı. :).

2
: "işler ve kısıtları dahilinde olup" Bana biz yeni bir site olmalı düşündürüyor rubegoldberg.stackexchange.com

2
Ne olduğunu değil thedailywtf.com içindir? ;-)
Philip Regan

1
@Juan: Apple, Sistem Tercihleri ​​düzenini ve Paylaşım bölmesini bir yükseltme ile değiştirirse, betiğimde gerçek potansiyel sonu olduğu için, GUI komut dosyası çok katı parametrelere dayandığı için uyarılmalıdır.
Philip Regan

2

Mankoff'un cevabından bir ipucu aldım ve bir AppleScript içine sardım. Bu komut dosyasını Automator'dan kullanıyorum, böylece kolayca bir hizmet olarak kullanabilir ve klavye kısayolu verebilirim.

İnternet Paylaşımını Değiştir:

register_growl()

try
    if isRunning("InternetSharing") then
        do shell script "launchctl unload -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist" with administrator privileges

        if isRunning("InternetSharing") then
            error "Internet Connection Sharing was Not Disabled"
        else
            my growlnote("Success", "Internet Connection Sharing Disabled")
        end if

    else
        do shell script "launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist" with administrator privileges

        if isRunning("InternetSharing") then
            my growlnote("Success", "Internet Connection Sharing Enabled")
        else
            error "Internet Connection Sharing was Not Enabled"
        end if

    end if

on error errMsg
    my growlnote("Error", errMsg)

end try

on isRunning(processName)
    try
        return 0 < length of (do shell script "ps ax | grep -v grep | grep " & processName)
    on error
        return false
    end try
end isRunning

on register_growl()
    try
        tell application "GrowlHelperApp"
            set the notificationsList to {"Success", "Warning", "Error"}
            register as application "Toggle Internet Connection Sharing" all notifications notificationsList default notifications notificationsList icon of application "Sharing"
        end tell
    end try
end register_growl

on growlnote(growltype, str)
    try
        tell application "GrowlHelperApp"
            notify with name growltype title growltype description str application name "Toggle Internet Connection Sharing"
        end tell
    end try
end growlnote

Benim için aslan üzerinde gerçekten çalışmıyor. Growl başarı mesajını gösterir ve sistem tercihlerindeki seçeneği değiştirir, ancak WiFi sembolü paylaşımda değişiklik yapmaz (ve diğer cihazlar wifi ile paylaşıldığını göremez, bu yüzden açık olmadığını düşünüyorum :(
alopix

2

Basit değişikliklerle 10.11.6’da (önceden yapılandırılmış bir paylaşım kurulumu için) çok daha iyi sonuçlar aldım

sudo launchctl start com.apple.NetworkSharing

ve

sudo launchctl stop com.apple.NetworkSharing

sırasıyla.


1

MacosX'te wifi paylaşımının sürekli bozulmasına dair kesin geçici çözüm

Sonunda çalışan bir sistem buldum ve ne zaman, wifi paylaşım payları kırılmıyorsa, bir dakika içinde otomatik olarak kurtarmayı başarabiliyor.

Çözüm, aşağıdaki ~/Library/LaunchAgents/com.me.wifisharingup.plistiçerikleri içeren bir servistir:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.juanfal.wifisharingup</string>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/mi/bin/wifisharingup.sh</string>
  </array>
  <key>Nice</key>
  <integer>1</integer>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardErrorPath</key>
  <string>/Users/me/Library/Logs/wifisharingup.err</string>

  <key>StandardOutPath</key>
  <string>/Users/me/Library/Logs/wifisharingup.out</string>
</dict>
</plist>

Görüyorsun, her dakika takip eden basit betiği çalıştırıyor. Önceki pistin köke ait olmasına dikkat edin ve şu şekilde başlayın:

sudo chown root com.me.wifisharingup.plist
sudo launchctl load /Users/me/Library/LaunchAgents/com.me.wifisharingup.plist

Her dakika başlattığı komut dosyası (çalıştırılabilir hale getirmeyi unutmayın):

#!/bin/sh

if [[ ! `ipconfig getifaddr en1` ]]; then
    /usr/sbin/networksetup -setairportpower en1 off
    /usr/sbin/networksetup -setairportpower en1 on
    echo `date` >> "/Users/me/Library/Logs/wifisharingup.err"
else
    touch "/Users/me/Library/Logs/wifisharingup.out"
fi

Basitçe periyodik (her dakika) çağrı ipconfig getifaddr en1wifi paylaşım daemon ne bir şey yenilemek için çağrı düşünüyorum . Her ne olursa olsun, wifi paylaşımı başarısız olduğu her an, kendi kendine atanan IP adresini kaybeder ve ardından ipconfig getifaddr en1başarısız olur, bu yüzden komut dosyam wifi yeniden başlatır, önceki durumunu yeniden oluşturur ve wifi paylaşımını kurtarır.

Bir MacMini'nin içinde klavye, fare veya monitör olmadan günlerce çalışıyor, ancak yalnızca Ethernet'e bağlı ve wifi aygıtlarıma dünyaya erişim sağlıyor.


0

Bunu yapmanın gerçekten kolay yolu @ Philip'in cevabını NetworkLocation uygulaması ile birleştirmek . NL nerede olduğunuzu söyleyebilir ve konumlarınızı değiştirdiğini algıladığında bir AppleScript'i otomatik olarak çalıştırabilir.

Dizüstü bilgisayarınız varsa gerekli bir yazılım olduğunu düşünüyorum; aksi halde, konumları değiştirdiğimde her zaman birkaç ayarı manuel olarak sıfırlamak zorunda kalmam gerekir.


Marco Polo ( symonds.id.au/marcopolo ) gibi görünüyor ancak Marco Polo steroidleri yok. :)
Ian C.

@Ian - Bu sayfa MP'nin Snow Leopard ile ilgili bilinen sorunları olduğunu söylüyor. Google Grubu "MarcoPolo projesi kendi başına, ölmedi, ama çok yavaş gelişti ediliyor. Yakında yeni bir sürümünü beklemeyin." Diyor Git depo gösterileri steroidler gibi bana Eylül 2009. Sesler beri hiçbir güncelleme ;-) ... birisine yetişme olabilir
Dori

BlueTooth için SL tasarruf ile ilgili herhangi bir sorun yaşadım söyleyemem . Sadece BT enable / disable / tespit özelliğini kullanmıyorum ve çok zekice çalışıyor. (Ancak gelinen nokta)
Ian C.

0

Gönderilen diğer el yazısından biraz farklıdır (Daha iyi bir şekilde düşünüyorum ama…). Seçeneklere sahip olmak bazen yardımcı olabilir.

 tell application "System Preferences"
   activate
   reveal (pane id "com.apple.preferences.sharing")
 end tell

 tell application "System Events"
   tell process "System Preferences"
     try
       click checkbox of row 11 of table 1 of scroll area of group 1 of window "Sharing"

       if checkbox of row 11 of table 1 of scroll area of group 1 of window "Sharing" is equal to 1 then
         repeat until sheet of window 1 exists
           delay 0.5
         end repeat
       end if

       if (sheet of window 1 exists) then
         click button "Start" of sheet of window 1
       end if

       tell application "System Preferences" to quit
       activate (display dialog "Internet Sharing preferences sucessfully flipped")

     on error     
       activate
       display dialog "something went wrong in automation but you are probably in the right menu…"
       return false
     end try
   end tell
 end tell

0

Önceden yayınlanan GUI komut dosyası çözümü, uluslararası kullanıcıların pencere ve düğme adlarını ayarlamalarını gerektirdiğinden, herhangi bir sistem diliyle çalışan bir sürüm buldum. Aynı zamanda diğer paylaşım seçeneği için de çalışır ve paylaşım durumu hakkında yerel geri bildirimde bulunur. Buna dayanarak, biri dosya paylaşımına, biri de internet paylaşımına geçmek için iki farklı Automator servisi kullanıyorum.

tell application "System Preferences"
    set current pane to pane "com.apple.preferences.sharing"
    set localized_window to the localized name of the current pane
    set localized_app to (localized string "System Preferences")
    set localized_ok to {localized string "OK"} -- File sharing
    set localized_start to {localized string "START"} -- Internet sharing
end tell
delay 0.3
tell application "System Events"
tell process "System Preferences"
    click checkbox 1 of row 8 of table 1 of scroll area 1 of group 1 of window localized_window
    delay 0.2
    select row 8 of table 1 of scroll area 1 of group 1 of window localized_window
    -- change row numbers to the service you want toggled
    if (exists sheet 1 of window localized_window) then
        try
            click button (localized_ok as string) of sheet 1 of window localized_window
        on error
            click button (localized_start as string) of sheet 1 of window localized_window
        end try
    end if
    set sharing_state to the value of item 1 of static text of group 1 of window localized_window
end tell

tell application "System Preferences" to quit
display notification sharing_state with title localized_app
--  display notification exists since OS 10.9, for older systems use: 
--  display dialog sharing_state buttons {localized_ok} default button 1 with title localized_app giving up after 1.5
end tell

0

Herhangi bir konfigürasyondan önce / sonra, paylaşıma dahil olan arayüz veya arayüzlerin aşağıdakilerle kapatılması / açılması gerekir:

networksetup -setairportpower en1 off

sonra ( networksetup -setairportpower en1 on)

Benim wifi en1kullanmak kullanmak aramak için listelenmiştir networksetup -listnetworkserviceorder. Dahası, İnternet paylaşımını başlatırken daha ayrıntılı NAT işlevselliği eklemeniz, ardından sadece etkin bit ayarını yapmanız gerekecektir.

NAT, bit ile açık / kapalı: -int 0= kapalı -int 1= açık

Yazılır tek şey /Library/Preferences/SystemConfiguration/com.apple.nat.plistile

defaults write /Library/Preferences/SystemConfiguration/com.apple.nat\
    NAT -dict Enabled -int 0

olduğu

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>NAT</key>
        <dict>
                </dict>
                <key>Enabled</key>
                <integer>1</integer>
        </dict>
</dict>
</plist>

Aşağıdaki gibi görünmek için plist dosyanızı değiştirmeniz gerekir:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>NAT</key>
        <dict>
                <key>AirPort</key>
                <dict>
                        <key>40BitEncrypt</key>
                        <integer>1</integer>
                        <key>Channel</key>
                        <integer>0</integer>
                        <key>Enabled</key>
                        <integer>0</integer>
                        <key>NetworkName</key>
                        <string>FancyHostNome</string>
                        <key>NetworkPassword</key>
                        <data>
                        </data>
                </dict>
                <key>Enabled</key>
                <integer>1</integer>
                <key>NatPortMapDisabled</key>
                <false/>
                <key>PrimaryInterface</key>
                <dict>
                        <key>Device</key>
                        <string>en4</string>
                        <key>Enabled</key>
                        <integer>0</integer>
                        <key>HardwareKey</key>
                        <string></string>
                        <key>PrimaryUserReadable</key>
                        <string>InfiniBand</string>
                </dict>
                <key>PrimaryService</key>
                <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
                <key>SharingDevices</key>
                <array>
                        <string>en1</string>
                </array>
        </dict>
</dict>
</plist>

Gördüğünüz gibi benim plist NAT dosyam ihtiyaçlarınızı karşılamak için biraz özelleştirmeye ihtiyaç duyabilir.


0

2011 yılının başlarında MacBook Pro / 10.11.3 El Capitan'ın İnternet paylaşımını değiştirmek için aşağıdaki betiği kullanıyorum, böylece daha yeni donanımlarla daha kısa gecikmelerden kurtulabilirsiniz. Bu amaçla gönderilen birçok komut dosyasından (yerelleştirme, wifi açıp kapama networksetup, System Preferencesbittiğinde kapatma ) fikirlerini benimser .

tell application "System Preferences"
    activate
    reveal (pane id "com.apple.preferences.sharing")
    set localized_window to the localized name of the current pane
end tell

tell application "System Events" to tell process "System Preferences"
    delay 1
    repeat with r in rows of table 1 of scroll area 1 of group 1 of window localized_window
        if (value of static text of r as text) starts with "Internet" then
            set sharingBool to value of checkbox of r as boolean
            select r
            if sharingBool is true
              do shell script "/usr/sbin/networksetup -setairportpower en1 off"
            else
              do shell script "/usr/sbin/networksetup -setairportpower en1 on"
            end if
            click checkbox of r
        end if
    end repeat
    delay 1

    if (exists sheet 1 of window localized_window) then
      click button "Start" of sheet 1 of window localized_window
    end if

end tell

ignoring application responses
  tell application "System Preferences" to quit
end ignoring


-1
/usr/bin/defaults write /Library/Preferences/SystemConfiguration/com.apple.nat NAT -dict Enabled -int 0

Bu paylaşımı değiştirir mi?
Greenonline
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.