Führen Sie mehrere echte Prozessinstanzen von gnome-terminal aus

17

Wenn Sie ausgeführt haben gnome-terminalund eine neue Instanz des Programms möchten, könnten Sie denken, dass das Ausführen gnome-terminal &von einer Shell aus den Trick macht.

Erstaunlicherweise verhält sich diese neue Instanz wie ein fades Windows- oder Mac-Programm. Es wird nur eine Nachricht an das vorhandene gnome-terminalFenster gesendet , um ein neues Fenster zu erstellen. Wenn dieser eine gnome-terminalProzess abstürzt, verlieren Sie alle Terminalfenster!

(Natürlich hat jedes Fenster eine eigene Shell, die ein unabhängiger Prozess ist, aber der eigentliche Terminalemulator und seine GUI werden von einer einzelnen Instanz der Anwendung verwaltet.)

Wie können wir unabhängige Instanzen von gnome-terminaljedem erstellen , die in einem eigenen Prozess ausgeführt werden, sodass das Beenden dieses Prozesses nur die Fenster zerstört, die mit diesem Prozess verbunden sind?

Kaz
quelle
Sie haben vielleicht Erfolg damit gnome-terminal --disable-factory, aber die Unterstützung dafür wird anscheinend gezogen
Stahlfahrer
@steeldriver Es scheint zu funktionieren; Möchtest du daraus eine Antwort machen? Es ist mir egal, ob die Unterstützung zurückgezogen wird. Warum ist das so schwer zu finden? Da in der Dokumentation für --disable-factorykeine Standardterminologie wie "In einem neuen Prozess (oder Adressraum) starten; vorhandene Instanz nicht wiederverwenden" verwendet wird.
Kaz
2
Ich kann nicht glauben, dass die Leute, die diese Projekte leiten, weiterhin so beschissene Entscheidungen treffen. Haben wir nichts gelernt Wen interessiert es, ein paar Kilobyte RAM zu sparen? Man könnte meinen, dass es oberste Priorität haben sollte, die Terminals vor einem gegenseitigen Absturz zu schützen. Zurück, rxvtdenke ich.
Tobia
Tatsächlich kann ich rxvtjedem empfehlen , der ein echtes Multiprozess-Terminal haben möchte. Es bietet Unterstützung für TrueType-Schriftarten, das Umbrechen langer Zeilen und die meisten anderen Funktionen moderner Terminals.
Tobia

Antworten:

9

Entsprechend man gnome-terminalscheint die Option, nach der Sie suchen, die verwirrend benannte zu sein

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

In neueren Releases ist die Option jedoch anscheinend nicht mehr verfügbar.

Stahlfahrer
quelle
Das funktioniert super. Wenn die Stecknadeln diese Funktion entfernen, wird es mich wahrscheinlich nicht mehr interessieren. Ich benötige dies in einem Test-Setup, in dem mehr als zehn Terminal-Fenster geöffnet sind: Einige führen Minicom-Verbindungen zu verschiedenen seriellen Leitungen aus, die mit eingebetteten Geräten verbunden sind, andere befinden sich in Testskript-Verzeichnissen und dergleichen. gnome-terminal bietet die besten Funktionen zum Ändern der Größe mit gut aussehenden, lesbaren Schriftarten in jeder Größe. Leider verliert es Speicher wie verrückt und wächst im Laufe einer Woche auf 2 GB. Separate Prozesse tragen dazu bei, dieses Problem einzudämmen und es leichter zu handhaben.
Kaz
Ich habe rxvt, aterm, eterm, xterm, Terminator und einige andere ausprobiert. Sie laufen natürlich alle leicht als separate Prozesse ab, sind aber auf andere Weise zum Kotzen. Die dokumentierten Hotkeys zur Größenänderung von rxvt würden nicht funktionieren. Aterm und Xterm-Ebene saugen in dieser Abteilung. Terminator hat eine seltsame Größenänderung, die die Schriftgröße ohne die Fenstergröße ändert. ETerm hat nur eine völlig verrückte Größenänderung mit vier festen Schriftarten; Ich habe ungefähr 30 Minuten mit den Optionen gespielt und sie dann deinstalliert.
Kaz
@ Kaz xterm + xdotool --window "$WINDOWID"?
Gilles 'SO- hör auf böse zu sein'
@Kaz Du bist wahrscheinlich darüber Art und Weise , aber ich empfehle sehr urxvtüber rxvt. Und ja, gnome-terminalist grafisch immer noch überlegen, aber ich habe irgendwie gelernt, es nicht zu verpassen. Es hat wahrscheinlich viel mit dem neuen Fenstermanager zu tun i3.
cprn
Sehen Sie sich eines der Dutzend anderer libvte-basierter Terminals an? Gnome-Terminal ist nur eine Anwendung, die im Gegensatz zu den oben genannten Anwendungen, die ihre eigenen Terminal-Implementierungen verwenden, eine Schnittstelle zu dieser Bibliothek im Backend herstellt.
Dragon788
17

