Existe-t-il un moyen de faire en sorte que mon macbook exécute automatiquement un script chaque fois que je le connecte à un moniteur externe ?
Je voudrais que mon macbook se connecte automatiquement à un wifi spécifique et lance Lunar à chaque fois que je le connecte à mon moniteur externe, et vice versa lorsque je le débranche, mais je ne sais pas par où commencer...
Je pourrais écrire un script qui vérifie en permanence si un moniteur externe est connecté ou non toutes les 60 secondes, par exemple, mais j'aimerais faire quelque chose comme "axé sur les événements" qui ne vérifie ni ne fait rien du tout jusqu'à ce qu'un événement (" moniteur externe branché" ou "moniteur externe débranché") se produit.
Un indice ?
Réponses
Personne n'a répondu et je cherche toujours une solution plus simple mais j'ai trouvé une solution de contournement en créant une petite application 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")
}
}
}
Il s'agit essentiellement d'un objet Text qui écoute didChangeScreenParametersNotification . Étant donné que l'objet Text doit être actif pour écouter les notifications, une distance de l'application doit toujours être ouverte ou minimisée (quelqu'un a-t-il une idée sur la façon d'éviter cela ?). Chaque fois qu'il reçoit une notification, il vérifie le nombre d'écrans connectés, s'il n'y a qu'un seul écran connecté, il exécute mon disconnect
script, sinon il exécute mon connect
script.
Voici à quoi ressemblent les scripts :
#!/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
Et voici à quoi ressemble l'application
Cela m'a aidé à me connecter à un wifi par programmation