มีวิธีทำให้ macbook รันสคริปต์โดยอัตโนมัติทุกครั้งที่เชื่อมต่อกับจอภาพภายนอกหรือไม่?

Aug 18 2020

ฉันต้องการให้ macbook ของฉันเชื่อมต่อกับ wifi เฉพาะโดยอัตโนมัติและเปิดLunarทุกครั้งที่ฉันเชื่อมต่อกับจอภาพภายนอกของฉันและในทางกลับกันเมื่อฉันถอดปลั๊กออก แต่ไม่รู้ว่าจะเริ่มจากตรงไหน ...

ฉันสามารถเขียนสคริปต์ที่คอยตรวจสอบว่ามีการเชื่อมต่อจอภาพภายนอกหรือไม่ทุก ๆ ตัวอย่างเช่น 60 วินาที แต่ฉันต้องการทำบางสิ่งเช่น "เหตุการณ์ขับเคลื่อน" ที่ไม่มีการตรวจสอบหรือทำอะไรเลยจนกว่าจะเกิดเหตุการณ์ (" จอภาพภายนอกเสียบอยู่ "หรือ" จอภาพภายนอกไม่ได้เสียบปลั๊ก ") เกิดขึ้น

คำแนะนำใด ๆ ?

คำตอบ

2 Daniel Aug 23 2020 at 14:08

ไม่มีใครตอบฉันยังคงมองหาวิธีแก้ปัญหาที่ง่ายกว่านี้ แต่ฉันพบวิธีแก้ปัญหาในการสร้างแอป SwiftUI เล็กน้อย

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

และนี่คือลักษณะของแอพ😂

สิ่งนี้ช่วยให้ฉันเชื่อมต่อกับ wifi โดยทางโปรแกรม