Aufgrund der neuen Client / Server-Architektur (Details hier ) müssen Sie separate Instanzen von starten gnome-terminal-server. Dazu können Sie den --app-idSchalter verwenden:

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

Verwenden Sie dann den Client (mit derselben App-ID), um Terminals 1 auf dem neuen Server zu erstellen :

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

Eine andere Instanz:

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

und Terminals:

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

Der Pfad zu gnome-terminal-serverkann auf Ihrem System unterschiedlich sein.


1: Beachten Sie, dass Sie 10 Sekunden Zeit haben, um mit dem Client ein Terminal auf dem neuen Server zu erstellen .

don_crissti
quelle
Können Sie ein funktionierendes Beispiel nennen oder sich diese Frage ansehen
cprn
@CyprianGuerra - Öffnen Sie in einem Gnome-Terminal zwei Registerkarten: Führen Sie in der ersten Registerkarte den ersten Befehl in meinem Beispiel aus (dh, Sie starten den neuen Server), und wechseln Sie dann in weniger als 10 Sekunden zur zweiten Registerkarte und führen Sie den zweiten Befehl aus (um einen neuen Kunden zu starten) angepasst an Ihre Bedürfnisse ...
don_crissti
Tabs ... Ich werde es versuchen. Im Moment kann ich sagen, dass es innen nicht funktioniert screen.
cprn
Sind die Registerkarten erforderlich? Wie in: Muss der Client-Terminal-Prozess ein Kind des Servers sein?
16.
@CyprianGuerra - es war nur ein Beispiel, sie sind nicht erforderlich, was ich sehen kann ...
don_crissti
1

Ich hatte Probleme damit, dass mc in derselben Alt-Tab-Gruppe wie andere Terminal-Fenster ist, und habe diese Lösung gefunden.

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

Der Typ (Chris Irwin) löst es für seine Postroutine. Ich habe dasselbe für mc mit vollem Erfolg gemacht, abgesehen vom mc-Symbol in Alt-Tab, aber das ist in Ordnung.

Sie benötigen 3 Dateien:

/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

Dies ist Ihr Desktop-Eintrag für Midnight Commander. Bearbeiten Sie es entweder direkt /usr/share/applications/...oder verschieben Sie es von dort, /usr/local/share/applications/mc.desktopum hervorzuheben, dass es sich um Ihre eigene geänderte Kopie handelt. In jedem Fall sollte der ExecEintrag geändert werden, um zu habengnome-terminal --app-id org.gnome.Terminal-mc -e mc

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

Archivieren Sie mit all den oben genannten

https://we.tl/t-6rH5jduMG7 Dies ist .tar.gz zum Auspacken in Ihrem /. Es werden Dateien von oben sowie ein .svg-Symbol für mc erstellt.

Lauri
quelle