Befehlszeile zum Wechseln zwischen Profilen im Gnome-Terminal

20

Ich habe ein neues Profil für gnome-terminal erstellt und kann zwischen dem "impliziten" Profil und dem neu erstellten Profil wechseln, wie Sie in der folgenden Abbildung sehen können:

Wechseln zwischen Profilen im Gnome-Terminal

Jetzt frage ich mich, wie ich mithilfe einer Befehlszeile / eines Skripts oder einer Verknüpfung dazu zwischen Profilen wechseln kann.

Hinweis: Lösungen wie:

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

sind ausgeschlossen, weil ich es vorziehen würde, ein anderes Terminal nicht zu schließen und zu öffnen oder ein anderes Terminalfenster zu erhalten, wenn ich das Profil ändere.

Radu Rădeanu
quelle
1
Mit gconftool-2 können Sie das Profil festlegen, dessen Änderungen sofort wirksam werden. Haben Sie dies überprüft -> stackoverflow.com/questions/660442/…
Stormvirux
@Stormvirux Nein ... Können Sie also erklären, wie Sie mit gconftool oder gconftool-2 das Profil wechseln? Ich sehe dort keine gute Antwort / Erklärung.
Radu Rădeanu
doppelte Frage: askubuntu.com/questions/247041/…
Jakob

Antworten:

9

So wechseln Sie zum "impliziten" Profil:

xdotool key Alt+t p Return

So wechseln Sie zum zweiten Profil:

xdotool key Alt+t p Down Return

xdotool Installieren Sie xdotool ist in Ubuntu nicht standardmäßig installiert, muss also zuerst installiert werden.

Natürlich können für diese Befehle benutzerdefinierte Tastaturkürzel hinzugefügt werden .

Radu Rădeanu
quelle
Das ist keine Abkürzung. Sie simulieren nur die Tastendrücke, ist nur Mnemonik der Anwendung.
Braiam
1
@Braiam Ja, es ist keine Abkürzung, ich kann sehen. Es ist eine Befehlszeile (siehe man xdotoolfür weitere Informationen), wie ich gefragt habe, die genau so funktioniert, wie ich es mir wünsche, und ich bin mit dieser Antwort zufrieden, bis etwas Besseres erscheint. ;)
Radu Rădeanu
Sie sollten ernsthaft in Betracht ziehen, dies im Bugtracker
vorzuschlagen
@Braiam Wie ich dir sagte, ich bin in Ordnung mit dieser Lösung, es funktioniert wie ein Zauber. In Bezug auf Ihren Vorschlag gibt es einen in diesem Sinne aus dem Jahr 2002 (geändert im Jahr 2010: " Es wäre besonders schön, wenn ich genau zwei Tastenanschläge verwenden könnte, um das Profil meiner Wahl zu öffnen. " - siehe diesen Kommentar ). Also, warum sollte ich meiner Meinung nach eine neue hinzufügen? Magst du Duplikate?
Radu Rădeanu
Es funktioniert nicht mehr unglücklicherweise
RobAu
4

Es gibt keine Verknüpfung, mit der Sie das Profil im Terminal ändern können (ohne in den Menüs zu navigieren, wie Sie in den Kommentaren angegeben haben), ohne die GUI zu verwenden. Zitat aus dem Handbuch ( stable , development 3.9 ):

Sie können das Profil in Ihrem aktuellen Terminal-Register oder -Fenster ändern, indem Sie unter Terminal Terminal Profil ändern ein Profil auswählen.

(Sie können dies als Vorschlag im Bug-Tracker vorschlagen )

Braiam
quelle
Eigentlich gibt es eine Abkürzung: Alt + T gefolgt von P , Aufwärtspfeil oder Abwärtspfeil und Eingabetaste . Aber das ist ein bisschen lang ...
Radu Rădeanu
@ RaduRădeanu Alt + T funktioniert nicht in meinem Terminal 3.8.3: /
Braiam
1
@ RaduRădeanu I guess alt + t ist in der Tat mit der GUI, ist es mit nur nicht - Maus.
moon.musick
@Braiam Wenn Sie eine nicht-englische Version von verwenden gnome-terminal, drücken Sie altund sehen Sie, welcher Buchstabe für Ihre Sprachversion von "Terminal" markiert ist (in meiner polnischen Version ist es das fünfte Element, nur links von "Hilfe"). Verwenden Sie dann diesen Buchstaben mit alt.
moon.musick
@ moon.musick Ich benutze die Debian-Version von gnome-terminal 3.8.3 und es scheint, dass es nicht den Alt-Modifikator hat, um auf die Menüs zuzugreifen.
Braiam
4

