通过键盘实现单屏多信号源的一键切换

本人有两台设备都接入了同一台显示器,要切换输入源需要手动去按显示器上的按钮,显示器有点大,按钮离得又远,人又比较懒。所以就找了找有没有可行的方案,看看能否实现通过键盘一键切换。本人在尝试方案3的时候遇到了点小问题,所以在此基础上对方案3进行了完善,并采用类似的方法实现了方案1和方案2.

Windows

View and modify the settings of your monitor (VCP Features)

WinHotKey | directedge.us

装好以上两个软件,将第一个软件放入一个固定位置。启动第一个软件可以看到如下的界面。我的显示器是有3个接口,但是却显示了4个可能的值,而且当前值也不在可能值的列表里面。这个应该是软件的Bug,但是不影响我们操作。

可以自己尝试修改current value的值为possible values列表里面的值,找到自己另外一个输入源对应的值(记住该值)。

https://image.i-ll.cc/mweb/20210306/16150188962773.png?imageMogr2/auto-orient/blur/1x0/quality/75|watermark/2/text/WmhhbyBDaGnigJhzIEJsb2c=/font/dGltZXMgbmV3IHJvbWFu/fontsize/240/fill/IzAwMDAwMA==/dissolve/75/gravity/SouthEast/dx/10/dy/10|imageslim

接下来打开第二个软件,键位映射软件。新建一个热键:

https://image.i-ll.cc/mweb/20210306/16150188962786.png?imageMogr2/auto-orient/blur/1x0/quality/75|watermark/2/text/WmhhbyBDaGnigJhzIEJsb2c=/font/dGltZXMgbmV3IHJvbWFu/fontsize/240/fill/IzAwMDAwMA==/dissolve/75/gravity/SouthEast/dx/10/dy/10|imageslim

进行如下图的设置。

https://image.i-ll.cc/mweb/20210306/16150188962799.png?imageMogr2/auto-orient/blur/1x0/quality/75|watermark/2/text/WmhhbyBDaGnigJhzIEJsb2c=/font/dGltZXMgbmV3IHJvbWFu/fontsize/240/fill/IzAwMDAwMA==/dissolve/75/gravity/SouthEast/dx/10/dy/10|imageslim

现在是可以通过win+F11进行一键切换了。mac端设置相对繁琐一点。

Mac

首先需要确保你安装了Xcode,且安装了command-line-tools。

kfix/ddcctl

1
2
3
4
madir tmp && git clone https://github.com/kfix/ddcctl.git
cd ddcctl && make
make install
# 然后可以自行删掉tmp文件夹。

Karabiner-Elements

键位映射我用的karabiner+goku。当然也可以直接用官方的json写法。就是比较麻烦。

方案1

因为goku比较好写,所以我才用了这个方案。直接通过brew安装goku。

brew install yqrashawn/goku/goku

安装完成后需要在karabiner里面新建一个名为Default的配置文件。如下图:

https://image.i-ll.cc/mweb/20210306/16150188962808.png?imageMogr2/auto-orient/blur/1x0/quality/75|watermark/2/text/WmhhbyBDaGnigJhzIEJsb2c=/font/dGltZXMgbmV3IHJvbWFu/fontsize/240/fill/IzAwMDAwMA==/dissolve/75/gravity/SouthEast/dx/10/dy/10|imageslim

karabiner.edn的路径如下:

~/.config/karabiner.edn

以下是我的配置,其中!Qbackslash代表的是右command+\

1
2
3
{
    :main [{:des "Change monitor input source to HDMI1" :rules [[:!Qbackslash ["/usr/local/bin/ddcctl -d 1 -i 5"]]]}]
}

意思就是每次按右command+\ 都会在终端执行后面的命令,-d 1代表的是1号显示器。-i 5代表的是改到windows的

每次修改完成都需要在终端执行goku命令

goku

方案2

官方json写法:

在~/.config/karabiner/assets/complex_modifications/下任意创建一个json文件,键入以下内容也可以实现对应的效果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
    "title": "Change the monitor input source",
    "rules": [{
        "description": "Change the monitor input source to hdmi 1",
        "manipulators": [{
            "type": "basic",
            "from": {
                "key_code": "backslash",
                "modifiers": {
                    "mandatory": ["command"],
                    "optional": ["caps_lock", "option"]
                }
            },
            "to": [{
                "shell_command": "/usr/local/bin/ddcctl -d 1 -i 5"
            }]
        }]
    }]
}

写好之后需要自行去karabiner里面开启。

https://image.i-ll.cc/mweb/20210306/16150188962816.png?imageMogr2/auto-orient/blur/1x0/quality/75|watermark/2/text/WmhhbyBDaGnigJhzIEJsb2c=/font/dGltZXMgbmV3IHJvbWFu/fontsize/240/fill/IzAwMDAwMA==/dissolve/75/gravity/SouthEast/dx/10/dy/10|imageslim

方案3

huaikitty/NativeDisplayBrightnessPlus

需要用到Xcode编译,作者没有写Makefile。

用软件实现macOS及Windows下快捷切换显示器输入源