क्या मेरे मैकबुक को स्वचालित रूप से स्क्रिप्ट को निष्पादित करने के लिए हर बार जब मैं इसे बाहरी मॉनिटर से जोड़ता हूं, तो क्या कोई तरीका है?

Aug 18 2020

मैं अपनी मैकबुक को स्वचालित रूप से एक विशिष्ट वाईफाई से कनेक्ट करना चाहता हूं और लूनर को हर बार लॉन्च करता हूं, मैं इसे अपने बाहरी मॉनिटर से जोड़ता हूं, और इसके विपरीत जब मैं इसे अनप्लग करता हूं, लेकिन यह नहीं जानता कि कहां से शुरू करें ...

मैं एक स्क्रिप्ट लिख सकता था जो यह जांचती रहती है कि कोई बाहरी मॉनिटर प्रत्येक से जुड़ा हुआ है या नहीं, उदाहरण के लिए, 60 सेकंड, लेकिन मैं "इवेंट संचालित" जैसा कुछ करना चाहूंगा जो न तो चेक कर रहा है और न ही घटना तक कुछ भी कर रहा है (" बाहरी मॉनिटर प्लग किया हुआ "या" बाहरी मॉनिटर अनप्लग्ड ") होता है।

कोई संकेत?

जवाब

2 Daniel Aug 23 2020 at 14:08

किसी ने जवाब नहीं दिया और मैं अभी भी एक सरल समाधान की तलाश कर रहा हूं, लेकिन मैंने थोड़ा सा स्विफ्टयूआई ऐप बनाने के लिए वर्कअराउंड ढूंढ लिया है।

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

यह मूल रूप से सिर्फ एक टेक्स्ट ऑब्जेक्ट है जो didChangeScreenParametersNotification के लिए सुनता है । चूँकि सूचनाओं को सुनने के लिए टेक्स्ट ऑब्जेक्ट जीवित होना चाहिए, इसलिए ऐप का एक इस् टेंस हमेशा खोला या छोटा किया जाना चाहिए (क्या किसी को इस पर कोई विचार नहीं है?)। हर बार जब यह एक सूचना प्राप्त करता है, तो यह कनेक्टेड डिस्प्ले की संख्या की जांच करता है, अगर केवल एक डिस्प्ले जुड़ा हुआ है, तो यह मेरी disconnectस्क्रिप्ट को निष्पादित करता है , अन्यथा यह मेरी connectस्क्रिप्ट को निष्पादित करता है ।

यह वही है जो स्क्रिप्ट की तरह दिखता है:

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

और यह वह ऐप है जो app जैसा दिखता है

इससे मुझे एक वाईफाई प्रोग्राम से जुड़ने में मदद मिली