2012-06-17 18 views
47

Thay vì phải nhập tmux mỗi lần, làm thế nào tôi có thể có tmux luôn được sử dụng cho các phiên làm việc phiên mới?Làm cách nào để tôi có thể kích hoạt TMUX bất cứ khi nào tôi bắt đầu một phiên trình bao mới?

Vì vậy, nếu tôi không có cửa sổ đầu cuối nào mở và sau đó tôi mở một cửa sổ, cách phiên đầu tiên đó có thể là tmux?

Có vẻ như là một điều có lẽ là .bashrc?

+0

'Ctrl-b c' sẽ tạo một cửa sổ mới. – kev

+0

cảm ơn, ý tôi là nếu tôi không ở trong cửa sổ đầu cuối. –

+0

Bạn sử dụng hệ điều hành nào? (Và giả lập thiết bị đầu cuối nào?) – huon

Trả lời

55

cảnh báogiờ đây có thể làm hỏng đăng nhập Ubuntu của bạn. Sử dụng hết sức thận trọng và đảm bảo rằng bạn có tài khoản quản trị thứ hai trên máy tính mà bạn có thể đăng nhập trong trường hợp bạn gặp vấn đề tương tự như vậy. Xem câu trả lời của tôi để biết thêm chi tiết và cách tiếp cận khác.

Giải pháp đơn giản nhất là nối thêm lời gọi tmux vào cuối số .bashrc của bạn, ví dụ:

alias g="grep" 
alias ls="ls --color=auto" 

# ...other stuff... 

if [[ ! $TERM =~ screen ]]; then 
    exec tmux 
fi 

Lưu ý rằng exec có nghĩa là quá trình bash mà bắt đầu khi bạn mở Terminal là thay bởi tmux, vì vậy Ctrl-B D (tức ngắt kết nối từ tmux) thực sự đóng cửa sổ, thay vì trở về bash gốc quá trình, đó có lẽ là hành vi bạn muốn?

Ngoài ra, cần có tuyên bố if (phát hiện nếu cửa sổ bash hiện tại đang trong quá trình tmux), nếu không mỗi lần bạn bắt đầu tmux, quá trình bash chứa sẽ bắt đầu phiên tmux riêng, dẫn đến vô hạn số lượng tmuxen lồng nhau có thể được, err, khá khó chịu (nói rằng, có vẻ mát mẻ).


Tuy nhiên, có một nguy cơ rất nhỏ này có thể làm cho bash cư xử theo một cách mà các chương trình khác không mong đợi, kể từ khi chạy bash có thể có thể gây ra nó để biến thành một quá trình tmux, vì vậy nó có thể là tốt hơn để sửa đổi cách bạn khởi động trình mô phỏng thiết bị đầu cuối của mình.

tôi sử dụng một kịch bản shell nhỏ thực thi ~/bin/terminal (với ~/bin trong $PATH, vì vậy nó được tìm thấy tự động) trông hơi giống:

#!/bin/sh 
exec gnome-terminal -e tmux 

(Tôi không sử dụng gnome-terminal, vì vậy có lẽ bạn phải loại bỏ các exec, tôi không chắc chắn.)

Bây giờ bất cứ khi nào bạn chạy các terminal scipt bạn có một thiết bị đầu cuối với tmux. Bạn có thể thêm điều này vào các phím tắt menu/desktop/bàn phím để thay thế thiết bị đầu cuối mặc định.

(Phương pháp này cũng cho phép bạn dễ dàng hơn tùy chỉnh những thứ khác về mô phỏng thiết bị sau, nếu bạn đã từng mong muốn.)

+0

Làm thế nào để có được một thực tế rằng điều này có thể tạo ra một tấn phiên nếu bạn đang mở/đóng cửa sổ thiết bị đầu cuối thường xuyên? – doremi

+4

Có lưu ý tốt hơn khi đặt dòng ở đầu tệp không? Nếu quá trình được thay thế, thì tất cả các thay đổi được thực hiện bởi '.bashrc' sẽ bị mất. Sau đó, '.bashrc' được bắt nguồn lại khi' tmux' sinh ra 'bash' một lần nữa.Tại sao chạy nó hai lần !? – Graeme

+1

'exec gnome-terminal -e tmux' FTW –

3

Nối sau dòng mã đến hết .bashrc,

[[ $TERM != "screen" ]] && exec tmux 
13

Nếu bạn muốn có một phiên tmux đơn, hãy đặt thông tin sau vào ~/.bashrc của bạn cho bash hoặc ~ /.zshrc cho zsh:

tmux attach &> /dev/null 

if [[ ! $TERM =~ screen ]]; then 
    exec tmux 
fi 

Các tmux attach dòng là để đảm bảo nếu có một phiên nó gắn vào và nếu không có phiên bạn sẽ không nhận được cảnh báo về "không có phiên".

+0

Tôi sử dụng' ps' để kiểm tra xem có quá trình tmux hay không. – Justme0

1

Một one-liner mà cũng đảm bảo các loại thiết bị đầu cuối được thiết lập một cách chính xác cho 256 màu:

