¿Una sola instancia de la Terminal de GNOME?


8

Me gustaría saber o es posible configurar el Terminal GNOME de una manera que cuando abro el terminal y ya hay una instancia abierta, mostrará esa instancia y no abrirá una nueva.


¿Qué versión de ubuntu estás usando y qué entorno? Pregunto, porque lo que está describiendo es la configuración predeterminada en unity y gnome-shell.
Martin

Estoy usando Ubuntu 11.10 con Unity-2D. No he hecho una instalación limpia pero una actualización de 11.04.
Humor

¿Utiliza Ctrl + Alt + T como acceso directo?
int_ua

Sí, lo hago o inicio un terminal escribiendo "ter» enter "en Kupfer. Esos son los 2 métodos que uso. Como no miro con demasiada frecuencia el lanzador Unity, termino con 3, 4 terminales diferentes.
Mood

Respuestas:


8

Escribí un script de shell simple usando wmctrl para dar el foco de Terminal. Hace exactamente lo que quiero.

Primero, instale wmctrl sudo apt-get install wmctrl.

A continuación, inicie un editor de texto, copie las siguientes líneas.

#!/bin/sh
SERVICE='gnome-terminal'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
  wmctrl -xa $SERVICE
else
  $SERVICE
fi

Guarde el archivo en algún lugar donde generalmente guarda sus scripts de shell. En mi caso hice: ~/bin/single_instance.sh

cd al directorio ( cd ~/bin) y hacer que el archivo sea ejecutablechmod +x single_instance.sh

Ahora, abra el Menú principal, seleccione Accesorios » Propiedades de prensa de terminal y reemplace el comando con el script:~/bin/single_instance.sh

Abra Configuración del sistema »Teclado» Accesos directos . Deshabilite el acceso directo de Terminal de lanzamiento dándole un espacio de retroceso. Haz un atajo personalizado. Nuevamente complete la ruta y el nombre del script y dele la combinación de teclas ctrl + alt + t .

Ya terminaste, terminal de instancia única ...


¿Por qué no simplemente hacer que su script sea el iniciador de terminal predeterminado? ¿Por qué todos los pasos para agregar accesos directos y todo? +1 para el script, -1 para la implementación.
Bruno Pereira

Con toda honestidad ... no sé cómo hacer eso. Miré las aplicaciones predeterminadas y no vi la terminal. También estoy convencido de que la versión anterior de Ubuntu tenía campos de texto donde se podían ingresar comandos. Esta versión de aplicaciones predeterminadas es todos menús desplegables.
Mood

2

Agregue --tab al comando del iniciador . Entonces terminas con solo una aplicación. abierto.

~$ gnome-terminal --help-all
:
--tab       Open a new tab in the last-opened window with the default profile

No, no quiero una nueva pestaña. Quiero que el terminal se mueva al primer plano en el estado en que lo dejé por última vez.
Mood

1
Esto solo abre nuevas ventanas para mí en Ubuntu 16.04
beruic

0

Es el comportamiento predeterminado si usa el acceso directo Mod4+#( Mod4= Super = "Windows", #es el número en el iniciador) para abrir cualquier aplicación.


Sí, soy consciente de eso. Aún así, tengo que tener una terminal abierta para empezar. Me refería a cuando presiono control + alt + t o lo abro en Kupfer. Estoy buscando el mismo comportamiento que, por ejemplo, Chrome: si una instancia está abierta, muéstrame esa instancia, si no hay una instancia, abre una nueva instancia.
Mood

0

Generalicé y simplifiqué un poco el script de @Mood. Ahora toma un parámetro de línea de comando y usa pgrep en su lugar.

sudo apt-get install procps

La secuencia de comandos:

#!/usr/bin/env bash

if pgrep $1
then
    wmctrl -xa $1
else
    $1
fi

0

Me gustaría agregar mi propio script, ya que lo encuentro extremadamente útil:

  1. Si hay un terminal gnome en el espacio de trabajo actual, lo trae al frente y lo enfoca
  2. Si no hay ningún terminal gnome en el espacio de trabajo actual, cambia el espacio de trabajo y trae el primer terminal gnome existente que encuentra al frente y le da foco
  3. Si no hay instancias de gnome-terminal ejecutándose, abre una nueva instancia, la pone al frente y le da foco

Configuré el atajo Ctrl + Alt + T para ejecutar este script y lo encuentro aún más cómodo que Guake o Tilda.

#!/usr/bin/env sh

# APP is the binary name you see when you do ps
APP="gnome-terminal"
# WIN_CLASS is the window class you see when you do wmctrl -lx
WIN_CLASS="gnome-terminal-server.Gnome-terminal"

# Use the app from current workpace first, or any if not available
WORKSPACE=$(wmctrl -d | grep '\*' | cut -d ' ' -f1)
TPID=$(ps aux | pgrep $APP)
if [ "$TPID" ]
then
  QTERM_WIN=$(wmctrl -lx | grep $WIN_CLASS | grep $WORKSPACE  | awk 'NR == 1 {print $1}')
  if [ "$QTERM_WIN" ]
  then
    wmctrl -ia $QTERM_WIN
  else
    # No valid app found in the current workspace, switch to any
    QTERM_WIN=$(wmctrl -lx | grep $WIN_CLASS | awk 'NR == 1 {print $1}')
    wmctrl -ia $QTERM_WIN
  fi
else
  $APP &
fi

Lo uso con QTerminal pero lo modifiqué para satisfacer sus necesidades. Buena suerte

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.