Linha de comando para alternar entre perfis no terminal gnome

20

Criei um novo perfil para o gnome-terminal e posso alternar entre o perfil "Implícito" e o novo perfil criado, como você pode ver na imagem abaixo:

Alternar entre perfis no terminal gnome

Agora, pergunto-me como posso alternar entre perfis usando uma linha de comando / script ou talvez usando um atalho para isso.

Nota: Soluções como:

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

são excluídos porque eu prefiro não fechar e abrir outro terminal ou obter outra janela nesse processo de alteração de perfil.

Radu Rădeanu
fonte
11
Com o gconftool-2, você pode definir o perfil cujas alterações são imediatas. Você verificou isso -> stackoverflow.com/questions/660442/...
Stormvirux
@Stormvirux Não ... Então, você pode explicar como usar o gconftool ou o gconftool-2 para mudar o perfil? Não vejo uma boa resposta / explicação lá.
Radu Rădeanu
pergunta duplicada: askubuntu.com/questions/247041/…
Jakob

Respostas:

9

Para alternar para o perfil "implícito":

xdotool key Alt+t p Return

Para alternar para o segundo perfil:

xdotool key Alt+t p Down Return

xdotool Instale o xdotool não é instalado por padrão no Ubuntu, portanto, ele deve ser instalado primeiro.

Obviamente, para esses comandos podem ser adicionados atalhos de teclado personalizados .

Radu Rădeanu
fonte
Isso não é um atalho. Você está apenas simulando as teclas pressionadas, são apenas mnemônicos do aplicativo.
Braiam
11
@ Braiam Sim, não é um atalho, eu posso ver. É uma linha de comando (consulte man xdotoolpara obter mais informações), como pedi, que está funcionando exatamente como desejo e fico feliz com esta resposta até que algo melhor apareça. ;)
Radu Rădeanu
Você sério deve considerar o que sugere que no bugtracker ...
Braiam
@Braiam Como eu disse, estou bem com esta solução, está funcionando como um encanto. Em relação à sua sugestão, existe uma nesse sentido a partir de 2002 (modificada em 2010: " Seria interessante se eu pudesse usar exatamente duas teclas para abrir o perfil de minha escolha " . - veja este comentário ). Então, por que você acha que eu deveria adicionar um novo? Você gosta de duplicatas?
Radu Rădeanu 14/11
Ele não funciona mais desafortunadamente
RobAu
5

Muitas ótimas respostas já, mas eu queria adicionar mais uma variação usando o xdotool que não requer que a barra de menus fique visível ...

A combinação de teclas shift + F10 abrirá um menu pop-up (o equivalente a clicar com o botão direito do mouse no terminal) e a partir daí o perfil poderá ser alterado.

por exemplo, xdotool key shift+F10 r 3para chegar ao terceiro perfil

Também descobri que esse método não requer a configuração de um atraso para o xdotool (que achei necessário para o método da barra de menus), portanto, é um pouco mais rápido.

Eu costumo mudar muito de perfil, então envolvo isso em uma função:

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

para que eu possa ligar chp Npara mudar para o enésimo perfil.

Mais algumas dicas e idiossincrasias da minha configuração:

  • Ao adicionar um chpcomando ao meu .bashrc, posso forçar novas guias a sempre mudar para o perfil padrão

  • Eu codifico minhas sessões de ssh com base no host, mas não gosto que meu alias de ssh abra novas guias ou janelas E quero que o perfil volte ao padrão quando sair do ssh. Minha solução: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Atribuo ao xdotool o sinalizador --clearmodifierspara que, se eu estiver segurando uma tecla modificadora (ao abrir uma guia / janela, sair do ssh, etc.), ele não interfira no xdotool.

  • Eu prefixo os nomes dos meus perfis com números para que, se eu adicionar um novo, ele não altere todos os outros devido à ordem alfabética do menu de perfil

brotherJ4mes
fonte
... apenas observe que este método requer que a tecla aceleradora de menus seja ativada nas configurações do terminal> general
brotherJ4mes
FYI para o meu xdotool --clearmodifiersprecisa vir depois key.
lilydjwg
4

Não existe nenhum atalho que permita alterar o perfil dentro do terminal (sem navegar nos menus como você comentou nos comentários), sem o uso da GUI. Citando o manual ( estável , desenvolvimento 3.9 ):

Você pode alterar o perfil na guia ou janela atual do Terminal selecionando um perfil em Terminal ▸ Alterar perfil.

(Você pode propor isso como sugestão no rastreador de erros )

Braiam
fonte
Na verdade, existe um atalho: Alt + T seguido de P , Seta para cima ou Seta para baixo e Enter . Mas isso é um pouco longo ...
Radu Rădeanu
@ RaduRădeanu O Alt + T não funciona no meu terminal 3.8.3: /
Braiam
11
@ RaduRădeanu Acho que o alt + t está de fato usando a GUI, apenas não está usando o mouse.
moon.musick
@Braiam Se você estiver usando uma versão que não seja em inglês gnome-terminal, pressione alte veja qual letra está sendo destacada para a versão em idioma do 'Terminal' (é o quinto item da minha versão em polonês, à esquerda da 'Ajuda') e use essa letra com alt.
moon.musick
@ moon.musick Estou usando a versão Debian do gnome-terminal 3.8.3 e parece que ele não possui o modificador Alt para acessar os menus.
Braiam 9/09/13
3

Eu estava olhando para fazer o mesmo e finalmente consegui um script, coloquei no meu GitHub .

