○ tmux のインストール

・tmux はテキストユーザインタフェースのターミナルマルチプレクサです
・複数の端末を起動して切り替えられます
・端末を画面分割して使うことができます
・端末をデタッチ/アタッチすることができます
・make はメンテナンスマシンで行っています

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文 (英文) を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:tmux-2.3.tar.gz  (http://tmux.sourceforge.net/)
:libevent-2.0.22-stable.tar.gz  (http://libevent.org/)
:  (http://sourceforge.net/projects/levent/)

○参照ファイル

パッケージの追加

○インストール環境

:OS CentOS 6.8
:selinux permissive or disabled
:インストール先 
:作業 ~/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○tmux-2.3

○liveventのインストール

・tmuxのmakeには、libeventヴァージョン2が必要です
・CentOSのlibeventはヴァージョン1で、依存性があるため削除できません
・ソースからmakeし、/usr/localにインストールし、共存させます
・デフォルトではopensslライブラリを要求します(ライブラリの配置に注意)

# cd ~/src
[root@earth:~/src]
# tar zxvf libevent-2.0.22-stable.tar.gz
# chown -R root:root libevent-2.0.22-stable
# cd libevent-2.0.22-stable
[root@earth:~/src/libevent-2.0.22-stable]
# ./configure
# make
# make uninstall
# make install

# cd ..
[root@earth:~/src]
# tar jcf libevent-2.0.22-stable-160529.tar.bz2 libevent-2.0.22-stable/

○キャッシュ情報の更新と確認

・/usr/local/libの設定がされているなら、ldconfigのみ実行します

# cd ~
[root@earth:~]
# echo /usr/local/lib >> /etc/ld.so.conf.d/usrlocal.conf
# ldconfig
# ldconfig -p | grep libevent
    libevent_pthreads-2.0.so.5 (libc6) => /usr/local/lib/libevent_pthreads-2.0.so.5
    libevent_openssl-2.0.so.5 (libc6) => /usr/local/lib/libevent_openssl-2.0.so.5
    libevent_extra-2.0.so.5 (libc6) => /usr/local/lib/libevent_extra-2.0.so.5
    libevent_extra-1.4.so.2 (libc6) => /usr/lib/libevent_extra-1.4.so.2
    libevent_core-2.0.so.5 (libc6) => /usr/local/lib/libevent_core-2.0.so.5
    libevent_core-1.4.so.2 (libc6) => /usr/lib/libevent_core-1.4.so.2
    libevent-2.0.so.5 (libc6) => /usr/local/lib/libevent-2.0.so.5
    libevent-1.4.so.2 (libc6) => /usr/lib/libevent-1.4.so.2

○pkg-config用設定ファイルlibevent.pcを捜す

・libevent.pcのシンボリックリンクを/usr/lib/pkgconfigに作ります
・または、環境変数"PKG_CONFIG_PATH"を指定します

・シンボリックリンクの作成

# cd /usr/lib/pkgconfig
[root@earth:/usr/lib/pkgconfig]
# ln -s /usr/local/lib/pkgconfig/libevent.pc libevent.pc

・または、"PKG_CONFIG_PATH"の設定

# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig

○tmuxのインストール

# cd ~/src
[root@earth:~/src]
# tar zxf tmux-2.3.tar.gz
# chown -R root:root tmux-2.3
# cd tmux-2.3
[root@earth:~/src/tmux-2.3]
# ./configure --sysconfdir=/etc --localstatedir=/var

・libeventが読み込まれたか確認

# cat Makefile | grep event
LIBEVENT_LIBS = -L/usr/local/lib -levent  
LIBS = -lutil -lcurses -L/usr/local/lib -levent -lrt -lresolv

・コンパイル・インストール

# make
# make uninstall
# make install

# cd ..
[root@earth:~/src]
# tar jcf tmux-2.3-160930.tar.bz2 tmux-2.3/

○tmuxの簡単な操作

・[ C-b :キー ] Ctrlキーとbキーを押した後、:キーを押す動作

・tmuxの実行

[root@earth:~]# tmux

・セッション情報の表示
 C-b :キーでtmuxのコマンドプロンプトに入り,list-sessionコマンドを実行

: list-session

・クライアント情報の表示
 C-b :キーでtmuxのコマンドプロンプトに入り,list-clientコマンドを実行

: list-client

・ウィンドウ情報の表示
 C-b :キーでtmuxのコマンドプロンプトに入り,list-windowコマンドを実行

: list-window

・ショートカットキーの表示
 C-b :キーでtmuxのコマンドプロンプトに入り,list-keysコマンドを実行
 または C-b ?キー を押します

: list-keys

・viモードのショートカットキーの表示
 C-b :キーでtmuxのコマンドプロンプトに入り,modeにvi-copyを指定し
 list-keysコマンドを実行

: list-keys -t vi-copy

・Enterキーまたはqキーでプロンプト画面に戻る

・デタッチ (セッションを残したままtmuxを中断)
 C-b :キーでtmuxのコマンドプロンプトに入り,detach-clientコマンドを実行
 または C-b dキー を押します

: detach-client

・アタッチ (tmuxセッションの再開)
 tmux attachコマンドを実行 (tmux a でも良い)

[root@earth:~]# tmux a

・tmuxの終了

[root@earth:~]# exit

○tmux.conf(参考)

・デフォルトでは、システムの設定ファイルを /etc/tmux.conf から読み込みます
・存在するなら、ユーザーの設定ファイルを ~/.tmux.conf から読み込みます

:~/.tmux.conf

## 既定のPrefixキー(Ctrl+b)の割り当てを解除し、(Ctrl+t)をPrefixキーにする
unbind-key C-b
set-option -g prefix C-t
bind-key C-t send-prefix

## キーバインドをviモードに変更
set-window-option -g mode-keys vi

## UTF-8を用いるかどうかはロケールから自動検出される(必要のある場合のみ指定)
#set-window-option -g utf8 on
#set-option -g status-utf8 on

## マウス操作を有効にします (2.1以降)
set-option -g mouse on

##ステータスバーの背景色を変更
set-option -g status-bg cyan

# prefix + r で設定ファイルを再読み込み
bind r source-file ~/.tmux.conf \; display-message "tmux RELOADED!!"

○リモートのtmuxのコピーデータをローカルのCentOSで使う

・CentOSの端末は コピー[Shift+Ctrl+C] ペースト[Shift+Ctrl+V] が使えますが
・tmuxのコピーデータは端末のバッファには入らないので上手く利用できません
・一度ファイルに出力し、別の端末で表示してコピー・ペーストします

・.bashrcに下記を追記します

~/.bashrc

# "Tmux buffer of copy mode" load to the file
TMUX_BUFFER_OUT="${HOME}/.tmux_buffer_out.txt"
alias bl='tmux show-buffer >> ${TMUX_BUFFER_OUT} && echo >> ${TMUX_BUFFER_OUT}'
alias br='cat ${TMUX_BUFFER_OUT}'
alias bz='cat /dev/null > ${TMUX_BUFFER_OUT}'

・.bashrcを再読み込み

$ source ~/.bashrc

:使い方 (キーバインドがviモードの場合)

・コピーモード開始 (デフォルトのPrefixならC-b [キー)

C-t [キー

・コピー始点 (emacsモードの場合はC-Spaceキー)

Spaceキー

・コピー終点 (emacsモードの場合はM-Wキー)

Enterキー

・バッファの内容をファイル出力 (tmuxで実行)

$ bl

・新しいタブで新しいgnome-端末を開く

Shift+Ctrl+T

・ファイルに出力されたテキストを標準出力する (新しい端末で実行)

$ br

・出力ファイルの内容を消去

$ bz



○tmuxキーバインド

・~/.tmux.confを読み込んだあとのキーバインド
・-r フラグ 再度プレフィックスキーを押さずに複数のコマンドの入力が可能

bind-key    -T prefix C-o              rotate-window
bind-key    -T prefix C-t              send-prefix
bind-key    -T prefix C-z              suspend-client
bind-key    -T prefix Space            next-layout
bind-key    -T prefix !                break-pane
bind-key    -T prefix "                split-window
bind-key    -T prefix #                list-buffers
bind-key    -T prefix $                command-prompt -I #S "rename-session '%%'"
bind-key    -T prefix %                split-window -h
bind-key    -T prefix &                confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key    -T prefix '                command-prompt -p index "select-window -t ':%%'"
bind-key    -T prefix (                switch-client -p
bind-key    -T prefix )                switch-client -n
bind-key    -T prefix ,                command-prompt -I #W "rename-window '%%'"
bind-key    -T prefix -                delete-buffer
bind-key    -T prefix .                command-prompt "move-window -t '%%'"
bind-key    -T prefix 0                select-window -t :=0
bind-key    -T prefix 1                select-window -t :=1
bind-key    -T prefix 2                select-window -t :=2
bind-key    -T prefix 3                select-window -t :=3
bind-key    -T prefix 4                select-window -t :=4
bind-key    -T prefix 5                select-window -t :=5
bind-key    -T prefix 6                select-window -t :=6
bind-key    -T prefix 7                select-window -t :=7
bind-key    -T prefix 8                select-window -t :=8
bind-key    -T prefix 9                select-window -t :=9
bind-key    -T prefix :                command-prompt
bind-key    -T prefix ;                last-pane
bind-key    -T prefix =                choose-buffer
bind-key    -T prefix ?                list-keys
bind-key    -T prefix D                choose-client
bind-key    -T prefix L                switch-client -l
bind-key    -T prefix M                select-pane -M
bind-key    -T prefix [                copy-mode
bind-key    -T prefix ]                paste-buffer
bind-key    -T prefix c                new-window
bind-key    -T prefix d                detach-client
bind-key    -T prefix f                command-prompt "find-window '%%'"
bind-key    -T prefix i                display-message
bind-key    -T prefix l                last-window
bind-key    -T prefix m                select-pane -m
bind-key    -T prefix n                next-window
bind-key    -T prefix o                select-pane -t :.+
bind-key    -T prefix p                previous-window
bind-key    -T prefix q                display-panes
bind-key    -T prefix r                source-file /root/.tmux.conf ; display-message "tmux RELOADED!!"
bind-key    -T prefix s                choose-tree
bind-key    -T prefix t                clock-mode
bind-key    -T prefix w                choose-window
bind-key    -T prefix x                confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key    -T prefix z                resize-pane -Z
bind-key    -T prefix {                swap-pane -U
bind-key    -T prefix }                swap-pane -D
bind-key    -T prefix ~                show-messages
bind-key    -T prefix PPage            copy-mode -u
bind-key -r -T prefix Up               select-pane -U
bind-key -r -T prefix Down             select-pane -D
bind-key -r -T prefix Left             select-pane -L
bind-key -r -T prefix Right            select-pane -R
bind-key    -T prefix M-1              select-layout even-horizontal
bind-key    -T prefix M-2              select-layout even-vertical
bind-key    -T prefix M-3              select-layout main-horizontal
bind-key    -T prefix M-4              select-layout main-vertical
bind-key    -T prefix M-5              select-layout tiled
bind-key    -T prefix M-n              next-window -a
bind-key    -T prefix M-o              rotate-window -D
bind-key    -T prefix M-p              previous-window -a
bind-key -r -T prefix M-Up             resize-pane -U 5
bind-key -r -T prefix M-Down           resize-pane -D 5
bind-key -r -T prefix M-Left           resize-pane -L 5
bind-key -r -T prefix M-Right          resize-pane -R 5
bind-key -r -T prefix C-Up             resize-pane -U
bind-key -r -T prefix C-Down           resize-pane -D
bind-key -r -T prefix C-Left           resize-pane -L
bind-key -r -T prefix C-Right          resize-pane -R
bind-key    -T root   MouseDown1Pane   select-pane -t = ; send-keys -M
bind-key    -T root   MouseDown1Status select-window -t =
bind-key    -T root   MouseDown3Pane   if-shell -F -t = #{mouse_any_flag} "select-pane -t=; send-keys -M" "select-pane -mt="
bind-key    -T root   MouseDrag1Pane   if-shell -F -t = #{mouse_any_flag} "if -Ft= "#{pane_in_mode}" "copy-mode -M" "send-keys -M"" "copy-mode -M"
bind-key    -T root   MouseDrag1Border resize-pane -M
bind-key    -T root   WheelUpPane      if-shell -F -t = #{mouse_any_flag} "send-keys -M" "if -Ft= "#{pane_in_mode}" "send-keys -M" "copy-mode -et=""
bind-key    -T root   WheelUpStatus    previous-window
bind-key    -T root   WheelDownStatus  next-window

○tmuxキーバインド (vi-copy)

・list-keys -t vi-copyで出力 ( vi-edit、vi-choice など )

bind-key -t vi-copy               C-b page-up
bind-key -t vi-copy               C-c cancel
bind-key -t vi-copy               C-d halfpage-down
bind-key -t vi-copy               C-e scroll-down
bind-key -t vi-copy               C-f page-down
bind-key -t vi-copy               C-h cursor-left
bind-key -t vi-copy               C-j copy-selection
bind-key -t vi-copy             Enter copy-selection
bind-key -t vi-copy               C-u halfpage-up
bind-key -t vi-copy               C-y scroll-up
bind-key -t vi-copy            Escape clear-selection
bind-key -t vi-copy             Space begin-selection
bind-key -t vi-copy                 " start-named-buffer
bind-key -t vi-copy                 $ end-of-line
bind-key -t vi-copy                 , jump-reverse
bind-key -t vi-copy                 / search-forward
bind-key -t vi-copy                 0 start-of-line
bind-key -t vi-copy                 1 start-number-prefix
bind-key -t vi-copy                 2 start-number-prefix
bind-key -t vi-copy                 3 start-number-prefix
bind-key -t vi-copy                 4 start-number-prefix
bind-key -t vi-copy                 5 start-number-prefix
bind-key -t vi-copy                 6 start-number-prefix
bind-key -t vi-copy                 7 start-number-prefix
bind-key -t vi-copy                 8 start-number-prefix
bind-key -t vi-copy                 9 start-number-prefix
bind-key -t vi-copy                 : goto-line
bind-key -t vi-copy                 ; jump-again
bind-key -t vi-copy                 ? search-backward
bind-key -t vi-copy                 A append-selection
bind-key -t vi-copy                 B previous-space
bind-key -t vi-copy                 D copy-end-of-line
bind-key -t vi-copy                 E next-space-end
bind-key -t vi-copy                 F jump-backward
bind-key -t vi-copy                 G history-bottom
bind-key -t vi-copy                 H top-line
bind-key -t vi-copy                 J scroll-down
bind-key -t vi-copy                 K scroll-up
bind-key -t vi-copy                 L bottom-line
bind-key -t vi-copy                 M middle-line
bind-key -t vi-copy                 N search-reverse
bind-key -t vi-copy                 T jump-to-backward
bind-key -t vi-copy                 V select-line
bind-key -t vi-copy                 W next-space
bind-key -t vi-copy                 ^ back-to-indentation
bind-key -t vi-copy                 b previous-word
bind-key -t vi-copy                 e next-word-end
bind-key -t vi-copy                 f jump-forward
bind-key -t vi-copy                 g history-top
bind-key -t vi-copy                 h cursor-left
bind-key -t vi-copy                 j cursor-down
bind-key -t vi-copy                 k cursor-up
bind-key -t vi-copy                 l cursor-right
bind-key -t vi-copy                 n search-again
bind-key -t vi-copy                 o other-end
bind-key -t vi-copy                 q cancel
bind-key -t vi-copy                 t jump-to-forward
bind-key -t vi-copy                 v rectangle-toggle
bind-key -t vi-copy                 w next-word
bind-key -t vi-copy                 { previous-paragraph
bind-key -t vi-copy                 } next-paragraph
bind-key -t vi-copy    MouseDrag1Pane begin-selection
bind-key -t vi-copy MouseDragEnd1Pane copy-selection
bind-key -t vi-copy       WheelUpPane scroll-up
bind-key -t vi-copy     WheelDownPane scroll-down
bind-key -t vi-copy            BSpace cursor-left
bind-key -t vi-copy             NPage page-down
bind-key -t vi-copy             PPage page-up
bind-key -t vi-copy                Up cursor-up
bind-key -t vi-copy              Down cursor-down
bind-key -t vi-copy              Left cursor-left
bind-key -t vi-copy             Right cursor-right
bind-key -t vi-copy              C-Up scroll-up
bind-key -t vi-copy            C-Down scroll-down

○ Copyright(c) 528p.com All Rights Reserved.