Wiersz poleceń do przełączania profili w gnome-terminalu

20

Utworzyłem nowy profil dla gnome-terminal i mogę przełączać się między profilem „Implicit” a nowo utworzonym profilem, jak widać na poniższym obrazku:

Przełączaj się między profilami w terminalu gnome

Teraz zastanawiam się, jak mogę przełączać się między profilami za pomocą wiersza polecenia / skryptu, a może za pomocą skrótu.

Uwaga: rozwiązania takie jak:

gnome-terminal --tab-with-profile=Implicit && exit 

są wykluczone, ponieważ wolę nie zamykać i otwierać innego terminala lub uzyskiwać innego okna terminala w procesie zmiany profilu.

Radu Rădeanu
źródło
1
Za pomocą gconftool-2 możesz ustawić profil, którego zmiany są natychmiastowe. Czy to sprawdziłeś -> stackoverflow.com/questions/660442/...
Stormvirux
@Stormvirux Nie ... Czy możesz wyjaśnić, jak używać gconftool lub gconftool-2 do przełączania profilu? Nie widzę tam dobrej odpowiedzi / wyjaśnienia.
Radu Rădeanu,
zduplikowane pytanie: askubuntu.com/questions/247041/...
Jakob

Odpowiedzi:

9

Aby przejść do profilu „niejawnego”:

xdotool key Alt+t p Return

Aby przełączyć na drugi profil:

xdotool key Alt+t p Down Return

xdotool Zainstaluj xdotool nie jest domyślnie instalowany w Ubuntu, więc należy go najpierw zainstalować.

Oczywiście do tych poleceń można dodać niestandardowe skróty klawiaturowe .

Radu Rădeanu
źródło
To nie jest skrót. Symulujesz tylko naciśnięcia klawiszy, to tylko mnemonika aplikacji.
Braiam
1
@Braiam Tak, to nie jest skrót, widzę. Jest to wiersz poleceń ( man xdotoolwięcej informacji), o które pytałem, który działa dokładnie tak, jak sobie życzę i jestem zadowolony z tej odpowiedzi, dopóki nie pojawi się coś lepszego. ;)
Radu Rădeanu
Poważnie powinieneś rozważyć zasugerowanie, że w bugtrackerze ...
Braiam
@Braiam Jak już mówiłem, nie mam nic przeciwko temu rozwiązaniu, działa jak urok. Jeśli chodzi o twoją sugestię, istnieje jedna w tym sensie z 2002 r. (Zmodyfikowana w 2010 r .: „ Byłoby bardzo miło, gdybym mógł użyć dokładnie dwóch naciśnięć klawiszy, aby otworzyć wybrany przeze mnie profil. ” - patrz ten komentarz ). Dlaczego więc uważasz, że powinienem dodać nowy? Czy lubisz duplikaty?
Radu Rădeanu
To już nie działa niestety
RobAu
5

Wiele świetnych odpowiedzi już, ale chciałem dodać jeszcze jedną odmianę za pomocą xdotool, która nie wymaga, aby pasek menu był widoczny ...

Klawisz shift kombinacja + F10 otworzy menu podręczne (odpowiednik kliknięcia terminala prawym przyciskiem myszy) i stamtąd profil można zmienić.

np. xdotool key shift+F10 r 3aby przejść do trzeciego profilu

Odkryłem również, że ta metoda nie wymaga ustawienia opóźnienia dla xdotool (co uważam za konieczne dla metody paska menu), dlatego jest nieco szybsza.

Często zmieniam profile, więc zawijam to w funkcję:

function chp(){
      xdotool --clearmodifiers key Shift+F10 r $1
}

więc mogę po prostu zadzwonić, chp Naby przejść do N-tego profilu.

Kilka dodatkowych wskazówek i osobliwości mojej konfiguracji:

  • Dodając chppolecenie do mojego .bashrc, mogę zmusić nowe karty, aby zawsze przełączały się na domyślny profil

  • Moje sesje ssh koduję kolorami na podstawie hosta, ale nie lubię, gdy mój alias ssh otwiera nowe karty lub okna ORAZ chcę, aby profil zmienił się z powrotem na domyślny po wyjściu z ssh. Moje rozwiązanie: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Daję xdotoolowi flagę --clearmodifiers, aby w przypadku posiadania klawisza modyfikującego (podczas otwierania karty / okna, wychodzenia z ssh itp.) Nie zakłócało to działania xdotool.

  • Nazwy mojego profilu poprzedzam cyframi, aby po dodaniu nowego nie przesuwać pozostałych z powodu alfabetu menu profilu

brotherJ4mes
źródło
... tylko uwaga, że ​​ta metoda wymaga włączenia klawisza akceleratora menu w ustawieniach terminalu> ogólne
brotherJ4mes
FYI dla mojego xdotool --clearmodifiersmusi przyjść później key.
lilydjwg
4

Nie ma skrótu, który pozwala zmienić profil w terminalu (bez poruszania się po menu, jak powiedziałeś w komentarzach), bez użycia GUI. Cytując instrukcję ( stabilny , rozwój 3.9 ):

