Pair programming is a wonderful thing. It can get you out of your programming jam faster than anything. If you haven’t tried pair programming, then you need too. It is just that simple. The easiest way to pair program is to have everyone sit down at the computer together. Typically one person “drives” and the other helps out. If you cannot sit down with your pair partner in person then remote pairing though SSH and Tmux works great.
It is easy to setup your computer to support remote pairing.
Install Tmux using Homebrew.
brew install tmux
You might want to change the configuration. Take a look at my .tmux.conf. It’s a good starter configuration using
ctrl+/ as the Tmux key.
Setup user account for pair partner
Next thing you need to do is setup a user account for others to SSH into your computer with. You can reuse the same account for all your pair programming instead of an account per partner. In my case I created a user named
remotepair. This is setup like any other user on your Mac; you use the “User & Groups” system preference.
Allow user to connect via SSH
Once the user is setup you need to allow the user to log in via SSH. In the “Sharing” system preference enable “Remote Login”. And then add the following to your
Match User remotepair X11Forwarding no AllowTcpForwarding no ForceCommand /usr/local/bin/tmux -S /tmp/pair attach -t workenv
Change the first line to match the user account name you created. The last line connects the user to your Tmux session.
Setting up the shared Tmux session
The secret to getting a shared session working with Tmux is to know where the socket is. You can use the
-S argument to specify this location. I have created a script to setup my environment and include this option. The following is the script I use for my work project. It sets up 3 windows in a named session using the socket path of
/tmp/pair. This is the same path from
/etc/sshd_config’s force command.
#!/bin/sh tmux -S /tmp/pair has-session -t workenv if [[ $? == 1 ]] ; then pushd /Volumes/Analog/super-banner tmux -S /tmp/pair new-session -d -s workenv -n Vim tmux -S /tmp/pair new-window -t workenv -n Super-Banner cd /Volumes/Analog/cookbooks tmux -S /tmp/pair new-window -t workenv -n Cookbooks tmux -S /tmp/pair select-window -t workenv:Vim popd fi tmux -S /tmp/pair -2 attach -t workenv
Enable pair partner to join the shared session
Finally I have created a script to set the needed permissions on the shared socket. Additionally I enable and disable the login ability of the pair partner account.
#! /bin/sh if [ "enable" = "$1" ]; then chmod 777 /tmp/pair sudo dscl . -create /Users/remotepair UserShell /bin/bash else chmod 770 /tmp/pair sudo dscl . -create /Users/remotepair UserShell /usr/bin/false fi
Pair for the win
Tell your pair partner to connect to your computer using your pairing account name.
Thats it! Your all setup to pair via SSH and Tmux. Head over to Ruby Pair and try it out.