AppleScript para exibir o ícone da área da barra de status da VPN

3

Estou tentando escrever um AppleScript para conectar-se a um serviço VPN. Uma vez conectado à VPN, desejo exibir o ícone da VPN na área de status da barra de menus.

Eu cheguei tão longe

  • conectando à VPN
  • exibindo a seção Rede das Preferências do Sistema

mas não consigo selecionar o serviço. Como faço isso?

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.network"
    tell application "System Events" to tell process "System Preferences" to tell window "Network"
        -- code to select the VPN Service "XYZ" and click the "Show VPN Status in menu"
    end tell
end tell
Xerces
fonte
Eu imagino que você já saiba que as Preferências do Sistema oferecem a opção de exibir um ícone da barra de menus que permitiria a conexão fácil a uma VPN e o monitoramento do status da conexão. Talvez você tenha um motivo mais amplo para explorar uma solução AppleScript?
21712 Ash

Respostas:

3

A resposta para sua pergunta pode ser dividida em duas partes:

  1. conectar-se a uma VPN não é uma tarefa que precisa de scripts da GUI (por exemplo, abra o painel de preferências de rede e simule um clique em um item), pois essa funcionalidade faz parte do conjunto de preferências de rede dos eventos do sistema desde o Leopard (eu acho). Tudo o que você precisa é

    tell application "System Events"
        tell current location of network preferences
            connect service "<name of your VPN>"
        end tell
    end tell
  2. exibir o item da barra de status da VPN , no entanto, não faz parte do conjunto de preferências de rede . Se você não conseguir viver com o ícone presente permanentemente em sua área da barra de status, será necessário usar o script da GUI para ativá-lo sob demanda:

    property vpnToUse : "<name of your VPN>"
    tell application "System Events"
        -- first activate the network pane, wait for it to load
        -- also might want to make sure this does not interrupt user interaction
        <your code here>
        -- get the index of the VPN in the service list
        tell current location of network preferences
            repeat with i from 1 to (count of every service)
                if name of (service i) is vpnToUse then
                    set listIndex to i
                    exit repeat
                end if
            end repeat
        end tell
        -- select the VPN item in the service list and activate status bar item
        tell process (name of application id "com.apple.systempreferences")
            tell window 1
                select row listIndex of table 1 of scroll area 1
                tell checkbox 1 of group 1
                    -- only click if not already activated
                    if value is 0 then click it
                end tell
            end tell
        end tell
    end tell

    observe que essa parte, como sempre nos scripts da GUI, é potencialmente altamente perturbadora: rouba o foco do usuário, na pior das hipóteses, até cancela o que ela estava fazendo se estivesse usando as Preferências do Sistema (há uma excelente discussão sobre os profissionais e (contras de scripts da GUI para manipular as Configurações do sistema anteriores aos Conjuntos de preferências no MacScripter ). Também é frágil (pois está sujeito ao layout específico da interface do usuário do painel de preferências), embora se você seguir o modelo que mostro acima, usando índices e recuperação de nomes de processos por meio do ID do aplicativo, ele pelo menos não seja afetado por problemas de localização .

kopischke
fonte