Możesz zmienić profil w bieżącej karcie lub oknie Terminalu, wybierając profil w Terminalu ▸ Zmień profil.

(Możesz to zaproponować jako sugestię w narzędziu do śledzenia błędów )

Braiam
źródło
W rzeczywistości istnieje skrót: Alt + T, następnie P , Strzałka w górę lub Strzałka w dół i Enter . Ale to trochę za długo ...
Radu Rădeanu,
@ RaduRădeanu Alt + T nie działa w moim terminalu 3.8.3: /
Braiam
1
@ RaduRădeanu Chyba alt + t jest w rzeczywistości za pomocą interfejsu GUI, to po prostu nie za pomocą myszki.
moon.musick,
@Braiam Jeśli używasz wersji innej niż angielska gnome-terminal, naciśnij alti zobacz, która litera jest podświetlona dla twojej wersji językowej „Terminal” (jest to piąty element w mojej polskiej wersji, po lewej stronie „Pomoc”), a następnie użyj tej litery z alt.
moon.musick,
@ moon.musick Używam wersji Debian gnome-terminal 3.8.3 i wydaje się, że nie ma on modyfikatora Alt umożliwiającego dostęp do menu.
Braiam
3

Chciałem zrobić to samo i w końcu uruchomiłem skrypt, umieściłem go na moim GitHubie .

Jak wyjaśnię w pliku README.md, tak naprawdę nie przełącza się, ale ładuje konfigurację profili do profilu domyślnego. Aby to zrobić, konfiguracja każdego profilu jest zapisywana do pliku przy pierwszym uruchomieniu skryptu. Skrypt sprawia, że ​​wydaje się, że przełączasz się między profilami, co jest dla mnie wystarczające. Mam nadzieję, że pomoże każdemu ...

SigiSang
źródło
2

W zależności od celu może ci się przydać ten skrypt: https://github.com/xyrix/gnome-terminal-profile-switcher

Robi coś w rodzaju łatki małpy i generuje nowy profil dla każdego terminala, a następnie ustawia niektóre zmienne środowiskowe, aby udostępnić program do przełączania tematu profilu dla bieżącego terminala.

Mam nadzieję, że przykładowy skrypt safe_ssh wyjaśni sprawę :-). Używam go od nieco ponad roku i pomogło mi to nie zniszczyć bazy danych firmy na żywo ^ _ ^

Xyrix
źródło
2

Jeśli masz listę serwerów, do których często uzyskujesz dostęp, uważam, że najłatwiejszym rozwiązaniem byłoby po prostu wywołanie drugiego okna tylko dla sesji tego urządzenia.

Najpierw utwórz osobny profil terminal-gnome dla każdej zdalnej lokalizacji, z której często korzystasz. Następnie w każdym profilu określ, że terminal powinien wykonać polecenie logowania SSH dla tego pola, zamiast zwykłej powłoki.

ssh alice@athena

Na koniec napisz krótki skrypt, aby uruchomić nowe zdalne okno, podając identyfikator profilu.