Como expliquei no README.md, na verdade, ele não alterna, mas carrega uma configuração de perfis no perfil Padrão. Para fazer isso, a configuração de cada perfil é salva no arquivo na primeira execução do script. O script faz parecer que você está alternando entre perfis, o que é bom o suficiente para mim. Espero que ajude alguém ...

SigiSang
fonte
2

Dependendo do seu objetivo, você pode achar útil esse script: https://github.com/xyrix/gnome-terminal-profile-switcher

Ele faz uma espécie de patch de macaco e gera um novo perfil para cada terminal e, em seguida, define algumas variáveis ​​de ambiente para expor um programa para alternar o tema do perfil para o seu terminal atual.

Espero que o exemplo do script safe_ssh torne as coisas claras :-). Uso-o há pouco mais de um ano e isso me ajudou a não destruir o banco de dados ativo da empresa ^ _ ^

xyrix
fonte
2

Se você tem uma lista de servidores que acessa com frequência, acredito que a solução mais fácil seria simplesmente chamar uma segunda janela apenas para a sessão dessa caixa.

Primeiro, crie um perfil de terminal gnome separado para cada local remoto que você usa com freqüência. Em cada perfil, especifique que o terminal deve executar o comando de login SSH para essa caixa, em vez de um shell simples.

ssh alice@athena

Por fim, escreva um script curto para iniciar uma nova janela remota com um 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 essa estratégia, você pode "infinitamente" variar a aparência da janela do terminal de cada caixa e iniciá-los em um único terminal "controle". Por exemplo, se chamamos esse script de "rlv", podemos gerar uma janela remota simplesmente invocando o script com um nome de perfil.

>> rlv athena

Se você digitar o nome de um host ou deixar de configurar um perfil para esse host, receberá outra janela de perfil padrão na caixa local. Existe uma maneira de codificar o script para evitar isso, colocando o login no próprio script, em vez de no 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

... mas você perde a flexibilidade de definir seu nome de usuário de login para essa caixa. Esse recurso adicional do roteiro deixo como exercício para o leitor.

zerobandwidth
fonte
Obrigado por me fornecer essa ideia. :-) Gostaria de acrescentar que você pode escrever facilmente um arquivo .desktop que abrirá seus locais favoritos com um (duplo) -clique dessa maneira.
Hinz
1

Acabei de perceber que minha solução original já foi rejeitada na pergunta. Embora não exista uma maneira simples de alterar o perfil, você pode alterar a cor de segundo plano / primeiro plano usando o settermcomando

Portanto, isso setterm -term linux -background black -foreground greenforneceria um fundo preto com texto verde. O único problema é que ls tem saída colorida, portanto, você pode querer desativar ls colorindo. Caso contrário, ele será redefinido para o esquema de cores anterior

Postagem original : existe uma maneira de contornar. Do 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.

Aqui está um exemplo da minha máquina. Eu tenho três perfis: B&G (preto em verde), ForPrinting (fonte preta, fundo branco) e Padrão. Então, o que eu faço é no tipo de janela atual gnome-terminal --window-with-profile=ForPrinting. Então eu posso matar a janela antiga da linha de comando ou alternar e fechá-la graficamente.

O perfil B&G não funciona. Provavelmente porque & não é um caractere válido, lembre-se disso ao nomear perfis.

Sergiy Kolodyazhnyy
fonte
0

A solução muito feia que acabei usando é

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

(Isso seleciona o segundo perfil, mas você pode alterar isso para dizer o perfil htir, alterando o segundo comando "tecla para baixo" para xdotool key --delay 50 --repeat 2 Down.

O que está fazendo isso:

  1. encontre as coordenadas do canto superior esquerdo da janela atual (por exemplo, o terminal gnome em uso).
  2. mova o mouse para passar por cima desse terminal
  3. clique com o botão direito e navegue no menu de contexto para selecionar o segundo perfil.

Você precisará do xdotool instalado sudo apt install xdotool.

É extraordinário que o próprio terminal não permita a configuração através do terminal!

SColvin
fonte
0

Seria ótimo se o gnome-terminal oferecesse um comando e atalho para o "próximo perfil"; infelizmente, isso não acontece.

Uma solução alternativa para aqueles com Alt+Tdesativação (Editar> Preferências> Ativar mnemônicos - desmarcada) é: F10 left left down righte selecione o perfil. Ai.

Mario
fonte
Vale ressaltar que isso exige que a barra de menus esteja visível.
Gauthier 31/01
0

Esta é uma publicação bastante antiga, mas como ela continuava aparecendo enquanto eu procurava resolver esse mesmo problema, pensei em publicar minha solução.

Isso envolve um pequeno script python e remapeando o botão CTRL + ALT + T para executar o script, em vez de simplesmente iniciar o terminal.

Crie um arquivo de texto com o nome mine terminal.py e verifique se ele é executável. Coloque o seguinte código nele. Isso abrirá as janelas do terminal usando todos os perfis disponíveis em sequência, certificando-se de que aquele marcado como "padrão" seja o primeiro da 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 o utilitário de configurações do teclado para atribuir um novo atalho para esse script. Para mim, redesignei CTRL + ALT + T, porque esse é o atalho para abrir uma janela de terminal.

Certifique-se de criar vários perfis no seu terminal. Este script fará uso de todos os seus perfis. Portanto, quanto mais você cria, mais variações nas janelas você também pode acessar. Eu tenho vários que são todos idênticos, exceto pela cor de fundo. Isso me ajuda a reconhecê-los enquanto eu alterno entre eles.

Exemplo da janela do terminal

Schworak
fonte