てきとうなメモ

本の感想とか技術メモとか

ssh経由のpbcopy

Remote pbcopy on OS X systems - BrettTerpstra.com

SSHのポートフォワーディングとlaunchdを利用してpbcopyできるのか。

手順は

Mac側でpbcopy用launchdの.plistファイルを作成。(cf. man launchd.plist)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
     <key>Label</key>
     <string>localhost.pbcopy</string>
     <key>ProgramArguments</key>
     <array>
         <string>/usr/bin/pbcopy</string>
     </array>
     <key>inetdCompatibility</key>
     <dict>
          <key>Wait</key>
          <false/>
     </dict>
     <key>Sockets</key>
     <dict>
          <key>Listeners</key>
               <dict>
                    <key>SockServiceName</key>
                    <string>2224</string>
                    <key>SockNodeName</key>
                    <string>127.0.0.1</string>
               </dict>
     </dict>
</dict>
</plist>

launchdに.plistをロード

$ launchctl load ~/Library/LaunchAgents/pbcopy.plist

これでlocalhost:2224に送った文字列がクリップボードにコピーされる。

~/.ssh/configにポートフォワーディングの設定

RemoteForward 2224 127.0.0.1:2224

これで、sshでサーバにログインした状態でlocalhost:2224に文字列を送ると、Mac側のクリップボードに文字列がコピーされる。

サーバ側でpbcopyのシェルスクリプトを作成。文字列を2224ポートに送信すれば良い

#!/bin/sh
cat | nc localhost 2224

これで、

[boscono@mac]$ ssh server
[boscono@server]$ echo "hello world" | pbcopy

で"hello world"がmacクリップボードにコピーされることになる。