Macbook'umu harici bir monitöre her bağladığımda otomatik olarak bir komut dosyası yürütmesini sağlamanın bir yolu var mı?

Aug 18 2020

Benim macbook otomatik olarak belirli wifi ve fırlatma bağlanmak yapmak istiyorum Ay ben bunu fişten zaman tersi benim harici monitöre ve yardımcısı bağlayın her şey, ama nereden başlayacağımı bilmiyorum ...

Örneğin 60 saniyede bir harici bir monitörün bağlı olup olmadığını kontrol eden bir komut dosyası yazabilirim, ancak bir olaya kadar kontrol etmeyen veya hiçbir şey yapmayan "olay odaklı" gibi bir şey yapmak istiyorum (" harici monitör takılı "veya" harici monitör bağlı değil ") oluşur.

Herhangi bir ipucu?

Yanıtlar

2 Daniel Aug 23 2020 at 14:08

Kimse cevap vermedi ve hala daha basit bir çözüm arıyorum, ancak küçük bir SwiftUI uygulaması oluşturarak bir geçici çözüm buldum.

//
//  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")
        }
    }
    
}

Temelde didChangeScreenParametersNotification'ı dinleyen bir Metin nesnesidir . Bildirimleri dinlemek için Metin nesnesinin canlı olması gerektiğinden, uygulamanın bir özelliği her zaman açılmalı veya en aza indirilmelidir (bundan nasıl kaçınılacağı konusunda herhangi bir fikri olan var mı?). Her bildirim aldığında, bağlı ekranların sayısını kontrol eder, bağlı tek bir ekran varsa, disconnectkomut dizimi çalıştırır , yoksa betiğimi çalıştırır connect.

Komut dosyaları şöyle görünür:

#!/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

Ve uygulama böyle görünüyor 😂

Bu , programlı olarak bir kablosuz ağa bağlanmama yardımcı oldu