Ligne de commande pour basculer entre les profils dans gnome-terminal


20

J'ai créé un nouveau profil pour gnome-terminal et je peux basculer entre le profil "implicite" et le nouveau profil créé comme vous pouvez le voir dans l'image ci-dessous:

Basculer entre les profils dans gnome-terminal

Maintenant, je me demande comment puis-je basculer entre les profils en utilisant une ligne de commande / script ou peut-être en utilisant un raccourci pour cela.

Remarque: des solutions telles que:

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

sont exclus car je préfère ne pas fermer et ouvrir un autre terminal ou obtenir une autre fenêtre de terminal dans ce processus de modification du profil.


1
Avec gconftool-2, vous pouvez définir le profil dont les modifications sont immédiates. Avez-vous vérifié cela -> stackoverflow.com/questions/660442/…
Stormvirux

@Stormvirux Non ... Alors, pouvez-vous expliquer comment utiliser gconftool ou gconftool-2 pour changer de profil? Je n'y vois pas de bonne réponse / explication.
Radu Rădeanu

Réponses:


9

Pour passer au profil "implicite":

xdotool key Alt+t p Return

Pour passer au deuxième profil:

xdotool key Alt+t p Down Return

xdotool Installer xdotool n'est pas installé par défaut dans Ubuntu, il doit donc être installé en premier.

Bien sûr, pour ces commandes peuvent être ajoutés des raccourcis clavier personnalisés .


Ce n'est pas un raccourci. Vous ne faites que simuler les touches, ce ne sont que des mnémoniques de l'application.
Braiam

1
@Braiam Oui, ce n'est pas un raccourci, je vois. C'est une ligne de commande (voir man xdotoolpour plus d'informations) comme je l'ai demandé, qui fonctionne exactement comme je le souhaite et je suis satisfait de cette réponse jusqu'à ce que quelque chose de mieux apparaisse. ;)
Radu Rădeanu

Vous devriez sérieusement envisager de suggérer que dans le bugtracker ...
Braiam

@Braiam Comme je vous l'ai dit, je suis d'accord avec cette solution, cela fonctionne comme un charme. Concernant votre suggestion, il y en a une en ce sens de 2002 (modifiée en 2010: " Ce serait très bien si je pouvais utiliser exactement deux touches pour ouvrir le profil de mon choix. " - voir ce commentaire ). Alors, pourquoi pensez-vous que je devrais en ajouter un nouveau? Aimez-vous les doublons?
Radu Rădeanu

Cela ne fonctionne plus malheureusement
RobAu

5

Beaucoup de bonnes réponses déjà, mais je voulais ajouter une autre variante en utilisant xdotool qui ne nécessite pas que la barre de menu soit visible ...

La combinaison de touches Maj + F10 ouvrira un menu contextuel (l'équivalent d'un clic droit sur le terminal) et à partir de là, le profil peut être modifié.

par exemple xdotool key shift+F10 r 3pour accéder au troisième profil

J'ai également constaté que cette méthode ne nécessite pas de définir un délai pour xdotool (que j'ai trouvé nécessaire pour la méthode de la barre de menus), c'est donc un peu plus rapide.

J'ai tendance à changer beaucoup de profils, donc j'enroule cela dans une fonction:

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

donc je peux simplement appeler chp Npour passer au Nième profil.

Quelques conseils et particularités supplémentaires de ma configuration:

  • En ajoutant une chpcommande à mon .bashrc, je peux forcer les nouveaux onglets à toujours basculer sur le profil par défaut

  • Je code la couleur de mes sessions ssh en fonction de l'hôte, mais je n'aime pas que mon alias ssh ouvre de nouveaux onglets ou fenêtres ET je souhaite que le profil revienne à la valeur par défaut lorsque je quitte ssh. Ma solution: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Je donne à xdotool le drapeau --clearmodifierspour que si je détiens une touche de modification (lors de l'ouverture d'un onglet / fenêtre, de la sortie de ssh, etc.), cela n'interfère pas avec xdotool.

  • Je ajoute mes noms de profil avec des chiffres afin que si j'en ajoute un nouveau, il ne change pas tous les autres en raison de l'alphabétisation du menu du profil


