Línea de comando para cambiar entre perfiles en gnome-terminal

20

Creé un nuevo perfil para gnome-terminal y puedo cambiar entre el perfil "implícito" y el nuevo perfil creado, como se puede ver en la siguiente imagen:

Cambiar entre perfiles en gnome-terminal

Ahora me pregunto cómo puedo cambiar entre perfiles usando una línea de comandos / script o tal vez usando un atajo para esto.

Nota: Soluciones como:

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

están excluidos porque prefiero no cerrar y abrir otra terminal u obtener otra ventana de terminal en este proceso de cambiar el perfil.

Radu Rădeanu
fuente
1
Con gconftool-2 puede configurar el perfil cuyos cambios son inmediatos. ¿Has comprobado esto? -> stackoverflow.com/questions/660442/…
Stormvirux
@Stormvirux No ... Entonces, ¿puede explicar cómo usar gconftool o gconftool-2 para cambiar el perfil? No veo una buena respuesta / explicación allí.
Radu Rădeanu
pregunta duplicada: askubuntu.com/questions/247041/…
Jakob

Respuestas:

9

Para cambiar al perfil "implícito":

xdotool key Alt+t p Return

Para cambiar al segundo perfil:

xdotool key Alt+t p Down Return

xdotool Instalar xdotool no está instalado por defecto en Ubuntu, por lo que debe instalarse primero.

Por supuesto, para estos comandos se pueden agregar atajos de teclado personalizados .

Radu Rădeanu
fuente
Eso no es un atajo. Solo está simulando las pulsaciones de teclas, es solo mnemotecnia de la aplicación.
Braiam
1
@Braiam Sí, no es un atajo, puedo ver. Es una línea de comandos (consulte man xdotoolpara obtener más información) como pregunté, que funciona exactamente como deseo y estoy contento con esta respuesta hasta que aparezca algo mejor. ;)
Radu Rădeanu
Deberías considerar sugerir que en el
rastreador de
@Braiam Como te dije, estoy de acuerdo con esta solución, está funcionando a las mil maravillas. Con respecto a su sugerencia, hay una en este sentido desde 2002 (modificada en 2010: " Sería muy agradable si puedo usar exactamente dos pulsaciones de teclas para abrir el perfil de mi elección " - vea este comentario ). Entonces, ¿por qué crees que debería agregar uno nuevo? ¿Te gustan los duplicados?
Radu Rădeanu
Ya no funciona desafortunadamente
RobAu
5

Ya hay muchas respuestas geniales, pero quería agregar una variación más usando xdotool que no requiere que la barra de menú esté visible ...

La combinación de teclas shift + F10 abrirá un menú emergente (el equivalente a hacer clic derecho en la terminal) y desde allí se puede cambiar el perfil.

por ejemplo, xdotool key shift+F10 r 3para llegar al tercer perfil

También descubrí que este método no requiere establecer un retraso para xdotool (que encontré necesario para el método de la barra de menú), por lo que es un poco más rápido.

Tiendo a cambiar mucho los perfiles, así que envuelvo esto en una función:

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

así que puedo llamar chp Npara cambiar al enésimo perfil.

Algunos consejos e idiosincrasias más de mi configuración:

  • Al agregar un chpcomando a mi .bashrc, puedo forzar que las pestañas nuevas cambien siempre al perfil predeterminado

  • Codifico por color mis sesiones ssh en función del host, pero no me gusta que mi alias ssh abra nuevas pestañas o ventanas Y quiero que el perfil vuelva a los valores predeterminados cuando salgo de ssh. Mi solución: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Le doy a xdotool la bandera --clearmodifierspara que si tengo una tecla modificadora (al abrir una pestaña / ventana, salir de ssh, etc.), no interfiera con xdotool.

  • Antepongo mis nombres de perfil con números para que si agrego uno nuevo, no cambie todos los demás debido a la alfabetización del menú de perfil

hermanoJ4mes
fuente
... solo una nota de que este método requiere que la tecla de aceleración del menú esté habilitada en la configuración del terminal> general
brotherJ4mes
FYI para mi xdotool --clearmodifiersnecesita venir después key.
lilydjwg
4

No existe un acceso directo que le permita cambiar el perfil dentro del terminal (sin navegar por los menús como dijo en los comentarios), sin el uso de la GUI. Citando el manual ( estable , desarrollo 3.9 ):

Puede cambiar el perfil en su pestaña o ventana de Terminal actual seleccionando un perfil de Terminal ▸ Cambiar perfil.

(Puede proponer esto como sugerencia en el rastreador de errores )

Braiam
fuente
En realidad, hay un atajo: Alt + T seguido de P , Flecha arriba o Flecha abajo y Enter . Pero esto es un poco largo ...
Radu Rădeanu
@ RaduRădeanu Alt + T no funciona en mi terminal 3.8.3: /
Braiam
1
@ RaduRădeanu supongo alt + t es , de hecho, el uso de la interfaz gráfica de usuario, simplemente no es a través del ratón.
moon.musick
@Braiam Si está utilizando una versión no inglesa de gnome-terminal, presione alty vea qué letra se resalta para su versión de idioma de 'Terminal' (es el quinto elemento en mi versión polaca, a la izquierda de 'Ayuda'), luego use esa letra con alt.
moon.musick
@ moon.musick Estoy usando la versión Debian de gnome-terminal 3.8.3, y parece que no tiene el modificador Alt para acceder a los menús.
Braiam
3

Estaba buscando hacer lo mismo y finalmente conseguí que funcionara un script, lo puse en mi GitHub .

Como explico en README.md, en realidad no cambia, pero carga una configuración de perfiles en el perfil predeterminado. Para hacer esto, la configuración de cada perfil se guarda en el archivo en la primera ejecución del script. El script hace que parezca que estás cambiando entre perfiles, lo cual es lo suficientemente bueno para mí. Espero que ayude a cualquiera ...

