ロジクールは最強ですんで。
MacとWindowsの2台を、一台のモニターで使っています。
画面の切り替えと、マウスとキーボードの切り替えが別々。毎回2回押す。これが最悪でした。
一発にしました。ロジクールのキーボードと、少しのコードで。2台持ちの人なら、たぶん同じようにできます。
目次
しくみ
- キーボードのEasy-Switchボタン(つなぐ先のパソコンを選ぶボタン)を押す
- キーボードとマウスがWindowsへ移る(ロジクールのFlow)
- Macからキーボードがいなくなる。それをMacが見つけて、モニターの切り替えのショートカットを押す
- 画面もWindowsへ移る
戻すときも同じです。
用意するもの
- Logi Options+(両方のパソコンに。Flowでマウスとキーボードを一緒に移す)
- Hammerspoon(Mac用の無料ソフト。下のコードを動かす)
- モニターの入力を、Macのショートカットで切り替えられるソフト(うちはEIZOのソフト)
コード
Hammerspoonの設定ファイル(init.lua)に入れます。ファイルはGoogleドライブにも置いてあります。
-- MX Keys の端末切り替えに合わせて、EIZO の入力を切り替える
-- 2(Windows)を押す → キーボードが Mac から外れる → Ctrl+Cmd+S(HDMI)
-- 1(Mac)を押す → キーボードが Mac につながる → Ctrl+Cmd+A(USB-C)
-- ショートカットは EIZO のソフトで設定したホットキーと同じもの
local KB_NAME = "MX KEYS S" -- Mac から見えるキーボードの名前
local POLL_SEC = 0.5 -- 何秒ごとに確認するか
local OFF_WAIT = 1 -- 外れてから何秒で切り替えるか(一瞬の切断は無視)
local kbPrev, kbOffSince = nil, nil
local function sendSwitch(toMac)
if toMac then
hs.eventtap.keyStroke({"ctrl", "cmd"}, "a", 200000)
else
hs.eventtap.keyStroke({"ctrl", "cmd"}, "s", 200000)
end
end
local function check()
local out = hs.execute("/usr/sbin/ioreg -r -l -c IOHIDDevice") or ""
local now = out:find('"Product" = "' .. KB_NAME, 1, true) ~= nil
if kbPrev == nil then kbPrev = now; return end
if now then
kbOffSince = nil
if kbPrev == false then sendSwitch(true) end
kbPrev = true
elseif kbPrev == true then
kbOffSince = kbOffSince or hs.timer.secondsSinceEpoch()
if hs.timer.secondsSinceEpoch() - kbOffSince >= OFF_WAIT then
sendSwitch(false)
kbPrev = false
end
end
end
kbTimer = hs.timer.doEvery(POLL_SEC, check)
check()
キーボードの名前は、Macからの見え方に合わせます。うちでは「MX KEYS S」と大文字でした。ここが違うと何も起きません。ショートカットも、自分で割り当てたものに合わせてください。
環境
- Mac:Mac Studio(USB-Cケーブルでモニターにつなぐ)
- Windows:ノートPC(HDMIケーブルでモニターにつなぐ)
- モニター:EIZO FlexScan
- キーボード:Logicool MX Keys S
- マウス:Logicool MX Ergo S

コメント