Apakah ada cara untuk membuat macbook saya secara otomatis menjalankan skrip setiap kali saya menghubungkannya ke monitor eksternal?

Aug 18 2020

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

2 Daniel Aug 23 2020 at 14:08

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 disconnectskrip saya , jika tidak ia mengeksekusi connectskrip 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