SigiSang
fuente
2

Dependiendo de su propósito, puede encontrar útil este script: https://github.com/xyrix/gnome-terminal-profile-switcher

Hace una especie de parche de mono y genera un nuevo perfil para cada terminal, luego establece algunas variables de entorno para exponer un programa para cambiar el tema del perfil para su terminal actual.

Esperemos que el script safe_ssh de ejemplo aclare las cosas :-). Lo he estado usando por poco más de un año y me ha ayudado a no destruir la base de datos en vivo de la compañía ^ _ ^

xyrix
fuente
2

Si tiene una lista de servidores a los que accede con frecuencia, creo que la solución más sencilla sería simplemente invocar una segunda ventana solo para la sesión de esa casilla.

Primero, cree un perfil de terminal de gnomo separado para cada ubicación remota que utilice con frecuencia. Luego, en cada perfil, especifique que el terminal debe ejecutar el comando de inicio de sesión SSH para ese cuadro, en lugar de un shell simple.

ssh alice@athena

Finalmente, escriba una secuencia de comandos corta para iniciar una nueva ventana remota con una ID de perfil.

#!/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 esta estrategia, puede "infinitamente" variar el aspecto de la ventana de terminal de cada caja y comenzar desde un solo terminal de "control". Por ejemplo, si llamamos a este script "rlv", podemos generar una ventana remota simplemente invocando el script con un nombre de perfil.

>> rlv athena

Si alguna vez tocó con un dedo el nombre de un host, o descuidó configurar un perfil para ese host, entonces obtendrá otra ventana de perfil predeterminada en el cuadro local. Hay una manera de codificar el script para evitar esto, colocando el inicio de sesión en el script, en lugar de hacerlo en el terminal 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

... pero luego pierde la flexibilidad de definir su nombre de usuario de inicio de sesión para ese cuadro. Esa característica adicional del guión la dejo como ejercicio para el lector.

ancho de banda cero
fuente
Gracias por darme esa idea. :-) Me gustaría agregar que puede escribir fácilmente un archivo .desktop que abrirá sus ubicaciones favoritas con un (doble) clic de esa manera.
Hinz
1

Acabo de notar que mi solución original ya ha sido rechazada en la pregunta. Si bien no parece haber una manera simple de cambiar el perfil, puede cambiar el color de fondo / primer plano mediante el settermcomando.

Entonces, esto setterm -term linux -background black -foreground greenle daría un fondo negro con texto verde. El único problema es que ls tiene salida coloreada, por lo que es posible que desee desactivar la coloración ls. De lo contrario, se restablece al esquema de color anterior.

Publicación original : hay una forma de evitarlo. Desde 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.

Aquí hay un ejemplo de mi máquina. Tengo tres perfiles: B & G (negro sobre verde), ForPrinting (fuente negra, fondo blanco) y Predeterminado. Entonces, lo que hago es en el tipo de ventana actual gnome-terminal --window-with-profile=ForPrinting. Entonces puedo matar la ventana vieja de la línea de comando o cambiar y cerrarla gráficamente.

El perfil de B&G no funciona. Probablemente porque & no es un carácter válido, así que tenlo en cuenta al nombrar perfiles.

Sergiy Kolodyazhnyy
fuente
0

La solución muy fea que terminé usando es

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

(Esto selecciona el segundo perfil, pero puede cambiarlo para decir el perfil htir cambiando el segundo comando "tecla Abajo" a xdotool key --delay 50 --repeat 2 Down.

¿Qué está haciendo esto?

  1. encuentre las coordenadas superiores izquierdas de la ventana actual (por ejemplo, el terminal gnome en uso).
  2. mueve el mouse para estar sobre esa terminal
  3. Haga clic derecho y navegue por el menú contextual para seleccionar el segundo perfil.

Necesitarás xdotool instalado sudo apt install xdotool.

¡Es extraordinario que el terminal en sí no permita la configuración a través del terminal!

SColvin
fuente
0

Sería genial que gnome-terminal ofreciera un comando y acceso directo al "siguiente perfil"; desafortunadamente no lo hace.

Una solución alternativa para las Alt+Tpersonas con discapacidad (Edición> Preferencias> Habilitar mnemónicos - sin marcar) es: F10 left left down righty seleccione el perfil. Ay.

Mario
fuente
Vale la pena señalar que esto requiere que la barra de menú esté visible.
Gauthier
0

Esta es una publicación bastante antigua, pero debido a que seguía apareciendo mientras buscaba resolver este mismo problema, pensé que publicaría mi solución.

Esto implica una pequeña secuencia de comandos de Python y reasignar el botón CTRL + ALT + T para ejecutar la secuencia de comandos en lugar de simplemente iniciar el terminal.

Cree un archivo de texto, llamé mine terminal.py y asegúrese de que sea ejecutable. Coloque el siguiente código en él. Esto abrirá las ventanas de la terminal usando todos los perfiles disponibles en secuencia asegurándose de que el marcado "predeterminado" sea el primero en la lista.

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

Use la utilidad de configuración del teclado para asignar un nuevo acceso directo a este script. Para mí, reasigné CTRL + ALT + T porque ese es el atajo al que estoy acostumbrado para abrir una ventana de terminal.

Asegúrese de crear varios perfiles en su terminal. Este script hará uso de todos sus perfiles. Entonces, cuanto más crees, más variaciones en las ventanas también podrás obtener. Tengo varios que son todos idénticos, excepto por el color de fondo. Esto me ayuda a reconocerlos mientras los presiono alternativamente.

Ejemplo de ventana de terminal

Schworak
fuente