[[https://tmux.github.io|tmux]] is a terminal multiplexer which means that you can have multiple windows open in a single terminal, it also supports the feature of sessions (akin to [[https://robots.thoughtbot.com/a-tmux-crash-course|screen]]) meaning you can [[linux:ssh|SSH]] into a remote machine, start a session under tmux, log out and then connect to your previous session with continuity, very handy. # Session Management A simple table for reference of the commonly used commands for managing sessions. ^ Command ^ Action ^ | `tmux list-sessions` | List existing sessions. | | `tmux new-session -s mongo` | Start a new session with name `mongo`. | | `tmux attach -t default` | Attach to session with the name `default`. | A useful trick for servers where you might like to always connect to a tmux session is to add the following to the end of your `~/.bashrc` which will attach you to the `default` tmux session if one exists, if not it will start one with that name. if [ -z "$TMUX" ]; then tmux attach -t default || tmux new -s default fi # Actions and Navigation Tmux works rather like Emacs' key bindings, but instead of `C-u` or `M-x` that you would use under Emacs you to initiate all key sequences `C-b` (of which there are many, many, many to learn). Common commands can have custom values set or redefined entirely should you desire. ^ Action Type ^ Command ^ Action ^ | Sessions | `C-b d` | Detach from current session. | | | `C-b $` | Rename session. | | | `C-b ` | Reload configuration. | | Scrolling | `C-b [PgUp|PgDn]` | Scroll up/down the buffer (`q` to exit and return to command prompt). | | Panes | `C-b %` also `C-b V` | Split pane vertically. | | | `C-b "` also `C-b H` | Split pane vertically. | | | `C-b x` | Kill a pane. | | Windows | `C-b c` | Create a new window. | | | `C-b ,` | Rename current window. | | | `C-b &` | Close current window. | | | `C-b n` | Next window. | | | `C-b p` | Previous window. | | Panes | `C-b : setw synchronize-panes on` | Sends the same commands you type to every pane/window, very handy if e.g. updating multiple systems. | ## Mouse If you've used GNU/Linux desktop environments for any period of time you'll likely find the mouse an invaluable tool for copying and pasting between things, highlight something then use the third mouse button to paste it in the target. To continue using this feature under tmux you have add the following line to your config and use the `Shift` button in conjunction with your highlighting and pasting. set -g mouse on # Configuration Tmux is highly configurable and combined with [[|powerline]] (a Python module originally for Vim but which supports Bash and Zsh) allows highly informative (and much more importantly pretty) decoration around the command line prompt and window in general. All configuration options go in the ''~/.tmux_conf'' file but it is perfectly permissible for this file to source others. ## Tmux on SSH Since the ability to connect/disconnect from sessions is one of the major appeals of Tmux I wanted to ensure that whenever I SSH'd into my server I connected to the same Tmux session, or if none had been started one was created. The [solution](https://stackoverflow.com/questions/27613209/how-to-automatically-start-tmux-on-ssh-session/) was to add the following to `.bashrc` although I ensured that I used `$SSH_TTY` as explained in one of the answers to ensure that I didn't screw up sftp/rsync connections made over SSH. ```bash if [[ -z "$TMUX" ]] && [ "$SSH_TTY" != "" ]; then tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux fi ``` ## Sharing Tmux Sessions Start a Tmux session with an explicit socket, change the group ownership of it to a group that all potential users are members of they can then specify that socket and attach to the session. ```bash tmux -S /tmp/shared-tmux new -s shared-session chgrp users /tmp/shared-tmux ``` Other users who are members of `users` can now attach to the session with... ```bash tmux -S /tmp/shared-tmux attach -t shared-session ``` # Links * [A tmux Crash Course](https://robots.thoughtbot.com/a-tmux-crash-course) * [Tmux Cheat Sheet & Quick Reference](https://www.tmuxcheatsheet.com/) * [The Tao of Tmux](https://leanpub.com/the-tao-of-tmux/) ## Custom Configuration * [Better mouse scrolling in Tmux](http://www.davidverhasselt.com/better-mouse-scrolling-in-tmux/) * [Scripting tmux](https://www.arp242.net/tmux.html) ## Themes * [tmux-themepack](https://github.com/jimeh/tmux-themepack) easy to clone set of themes. ## Plugins * [Git in your tmux status bar](https://github.com/arl/gitmux) ## HowTos * [Sharing Linux Terminal Sessions With Tmux and Screen](https://www.howtoforge.com/sharing-terminal-sessions-with-tmux-and-screen)