#!/bin/bash
if [[ $# -ne 1 ]] ; then
  echo "Give me a server/profile name!"
  exit 1
fi
gnome-terminal --window-with-profile=$1
exit 0

Korzystając z tej strategii, możesz „nieskończenie” zmieniać wygląd okna terminala każdej skrzynki i wykopać je z jednego terminala „kontrolnego”. Na przykład, jeśli nazwiemy ten skrypt „rlv”, możemy odrodzić zdalne okno, po prostu wywołując skrypt o nazwie profilu.

>> rlv athena

Jeśli kiedykolwiek użyjesz grubego palca na nazwie hosta lub zaniedbujesz skonfigurowania profilu dla tego hosta, otrzymasz po prostu kolejne okno profilu domyślnego w polu lokalnym. Istnieje sposób na kodowanie skryptu, aby tego uniknąć, umieszczając login w samym skrypcie, a nie w terminalu gnome:

#!/bin/bash
if [[ $# -ne 1 ]] ; then
  echo "Give me a server/profile name!"
  exit 1
fi
gnome-terminal --window-with-profile=$1 -e "ssh $1"
exit 0

... ale tracisz elastyczność definiowania nazwy użytkownika logowania dla tego pola. Tę dodatkową cechę skryptu pozostawiam czytelnikowi jako ćwiczenie.

zerobandwidth
źródło
Dzięki za przekazanie mi tego pomysłu. :-) Chciałbym dodać, że możesz łatwo napisać plik .desktop, który otworzy twoje ulubione lokalizacje (podwójnym) kliknięciem w ten sposób.
Hinz
1

Właśnie zauważyłem, że moje oryginalne rozwiązanie zostało już odrzucone w pytaniu. Chociaż nie ma prostej metody zmiany profilu, można zmienić kolor tła / pierwszego planu za pomocą settermpolecenia.

Tak, to setterm -term linux -background black -foreground greennie daje czarne tło z tekstem zielonej. Jedynym problemem jest to, że ls ma pokolorowane wyjście, więc możesz chcieć wyłączyć ls. W przeciwnym razie resetuje się do poprzedniego schematu kolorów

Oryginalny post : Istnieje pewien sposób na obejście. Z man gnome-terminal:

--window-with-profile = NAZWA PROFILU

             Open a new window containing a  tab  with  the
             given profile.  More than one of these options
             can be provided.

Oto przykład z mojej maszyny. Mam trzy profile: B&G (czarny na zielonym), ForPrinting (czarna czcionka, białe tło) i Default. To, co robię, jest w bieżącym typie okna gnome-terminal --window-with-profile=ForPrinting. Następnie mogę albo zabić stare okno z linii poleceń, albo przełączyć i zamknąć je graficznie.

Profil B&G nie działa. Prawdopodobnie dlatego, że & nie jest prawidłowym znakiem, więc miej to na uwadze, nazywając profile.

Sergiy Kolodyazhnyy
źródło
0

Bardzo brzydkim rozwiązaniem, z którego ostatecznie skorzystałem, jest

unset x y
eval $(xwininfo -id $(xdotool getactivewindow) |
       sed -n -e 's/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p' \
              -e 's/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p')
xdotool mousemove $(($x + 50)) $(($y + 50))
xdotool click 3; xdotool key --repeat 3 Up; xdotool key Right; xdotool key --delay 50 Down; xdotool key --delay 50 Return

(Spowoduje to wybranie drugiego profilu, ale można to zmienić, aby powiedzieć profil htir, zmieniając drugie polecenie „klawisz w dół” na xdotool key --delay 50 --repeat 2 Down.

Co to robi:

  1. znajdź lewe górne współrzędne bieżącego okna (np. używany terminal gnome).
  2. przesuń mysz, aby znaleźć się nad tym terminalem
  3. kliknij prawym przyciskiem myszy i przejdź do menu kontekstowego, aby wybrać drugi profil.

Będziesz musiał zainstalować xdotool sudo apt install xdotool.

Coś niezwykłego, że sam terminal nie pozwala na konfigurację przez terminal!

SColvin
źródło
0

Byłoby wspaniale, gdyby gnome-terminal oferował polecenie i skrót „następny profil”; niestety tak nie jest.

Obejściem dla osób Alt+Tniepełnosprawnych (Edycja> Preferencje> Włącz mnemoniki - niezaznaczone) jest: F10 left left down righti wybierz profil. Ojej.

Mario
źródło
Warto zauważyć, że wymaga to widocznego paska menu.
Gauthier
0

To dość stary post, ale ponieważ pojawiał się, gdy szukałem rozwiązania tego samego problemu, pomyślałem, że opublikuję moje rozwiązanie.

Wiąże się to z niewielkim skryptem w Pythonie i odwzorowaniem przycisku CTRL + ALT + T, aby uruchomić skrypt zamiast po prostu uruchomić terminal.

Utwórz plik tekstowy, nazwałem mój terminal.py i upewnij się, że jest wykonywalny. Umieść w nim następujący kod. Spowoduje to otwarcie okien terminala przy użyciu wszystkich dostępnych profili w kolejności, upewniając się, że ten oznaczony jako „domyślny” jest pierwszy na liście.

#!/usr/bin/python
#
# Launch a gnome-terminal window trying to assign each new window 
# to a different profile.
# 
import json
import os
import commands

profiles=[]

try:
    profileList = commands.getoutput("gsettings get org.gnome.Terminal.ProfilesList list").replace("'",'"')
    profileDefault = commands.getoutput("gsettings get org.gnome.Terminal.ProfilesList default").replace("'",'"')

    profiles.append(json.loads(profileDefault))
    ls = json.loads(profileList)
    ls.remove(profiles[0])
    profiles+=ls

    # find the next available terminal number
    # when terminals are closed, gaps in the numbers can happen
    # terminals are numeric and the lowest slot is filled first
    terminals = commands.getoutput("ls /dev/pts/  | grep -E '^[0-9]+$'").split("\n")
    next = 0
    try:
        while terminals.index(str(next))>=0:
            next += 1
    except:
        pass

    # determine the profile to use
    prof = next % len(profiles)

    # launch the terminal with the specific profile
    cmd="gnome-terminal --window-with-profile='%s'" % (profiles[prof])
    os.system(cmd)
except:
    # if anything fails, launch a default terminal
    print("error")
    os.system("gnome-terminal")

Użyj narzędzia ustawień klawiatury, aby przypisać nowy skrót do tego skryptu. Dla mnie ponownie przypisałem CTRL + ALT + T, ponieważ jest to skrót, którego używam do otwierania okna terminala.

Pamiętaj, aby utworzyć kilka profili w swoim terminalu. Ten skrypt korzysta ze wszystkich twoich profili. Im więcej tworzysz, tym więcej odmian okien możesz uzyskać dostęp. Mam kilka identycznych z wyjątkiem koloru tła. Pomaga mi to rozpoznać je, gdy przeglądam je klawiszem Alt.

Przykład okna terminala

schworak
źródło