커맨드 라인이나 애플 스크립트에서 인터넷 공유를 시작 / 중지하는 방법이 있습니까?
문제는 집과 직장 사이에서 랩톱을 움직입니다. 한 곳에서는 무선 인터넷을 사용하므로 인터넷 공유를 사용하지 않아야합니다. 다른 곳에서는 이더넷 케이블을 통해 인터넷을 사용하고 작은 무선 네트워크를 만들어 인터넷을 다른 장치와 공유하도록 컴퓨터를 설정합니다.
그러나 위치를 전환 할 때마다 시스템 환경 설정으로 이동하여 인터넷 공유를 시작 / 중지 해야하는 지루한 지루한 상황이 발생하므로 필요에 따라 스위치를 시작하고 수행하는 빠른 명령 또는 스크립트를 원합니다.
힌트 나 아이디어가 있습니까?
답변
CLI에서 인터넷 공유를 시작하려면
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist
중지하려면 로드 를 언로드로 변경하십시오 .
이 창을 실행할 때 준비 창이 열려 있으면 변경 사항이 즉시 적용되지 않지만 (UI는 업데이트되지 않음) 작동합니다.
답변
이를 수행하는 한 가지 방법은 GUI 스크립팅입니다. 시스템 환경 설정은 기본적으로 Applescript를 지원하지 않습니다.
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
답변
나는 mankoff의 대답에서 힌트를 얻어 AppleScript로 싸 냈습니다. Automator에서이 스크립트를 사용하여 쉽게 서비스로 사용하고 키보드 단축키를 제공 할 수 있습니다.
인터넷 공유 토글 :
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
답변
간단한 변형으로 10.11.6에서 훨씬 더 나은 결과 (이미 구성된 공유 설정의 경우)를 보았습니다 …
sudo launchctl
start
com.apple.NetworkSharing
과
sudo launchctl
stop
com.apple.NetworkSharing
각기.
답변
가장 쉬운 방법 은 @Philip 의 답변 과 NetworkLocation 애플리케이션 을 결합하는 것입니다 . NL은 현재 위치를 알려주고 위치가 변경된 것을 감지하면 AppleScript를 자동으로 실행합니다.
랩톱을 사용하는 경우 소프트웨어가 필요하다고 생각합니다. 그렇지 않으면 위치를 변경할 때마다 항상 여러 설정을 수동으로 다시 설정해야하는 것은 PITA입니다.
답변
게시 된 다른 애플 스크립트와 약간 다릅니다 (더 나은 방법으로 생각하지만 …). 옵션이 있으면 도움이 될 수 있습니다.
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
답변
이전에 게시 된 GUI 스크립팅 솔루션은 해외 사용자가 창과 버튼 이름을 조정해야하므로 모든 시스템 언어와 호환되는 버전을 제안했습니다. 다른 공유 옵션에서도 작동하며 공유 상태에 대한 현지화 된 피드백을 제공합니다. 이를 기반으로 두 가지 다른 Automator 서비스를 사용합니다. 하나는 파일 공유를 전환하고 다른 하나는 인터넷 공유를 전환합니다.
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