Skip to content

Instantly share code, notes, and snippets.

@mikepqr
Forked from burke/remotepaste.md
Last active December 7, 2015 03:18
Show Gist options
  • Save mikepqr/2eb4da78603ce8bc8e89 to your computer and use it in GitHub Desktop.
Save mikepqr/2eb4da78603ce8bc8e89 to your computer and use it in GitHub Desktop.
This sets up keybindings in tmux that allow you to copy/paste to/from your OS X clipboard from tmux running inside an SSH connection to a remote host.Partially borrowed from http://seancoates.com/blogs/remote-pbcopy
## Local (OS X) Side
#### `~/Library/LaunchAgents/pbcopy.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>
```
#### `~/Library/LaunchAgents/pbpaste.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.pbpaste</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/pbpaste</string>
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>2225</string>
<key>SockNodeName</key>
<string>127.0.0.1</string>
</dict>
</dict>
</dict>
</plist>
```
#### `~/.ssh/config`
```
Host myhost
HostName 192.168.1.123
User myname
RemoteForward 2224 127.0.0.1:2224
RemoteForward 2225 127.0.0.1:2225
```
**After adding the PLists above, you'll have to run:**
```
launchctl load ~/Library/LaunchAgents/pbcopy.plist
launchctl load ~/Library/LaunchAgents/pbpaste.plist
```
## Remote (Linux) Side
#### `~/.tmux.conf`
```
if-shell 'test "$(uname)" = "Linux"' 'source ~/.tmux-linux.conf'
```
#### `~/.tmux-linux.conf`
```
bind C-c run "tmux save-buffer - | pbcopy-remote"
bind C-v run "tmux set-buffer $(pbpaste-remote); tmux paste-buffer"
```
#### `~/bin/pbpaste-remote`
```
#!/bin/sh
nc localhost 2225
```
#### `~/bin/pbcopy-remote`
```
#!/bin/sh
cat | nc -q1 localhost 2224
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment