2012-06-17 18 views
47

En lugar de tener que escribir tmux cada vez, ¿cómo podría tener tmux siempre se debe utilizar para la nueva sesión de Windows?¿Cómo puedo hacer que TMUX esté activo cada vez que inicio una nueva sesión de shell?

Entonces, si no tengo ventanas de terminal abiertas y luego abro una, ¿cómo puede ser esa primera sesión en tmux?

Parece un tipo de cosa .bashrc tal vez?

+0

'Ctrl-b c' creará una nueva ventana. – kev

+0

gracias, quiero decir si no estoy en una ventana de terminal en absoluto. –

+0

¿Qué sistema operativo usa? (Y lo emulador de terminal?) – huon

Respuesta

55

advertenciaesto ahora puede dañar sus inicios de sesión de Ubuntu. Úselo con extrema precaución y asegúrese de tener una segunda cuenta de administrador en la computadora en la que pueda iniciar sesión en caso de que tenga los mismos problemas que yo. Ver mi respuesta para más detalles y un enfoque diferente.

La solución más simple es agregar la invocación tmux al final de su .bashrc, p. Ej.

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

# ...other stuff... 

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

Tenga en cuenta que la exec significa que el proceso de fiesta que se inicia cuando se abre el terminal es sustituyen por tmux, por lo Ctrl-B D (es decir, desconectar de tmux) en realidad se cierra la ventana, en lugar de regresar a la fiesta original, proceso, que es probablemente el comportamiento que desea?

Además, se requiere la instrucción if (detecta si la ventana bash actual ya está en un proceso tmux) de lo contrario cada vez que inicie tmux, el proceso bash contenido intentará iniciar su propia sesión tmux, dando lugar a un infinito número de tmuxen anidado que puede ser, por decirlo así, bastante molesto (dicho esto, se ve bien).


Sin embargo, existe un pequeño riesgo de que esto puede hacer bash se comportan de una manera que otros programas no esperan, ya corriendo bash puede posiblemente causar que se convierta en un proceso tmux, por lo que podría ser mejor para modificar la forma en que inicia su emulador de terminal.

utilizo un pequeño script de shell ejecutable ~/bin/terminal (con ~/bin en $PATH, por lo que se encuentra de forma automática) que se ve un poco como:

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

(no uso gnome-terminal, por lo que podría Tengo que eliminar el exec, no estoy seguro.)

Ahora cada vez que ejecuta el scipt terminal tiene un terminal con tmux. Puede agregar esto a su menú/escritorio/atajos de teclado para reemplazar el terminal predeterminado.

(Este enfoque también permite personalizar más fácilmente otras cosas sobre el emulador de terminal después, si alguna vez desea.)

+0

¿Cómo se llega en torno al hecho de que esto puede crear una tonelada de sesiones si se está abriendo ventanas de terminal/cierre con frecuencia? – doremi

+4

¿Es mejor poner la línea al principio del archivo? Si se reemplaza el proceso, se pierden todos los cambios realizados por '.bashrc'. Luego el '.bashrc' se obtiene de nuevo cuando' tmux' genera 'bash' nuevamente.¿Por qué ejecutarlo dos veces? – Graeme

+1

'exec gnome-terminal -e tmux' FTW –

3

Anexar siguiente línea de código hasta el final de .bashrc,

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

Si desea tener una sola sesión de tmux, coloque lo siguiente en su ~/.bashrc para bash o ~ /.zshrc para zsh:

tmux attach &> /dev/null 

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

El tmux attach línea es asegurarse de si hay una sesión que concede a y si no hubo sesión Usted no recibirá la advertencia sobre "ninguna sesión".

+0

Yo uso' ps' para verificar si hay un proceso de tmux. – Justme0

1

Una sola línea que también hace que el tipo de terminal está correctamente configurado para 256 colores:

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

Mi, respuesta original aceptado, dejó de funcionar en mi sistema Ubuntu14 después de una actualización reciente.

utilizando ya sea

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

o

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

sería que dejara de ser capaz de siquiera iniciar sesión. Solo pude resolver esto debido a tener un segundo inicio de sesión de administrador en la computadora.

La corrección para mí en Ubuntu (y en OSX también) era cambiar mi programa de terminal para ejecutar realmente tmux lugar, es decir

enter image description here

todavía tengo

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

como mi la última línea .bashrc pero ahora es solo para mis sistemas Mac OSX.

0

acabo de hacer que un atajo de teclado (en Linux Mint no Ubuntu, así que no estoy seguro si es tan fácil) ...


custom shortcut for tmux terminal


podría ser difícil de ver, pero el acceso directo personalizado es gnome-terminal --window --maximize -e tmux. Esto inicia una nueva ventana de gnome-terminal maximizada y luego exec utes tmux para usted.

, además, que tienen otro acceso directo a medida que inicia una "normal" gnome-terminal maximizado (que es la misma sin el -e tmux).

Creo que esta es la mejor manera, ya que puede iniciar cualquier terminal de la manera que desee y es la forma más personalizable.

1

Para habilitar tmux para las sesiones de inicio de sesión y ssh, puede agregar esto al final de su.bashrc:

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

Este script busca el proceso principal del shell bash. Si bash se inició desde el inicio de sesión o desde ssh, ejecutará tmux. Si desea que esto funcione con un terminal GUI, puede agregarlo allí también. Por ejemplo, si desea iniciar tmux automáticamente al iniciar la norma gnome-terminal Ubuntu, usaría esto:

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

He probado lo anterior en vivo de Ubuntu Desktop y pude entrar después. Esto no debería interrumpir el inicio de sesión de la GUI a menos que invoque el comando de inicio de sesión para iniciar sesión. No conozco una GUI de Linux que haga esto.

5

Para mí, me encanta mi tmux que se inicie cada vez que un shell en mi máquina remota, y cuando me separo o salida de tmux, la conexión debería cerrarse automáticamente. Después de profundizar en este tema por un tiempo, el siguiente código hace exactamente lo que quiero y se cree que es el más optimizado según mi leal saber y entender.

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

Tenga en cuenta que esta línea debe ser la primera en su archivo bashrc para asegurarse de que está cargada primero. No podemos poner una llamada "exec" frente a "tmux adjuntar", porque después de que el ejecutivo reemplaza el proceso de fiesta con el tmux uno, la conexión se cierra incluso si no hay sesiones para adjuntar a. Por lo tanto, necesitamos una llamada de "salida" para finalizar la conexión después de desconectar o salir de las sesiones adjuntas. Pero poner un "ejecutivo" al frente del comando de la nueva sesión está bien ya que es el último comando que se ejecutará.

0

Dentro xfce4 (Estoy corriendo Fedora 24 XFCE giro, es genial), he encontrado la solución más simple es editar los accesos directos del panel de manera que corran:

xfce4-terminal tmux -e

Este mismo comando se puede usar para reemplazar el acceso directo de la aplicación de teclado.

había insertado previamente una sentencia if en mi .bashrc, pero causó la cuenta para fallar (bucle de nuevo a la caja de la conexión cada vez que se introduce una contraseña correcta).

El comando para Abrir terminal de Thunar Aquí comando difiere ligeramente. Para cambiar esa Ir a:

Thunar> Edición> Configurar acciones personalizadas ...> Abrir terminal aquí> botón Editar, y reemplazar:

exo-open---working directorio% f --launch emulador de terminal

con: --working-directorio xfce4-terminal% f -e tmux

1

empecé con este https://wiki.archlinux.org/index.php/Tmux#Bash y aumenté para recuperar sesiones independientes y hacer otros nuevos, si todas las sesiones ya estaban unidos

# .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 
Cuestiones relacionadas