स्क्रिप्ट से इंटरनेट शेयरिंग शुरू / बंद करें?


21

क्या कमांड लाइन या शायद एक ऐप्पल स्क्रिप्ट से इंटरनेट शेयरिंग शुरू / बंद करने का कोई तरीका है?

बात यह है कि मैं अपने लैपटॉप को घर और काम के बीच घुमाता हूं। एक स्थान पर मुझे वायरलेस इंटरनेट मिलता है (और इस तरह मुझे इंटरनेट शेयरिंग को निष्क्रिय करना पड़ता है), और दूसरे में मुझे एक ईथरनेट केबल से इंटरनेट मिलता है और एक छोटा वायरलेस नेटवर्क बनाकर इंटरनेट को अन्य उपकरणों में साझा करने के लिए कंप्यूटर सेट करता है।

लेकिन सिस्टम प्रेफरेंस में जाने और हर बार जब मैं लोकेशन स्विच करता हूं तो इंटरनेट शेयरिंग को शुरू / बंद करना थोडा थकाऊ हो रहा है, इसलिए मैं डिमांड पर स्विच करने और लॉन्च करने के लिए एक क्विक कमांड या स्क्रिप्ट रखना चाहूंगा।

कोई संकेत या विचार?


मैनकॉफ़, जब मैं आपका सुझाव चलाता हूं: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist यह ठीक चल रहा है और यहां तक ​​कि साझा करने के लिए gui को सही ढंग से अपडेट किए जाने पर अद्यतन किया जाता है, लेकिन कनेक्शन वास्तव में नहीं है काम कर रहे। अगर मैं फिर से कमांड चलाता हूं तो यह भी विफल हो जाता है क्योंकि यह सोचता है कि यह पहले से ही लोड है। इसके अलावा, अगर मैं "टॉप" कमांड चलाता हूं, तो मैं चल रही प्रक्रिया को "इंटरनेटशेयरिंग" नहीं देख सकता हूं, लेकिन अगर मैं इसे वरीयताओं में शुरू करता हूं तो मुझे "इंटरनेटशेयरिंग" प्रक्रिया दिखाई देगी, जो वास्तव में चल रही है और कनेक्शन काम करता है। किसी भी विचार क्यों मैं ज रहा हूँ

निश्चित नहीं कि आपको वह व्यवहार क्यों मिले। मैं "इंटरनेटशेयरिंग" को शीर्ष (या आसान, ps aux | grep -i इंटरनेट ) में देखता हूं ।

मैं OS X 10.6 चला रहा हूं। यदि आपके पास शायद एक अलग संस्करण है, तो इस कारण से ...

इसके अलावा, यह शायद मेरे जवाब के लिए एक टिप्पणी होनी चाहिए, अपने आप में एक जवाब नहीं। उत्तर हटाना चाहते हैं ...

हाँ, निश्चित रूप से यह आपके उत्तर के लिए एक टिप्पणी होनी चाहिए, लेकिन किसी कारण के लिए मैं वहाँ जवाब पर टिप्पणी करने में सक्षम नहीं हूं जब तक कि किसी ने पहले ही एक टिप्पणी नहीं की है। शायद इसलिए कि मैं एक नया उपयोगकर्ता हूं। मैं OS X 10.6.4 चला रहा हूं। एक और बात मैंने देखी है कि जब मैं वरीयताओं में इंटरनेट शेयरिंग शुरू करता हूं तो यह है कि प्रक्रिया natd (नेटवर्क एड्रेस ट्रांसलेशन डेमॉन) शुरू हो गई है। मैं सोच रहा था कि क्या मुझे भी इस प्रक्रिया को शुरू करने की आवश्यकता है, वर्तमान में यह कैसे करना है, इस प्रक्रिया को शुरू करने के लिए आवश्यक जटिल तर्क लग रहे हैं।

जवाबों:


19

CLI से इंटरनेट शेयरिंग शुरू करने के लिए:

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

