Apakah ada cara untuk membuat macbook saya secara otomatis menjalankan skrip setiap kali saya menghubungkannya ke monitor eksternal?
Saya ingin membuat macbook saya secara otomatis terhubung ke wifi tertentu dan meluncurkan Lunar setiap kali saya menghubungkannya ke monitor eksternal saya, dan sebaliknya ketika saya mencabutnya, tetapi tidak tahu harus mulai dari mana ...
Saya dapat menulis skrip yang terus memeriksa apakah monitor eksternal terhubung atau tidak setiap, misalnya, 60 detik, tetapi saya ingin melakukan sesuatu seperti "event driven" yang tidak memeriksa atau melakukan apa pun sama sekali hingga suatu peristiwa (" monitor eksternal terpasang "atau" monitor eksternal dicabut ") terjadi.
Ada petunjuk?
Jawaban
Tidak ada yang menjawab dan saya masih mencari solusi yang lebih sederhana tetapi saya telah menemukan solusi untuk membuat aplikasi SwiftUI kecil.
//
// 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")
}
}
}
Ini pada dasarnya hanya objek Teks yang mendengarkan didChangeScreenParametersNotification . Karena objek Text harus hidup untuk mendengarkan notifikasi, istance aplikasi harus selalu dibuka atau diminimalkan (apakah ada yang tahu tentang cara menghindarinya?). Setiap kali menerima pemberitahuan, ia memeriksa jumlah tampilan yang terhubung, jika hanya ada satu layar yang terhubung, ia mengeksekusi disconnect
skrip saya , jika tidak ia mengeksekusi connect
skrip saya .
Seperti inilah tampilan skripnya:
#!/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
Dan seperti inilah tampilan aplikasinya 😂

Ini membantu saya terhubung ke wifi secara terprogram