क्या मेरे मैकबुक को स्वचालित रूप से स्क्रिप्ट को निष्पादित करने के लिए हर बार जब मैं इसे बाहरी मॉनिटर से जोड़ता हूं, तो क्या कोई तरीका है?
मैं अपनी मैकबुक को स्वचालित रूप से एक विशिष्ट वाईफाई से कनेक्ट करना चाहता हूं और लूनर को हर बार लॉन्च करता हूं, मैं इसे अपने बाहरी मॉनिटर से जोड़ता हूं, और इसके विपरीत जब मैं इसे अनप्लग करता हूं, लेकिन यह नहीं जानता कि कहां से शुरू करें ...
मैं एक स्क्रिप्ट लिख सकता था जो यह जांचती रहती है कि कोई बाहरी मॉनिटर प्रत्येक से जुड़ा हुआ है या नहीं, उदाहरण के लिए, 60 सेकंड, लेकिन मैं "इवेंट संचालित" जैसा कुछ करना चाहूंगा जो न तो चेक कर रहा है और न ही घटना तक कुछ भी कर रहा है (" बाहरी मॉनिटर प्लग किया हुआ "या" बाहरी मॉनिटर अनप्लग्ड ") होता है।
कोई संकेत?
जवाब
किसी ने जवाब नहीं दिया और मैं अभी भी एक सरल समाधान की तलाश कर रहा हूं, लेकिन मैंने थोड़ा सा स्विफ्टयूआई ऐप बनाने के लिए वर्कअराउंड ढूंढ लिया है।
//
// 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 जैसा दिखता है
इससे मुझे एक वाईफाई प्रोग्राम से जुड़ने में मदद मिली