Existe uma maneira de fazer meu macbook executar automaticamente um script toda vez que eu o conecto a um monitor externo?
Eu gostaria de fazer meu macbook se conectar automaticamente a um wifi específico e iniciar o Lunar toda vez que eu o conectar ao meu monitor externo, e vice-versa quando eu o desconectar, mas não sei por onde começar...
Eu poderia escrever um script que continua verificando se um monitor externo está ou não conectado a cada, por exemplo, 60 segundos, mas gostaria de fazer algo como "orientado a eventos" que não verifica nem faz nada até que um evento (" monitor externo conectado" ou "monitor externo desconectado").
Alguma dica?
Respostas
Ninguém respondeu e ainda estou procurando uma solução mais simples, mas encontrei uma solução alternativa para criar um pequeno aplicativo SwiftUI.
//
// ContentView.swift
// HomeSweetHome
//
// Created by Daniel Falbo on 20/08/2020.
// Copyright © 2020 Daniel Falbo. All rights reserved.
//
import SwiftUI
struct ContentView: View {
func execute(script: String) {
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = ["/Applications/HomeSweetHome.app/Contents/bin/\(script)"]
task.launch()
}
var body: some View {
Text("")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.onReceive(NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification)) { _ in
self.execute(script: NSScreen.screens.count > 1 ? "connect" : "disconnect")
}
}
}
É basicamente apenas um objeto Text que escuta didChangeScreenParametersNotification . Como o objeto Text deve estar ativo para ouvir notificações, uma instância do aplicativo deve sempre ser aberta ou minimizada (alguém tem alguma ideia de como evitar isso?). Toda vez que ele recebe uma notificação, ele verifica a quantidade de displays conectados, se tiver apenas um display conectado, ele executa meu disconnect
script, senão executa meu connect
script.
É assim que os scripts se parecem:
#!/usr/bin/env sh
#
# connect
#
open -a Lunar
networksetup -setairportnetwork en0 $SSID $PASSWORD
#!/usr/bin/env sh
#
# disconnect
#
killall Lunar
networksetup -setairportnetwork en0 $SSID $PASSWORD
E é assim que o aplicativo se parece

Isso me ajudou a conectar a um wi-fi programaticamente