Viele gute Antworten, aber ich wollte noch eine Variante mit xdotool hinzufügen, bei der die Menüleiste nicht sichtbar sein muss ...

Die Tastenkombination Umschalt + F10 öffnet ein Popup-Menü (entspricht einem Rechtsklick auf ein Terminal) und von dort aus kann das Profil geändert werden.

zB xdotool key shift+F10 r 3um zum dritten Profil zu gelangen

Ich habe auch festgestellt, dass für diese Methode keine Verzögerung für xdotool erforderlich ist (was ich für die Menüleistenmethode für erforderlich hielt), daher ist sie etwas schneller.

Ich neige dazu, Profile zu ändern, so dass ich dies in eine Funktion einbinde:

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

also kann ich einfach anrufen chp N, um zum n-ten profil zu wechseln.

Einige weitere Tipps und Besonderheiten meines Setups:

  • Durch Hinzufügen eines chpBefehls zu meinem .bashrc kann ich erzwingen, dass neue Registerkarten immer zum Standardprofil wechseln

  • Ich färbe meine ssh-Sitzungen basierend auf dem Host ein, aber ich möchte nicht, dass mein ssh-Alias ​​neue Registerkarten oder Fenster öffnet, UND ich möchte, dass das Profil beim Beenden von ssh auf die Standardeinstellungen zurückgesetzt wird. Meine Lösung: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Ich gebe xdotool das Flag, --clearmodifiersdamit ich xdotool nicht störe , wenn ich zufällig eine Änderungstaste halte (beim Öffnen eines Tabs / Fensters, beim Beenden von ssh usw.).

  • Ich stelle meinen Profilnamen Zahlen voran, damit beim Hinzufügen einer neuen Nummer nicht alle anderen durch die Alphabetisierung des Profilmenüs verschoben werden

BruderJ4mes
quelle
... nur eine Anmerkung, dass diese Methode erfordert, dass die
Menübeschleunigungstaste
3

Ich wollte dasselbe tun und bekam endlich ein Skript zum Laufen, das ich auf meinem GitHub aufbaute .

Wie ich in der README.md erläutere, wird nicht gewechselt, sondern eine Profilkonfiguration in das Standardprofil geladen. Zu diesem Zweck wird die Konfiguration jedes Profils beim ersten Ausführen des Skripts in einer Datei gespeichert. Das Skript sieht so aus, als würdest du zwischen Profilen wechseln, was für mich gut genug ist. Hoffe es hilft jedem ...

SigiSang
quelle
2

Abhängig von Ihrem Zweck kann dieses Skript hilfreich sein: https://github.com/xyrix/gnome-terminal-profile-switcher

Es führt eine Art Affen-Patch durch und generiert ein neues Profil für jedes Terminal. Anschließend werden einige Umgebungsvariablen festgelegt, um ein Programm zum Ändern des Profilthemas für das aktuelle Terminal bereitzustellen.

Hoffentlich macht das Beispiel safe_ssh die Sache klar :-). Ich benutze es seit etwas mehr als einem Jahr und es hat mir geholfen, die Live-Datenbank des Unternehmens nicht zu zerstören ^ _ ^

xyrix
quelle
2

Wenn Sie eine Liste von Servern haben, auf die Sie häufig zugreifen, ist es meiner Meinung nach am einfachsten, ein zweites Fenster nur für die Sitzung dieser Box aufzurufen.

Erstellen Sie zunächst ein separates Gnome-Terminal-Profil für jeden Remote-Standort, den Sie häufig verwenden. Geben Sie dann in jedem Profil an, dass das Terminal den SSH-Anmeldebefehl für dieses Feld anstelle einer einfachen Shell ausführen soll.

ssh alice@athena

Schreiben Sie abschließend ein kurzes Skript, um ein neues Remote-Fenster mit einer bestimmten Profil-ID zu starten.

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

Mit dieser Strategie können Sie das Erscheinungsbild des Terminalfensters jeder Box "unendlich" variieren und von einem einzigen "Kontroll" -Terminal aus starten. Wenn wir dieses Skript beispielsweise "rlv" nennen, können wir ein Remote-Fenster erzeugen, indem wir einfach das Skript mit einem Profilnamen aufrufen.

>> rlv athena

Wenn Sie jemals einen Hostnamen falsch eingegeben oder es versäumt haben, ein Profil für diesen Host einzurichten, wird in der lokalen Box ein weiteres Standardprofilfenster angezeigt. Es gibt eine Möglichkeit, das Skript zu codieren, um dies zu vermeiden, indem Sie das Login in das Skript selbst und nicht in das Gnome-Terminal eingeben:

#!/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

... aber dann verlieren Sie die Flexibilität, Ihren Login-Benutzernamen für diese Box zu definieren. Dieses zusätzliche Feature des Skripts überlasse ich dem Leser als Übung.