रोकने के लिए, लोड को अनलोड करने के लिए बदलें ।

ध्यान दें कि यदि आपके पास यह चलाने के दौरान पहले से खुला हुआ फलक है, तो आप परिवर्तन को तुरंत प्रभाव में नहीं देखेंगे (UI अपडेट नहीं होगा), लेकिन यह काम नहीं करता है।


अजीब, थोड़ी देर बाद, इसने काम करना बंद कर दिया। यदि मैं कमांड चलाता हूं और फिर प्रीफ पेन खोलता हूं तो मुझे लगता है कि शेयरिंग सक्षम है, हालांकि कनेक्शन वास्तव में साझा नहीं किया जा रहा है। यदि मैं मैन्युअल रूप से बंद कर देता हूं और प्रीफ़ फलक पर साझा करना शुरू कर देता हूं, तो यह समस्याओं के बिना फिर से काम करता है। क्या गलत हो सकता है इसके बारे में कोई सुराग?
जुआन ए। नवारो

2
केन का रसीद काम करता है! लेकिन ... वहाँ एक बग (मैं शिकार कर रहा हूँ) है। फिर से unloadकरने में सक्षम होने के लिए आपको 30 सेकंड की देरी छोड़नी होगी load। एक अच्छा जांच आदेश है ps ax | egrep '[ /](PID|boo|nat)'
दान

1
10.11.2 एल कैपिटन पर काम नहीं करता है:/System/Library/LaunchDaemons/com.apple.InternetSharing.plist: No such file or directory
Yohaby Berreby

3
प्रयास करें: /System/Library/LaunchDaemons/com.apple.NetworkSharing.plist बजाय;)
guerrerocarlos

1
चूंकि सिस्टम प्रेफरेंस ऐप को प्रमाणीकरण की आवश्यकता नहीं है, इसलिए हम sudo / root का उपयोग किए बिना इसे कैसे कर सकते हैं?
मिशेल डेलगाटा

4

ऐसा करने का एक तरीका जीयूआई स्क्रिप्टिंग है - सिस्टम प्राथमिकताएं डिफ़ॉल्ट रूप से किसी भी एप्सस्क्रिप्ट का समर्थन नहीं करती हैं।

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
शायद, लेकिन यह काम करता है और जवाब ओपी के सवाल की बाधाओं के भीतर है: "क्या कमांड लाइन से इंटरनेट शेयरिंग शुरू करने / बंद करने का एक तरीका है या शायद एक ऐप्पल स्क्रिप्ट ?" डाउनवोटिंग को वास्तव में बहुत अच्छे उत्तरों के लिए बचाया जाना चाहिए। साभार
फिलिप रेगन

1
इसलिए कोई "आधिकारिक" नहीं है। :)।

2
"काम करता है और बाधाओं के भीतर है" मुझे लगता है कि हमारे पास एक नई साइट होनी चाहिए: rubegoldberg.stackexchange.com

2
नहीं है कि क्या thedailywtf.com के लिए है? ;-)
फिलिप रेगन

1
@ जुआन: बस इस बात का पूर्वाभास किया जाना चाहिए कि यदि Apple सिस्टम प्रेफरेंस के लेआउट में बदलाव करता है और अपग्रेड के साथ शेयरिंग पेन देता है, तो मेरी स्क्रिप्ट में वास्तविक संभावित विराम भी है क्योंकि GUI स्क्रिप्टिंग बहुत सख्त मापदंडों पर निर्भर करता है।
फिलिप रेगन

2

मैंने मैनकॉफ़ के उत्तर से एक क्यू लिया और इसे एक AppleScript में लपेट दिया। मैं इस स्क्रिप्ट को ऑटोमेटर से उपयोग कर रहा हूं ताकि मैं इसे आसानी से एक सेवा के रूप में उपयोग कर सकूं और इसे कीबोर्ड शॉर्टकट दे सकूं।

इंटरनेट साझाकरण टॉगल करें:

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

