すぐに問題を解決したい方向け(コピペでOK)
1. sleepwatcherをインストール
brew install sleepwatcher
2. スリープ時にDeskflowを終了するスクリプトを作成
cat << 'EOF' > ~/.sleep
#!/bin/sh
osascript -e 'quit app "Deskflow"' 2>/dev/null
sleep 5
pkill -9 -x Deskflow 2>/dev/null
EOF
chmod +x ~/.sleep
3. 復帰時にDeskflowを起動するスクリプトを作成
cat << 'EOF' > ~/.wakeup
#!/bin/sh
open -a Deskflow
EOF
chmod +x ~/.wakeup
4. sleepwatcherをHomebrewサービスとして起動
brew services start sleepwatcher
各ステップの詳細解説
1. sleepwatcherとは?
sleepwatcher
はmacOSのスリープと復帰のイベントを検知して、指定したスクリプトを自動で実行する常駐プログラムです。
これにより、スリープ前後にDeskflowの停止・起動処理を自動化できます。
2. スリープ時スクリプト(~/.sleep
)
#!/bin/sh
osascript -e 'quit app "Deskflow"' 2>/dev/null
sleep 5
pkill -9 -x Deskflow 2>/dev/null
-
osascript -e 'quit app "Deskflow"'
はDeskflowに正常終了を促します。 -
sleep 5
で終了処理が完了するまで待ちます。 -
pkill -9 -x Deskflow
で念のため強制終了します。
3. 復帰時スクリプト(~/.wakeup
)
#!/bin/sh
open -a Deskflow
-
open -a Deskflow
で復帰後にDeskflowを起動し直し、キーボード共有を復活させます。
4. Homebrewサービスでの自動起動
brew services start sleepwatcher
- sleepwatcherをmacOSのLaunchAgentとして自動起動・常駐させ、スリープや復帰イベントを監視します。
- Macを再起動しても自動的に動くので設定は一度でOKです。
なぜこの問題が起こるのか?
Macがスリープから復帰すると、Deskflowのキーボード共有機能が停止し、クライアントPCにキーボード入力が送られなくなります。
そのためクライアント側でキーボード操作ができない状態が続きます。(マウスは正常に動作します)
Deskflowは復帰イベントを完全には処理できていないため、この問題が起きています。
まとめ
- sleepwatcherでスリープ前後にDeskflowを停止・起動するスクリプトを実行することで問題を解決
- AppleScriptで正常終了を促し、念のため強制終了も行う安全設計
- Homebrewサービスで自動起動設定すると安定して運用可能
参考リンク