Execute várias instâncias de processo verdadeiras do terminal gnome


17

Se você está gnome-terminalexecutando e deseja uma nova instância do programa, pode pensar que executar a gnome-terminal &partir de um shell faria o truque.

Surpreendentemente, essa nova instância se comporta como algum programa insípido do Windows ou Mac; ele envia apenas uma mensagem para o existente, executando gnome-terminalpara criar uma nova janela. Se este gnome-terminalprocesso falhar, você perde todas as janelas do terminal!

(Obviamente, cada janela possui seu próprio shell, que é um processo independente, mas o emulador de terminal real e sua GUI são gerenciados a partir de uma única instância do aplicativo.)

Como podemos criar instâncias independentes de gnome-terminal, cada uma executando em seu próprio processo, para que matar esse processo destrua apenas as janelas associadas a esse processo?


Você pode ter sucesso com gnome-terminal --disable-factory, no entanto o suporte para ele aparentemente está sendo witdrawn
steeldriver

@steeldriver Parece estar funcionando; gostaria de fazer isso em uma resposta? Eu não me importo com o apoio ser retirado. Por que isso é tão difícil de encontrar? Porque a documentação para --disable-factorynão usa nenhuma terminologia padrão como "iniciar em um novo processo (ou espaço de endereço); não reutilize a instância existente".
Kaz


2
Não acredito que as pessoas que executam esses projetos continuam tomando decisões tão ruins. Não aprendemos nada? Quem se importa em poupar alguns kilobytes de RAM? Alguém poderia pensar que impedir os terminais de colidirem deve ser a prioridade número 1. Voltar para rxvteu acho.
21416 Tobia

Na verdade, posso recomendar rxvta quem desejar um verdadeiro terminal de multiprocessos. Possui suporte à fonte Truetype, nova embalagem de linhas longas e a maioria dos outros recursos dos terminais modernos.
precisa

Respostas:


9

De acordo com man gnome-terminal, a opção que você procura parece ser o nome confuso

   --disable-factory
             Do not register with the activation name server, do 
             not re-use an active terminal.

No entanto, a opção é aparentemente removida em versões mais recentes, portanto, não se deve confiar.


Isso funciona muito bem. Quando as cabeças de alfinete removerem esse recurso, provavelmente não me importarei mais. Eu preciso disso em uma configuração de teste em que mais de dez janelas de terminal estejam abertas: algumas rodando o minicom para várias linhas seriais conectando-se a dispositivos incorporados, e outras estão em diretórios de script de teste, etc. O gnome-terminal possui os melhores recursos para redimensionar com fontes bonitas e legíveis em todos os tamanhos. Infelizmente, ele vaza a memória como um louco, aumentando para 2 GB no decorrer de uma semana. Processos separados ajudarão a conter esse problema, tornando-o mais gerenciável.
Kaz

Eu tentei rxvt, aterm, eterm, xterm, Terminator e alguns outros. Todos eles são executados facilmente como processos separados, é claro, mas sugam de outras maneiras. As teclas de atalho de redimensionamento documentadas do rxvt não funcionariam. Aterm e xterm simplesmente sugam esse departamento. O Terminator possui um redimensionamento estranho que altera o tamanho da fonte sem o tamanho da janela. O ETerm apenas redimensiona completamente maluco com quatro fontes fixas; Joguei com as opções por cerca de 30 minutos e depois desinstalei.
Kaz

@Kaz xterm + xdotool --window "$WINDOWID"?
Gilles 'SO- stop be evil'

@Kaz Você é provavelmente maneira sobre ele, mas eu recomendo urxvtmais rxvt. E sim, gnome-terminalainda é graficamente superior, mas de alguma forma aprendi a não perder. Provavelmente tem muito a ver com o novo gerenciador de janelas (usando i3agora, mas não é para todos).
CPRN

Olhe para qualquer uma das dezenas de outros terminais baseados em libvte? O Gnome-terminal é apenas um aplicativo que acaba interagindo com essa biblioteca no back-end, diferentemente do restante mencionado acima, que usa suas próprias implementações de terminal.
precisa saber é o seguinte

17

Devido à nova arquitetura cliente / servidor (detalhes aqui ), você precisará iniciar instâncias separadas de gnome-terminal-server. Para fazer isso, você pode usar o --app-idswitch:

/usr/lib/gnome-terminal/gnome-terminal-server --app-id my.first.Terminal

use o cliente (com o mesmo ID de aplicativo) para criar os terminais 1 dentro do novo servidor:

gnome-terminal --app-id my.first.Terminal
gnome-terminal --full-screen --app-id my.first.Terminal
......

Outra instância:

/usr/lib/gnome-terminal/gnome-terminal-server --app-id my.second.Terminal

e terminais:

gnome-terminal --geometry 80x24+200+200 --app-id my.second.Terminal
gnome-terminal --app-id my.second.Terminal
.....

O caminho para gnome-terminal-serverpode ser diferente no seu sistema.


1: Observe que "você tem 10 segundos para usar o cliente para criar um terminal dentro do novo servidor" .


Pode dar um exemplo de trabalho ou tomar um olhar para esta questão ?: unix.stackexchange.com/questions/304269/...
CPRN

@CyprianGuerra - em um terminal gnome abra duas guias: na primeira guia, execute o 1º comando no meu exemplo (ou seja, para iniciar o novo servidor) e, em menos de 10 segundos , alterne para a segunda guia e execute o segundo comando (para iniciar um novo cliente) personalizado por suas necessidades ...
don_crissti

Abas ... vou tentar. Por agora eu posso dizer que não funciona dentro screen.
Cprn

Os requisitos de guias são? Como em: o processo do terminal do cliente precisa ser filho do servidor?
Cprn

@CyprianGuerra - era apenas um exemplo, não estão obrigados a partir do que eu posso ver ...
don_crissti

1

Eu tenho lutado com o mc estando no mesmo grupo alt-tab que outras janelas de terminal e encontrei esta solução.

https://chrisirwin.ca/posts/multiple-instances-of-gnome-terminal/

O cara (Chris Irwin) resolve isso para sua rotina de correspondência. Fiz o mesmo para o mc com sucesso total, além do ícone do mc no alt-tab, mas tudo bem.

Você precisará de 3 arquivos:

/usr/share/dbus-1/services/org.gnome.Terminal-mc.service

[D-BUS Service]
Name=org.gnome.Terminal-mc
SystemdService=gnome-terminal-server-mc.service
Exec=/usr/lib/gnome-terminal-server --class=org.gnome.Terminal-mc --app-id org.gnome.Terminal-mc

/usr/lib/systemd/user/gnome-terminal-server-mc.service

[Unit]
Description=GNOME mc Terminal Server
[Service]
KillMode=process
Type=dbus
BusName=org.gnome.Terminal-mc
ExecStart=/usr/lib/gnome-terminal-server --class=org.gnome.Terminal-mc --app-id org.gnome.Terminal-mc

/usr/local/share/applications/mc.desktop

Esta é a sua entrada na área de trabalho para o comandante da meia-noite. Edite-o diretamente /usr/share/applications/...ou mova-o de lá /usr/local/share/applications/mc.desktoppara enfatizar que é sua própria cópia modificada. Em qualquer caso, a Execentrada deve ser modificada para tergnome-terminal --app-id org.gnome.Terminal-mc -e mc

Exec=gnome-terminal --app-id org.gnome.Terminal-mc --hide-menubar --geometry=102x35 -e mc

Arquivar com todos os itens acima

https://we.tl/t-6rH5jduMG7 Este é .tar.gz para descompactar no seu /. Ele criará arquivos de cima, além do ícone .svg para o mc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.