Pojedyncze wystąpienie terminala GNOME?


8

Chciałbym wiedzieć lub jest możliwe skonfigurowanie GNOME Terminal w taki sposób, że kiedy otworzę terminal i już istnieje instancja, pokaże tę instancję i nie otworzy zupełnie nowej.


jakiej wersji ubuntu używasz i jakiego środowiska? Pytam, ponieważ to, co opisujesz, to domyślna konfiguracja w jedności i gnome-shell.
martin

Używam Ubuntu 11.10 z Unity-2D. Nie wykonałem czystej instalacji, ale uaktualniłem z 11.04.
Nastrój

Czy używasz Ctrl + Alt + T jako skrótu?
int_ua

Tak, robię to lub uruchamiam terminal, wpisując „ter» enter ”w Kupfer. To są 2 metody, których używam. Ponieważ zbyt często nie patrzę na laureat Unity, mam 3, 4 różne terminale.
Nastrój

Odpowiedzi:


9

Napisałem prosty skrypt powłoki, używając wmctrl, aby skupić się na terminalu. Robi dokładnie to, czego chcę.

Najpierw zainstaluj wmctrl sudo apt-get install wmctrl.

Następnie uruchom edytor tekstu, skopiuj następujące wiersze.

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

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

Zapisz plik w miejscu, w którym zwykle przechowujesz skrypty powłoki. W moim przypadku: ~/bin/single_instance.sh

cd do katalogu ( cd ~/bin) i uczyń plik wykonywalnymchmod +x single_instance.sh

Teraz otwórz Menu główne, wybierz Akcesoria » Właściwości prasy terminalowej i zastąp polecenie skryptem:~/bin/single_instance.sh

Otwórz Ustawienia systemowe »Klawiatura» Skróty . Wyłącz skrót Uruchom terminal , nadając mu backspace. Utwórz niestandardowy skrót. Ponownie wpisz ścieżkę i nazwę skryptu i nadaj mu kombinację klawiszy ctrl + alt + t .

Skończyłeś, terminal z pojedynczą instancją ...


Dlaczego nie ustawić swojego skryptu jako domyślnego programu uruchamiającego terminale? Dlaczego wszystkie kroki, aby dodać skróty i tak dalej? +1 za skrypt, -1 za wdrożenie.
Bruno Pereira,

Szczerze mówiąc… nie wiem jak to zrobić. Patrzyłem na domyślne aplikacje i nie widziałem terminala. Jestem również przekonany, że poprzednia wersja Ubuntu miała pola tekstowe, w których można było wprowadzać polecenia. Ta wersja domyślnych aplikacji zawiera wszystkie menu rozwijane.
Nastrój

2

Dodaj --tab do polecenia uruchamiania. W rezultacie masz tylko jedną aplikację. otwarty.

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

Nie, nie chcę nowej karty. Chcę, aby terminal przeniósł się na pierwszy plan w stanie, w którym go ostatnio opuściłem.
Nastrój

1
To właśnie otwiera dla mnie nowe okna na Ubuntu 16.04
beruic

0

Jest to zachowanie domyślne, jeśli używasz skrótu Mod4+#( Mod4= Super = „Windows”, #jest liczbą w programie uruchamiającym), aby otworzyć dowolną aplikację.


Tak, jestem tego świadomy. Nadal muszę mieć terminal otwarty. Miałem na myśli, kiedy naciskam control + alt + t lub otwieram go w Kupfer. Szukam takiego samego zachowania jak - na przykład - Chrome: Jeśli instancja jest otwarta, pokaż mi tę instancję, jeśli żadna instancja nie otworzy nowej.
Nastrój

0

Uogólniłem i trochę uprościłem skrypt @Mood. Teraz pobiera parametr wiersza poleceń i zamiast tego używa pgrep.

sudo apt-get install procps

Scenariusz:

#!/usr/bin/env bash

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

0

Chciałbym dodać własny skrypt, ponieważ uważam go za niezwykle przydatny:

  1. Jeśli w bieżącym obszarze roboczym znajduje się terminal gnome, wówczas przenosi go na przód i ustawia ostrość
  2. Jeśli w bieżącym obszarze roboczym nie ma terminala gnome, przełącza on obszar roboczy i przenosi pierwszy istniejący terminal gnome, który znajdzie na wierzch, i daje mu fokus
  3. Jeśli nie ma uruchomionych instancji terminalu gnome, otwiera nową instancję, przesuwa ją na pierwszy plan i ustawia ostrość

Skonfigurowałem skrót Ctrl + Alt + T, aby uruchomić ten skrypt i uważam, że jest on jeszcze wygodniejszy niż Guake lub 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

Używam go z QTerminalem, ale dostosowałem go do twoich potrzeb. Powodzenia

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.