Exécuter de véritables instances de processus multiples de gnome-terminal

17

Si vous avez en gnome-terminalcours d' exécution et que vous souhaitez une nouvelle instance du programme, vous pourriez penser que l'exécution à gnome-terminal &partir d'un shell ferait l'affaire.

Étonnamment, cette nouvelle instance se comporte comme un programme Windows ou Mac insipide; il envoie uniquement un message à l'existant, en cours gnome-terminald' exécution pour créer une nouvelle fenêtre. Si celui-ci gnome-terminalplante, vous perdez toutes les fenêtres du terminal!

(Bien sûr, chaque fenêtre a son propre shell, qui est un processus indépendant, mais l'émulateur de terminal réel et son interface graphique sont gérés à partir d'une seule instance de l'application.)

Comment pouvons-nous créer des instances indépendantes de gnome-terminal, chacune s'exécutant dans leur propre processus, de sorte que la suppression de ce processus ne détruise que la ou les fenêtres associées à ce processus?

Kaz
la source
Vous pouvez avoir du succès avec gnome-terminal --disable-factory, cependant, le support est apparemment retiré
steeldriver
@steeldriver Il semble fonctionner; vous voulez en faire une réponse? Je me fiche que le soutien soit retiré. Pourquoi est-ce si difficile à trouver? Parce que la documentation de --disable-factoryn'utilise pas de terminologie standard comme "démarrer dans un nouveau processus (ou espace d'adressage); ne réutilisez pas l'instance existante".
Kaz
2
Je ne peux pas croire que les gens qui dirigent ces projets continuent de prendre des décisions aussi merdiques. N'avons-nous rien appris? Qui se soucie d'économiser quelques kilo-octets de RAM? On pourrait penser que garder les terminaux de se planter devrait être la priorité n ° 1. Revenons à rxvtje suppose.
Tobia
En fait, je peux recommander rxvtà tous ceux qui veulent un vrai terminal multi-processus. Il prend en charge la police Truetype, le ré-emballage des longues lignes et la plupart des autres fonctionnalités des terminaux modernes.
Tobia

Réponses:

9

Selon man gnome-terminal, l'option que vous recherchez semble être le nom prêtant à confusion

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

Cependant, l'option est apparemment supprimée dans les versions plus récentes et ne doit donc pas être invoquée.

tournevis
la source
Cela fonctionne très bien. Au moment où les têtes d'épingle supprimeront cette fonctionnalité, je ne m'en soucierai probablement plus. J'en ai besoin dans une configuration de test où plus de dix fenêtres de terminal sont ouvertes: certaines exécutant minicom sur diverses lignes série se connectant à des périphériques intégrés, et d'autres se trouvant dans des répertoires de scripts de test, etc. gnome-terminal a les meilleures fonctionnalités pour redimensionner avec de belles polices lisibles à toutes les tailles. Malheureusement, il fuit la mémoire comme un fou, passant à 2 Go en une semaine. Des processus séparés aideront à contenir ce problème, le rendant plus gérable.
Kaz
J'ai essayé rxvt, aterm, eterm, xterm, Terminator et quelques autres. Ils s'exécutent tous facilement en tant que processus séparés, bien sûr, mais se mélangent différemment. Les raccourcis de redimensionnement documentés de rxvt ne fonctionneraient pas. Aterm et xterm plain sont nuls dans ce département. Terminator a un redimensionnement étrange qui modifie la taille de la police sans la taille de la fenêtre. ETerm a juste un redimensionnement complètement farfelu avec quatre polices fixes; J'ai joué avec les options pendant environ 30 minutes, puis je l'ai désinstallé.
Kaz
@Kaz xterm + xdotool --window "$WINDOWID"?
Gilles 'SO- arrête d'être méchant'
@Kaz Vous êtes probablement beaucoup plus mais je recommande fortement urxvtsur rxvt. Et oui, gnome-terminalest toujours graphiquement supérieur mais j'ai en quelque sorte appris à ne pas le manquer. Cela a probablement beaucoup à voir avec le nouveau gestionnaire de fenêtres (à utiliser i3maintenant, mais ce n'est pas pour tout le monde).
cprn
Regardez dans la douzaine d'autres terminaux basés sur libvte? Gnome-terminal n'est qu'une application qui finit par s'interfacer avec cette bibliothèque sur le backend contrairement aux autres mentionnés ci-dessus qui utilisent leurs propres implémentations de terminal.
dragon788
17

En raison de la nouvelle architecture client / serveur (détails ici ), vous devrez démarrer des instances distinctes de gnome-terminal-server. Pour ce faire, vous pouvez utiliser le --app-idcommutateur:

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

puis utilisez le client (avec le même identifiant d'application) pour créer les terminaux 1 à l'intérieur du nouveau serveur:

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

Un autre exemple:

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

et terminaux:

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

Le chemin d'accès gnome-terminal-serverpeut être différent sur votre système.


1: Notez que "vous avez 10 secondes pour utiliser le client pour créer un terminal à l'intérieur du nouveau serveur" .

don_crissti
la source
Pouvez-vous donner un exemple de travail ou jeter un œil à cette question?: Unix.stackexchange.com/questions/304269/…
cprn
@CyprianGuerra - dans un gnome-terminal, ouvrez deux onglets: dans le premier onglet, exécutez la 1ère commande dans mon exemple (c'est-à-dire pour démarrer le nouveau serveur) puis, en moins de 10 secondes , passez au deuxième onglet et exécutez la 2ème commande (pour démarrer un nouveau client) personnalisé selon vos besoins ...
don_crissti
Onglets ... je vais essayer. Pour l'instant, je peux dire que cela ne fonctionne pas à l'intérieur screen.
cprn
Les onglets sont-ils obligatoires? Comme dans: le processus du terminal client doit-il être un enfant du serveur?
cprn
@CyprianGuerra - ce n'était qu'un exemple, ils ne sont pas requis d' après ce que je peux voir ...
don_crissti
1

J'ai eu du mal avec mc étant dans le même groupe alt-tab que les autres fenêtres de terminal et j'ai trouvé cette solution.

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

Le gars (Chris Irwin) le résout pour sa routine de courrier. J'ai fait la même chose pour mc avec un succès complet à part l'icône mc dans alt-tab mais c'est très bien.

Vous aurez besoin de 3 fichiers:

/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

Ceci est votre entrée de bureau pour le commandant de minuit. Modifiez-le directement /usr/share/applications/...ou déplacez-le à partir de là /usr/local/share/applications/mc.desktoppour souligner qu'il s'agit de votre propre copie modifiée. Dans tous les cas, l' Execentrée doit être modifiée pour avoirgnome-terminal --app-id org.gnome.Terminal-mc -e mc

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

Archive avec tout ce qui précède

https://we.tl/t-6rH5jduMG7 Il s'agit de .tar.gz à déballer dans votre /. Il créera des fichiers d'en haut, plus l'icône .svg pour mc.

Lauri
la source