Riga di comando per passare da un profilo all'altro in gnome-terminal


20

Ho creato un nuovo profilo per gnome-terminal e posso passare dal profilo "Implicito" al nuovo profilo creato, come puoi vedere nell'immagine seguente:

Passa da un profilo all'altro in gnome-terminal

Ora mi chiedo come posso passare da un profilo all'altro usando una riga di comando / script o magari usando una scorciatoia per questo.

Nota: soluzioni come:

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

sono esclusi perché preferisco non chiudere e aprire un altro terminale o ottenere un'altra finestra del terminale in questo processo di modifica del profilo.


1
Con gconftool-2 puoi impostare il profilo le cui modifiche sono immediate. Hai controllato questo fuori -> stackoverflow.com/questions/660442/...
Stormvirux

@Stormvirux No ... Quindi puoi spiegare come usare gconftool o gconftool-2 per cambiare il profilo? Non vedo una buona risposta / spiegazione lì.
Radu Rădeanu,

Risposte:


9

Per passare al profilo "implicito":

xdotool key Alt+t p Return

Per passare al secondo profilo:

xdotool key Alt+t p Down Return

xdotool Installa xdotool non è installato di default in Ubuntu, quindi deve essere installato per primo.

Naturalmente, per questi comandi è possibile aggiungere scorciatoie da tastiera personalizzate .


Questa non è una scorciatoia. Stai solo simulando i tasti premuti, è solo mnemonica dell'applicazione.
Braiam,

1
@Braiam Sì, non è una scorciatoia, posso vedere. È una riga di comando (vedi man xdotoolper maggiori informazioni) come ho chiesto, che funziona esattamente come desidero e sono contento di questa risposta fino a quando apparirà qualcosa di meglio. ;)
Radu Rădeanu,

Dovresti seriamente considerare di suggerire che nel bugtracker ...
Braiam

@Braiam Come ti ho detto, sto bene con questa soluzione, funziona come un fascino. Per quanto riguarda il tuo suggerimento, ce n'è uno in questo senso dal 2002 (modificato nel 2010: " Sarebbe molto più bello se potessi usare esattamente due sequenze di tasti per aprire il profilo di mia scelta " . - Vedi questo commento ). Quindi, perché pensi che dovrei aggiungerne uno nuovo? Ti piacciono i duplicati?
Radu Rădeanu,

Non funziona più sfortunatamente
RobAu il

5

Molte ottime risposte già, ma volevo aggiungere un'altra variante usando xdotool che non richiede che la barra dei menu sia visibile ...

Il tasto combo shift + F10 aprirà un menu a comparsa (l'equivalente del tasto destro del mouse sul terminale) e da lì il profilo può essere modificato.

ad es. xdotool key shift+F10 r 3per arrivare al terzo profilo

Ho anche scoperto che questo metodo non richiede l'impostazione di un ritardo per xdotool (che ho trovato necessario per il metodo della barra dei menu), quindi è quindi un po 'più veloce.

Tendo a cambiare molto i profili, quindi lo avvolgo in una funzione:

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

così posso semplicemente chiamare chp Nper passare all'ennesimo profilo.

Alcuni altri suggerimenti e idiosincrasie della mia configurazione:

  • Aggiungendo un chpcomando al mio .bashrc posso forzare le nuove schede a passare sempre al profilo predefinito

  • Coloro le mie sessioni ssh in base all'host, ma non mi piace che il mio alias ssh apra nuove schede o finestre E voglio che il profilo ritorni al valore predefinito quando esco da ssh. La mia soluzione: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Fornisco a xdotool il flag in --clearmodifiersmodo che se mi capita di tenere un tasto modificatore (quando apro una scheda / finestra, esci da ssh, ecc.), Non interferirà con xdotool.

  • Anticipo i nomi del mio profilo con i numeri in modo che se ne aggiungo uno nuovo, questo non sposta tutti gli altri a causa dell'alfabetizzazione del menu del profilo


... solo una nota che questo metodo richiede che il tasto acceleratore di menu sia abilitato nelle impostazioni del terminale> generale
brotherJ4mes,

FYI per il mio xdotool --clearmodifiersdeve venire dopo key.
lilydjwg il

4

Non esiste un collegamento che ti permetta di cambiare il profilo all'interno del terminale (senza navigare nei menu come hai detto nei commenti), senza l'uso della GUI. Citando il manuale ( stabile , sviluppo 3.9 ):

È possibile modificare il profilo nella scheda o finestra Terminale corrente selezionando un profilo dal Terminale ▸ Cambia profilo.

(Puoi proporlo come suggerimento nel bug tracker )


In realtà, esiste una scorciatoia: Alt + T seguita da P , Freccia su o Freccia giù e Invio . Ma è un po 'lungo ...
Radu Rădeanu,

@ RaduRădeanu Alt + T non funziona nel mio terminale 3.8.3: /
Braiam

1
@ RaduRădeanu Immagino che alt + t stia effettivamente usando la GUI, non sta usando il mouse.
moon.musick,

@Braiam Se stai utilizzando una versione non inglese di gnome-terminal, premi alte vedi quale lettera viene evidenziata per la versione in lingua di "Terminale" (è il quinto elemento nella mia versione polacca, appena uscito da "Aiuto"), quindi usa quella lettera con alt.
moon.musick,

@ moon.musick Sto usando la versione Debian di gnome-terminal 3.8.3, e sembra che non abbia il modificatore Alt per accedere ai menu.
Braiam,

3

Stavo cercando di fare lo stesso e finalmente ho fatto funzionare una sceneggiatura, l'ho messa sul mio GitHub .

Come spiego in README.md, in realtà non cambia, ma carica una configurazione di profili nel profilo predefinito. Per fare ciò, la configurazione di ciascun profilo viene salvata su file alla prima esecuzione dello script. Lo script sembra farti passare da un profilo all'altro, il che è abbastanza buono per me. Spero che aiuti chiunque ...


2

A seconda del tuo scopo, potresti trovare utile questo script: https://github.com/xyrix/gnome-terminal-profile-switcher

Fa una sorta di patch di scimmia e genera un nuovo profilo per ciascun terminale, quindi imposta alcune variabili di ambiente per esporre un programma per cambiare il tema del profilo per il tuo terminale corrente.

Speriamo che lo script safe_ssh di esempio chiarisca le cose :-). Lo uso da poco più di un anno e mi ha aiutato a non distruggere il database live dell'azienda ^ _ ^


