Mac+RDP環境でStream Deckからパスワード自動入力する決定版【Hammerspoon活用】
📝 背景と課題
MacからMicrosoft Remote Desktop(RDP)でWindowsに接続し、Stream Deckを使って定型パスワードを入力しようとしたところ、次のような問題が発生しました:
- テキストを貼り付けようとしても
v
しか入力されない - Ctrl+Vが通らない
Windowsへのリモート接続時にパスワード入力を自動化したい場面は多いのに、なぜかうまくいかないケースがあります。
❌ 試したがダメだった方法
- Stream Deckの「テキスト送信」や「クリップボード貼り付け」機能
- Clipboard Buddy / Super Macro(Macでは動作しない)
-
⌘V
やCtrl+V
のショートカット送信(RDPが変換できず失敗)
✅ 解決策:Hammerspoonで1文字ずつ「タイプ」する!
RDPの問題を分析した結果:
- Mac上で
Ctrl+V
などの仮想キーはRDPにうまく渡らないことが多い - ならば「貼り付け」ではなく「タイプする」方が確実
- Hammerspoonを使えば、Stream DeckのホットキーでMacから仮想キーストロークを自動送信できる
🛠️ 必要なもの
- Mac
- Stream Deck(+公式アプリ)
- Microsoft Remote Desktop for Mac
- Hammerspoon(無料) - https://www.hammerspoon.org/
⚙️ 設定ステップ
① Hammerspoon の init.lua
設定例
-- init.lua
-- 業務用パスワード1
function typePassword1()
local text = "example_password1" -- 実際のパスワードに書き換え
for i = 1, #text do
local c = text:sub(i,i)
hs.eventtap.keyStroke({}, c, 0)
hs.timer.usleep(80000) -- 入力速度調整(ミリ秒)
end
hs.eventtap.keyStroke({}, "return", 0) -- Enterキー送信
hs.alert.show("🔐 パスワード1送信完了")
end
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "p", typePassword1)
-- 業務用パスワード2
function typePassword2()
local text = "example_password2" -- 実際のパスワードに書き換え
for i = 1, #text do
local c = text:sub(i,i)
hs.eventtap.keyStroke({}, c, 0)
hs.timer.usleep(80000)
end
hs.eventtap.keyStroke({}, "return", 0)
hs.alert.show("🔐 パスワード2送信完了")
end
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "d", typePassword2)
-- 起動確認
hs.alert.show("✅ Hammerspoon: パスコード送信準備OK")
② Stream Deck 側の設定
- 「ホットキー」アクションを使って、
-
⌘
+⌥
+⌃
+P
(パスワード1用) -
⌘
+⌥
+⌃
+D
(パスワード2用)
-
- をそれぞれ割り当てる
🎉 実行方法
- MacでHammerspoonを起動(アクセシビリティ許可必要)
- RDPでWindowsを開き、テキスト入力欄にフォーカス
- Stream Deckボタンを押す
- 定型パスワードが自動入力 → Enter送信まで完了!
✅ メリット
特徴 | 内容 |
---|---|
💡 シンプル構成 | すべて無料・軽量なツールのみで完結 |
✅ RDPでも確実に通る | キーストローク入力なので貼り付け制限も回避 |
🎮 Stream Deck対応 | ワンボタンで完結できる運用性の高さ |
🔐 注意点・セキュリティ対策
- 当然ながら、パスワードをスクリプトに平文で書くことはセキュリティリスクです
- 実運用では以下のような対策を検討しましょう:
- パスワードを暗号化して保存し、実行時に復号
- キーチェーンから安全に読み取る仕組みを追加
- 定期的なパスワード変更に対応できるよう設計
🧩 応用例
- 複数の入力パターンを分岐させる
- スニペットやJSONファイルから定型文を読み込む
-
hs.chooser
を使ってGUIメニューにする - 入力前に確認ダイアログを表示する
応用例:入力前の確認を追加
function typeSecurePassword()
local button, _ = hs.dialog.blockAlert(
"パスワード送信確認",
"パスワードを送信しますか?",
"送信", "キャンセル"
)
if button == "送信" then
-- パスワード入力処理(上記と同様)
end
end
📦 まとめ
課題 | 解決策 |
---|---|
Stream DeckからRDPに貼り付けできない | Hammerspoonでキーストローク送信に切り替え |
Ctrl+Vが無効 |
hs.eventtap.keyStroke() で回避 |
定型文を毎回打つのが面倒 | ボタン一発で入力完了! |
あとがき
同じように「Mac + RDP + Stream Deck」で入力自動化に困っている人に、少しでも参考になれば嬉しいです!特にRDP接続での貼り付けトラブルは意外と多いので、キーストローク送信という原始的だけど確実な方法が役立つかもしれません。
セキュリティと利便性のバランスを考慮しつつ、ぜひ自分の環境に合わせたカスタマイズを試してみてください。
タグ: Stream Deck, Hammerspoon, RDP, Mac, 自動化
投稿者:もあい
更新日:2025年5月1日