... juste une note que cette méthode nécessite l'activation de la touche accélérateur de menu dans les paramètres du terminal> général
brotherJ4mes

Pour info mon xdotool --clearmodifiersdoit venir après key.
lilydjwg

4

Il n'y a pas de raccourci qui vous permet de changer le profil dans le terminal (sans naviguer dans les menus comme vous l'avez dit dans les commentaires), sans utiliser l'interface graphique. Citant le manuel ( stable , développement 3.9 ):

Vous pouvez modifier le profil dans l'onglet ou la fenêtre actuelle de votre terminal en sélectionnant un profil dans Terminal ▸ Changer de profil.

(Vous pouvez proposer cela comme suggestion dans le traqueur de bogues )


En fait, il existe un raccourci: Alt + T suivi de P , Flèche haut ou Flèche bas et Entrée . Mais c'est un peu long ...
Radu Rădeanu

@ RaduRădeanu Alt + T ne fonctionne pas dans mon terminal 3.8.3: /
Braiam

1
@ RaduRădeanu Je suppose que alt + t est en fait à l' aide de l'interface graphique, il est tout simplement pas en utilisant la souris.
moon.musick

@Braiam Si vous utilisez une version non anglaise de la gnome-terminal, appuyez sur altet voyez quelle lettre est mise en surbrillance pour votre version linguistique de 'Terminal' (c'est le 5ème élément de ma version polonaise, juste à gauche de 'Aide'), puis utilisez cette lettre avec alt.
moon.musick

@ moon.musick J'utilise la version Debian de gnome-terminal 3.8.3, et il semble qu'elle ne dispose pas du modificateur Alt pour accéder aux menus.
Braiam

3

Je cherchais à faire de même et j'ai finalement réussi à faire fonctionner un script, je l'ai mis sur mon GitHub .

Comme je l'explique dans le fichier README.md, il ne change pas réellement, mais charge une configuration de profils dans le profil par défaut. Pour ce faire, la configuration de chaque profil est enregistrée dans un fichier lors de la première exécution du script. Le script donne l'impression que vous basculez entre les profils, ce qui est assez bon pour moi. J'espère que cela aide n'importe qui ...


2

Selon votre objectif, vous pouvez trouver ce script utile: https://github.com/xyrix/gnome-terminal-profile-switcher

Il fait une sorte de patch singe et génère un nouveau profil pour chaque terminal, puis définit quelques variables d'environnement pour exposer un programme pour changer le thème du profil pour votre terminal actuel.

Espérons que l'exemple de script safe_ssh clarifiera les choses :-). Je l'utilise depuis un peu plus d'un an maintenant et cela m'a aidé à ne pas détruire la base de données en direct de l'entreprise ^ _ ^


2

Si vous avez une liste de serveurs auxquels vous accédez souvent, je pense que la solution la plus simple serait d'appeler simplement une deuxième fenêtre juste pour la session de cette boîte.

Tout d'abord, créez un profil de terminal gnome distinct pour chaque emplacement distant que vous utilisez souvent. Ensuite, dans chaque profil, spécifiez que le terminal doit exécuter la commande de connexion SSH pour cette boîte, au lieu d'un shell simple.

ssh alice@athena

Enfin, écrivez un court script pour lancer une nouvelle fenêtre distante avec un ID de profil.

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

En utilisant cette stratégie, vous pouvez varier "à l'infini" l'apparence de la fenêtre du terminal de chaque boîte et les lancer depuis un seul terminal "de contrôle". Par exemple, si nous appelons ce script "rlv", nous pouvons alors générer une fenêtre distante en appelant simplement le script avec un nom de profil.

>> rlv athena

Si vous avez déjà saisi un nom d'hôte ou omis de configurer un profil pour cet hôte, vous obtiendrez simplement une autre fenêtre de profil par défaut sur la boîte locale. Il existe un moyen de coder le script pour éviter cela, en plaçant la connexion dans le script lui-même, plutôt que dans le gnome-terminal:

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

... mais alors vous perdez la flexibilité de définir votre nom d'utilisateur de connexion pour cette boîte. Cette caractéristique supplémentaire du script que je laisse comme exercice au lecteur.


Merci de m'avoir donné cette idée. :-) Je voudrais ajouter que vous pouvez facilement écrire un fichier .desktop qui ouvrira vos emplacements préférés avec un (double) -clic de cette façon.
Hinz

1

Je viens de remarquer que ma solution d'origine a déjà été rejetée dans la question. Bien qu'il ne semble pas y avoir de moyen simple de modifier le profil, vous pouvez modifier la couleur d'arrière-plan / de premier plan à l'aide de la settermcommande.

Ainsi, cela setterm -term linux -background black -foreground greenvous donnerait un fond noir avec du texte vert. Le seul problème est que ls a une sortie colorisée, vous pouvez donc désactiver la coloration ls. Sinon, il revient à la palette de couleurs précédente

Article d'origine : il existe une sorte de solution. Depuis man gnome-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.

Voici un exemple de ma machine. J'ai trois profils: B&G (noir sur vert), ForPrinting (police noire, fond blanc) et Default. Donc ce que je fais est dans le type de fenêtre actuel gnome-terminal --window-with-profile=ForPrinting. Ensuite, je peux soit tuer l'ancienne fenêtre de la ligne de commande ou basculer et la fermer graphiquement.

Le profil B&G ne fonctionne pas. Probablement parce que & n'est pas un caractère valide, alors gardez cela à l'esprit lorsque vous nommez des profils.


0

La solution très moche que j'ai fini par utiliser est

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

(Ceci sélectionne le deuxième profil, mais vous pouvez changer cela pour dire le profil htir en changeant la deuxième commande "clé enfoncée" en xdotool key --delay 50 --repeat 2 Down.

Qu'est-ce que ça fait:

  1. trouver les coordonnées en haut à gauche de la fenêtre actuelle (par exemple le terminal gnome utilisé).
  2. déplacez la souris sur ce terminal
  3. faites un clic droit et parcourez le menu contextuel pour sélectionner le deuxième profil.

Vous aurez besoin de xdotool installé sudo apt install xdotool.

C'est assez extraordinaire que le terminal lui-même ne permette pas la configuration via le terminal!


0

Ce serait génial que gnome-terminal propose une commande et un raccourci "profil suivant"; malheureusement non.

Une solution de contournement pour les personnes Alt+Thandicapées (Édition> Préférences> Activer les mnémoniques - non cochée) est: F10 left left down rightet sélectionnez le profil. Aie.


Il convient de noter que cela nécessite que la barre de menus soit visible.
Gauthier

0

C'est un article plutôt ancien, mais comme il revenait sans cesse pendant que je cherchais à résoudre ce même problème, j'ai pensé publier ma solution.

Cela implique un petit script python et le remappage du bouton CTRL + ALT + T pour exécuter le script au lieu de simplement lancer le terminal.

Créez un fichier texte, j'ai nommé le mien terminal.py et assurez-vous qu'il est exécutable. Placez-y le code suivant. Cela ouvrira les fenêtres du terminal en utilisant tous les profils disponibles dans l'ordre en s'assurant que celui marqué "par défaut" est le premier de la liste.

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

Utilisez l'utilitaire des paramètres du clavier pour attribuer un nouveau raccourci à ce script. Pour moi, j'ai réaffecté CTRL + ALT + T car c'est le raccourci que j'utilise pour ouvrir une fenêtre de terminal.

Assurez-vous de créer plusieurs profils dans votre terminal. Ce script utilisera tous vos profils. Donc, plus vous créez, plus vous avez accès à des variantes de fenêtres. J'en ai plusieurs qui sont tous identiques à l'exception de la couleur de fond. Cela m'aide à les reconnaître en les parcourant alternativement.

Exemple de fenêtre de terminal

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.