2013-02-21 83 views
8

我使用雷電電纜將MBA附加到iMac。在iMac上按CMD + F2可以使目標顯示模式使用iMac作爲MBA的顯示屏。有沒有人有信息如何以編程方式觸發該事件?如何以編程方式輸入目標顯示模式?

我的第一種方法是發送CGEventPostkCGHIDEventTap

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

這是行不通的。它所做的只是一個錯誤「嘟嘟」。 (也嘗試以root用戶身份運行)。我認爲,kCGHIDEventTap只是錯誤的目標,CMD + F2可能生活在更高級別的操作系統(又名「某處」)。

運行某些按鍵事件捕獲代碼不會顯示CMD + F2的任何內容。

有沒有人有提示?提前致謝!

+0

我會打賭一美元以上的按鍵是永遠不會到窗口服務器,所以是的,'kCGHIDEventTap'太遲了。您需要回顧一下[IOKit](http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_Intro/AH_Intro.html%23/)。我認爲[IOHIDManager](http://developer.apple.com/library/mac/#documentation/IOKit/Reference/IOHIDManager_header_reference/Reference/reference。html)將允許你對這些按鍵進行通知,但是如果你可以在不創建內核擴展的情況下僞造它們,我會感到驚訝。 – 2013-02-21 19:34:32

+0

另請參見:http://www.cocoabuilder.com/archive/cocoa/166322-eject-key-code.html – 2013-03-08 21:07:44

回答

3

我已經開始了一個項目,這樣做,即監控iMac和自動觸發目標顯示模式,以及切換當Macbook連接時關閉藍牙。您可以從https://github.com/duanefields/VirtualKVM下載它。我正在使用AppleScript觸發密鑰。

+0

哦,男人,你搖滾!這正是我期待的! – artspb 2015-09-21 10:30:26

+0

這太神奇了!謝謝 – Jimmy 2015-12-18 20:20:24

0

其實你可以很容易地做到這一點,沒有一個程序,使用osascript。

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

但是,插入電纜時它不會自動完成。

如果您還想使用單個藍牙鍵盤和觸控板,則可以使用blueutil在imac上臨時禁用藍牙以將其切換到macbook,以便macbook可以抓住鍵盤和觸控板。每當你想退出目標顯示模式,只需關閉我的MacBook上的藍牙,並等待幾秒鐘,imac重新連接到鍵盤和觸控板。

在iMac,把下面的腳本文件中的〜/斌/目標顯示方式,並運行`使用chmod + x〜/斌/目標顯示模式

然後在你的iMac,在一個術語窗口,運行目標顯示模式作爲命令。 如果您的Macbook上啓用了藍牙,並且它已經知道您的鍵盤和觸控板,則它將連接到它們。或者打開藍牙首選項並查找每個設備並「連接」(使用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 
) & 

發現腳本反過來等待60秒鐘,然後在iMac上開啓藍牙回來。這是非常重要的,你沒有另一個鍵盤或硬連線鼠標。如果藍牙保持關閉,您將無法使用ssh重新連接它們,或重新啓動。

相關問題