在“系统偏好设置”的“显示器”窗格中,我可以通过将菜单栏从一个显示器拖到另一个显示器来手动更改主显示器。我想将其自动化并使其成为 AppleScript 的一部分。
5 回答
显示由/Library/Preferences/com.apple.windowserver.plist
首选项文件控制:
- 一个标志控制主显示器是否是板载屏幕的
DisplayMainOnInternal
关键。 - 该
DisplaySets
键包含显示集的列表。第一组是使用的(要检查的事实)。 - 在集合中,每个项目都包含屏幕属性。该
IOFlags
键似乎表明显示器是主要显示器(值为 7)还是不是(值为 3)。
在使用 Apple Script 之前,您可以手动更改显示配置,并保存文件副本/Library/Preferences/com.apple.windowserver.plist
以研究它。
请注意,以下程序尚未经过测试!!!
使用 AppleScript,plist 文件中的键会单独更改,以更改主显示:
- 备份
/Library/Preferences/com.apple.windowserver.plist
(以防万一) - 使用命令更改显示设置选择主显示(
DisplaySets
和IOFlags
键)defaults
- 重新启动窗口服务器:
killall -KILL SystemUIServer
我编写的工具displayplacer就是这样做的。
配置你喜欢的屏幕,在 macOS 系统设置中将“白条”拖到你的主屏幕,然后执行displayplacer list
. 它将输出要运行的命令,以将您的屏幕置于其当前配置中。屏幕origin:(0,0)
是带有“白条”的主显示屏。通过脚本、Automator、BetterTouchTool 等运行此终端命令。
示例配置文件 1 将白条放在左侧监视器的菜单栏上。
displayplacer "id:<leftScreenId> res:1920x1080 scaling:on origin:(0,0) degree:0" "id:<rightScreenId> res:1920x1080 scaling:on origin:(1920,0) degree:0"
示例配置文件 1 将白色条放在右侧显示器的菜单栏上。
displayplacer "id:<leftScreenId> res:1920x1080 scaling:on origin:(1920,0) degree:0" "id:<rightScreenId> res:1920x1080 scaling:on origin:(0,0) degree:0"
也可通过 Homebrew 获得brew tap jakehilborn/jakehilborn && brew install displayplacer
你应该看看你是否可以通过 AppleScript 的用户界面脚本来做到这一点。它允许您操作应用程序的 GUI 元素;当应用程序不直接支持脚本时很有用。我会自己测试它,但我周围没有任何额外的显示器。
就像您可以告诉 System Events.app 让您的 Mac 进入睡眠状态一样,您也可以让 Image Events.app 扰乱您的显示器。Image Events 应用程序提供了一个“显示”集合。每个显示器都有一个包含很多好东西的“配置文件”。但是,我刚刚提到的所有内容都是只读的,因此我没有从脚本中执行此操作的好方法。
您可能在 Automator 中运气更好——点击记录,运行系统偏好设置,转到显示,将菜单栏拖到另一个屏幕,然后点击停止。我敢打赌有些东西会奏效。
使用 AppleScript,您可以调用default
来编写更改主监视器的设置。