वास्तव में मेरे लिए शेर पर काम नहीं करता है। यह बढ़ता सफलता संदेश प्रदर्शित करता है और सिस्टम वरीयताओं में विकल्प को जन्म देता है लेकिन वाईफाई-प्रतीक साझाकरण में नहीं बदलता (और अन्य डिवाइस यह नहीं देख सकते कि वाईफाई साझा किया गया है, इसलिए मुझे लगता है कि यह नहीं है :(
खालित्य

2

मेरे पास 10-11.6 पर सरल बदलावों के साथ (पहले से कॉन्फ़िगर किए गए साझाकरण सेटअप के लिए) बेहतर परिणाम थे ...

sudo launchctl start com.apple.NetworkSharing

तथा

sudo launchctl stop com.apple.NetworkSharing

क्रमशः।


1

MacosX में लगातार ब्रेकिंग को वाईफ़ाई साझा करने के लिए निश्चित समाधान

मुझे एक प्रणाली मिली है जो अंत में काम करती है और जब, कम बार वाईफ़ाई साझाकरण टूट जाता है, तो यह इसे एक मिनट में स्वचालित रूप से पुनर्प्राप्त करने का प्रबंधन करता है।

समाधान ~/Library/LaunchAgents/com.me.wifisharingup.plistअगली सामग्री के साथ एक डेमॉन है:

<?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>

आप देख सकते हैं, प्रत्येक मिनट यह सरल स्क्रिप्ट चलाता है जो निम्नानुसार है। पिछले प्लिस्ट को जड़ के स्वामित्व में रखने और इसे लॉन्च करने से सावधान रहें:

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

यह स्क्रिप्ट प्रत्येक मिनट में लॉन्च होती है (इसे निष्पादन योग्य बनाना न भूलें):

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

मुझे लगता है कि साधारण समय-समय पर (प्रत्येक मिनट) ipconfig getifaddr en1वाइफ शेयरिंग डेमॉन में कुछ ताज़ा करने के लिए कॉल करता है। जो भी हो, किसी भी समय वाईफ़ाई साझाकरण विफल हो जाता है, यह स्वयं असाइन किए गए आईपी पते को खो देता है, और फिर, ipconfig getifaddr en1विफल हो जाता है, इसलिए मेरी स्क्रिप्ट पूरी तरह से वाईफाई को रीसेट करती है, जिससे यह अपनी पिछली स्थिति का पुनर्निर्माण करता है और वाईफाई-साझाकरण को पुनर्प्राप्त करता है।

यह कीबोर्ड, माउस या मॉनिटर के बिना एक मैकमिनी के अंदर अब तक कई दिनों से काम कर रहा है, लेकिन केवल ईथरनेट में प्लग किया गया है और मेरे वाईफाई गैजेट को दुनिया तक पहुंच प्रदान कर रहा है।


0

यह करने के लिए वास्तव में आसान तरीका है NetworkLocation आवेदन के साथ @ फिलिप के उत्तर को संयोजित करना। एनएल बता सकता है कि आप कहां हैं, और स्वचालित रूप से एक AppleScript चलाते हैं जब यह होश आता है कि आपने स्थान बदल दिए हैं।

मुझे लगता है कि यदि आपके पास एक लैपटॉप है तो यह आवश्यक सॉफ़्टवेयर है - अन्यथा, जब भी मैं स्थान बदलता हूं, तो कई सेटिंग्स को मैन्युअल रूप से रीसेट करना होगा।


मार्को पोलो ( symonds.id.au/marcopolo ) की तरह लगता है, लेकिन मार्को पोलो स्टेरॉयड के बिना। :)
इयान सी

@ इयान - उस पृष्ठ का कहना है कि सांसद ने हिम तेंदुए के साथ मुद्दों को जाना है। Google समूह कहते हैं, "मार्कोपोलो परियोजना, मरा नहीं है दर असल, लेकिन यह बहुत धीरे विकसित किया जा रहा है। जल्द ही एक नया संस्करण की उम्मीद मत करो।" Git भंडार शो स्टेरॉयड की तरह के बाद से 2009 सितम्बर ध्वनि कोई अद्यतन मेरे लिए किसी के साथ हो रहा हो सकता है ... ;-)
डोरी

