由于只有 1 台显示器,经常需要切换不同的输入源,在显示器上切换很麻烦,于是开始研究是否可以实现自动切换。
由于本人只需要在 mac 下使用,故仅记录了 mac 的内容。
前提条件:
- 显示器支持 DDC/CI 协议
命令行切换
Mac下有两个工具可以使用,详细的区别可参考这里
用法示例:
ddcctl -d 1 -i 15
m1ddc display {uuid} set input 15
快捷键切换
命令行足够轻量级,却不够方便,我们可以使用 mac 自带的 Automator 添加快捷键。步骤如下:
打开 Automator,选择「快速操作」
填写切换显示器命令
保存
在系统中配置键盘快捷键
唤醒时自动切换输入源
唤醒时,自动切换显示器,需要用到 sleepwatcher
brew install sleepwatcher
brew services start sleepwatcher
唤醒和睡眠时会分别执行 ~/.wakeup
和 ~/.sleep
,新建文件如下
touch ~/.wakeup
chmod 755 ~/.wakeup
在 .wakeup
中写入要执行的命令即可。
这里尝试基于 m1ddc
写了脚本,供参考。ddcctl
获取当前输入源会失败,直接写入切换命令就好了。
#!/bin/bash
m1ddc() {
/usr/local/bin/m1ddc $@
}
switch_input_source() {
local monitor_uuid=$1
local monitor_input=$2
if [ $(m1ddc display list | grep -c $monitor_uuid) -eq 1 ]; then
currentInput=$(m1ddc display $monitor_uuid get input)
if [ $currentInput == $monitor_input ]; then
echo "无需切换"
else
echo "需要切换"
m1ddc display $monitor_uuid set input $monitor_input
fi
fi
}
# 指定显示器
switch_input_source "C315CEDD-8D5B-4F19-A7F0-A88CEB9CEC21" 15
遗留问题
1, 若当前输入源正确,重新执行切换会闪烁
m1ddc 可以获取当前输入源,可以写逻辑解决,ddcctl 则不行
2, 唤醒其实不是一个准确的事件,比如合盖然后开盖可能不会触发,目前没有找到轻量级的方案。
本文链接:https://blog.xiaoyuyu.cn/post/mac-switch-monitor-input-source.html,参与评论 »
--EOF--
发表于 2024-11-28 17:39:00。
本站使用「署名 4.0 国际」创作共享协议,转载请注明作者及原网址。更多说明 »
提醒:本文最后更新于 106 天前,文中所描述的信息可能已发生改变,请谨慎使用。
Comments