2

Se hai un elenco di server a cui accedi spesso, credo che la soluzione più semplice sarebbe quella di invocare semplicemente una seconda finestra solo per la sessione di quella casella.

Innanzitutto, crea un profilo gnome-terminal separato per ogni posizione remota che usi spesso. Quindi, in ciascun profilo, specificare che il terminale deve eseguire il comando di accesso SSH per quella casella, anziché una semplice shell.

ssh alice@athena

Infine, scrivi un breve script per dare il via a una nuova finestra remota con un ID profilo.

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

Usando questa strategia è possibile "infinitamente" variare l'aspetto della finestra del terminale di ogni box e lanciarli da un singolo terminale "di controllo". Ad esempio, se chiamiamo questo script "rlv", possiamo generare una finestra remota semplicemente invocando lo script con un nome profilo.

>> rlv athena

Se si digita mai un nome host o si trascura di impostare un profilo per quell'host, nella finestra locale verrà visualizzata un'altra finestra del profilo predefinito. C'è un modo per codificare lo script per evitarlo, inserendo il login nello script stesso, piuttosto che nel terminale 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

... ma poi perdi la flessibilità di definire il tuo nome utente di accesso per quella casella. Quella caratteristica aggiuntiva della sceneggiatura lascio come esercizio al lettore.


Grazie per avermi fornito quell'idea. :-) Vorrei aggiungere che puoi facilmente scrivere un file .desktop che aprirà le tue posizioni preferite con un (doppio) clic in quel modo.
Hinz,

1

Ho appena notato che la mia soluzione originale è già stata respinta nella domanda. Anche se non sembra esserci un modo semplice per cambiare il profilo, puoi cambiare il colore di sfondo / primo piano usando il settermcomando.

Quindi, questo setterm -term linux -background black -foreground greenti darebbe uno sfondo nero con testo verde. L'unico problema è che ls ha un output colorato, quindi potresti voler disattivare la colorazione. Altrimenti ripristina la combinazione di colori precedente

Post originale : c'è un modo per aggirare. Da man gnome-terminal:

--window-con-profile = PROFILENAME

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

Ecco un esempio dalla mia macchina. Ho tre profili: B&G (nero su verde), ForPrinting (carattere nero, sfondo bianco) e Predefinito. Quindi quello che faccio è nel tipo di finestra corrente gnome-terminal --window-with-profile=ForPrinting. Quindi posso uccidere la vecchia finestra dalla riga di comando o passare e chiuderla graficamente.

Il profilo B&G non funziona. Probabilmente perché & non è un personaggio valido, quindi tienilo a mente quando assegni un nome ai profili.


0

La brutta soluzione che ho finito per usare è

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

(Questo seleziona il secondo profilo, ma puoi cambiarlo per dire il profilo htir cambiando il secondo comando "tasto Giù" in xdotool key --delay 50 --repeat 2 Down.

Cosa sta facendo questo:

  1. trova le coordinate in alto a sinistra della finestra corrente (es. il terminale gnome in uso).
  2. sposta il mouse per trovarti su quel terminale
  3. fare clic con il tasto destro e navigare nel menu contestuale per selezionare il secondo profilo.

Avrai bisogno di xdotool installato sudo apt install xdotool.

È straordinario che il terminale stesso non consenta la configurazione tramite il terminale!


0

Sarebbe bello che gnome-terminal offrisse un comando e una scorciatoia per il "prossimo profilo"; sfortunatamente no.

Una soluzione alternativa per quelli con Alt+Tdisabilitato (Modifica> Preferenze> Abilita mnemonici - non selezionata) è: F10 left left down righte selezionare il profilo. Ahia.


Vale la pena notare che ciò richiede che la barra dei menu sia visibile.
Gauthier,

0

Questo è un post piuttosto vecchio, ma poiché continuava a venire mentre cercavo di risolvere lo stesso problema, ho pensato di pubblicare la mia soluzione.

Ciò comporta un piccolo script Python e la rimappatura del pulsante CTRL + ALT + T per eseguire lo script anziché semplicemente avviare il terminale.

Crea un file di testo, ho chiamato mine terminal.py e assicurati che sia eseguibile. Inserire il seguente codice in esso. Questo aprirà le finestre del terminale usando tutti i profili disponibili in sequenza assicurandosi che quello contrassegnato come "predefinito" sia il primo nell'elenco.

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

Utilizzare l'utilità delle impostazioni della tastiera per assegnare un nuovo collegamento a questo script. Per me ho riassegnato CTRL + ALT + T perché questa è la scorciatoia a cui sono abituato per aprire una finestra del terminale.

Assicurati di creare diversi profili nel tuo terminale. Questo script utilizzerà tutti i tuoi profili. Quindi più crei, più varianti puoi accedere anche a Windows. Ne ho diversi identici ad eccezione del colore di sfondo. Questo mi aiuta a riconoscerli mentre eseguo l'alt-tab attraverso di essi.

Esempio di finestra terminale

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.