[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux 
10

gốc, chấp nhận câu trả lời của tôi, ngừng làm việc trên hệ thống Ubuntu14 của tôi sau khi nâng cấp gần đây.

Sử dụng một trong hai

[ -z "$TMUX" ] && command -v tmux > /dev/null && TERM=xterm-256color && exec tmux 

hoặc

[ $TERM != "screen" ] && TERM=xterm-256color && exec tmux 

sẽ ngăn cản tôi được đền đáp khi đăng nhập. Tôi chỉ có thể giải quyết vấn đề này do đăng nhập quản trị viên thứ hai trên máy tính.

Việc sửa chữa cho tôi trên Ubuntu (và trong OSX quá) đã thay đổi chương trình thiết bị đầu cuối của tôi để thực sự chạy tmux thay vào đó, tức là

enter image description here

tôi vẫn còn có

[ `uname -s` != Linux ] && exec tmux 

như tôi dòng .bashrc cuối cùng nhưng chỉ dành cho hệ thống Mac OSX của tôi bây giờ.

0

Tôi chỉ làm cho nó một phím tắt (trong Linux Mint không Ubuntu, vì vậy tôi không chắc chắn nếu nó là điều này dễ dàng) ...


custom shortcut for tmux terminal


Có thể khó nhìn thấy, nhưng phím tắt tùy chỉnh gnome-terminal --window --maximize -e tmux. Điều này sẽ bắt đầu một cửa sổ mới gnome-terminal tối đa và sau đó exec utes tmux cho bạn.

Ngoài ra, tôi còn có thêm phím tắt tùy chỉnh bắt đầu tối đa "bình thường" gnome-terminal tối đa (giống như không có -e tmux).

Tôi cảm thấy đây là cách tốt nhất vì bạn có thể bắt đầu bất kỳ thiết bị đầu cuối bất cứ điều gì theo cách bạn muốn và là cách tùy biến nhất.

1

Để bật tmux cho phiên đăng nhập và ssh, bạn có thể thêm phần này vào cuối.bashrc:

# enable tmux at login 
PNAME="$(ps -o comm= $PPID)"; 
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] ; then 
    exec tmux 
fi 

Tập lệnh này tìm quá trình cha mẹ của vỏ bash. Nếu bash được bắt đầu từ đăng nhập hoặc từ ssh, nó sẽ thực thi tmux. Nếu bạn muốn điều này làm việc với một thiết bị đầu cuối GUI, bạn có thể thêm nó vào đó. Ví dụ, nếu bạn muốn bắt đầu tmux tự động khi bạn khởi động của Ubuntu chuẩn gnome-terminal, bạn sẽ sử dụng này:

PNAME="$(ps -o comm= $PPID)"; 
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] || [ $PNAME == "gnome-terminal" ] ; then 
    exec tmux 
fi 

tôi đã thử nghiệm trên trên Live Ubuntu Desktop và tôi đã có thể đăng nhập vào sau đó. Điều này không nên phá vỡ đăng nhập GUI trừ khi nó gọi lệnh đăng nhập để đăng nhập. Tôi không biết về một GUI Linux thực hiện điều này.

5

Đối với tôi, tôi rất thích tmux được khởi động mỗi khi tôi mở máy tính từ xa, và khi tôi tách hoặc thoát khỏi tmux, kết nối sẽ tự động bị đóng. Sau khi đào sâu vào vấn đề này trong một thời gian, đoạn mã sau thực hiện chính xác những gì tôi muốn và được cho là được tối ưu nhất theo sự hiểu biết tốt nhất của tôi.

[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;} 

Lưu ý dòng này phải là dòng đầu tiên trong tệp bashrc để đảm bảo nó được tải trước. Chúng ta không thể đặt một lệnh "exec" trước "tmux attach" bởi vì sau khi exec thay thế quá trình bash bằng tmux, kết nối sẽ bị đóng ngay cả khi không có phiên để đính kèm. Vì vậy, chúng ta cần một cuộc gọi "thoát" để chấm dứt kết nối sau khi chúng ta tách ra hoặc thoát khỏi các phiên đính kèm. Nhưng đặt một "exec" ở phía trước lệnh new-session là tốt vì đó là lệnh cuối cùng sẽ được thực hiện.

0

Trong xfce4 (Tôi đang chạy Fedora 24 XFCE spin, nó thật tuyệt vời), tôi đã tìm thấy các giải pháp đơn giản nhất là để chỉnh sửa các phím tắt bảng điều khiển để để họ chạy:

xfce4-terminal -e tmux

Lệnh này có thể được sử dụng để thay thế Lối tắt ứng dụng bàn phím.

Trước đó tôi đã chèn câu lệnh if vào .bashrc, nhưng nó đã khiến đăng nhập thất bại (lặp lại hộp đăng nhập bất cứ khi nào nhập đúng mật khẩu).

Lệnh cho lệnh Mở Terminal của Thunar ở đây hơi khác một chút. Để thay đổi điều đó goto:

Thunar> Edit> Configure Tuỳ Hành động ...> Mở Terminal Đây> nút Edit, và thay thế:

exo-mở --working thư mục% f --launch TerminalEmulator

với: --working thư mục xfce4-terminal% f -e tmux

1

tôi bắt đầu với https://wiki.archlinux.org/index.php/Tmux#Bash này và nâng cao nó để đòi lại phiên tách ra và làm cho những cái mới nếu tất cả các phiên đã được đính kèm

# .bashrc 

case $- in 
    *i*) 
    if command -v tmux>/dev/null; then 
     if [[ ! $TERM =~ screen ]] && [[ -z $TMUX ]]; then 
      if tmux ls 2> /dev/null | grep -q -v attached; then 
      exec tmux attach -t $(tmux ls 2> /dev/null | grep -v attached | head -1 | cut -d : -f 1) 
      else 
      exec tmux 
      fi 
     fi 
    fi 
    ;; 
esac 
Các vấn đề liên quan