कह सकते हैं कि मैं इसके साथ किसी भी मुद्दे पर नहीं किया गया है BlueTooth के लिए SL सहेजें । मैं अभी बीटी सक्षम / अक्षम / पता लगाने की सुविधा का उपयोग नहीं करता हूं और यह शानदार ढंग से काम करता है। (लेकिन बिंदु लिया गया)
इयान सी।

0

पोस्ट किए गए दूसरे एप्सस्क्रिप्ट की तुलना में थोड़ा अलग है (मुझे लगता है कि बेहतर तरीके से लेकिन ...)। कभी-कभी विकल्प होने से मदद मिल सकती है।

 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

चूंकि जीयूआई स्क्रिप्टिंग समाधान पहले से पोस्ट किया गया था, इसलिए अंतरराष्ट्रीय उपयोगकर्ताओं को खिड़की और बटन नामों को समायोजित करने की आवश्यकता होती है, मैं एक ऐसे संस्करण के साथ आया था जो किसी भी सिस्टम भाषा के साथ काम करता है। यह अन्य साझाकरण विकल्प के लिए भी काम करता है, और साझाकरण राज्य के बारे में स्थानीय प्रतिक्रिया देता है। मैं इसके आधार पर दो अलग-अलग ऑटोमेटर सेवाओं का उपयोग करता हूं, एक फ़ाइल साझाकरण टॉगल और एक इंटरनेट साझाकरण टॉगल करने के लिए।

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

किसी भी कॉन्फ़िगरेशन से पहले / बाद में इंटरफ़ेस या साझा करने में शामिल इंटरफेस को बंद / चालू करने की आवश्यकता है:

networksetup -setairportpower en1 off

तब से। ( networksetup -setairportpower en1 on)

en1आपका उपयोग देखने के लिए मेरी वाईफाई को सूचीबद्ध किया गया था networksetup -listnetworkserviceorder। इस बिंदु पर अधिक, जब इंटरनेट साझा करना शुरू करना है तो आपको अधिक विस्तृत NAT कार्यक्षमता जोड़ने की आवश्यकता होगी तब बस सक्षम बिट सेट करना होगा।

NAT को बिट के साथ चालू / बंद किया जाता है: -int 0= ऑफ -int 1= ऑन

केवल एक चीज जिसमें लिखा गया /Library/Preferences/SystemConfiguration/com.apple.nat.plistहै

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

है

<!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>

आपको निम्न की तरह दिखने के लिए अपनी plist फाइल को बदलना होगा:

<!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>

जैसा कि आप देख सकते हैं कि मेरी plist NAT फाइल को आपकी आवश्यकताओं के अनुरूप करने के लिए थोड़ा अनुकूलन की आवश्यकता हो सकती है।


0

मैं 2011 की शुरुआत में मैकबुक प्रो / 10.11.3 एल कैपिटन पर इंटरनेट शेयरिंग को टॉगल करने के लिए निम्न स्क्रिप्ट का उपयोग करता हूं, इसलिए नए हार्डवेयर के साथ आप कम देरी के साथ दूर हो सकते हैं। यह इस उद्देश्य के लिए पोस्ट की गई कई लिपियों से विचारों को अपनाता है (स्थानीयकरण, उपयोग करने पर वाईफाई चालू करना networksetup, बंद करना System Preferencesजब किया जाता है)।

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

0

आप इस पर नज़र डाल सकते हैं (संभवतः स्टैक ओवरफ्लो के लिए विषय बंद) प्रश्न और इसका उत्तर: AppleScript का उपयोग करके इंटरनेट शेयरिंग कैसे शुरू / बंद करें

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.