Singola istanza del terminale GNOME?


8

Mi piacerebbe sapere o è possibile configurare il Terminale GNOME in modo tale che quando apro il terminale e c'è già un'istanza aperta, mostrerà quell'istanza e non ne aprirò una nuova.


quale versione di ubuntu stai usando e quale ambiente? Chiedo, perché quello che stai descrivendo è l'impostazione predefinita in unity e gnome-shell.
martin

Sto usando Ubuntu 11.10 con Unity-2D. Non ho eseguito un'installazione pulita ma un aggiornamento dall'11.04.
Mood

Usi Ctrl + Alt + T come scorciatoia?
int_ua,

Sì. Lo faccio o avvio un terminale digitando "ter» invio "in Kupfer. Questi sono i 2 metodi che uso. Dato che non guardo troppo spesso l'Unity Laucher finisco con 3, 4 terminali diversi.
Mood

Risposte:


8

Ho scritto un semplice script di shell usando wmctrl per focalizzare l'attenzione su Terminal. Fa esattamente quello che voglio.

Innanzitutto, installa wmctrl sudo apt-get install wmctrl.

Quindi, avvia un editor di testo, copia le seguenti righe.

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

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

Salvare il file da qualche parte in cui di solito si mantengono gli script della shell. Nel mio caso ho fatto: ~/bin/single_instance.sh

cd nella directory ( cd ~/bin) e rendere eseguibile il filechmod +x single_instance.sh

Ora, apri il menu principale seleziona Accessori » Proprietà pressa terminale e sostituisci comando con lo script:~/bin/single_instance.sh

Apri Impostazioni di sistema »Tastiera» Scorciatoie . Disabilita il collegamento a Launch Terminal assegnandogli un backspace. Crea un collegamento personalizzato. Inserisci nuovamente il percorso e il nome dello script e assegnagli la combinazione di tasti ctrl + alt + t .

Fatto, terminale a istanza singola ...


Perché non rendere il tuo script il launcher predefinito? Perché tutti i passaggi per aggiungere collegamenti e tutti? +1 per lo script, -1 per l'implementazione.
Bruno Pereira,

In tutta onestà ... non so come farlo. Ho esaminato le applicazioni predefinite e non ho visto il terminale. Inoltre sono convinto che la versione precedente di Ubuntu avesse campi di testo in cui si potevano inserire i comandi. Questa versione delle app predefinite contiene tutti i menu a discesa.
Mood

2

Aggiungi --tab al comando di avvio. Quindi finisci con una sola app. Aperto.

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

No, non voglio una nuova scheda. Voglio che il terminale si sposti in primo piano nello stato in cui l'ho lasciato l'ultima volta.
Mood

1
Questo mi apre nuove finestre su Ubuntu 16.04
beruic il

0

È il comportamento predefinito se si utilizza il collegamento Mod4+#( Mod4= Super = "Windows", #è il numero nel programma di avvio) per aprire qualsiasi applicazione.


Sì, ne sono consapevole. Tuttavia, devo avere un terminale aperto per cominciare. Intendevo quando premo control + alt + t o lo apro in Kupfer. Sto cercando lo stesso comportamento di, ad esempio, Chrome: se un'istanza è aperta mostrami quell'istanza, se nessuna istanza apre una nuova istanza.
Mood

0

Ho generalizzato e semplificato un po 'la sceneggiatura di @Mood. Ora prende un parametro da riga di comando e usa invece pgrep.

sudo apt-get install procps

Il copione:

#!/usr/bin/env bash

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

0

Vorrei aggiungere il mio script, poiché lo trovo estremamente utile:

  1. Se c'è un terminale gnome nello spazio di lavoro corrente, allora lo porta in primo piano e lo mette a fuoco
  2. Se non c'è alcun terminale gnome nell'area di lavoro corrente, cambia l'area di lavoro e porta in primo piano il primo terminale gnome esistente che trova in primo piano
  3. Se non ci sono istanze di gnome-terminal in esecuzione, apre una nuova istanza, la mette in primo piano e la mette a fuoco

Ho configurato Ctrl + Alt + T per eseguire questo script e lo trovo ancora più comodo di 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 ma l'ho modificato per adattarlo alle tue esigenze. In bocca al lupo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.