Ejecute verdaderas instancias de proceso múltiple de gnome-terminal


17

Si está gnome-terminalejecutando y desea una nueva instancia del programa, puede pensar que ejecutar gnome-terminal &desde un shell haría el truco.

Sorprendentemente, esta nueva instancia se comporta como un programa insípido de Windows o Mac; solo envía un mensaje al existente, ejecutándose gnome-terminalpara crear una nueva ventana. Si este gnome-terminalproceso falla, ¡pierde todas las ventanas de terminal!

(Por supuesto, cada ventana tiene su propio shell, que es un proceso independiente, pero el emulador de terminal real y su GUI se administran desde una sola instancia de la aplicación).

¿Cómo podemos crear instancias independientes de gnome-terminalcada una ejecutándose en su propio proceso, de modo que matar ese proceso solo destruya las ventanas asociadas con ese proceso?


Es posible que tenga éxito gnome-terminal --disable-factory, sin embargo, al parecer
steeldriver

@steeldriver Parece estar funcionando; ¿Quieres hacer una respuesta? No me importa que se retire el apoyo. ¿Por qué es tan difícil de encontrar? Debido a que la documentación para --disable-factoryno utiliza ninguna terminología estándar como "comenzar en un nuevo proceso (o espacio de direcciones); no reutilice la instancia existente".
Kaz


2
No puedo creer que las personas que ejecutan estos proyectos sigan tomando decisiones tan malas. ¿No aprendimos nada? ¿A quién le importa ahorrar unos kilobytes de RAM? Uno podría pensar que evitar que las terminales se estrellen entre sí debería ser la prioridad n. ° 1. De vuelta a rxvtsupongo.
Tobia

De hecho, puedo recomendar rxvta cualquiera que quiera un verdadero terminal multiproceso. Tiene soporte para fuentes Truetype, reenvío de líneas largas y la mayoría de las otras características de los terminales modernos.
Tobia

Respuestas:


9

De acuerdo con man gnome-terminal, la opción que está buscando parece ser el nombre confuso

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

Sin embargo, la opción aparentemente se elimina en versiones más recientes, por lo que no se debe confiar en ella.


Esto funciona muy bien. Para cuando las cabezas de alfiler eliminen esta función, es probable que ya no me importe. Necesito esto en una configuración de prueba donde hay más de diez ventanas de terminal abiertas: algunas ejecutan minicom a varias líneas seriales que se conectan a dispositivos integrados, y otras se encuentran en directorios de script de prueba, y demás. gnome-terminal tiene las mejores características para cambiar el tamaño con fuentes atractivas y legibles en todos los tamaños. Desafortunadamente, pierde memoria como loco, creciendo a 2GB en el transcurso de una semana. Los procesos separados ayudarán a contener este problema, haciéndolo más manejable.
Kaz

Probé rxvt, aterm, eterm, xterm, Terminator y algunos otros. Todos se ejecutan fácilmente como procesos separados, por supuesto, pero apestan de otras maneras. Las teclas de acceso rápido documentadas de redimensionamiento de rxvt no funcionarían. Aterm y xterm plain apestan en ese departamento. Terminator tiene un cambio de tamaño extraño que cambia el tamaño de fuente sin el tamaño de la ventana. ETerm tiene un cambio de tamaño completamente loco con cuatro fuentes fijas; Jugué con las opciones durante unos 30 minutos, luego lo desinstalé.
Kaz

@Kaz xterm + xdotool --window "$WINDOWID"?
Gilles 'SO- deja de ser malvado'

@Kaz usted está probablemente muy por encima, pero le recomiendo urxvtmás rxvt. Y sí, gnome-terminalsigue siendo gráficamente superior, pero de alguna manera aprendí a no perderlo. Probablemente tenga mucho que ver con el nuevo administrador de ventanas (usando i3ahora pero no es para todos).
cprn

¿Mira en alguna de las docenas de otras terminales basadas en libvte? Gnome-terminal es solo una aplicación que termina interactuando con esa biblioteca en el backend a diferencia del resto mencionado anteriormente que usa sus propias implementaciones de terminal.
dragon788

17

Debido a la nueva arquitectura cliente / servidor (detalles aquí ) tendrá que iniciar instancias separadas de gnome-terminal-server. Para hacer eso, puede usar el --app-idinterruptor:

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

luego use el cliente (con el mismo id de aplicación) para crear terminales 1 dentro del nuevo servidor:

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

Otra instancia:

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

y terminales:

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

La ruta gnome-terminal-serverpuede ser diferente en su sistema.


1: Tenga en cuenta que "tiene 10 segundos para usar el cliente para crear una terminal dentro del nuevo servidor" .


¿Puede dar un ejemplo de trabajo o echar un vistazo a esta pregunta ?: unix.stackexchange.com/questions/304269/…
cprn

@CyprianGuerra: en una terminal gnome, abra dos pestañas: en la primera pestaña, ejecute el primer comando en mi ejemplo (es decir, para iniciar el nuevo servidor), luego, en menos de 10 segundos , cambie a la segunda pestaña y ejecute el segundo comando (para comenzar un nuevo cliente) personalizado según sus necesidades ...
don_crissti

Pestañas ... lo intentaré. Por ahora puedo decir que no funciona por dentro screen.
cprn

¿Son los requisitos de pestañas? Como en: ¿el proceso de terminal del cliente tiene que ser hijo del servidor?
cprn

@CyprianGuerra - fue solo un ejemplo, no son necesarios por lo que puedo ver ...
don_crissti

1

He estado luchando con que mc esté en el mismo grupo alt-tab que otras ventanas de terminal y encontré esta solución.

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

El chico (Chris Irwin) lo resuelve por su rutina de correo. Hice lo mismo para mc con total éxito, aparte del ícono mc dentro de alt-tab, pero eso está bien.

Necesitarás 3 archivos:

/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 es tu entrada de escritorio para el comandante de medianoche. Edítelo directamente /usr/share/applications/...o muévalo desde allí /usr/local/share/applications/mc.desktoppara enfatizar que es su propia copia modificada. En cualquier caso, la Execentrada debe modificarse para tenergnome-terminal --app-id org.gnome.Terminal-mc -e mc

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

Archivo con todo lo anterior

https://we.tl/t-6rH5jduMG7 Esto es .tar.gz para descomprimir en su /. Creará archivos desde arriba, más el icono .svg para mc.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.