Nullbandbreite
quelle
Vielen Dank für die Idee. :-) Ich möchte hinzufügen, dass Sie leicht eine .desktop-Datei schreiben können, die Ihre Lieblingsorte mit einem (Doppel-) Klick auf diese Weise öffnet.
Hinz
1

Mir ist gerade aufgefallen, dass meine ursprüngliche Lösung in der Frage bereits abgelehnt wurde. Während es keine einfache Möglichkeit gibt, das Profil zu ändern, können Sie die Hintergrund- / Vordergrundfarbe mit dem settermBefehl ändern .

Auf diese Weise erhalten setterm -term linux -background black -foreground greenSie einen schwarzen Hintergrund mit grünem Text. Das einzige Problem ist, dass ls die Ausgabe eingefärbt hat, also möchten Sie möglicherweise ls ausfärben. Andernfalls wird das vorherige Farbschema wiederhergestellt

Originaler Beitrag : Es gibt eine Art Umweg. Vom Menschenzwerg-Terminal:

--window-with-profile = PROFILENAME

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

Hier ist ein Beispiel von meiner Maschine. Ich habe drei Profile: B & G (schwarz auf grün), ForPrinting (schwarze Schrift, weißer Hintergrund) und Standard. Also, was ich tue, ist im aktuellen Fenstertyp gnome-terminal --window-with-profile=ForPrinting. Dann kann ich entweder das alte Fenster von der Kommandozeile aus töten oder es grafisch schließen.

B & G-Profil funktioniert nicht. Wahrscheinlich, weil & kein gültiges Zeichen ist, denken Sie daran, wenn Sie Profile benennen.

Sergiy Kolodyazhnyy
quelle
0

Die sehr hässliche Lösung, die ich letztendlich benutzt habe, ist

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

(Dies wählt das zweite Profil aus, aber Sie können dies ändern, um das htir-Profil auszudrücken, indem Sie den zweiten Befehl "Nach unten" in ändern xdotool key --delay 50 --repeat 2 Down.

Was macht das

  1. Finden Sie die linken oberen Koordinaten des aktuellen Fensters (z. B. das verwendete Gnome-Terminal).
  2. Bewegen Sie die Maus über dieses Terminal
  3. Klicken Sie mit der rechten Maustaste und navigieren Sie zum Kontextmenü, um das zweite Profil auszuwählen.

Sie müssen xdotool installiert haben sudo apt install xdotool.

Etwas außergewöhnlich, dass das Terminal selbst keine Konfiguration über das Terminal zulässt!

SColvin
quelle
0

Es wäre toll, wenn gnome-terminal einen "next profile" -Befehl und eine Verknüpfung anbiete; leider nicht.

Eine Problemumgehung für Benutzer mit Alt+TBehinderungen (Bearbeiten> Einstellungen> Mnemonik aktivieren - deaktiviert) ist: F10 left left down rightund wählen Sie das Profil aus. Autsch.

Mario
quelle
Beachten Sie, dass hierfür die Menüleiste sichtbar sein muss.
Gauthier
0

Dies ist ein ziemlich alter Beitrag, aber da er immer wieder auftauchte, während ich nach der Lösung des gleichen Problems suchte, dachte ich, ich würde meine Lösung veröffentlichen.

Dies beinhaltet ein kleines Python-Skript und das erneute Zuordnen der STRG + ALT + T-Taste, um das Skript auszuführen, anstatt einfach das Terminal zu starten.

Erstellen Sie eine Textdatei mit dem Namen mine terminal.py und stellen Sie sicher, dass sie ausführbar ist. Fügen Sie den folgenden Code ein. Dadurch werden die Terminalfenster mit allen verfügbaren Profilen nacheinander geöffnet. Stellen Sie sicher, dass das mit "Standard" gekennzeichnete Profil das erste in der Liste ist.

#!/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")

Verwenden Sie das Dienstprogramm für die Tastatureinstellungen, um diesem Skript eine neue Verknüpfung zuzuweisen. Für mich habe ich STRG + ALT + T neu zugewiesen, da dies die Verknüpfung ist, mit der ich ein Terminalfenster öffne.

Stellen Sie sicher, dass Sie mehrere Profile in Ihrem Terminal erstellen. Dieses Skript verwendet alle Ihre Profile. Je mehr Sie also erstellen, desto mehr Variationen von Fenstern stehen Ihnen ebenfalls zur Verfügung. Ich habe mehrere, die bis auf die Hintergrundfarbe alle identisch sind. Dies hilft mir, sie zu erkennen, wenn ich mit der Alt-Taste durch sie gehe.

Terminalfenster Beispiel

schworak
quelle