如何以编程方式进入目标显示模式?

时间:2013-02-21 19:05:16

标签: objective-c cocoa osx-mountain-lion

我使用雷电线将MBA连接到iMac。按iMac上的CMD + F2可使目标显示模式使用iMac作为MBA的显示。有没有人有关于如何以编程方式触发该事件的信息?

我的第一种方法是将CGEventPost发送到kCGHIDEventTap

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的任何内容。

有人有提示吗?提前谢谢!

3 个答案:

答案 0 :(得分:3)

我已经启动了一个项目,即监控iMac并自动触发目标显示模式,并在连接Macbook时关闭蓝牙。您可以从https://github.com/duanefields/VirtualKVM下载。我使用AppleScript触发按键。

答案 1 :(得分:0)

想知道你是否想过这个。我见过的唯一解决方案是运行一个全屏窗口并触发像这样的按键

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

答案 2 :(得分:0)

实际上,如果没有程序,使用osascript,你可以很容易地做到这一点。

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

但是当你插上电缆时它不会自动完成。

如果你还想使用单个蓝牙键盘和触控板,那么你可以使用blueutil暂时禁用imac上的蓝牙,将它们切换到macbook,这样macbook就可以抓住键盘和触控板。每当你想要退出目标显示模式时,只需关闭我的macbook上的蓝牙并等待几秒钟让imac重新连接到键盘和触控板。

在你的imac上,将下面的脚本放在〜/ bin / target-display-mode文件中,运行`chmod + x~ / bin / target-display-mode

然后在您的imac上,在术语窗口中,将target-display-mode作为命令运行。 如果你的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或重新启动的情况下重新连接它们。