如何通过 AppleScript 更改主显示器?

10
从“系统偏好设置”中的“显示器”面板中,我可以通过拖动菜单栏从一个显示器到另一个来手动更改主显示器。我想自动化这个过程,并将其作为AppleScript的一部分。
5个回答

6
我编写的工具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" 示例配置文件2将白色条放在右侧监视器的菜单栏上。 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

对我来说,使用“上下文屏幕 ID”比“持久屏幕 ID”更有效。 - ivorynoise

4
显示器受控于偏好文件/Library/Preferences/com.apple.windowserver.plist
  1. 标志位控制主显示屏是否为内置屏幕,使用DisplayMainOnInternal键。
  2. DisplaySets键包含显示设置列表。第一个设置是正在使用的(需要检查)。
  3. 在设置中,每个项目都包含了屏幕属性。 IOFlags键似乎表示显示器是否为主显示器(值为7)或非主显示器(值为3)。

在使用Apple脚本之前,您可以手动更改显示配置,并保存/Library/Preferences/com.apple.windowserver.plist文件以进行学习。

请注意以下过程未经测试!!!

使用AppleScript逐个更改plist文件中的键以更改主显示器:

  1. 备份/Library/Preferences/com.apple.windowserver.plist(以防万一)
  2. 使用defaults命令更改选择主显示器的显示设置和IOFlags键来更改显示设置
  3. 重启Window Server:killall -KILL SystemUIServer

1

你应该看看是否可以通过AppleScript的用户界面脚本来完成。它允许您操作应用程序的GUI元素;当应用程序不直接支持脚本时非常有用。我想自己测试一下,但我周围没有多余的显示器。

这里是MacTech提供的相当不错的概述


在我的看法中,似乎无法通过GUI脚本访问相关控件。我想我可以生成鼠标点击和拖动,但是不同的Mac和显示器排列的坐标会有所不同。 - Michael Tsai

0

使用AppleScript,您可以调用default来编写更改主监视器设置的命令。


0
就像您可以告诉System Events.app让您的Mac睡眠一样,您也可以告诉Image Events.app来处理您的显示器。 Image Events应用程序提供了一个“显示器”集合。 每个显示器都有一个带有很多好东西的“配置文件”。 但是,我刚才提到的所有内容都是只读的,因此我没有很好的方法从脚本内部执行它。
您可能在Automator中运气更好-点击录制,运行系统偏好设置,转到Displays,将菜单栏拖到另一个屏幕上,然后停止。 我敢打赌会有些东西能够起作用。

使用 Automator 进行录制似乎无法记录打开“系统偏好设置”(很容易解决)或拖动菜单栏。 - Michael Tsai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接