====== tmux ====== ===== links ===== * [[http://robots.thoughtbot.com/post/2641409235/a-tmux-crash-course]] * [[http://www.dayid.org/os/notes/tm.html]] * [[http://ricochen.wordpress.com/2011/11/14/tmux-techniques-by-example/]] ===== run multiple sessions in multiple places ===== [[http://stackoverflow.com/questions/8537149/how-to-start-tmux-with-several-windows-in-different-directories|Source]] #!/bin/bash # var for session name (to avoid repeated occurences) sn=xyz # Start the session and window 0 in /etc # This will also be the default cwd for new windows created # via a binding unless overridden with default-path. cd /etc tmux new-session -s "$sn" -n etc -d # Create a bunch of windows in /var/log cd /var/log for i in {1..6}; do tmux new-window -t "$sn:$i" -n "var$i" done # Set the default cwd for new windows (optional, otherwise defaults to session cwd) #tmux set-option default-path / # Select window #1 and attach to the session tmux select-window -t "$sn:1" tmux -2 attach-session -t "$sn" ===== Execute commands inside a window ===== [[https://gist.github.com/728896">https://gist.github.com/728896|Source]] tmux send-keys -t test:1 "ls" C-m ===== Share sessions between users ===== ==== prepare the place ==== sudo groupadd tmux-share sudo addgroup tmux-share myuser sudo addgroup tmux-share myotheruser sudo mkdir /tmp/tmux-share sudo chgrp tmux-share /tmp/tmux-share sudo chmod -R 2775 /tmp/tmux-share ==== create the session ==== tmux -S /tmp/tmux-share/1 new-session -s mysession ==== connect to the session ==== tmux -S /tmp/tmux-share/1 attach -t mysession ===== Log output ===== tmux -S /tmp/tmux-share/test new -s test1 tmux -S /tmp/tmux-share/test pipe-pane -o -t test1 'cat >> tmux.log' ==== Admin config ==== in ~/.tmux.conf # C-b is not acceptable -- Vim uses it set-option -g prefix C-a bind-key C-a last-window # Start numbering at 1 set -g base-index 1 # Allows for faster key repetition set -s escape-time 0 # Set status bar set -g status-bg black set -g status-fg white set -g status-left "" set -g status-right "#[fg=green]#H" # Rather than constraining window size to the maximum size of any client # connected to the *session*, constrain window size to the maximum size of any # client connected to *that window*. Much more reasonable. setw -g aggressive-resize on # Allows us to use C-a a to send commands to a TMUX session inside # another TMUX session bind-key a send-prefix # Activity monitoring #setw -g monitor-activity on #set -g visual-activity on # Example of using a shell command in the status line #set -g status-right "#[fg=yellow]#(uptime | cut -d ',' -f 2-)" # Highlight active window set-window-option -g window-status-current-bg red ===== tmux php ===== exec('sudo -u username sh -c "tmux new-session -dPs test"', $output, $code); print_r($output); print_r($code); /etc/sudoers.d/sudoers www-data ALL=(ALL) NOPASSWD:ALL # be carefull, it is better to filter the commands sending the script to a bash script www-data ALL=(ALL) NOPASSWD: /var/www/mysite/commands.sh /home/username/.tmux.conf set -g default-shell '/bin/sh' {{tag>tmux}}