2013-02-21 8 views
8

Ho allegato un MBA a un iMac utilizzando un cavo Thunderbolt. Premendo CMD + F2 su iMac, la modalità di visualizzazione target consente di utilizzare l'iMac come display per l'MBA. Qualcuno ha informazioni su come attivare quell'evento a livello di programmazione?Come accedere in modo programmatico alla modalità di visualizzazione target?

Il mio primo approccio è stato quello di inviare un CGEventPost a kCGHIDEventTap

CGEventRef f2CommandDown = CGEventCreateKeyboardEvent(src, (CGKeyCode)120, YES); 
CGEventSetFlags(f2CommandDown, kCGEventFlagMaskCommand); 
CGEventRef f2CommandUp = CGEventCreateKeyboardEvent(src, (CGKeyCode)120, NO); 
CGEventPost(kCGHIDEventTap, f2CommandDown); 
CGEventPost(kCGHIDEventTap, f2CommandUp); 

che non funziona. Tutto ciò che fa è un errore "bip". (provato anche a girare come utente root). Penso che, kCGHIDEventTap sia solo l'obiettivo sbagliato e CMD + F2 potrebbe vivere a un livello più alto del sistema operativo (noto come "da qualche parte")

L'esecuzione di un codice di cattura di eventi chiave non mostra nulla per CMD + F2.

Qualcuno ha un suggerimento? Grazie in anticipo!

+0

ci avrei scommesso più di un dollaro che pressione dei tasti non è mai sempre al server della finestra, quindi sì, 'kCGHIDEventTap' è troppo tardi. Avrete bisogno di guardare un passo indietro, a [IOKit] (http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_Intro/AH_Intro.html%23/). Penso che un [IOHIDManager] (http://developer.apple.com/library/mac/#documentation/IOKit/Reference/IOHIDManager_header_reference/Reference/reference.html) ti permetterà di essere _notified_ di questi tasti, ma sarei sorpreso se tu potessi simularli senza creare un'estensione del kernel. –

+0

Vedere anche: http://www.cocoabuilder.com/archive/cocoa/166322-eject-key-code.html –

risposta

3

ho iniziato un progetto che fa questo, cioè monitorare iMac e attivare automaticamente la modalità di visualizzazione di destinazione e ginocchiera spento bluetooth quando è collegato un Macbook. È possibile scaricarlo da https://github.com/duanefields/VirtualKVM. Sto usando AppleScript per attivare le chiavi.

+0

Oh, amico, tu rock! È esattamente quello che stavo cercando! – artspb

+0

Questo è incredibile! Grazie – Jimmy

0

chiedevo se mai capito questo. L'unica soluzione che ho visto esegue una finestra a schermo intero e innescando tasti premuti simili

http://bogner.sh/2013/07/os-x-how-to-use-an-imac-as-monitor/#comment-50925

+0

Un'estensione del kernel potrebbe svolgere il lavoro, ma non sono arrivato così lontano perché sono state fatte molte ricerche per questo piccolo test ero in esecuzione. – Boris

0

si può effettivamente fare questo abbastanza facilmente senza un programma, utilizzando osascript.

osascript -e 'tell application "System Events" to key code 144 using command down' 

Ma non lo farà automaticamente quando si collega il cavo.

Se si desidera utilizzare anche una singola tastiera e trackpad bluetooth, è possibile passare al macbook utilizzando blueutil per disattivare temporaneamente il bluetooth su imac in modo che il macbook possa afferrare la tastiera e il trackpad. Ogni volta che vuoi uscire dalla modalità di visualizzazione target, basta disattivare Bluetooth sul mio MacBook e attendere alcuni secondi affinché imac si ricolleghi alla tastiera e al trackpad.

su iMac, inserire lo script di seguito in un file ~/bin/target-display-mode, ed eseguire `chmod + x ~/bin/target-display-mode

Poi su iMac, in una finestra di termini, eseguire come modalità di visualizzazione target-display-mode. Se il bluetooth è abilitato sul tuo macbook, e conosce già la tastiera e il trackpad, quindi si collegherà a loro. Oppure apri le preferenze Bluetooth e trova ogni dispositivo e "connetti" (usando la tastiera e il trackpad integrati del MacBook).

#! /usr/bin/env bash 

# Enter target-display mode with a macbook connected by cable; 
# then, temporarily turn off bluetooth so the macbook can the 
# bluetooth keyboard, trackpad and other devices that are currently 
# connected to the imac. 
# 
# Later, turn bluetooth back on so the imac can later reconnect to it's 
# bluetooth devices. 
# 
# To exit target display mode, turn off bluetooth on the macbook and 
# disconnect the cable. After a few seconds, the imac will reconnect to 
# the keyboard and trackpad. 
# 
osascript -e 'tell application "System Events" to key code 144 using command down' 
sleep 5 
(
/usr/local/bin/blueutil off 
sleep 60 
/usr/local/bin/blueutil on 
) & 

Si noti che il turno di script attende 60 secondi e quindi riattiva il bluetooth su imac. È molto importante non avere un'altra tastiera o un mouse cablato. Se il bluetooth rimanesse spento, non saresti in grado di ricollegarli senza usare ssh o il riavvio.

Problemi correlati