我使用雷电线将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的任何内容。
有人有提示吗?提前谢谢!
答案 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或重新启动的情况下重新连接它们。