Esegui vere istanze multiple di processo di gnome-terminal


17

Se hai in gnome-terminalesecuzione e desideri una nuova istanza del programma, potresti pensare che l'esecuzione gnome-terminal &da una shell farebbe il trucco.

Sorprendentemente, questa nuova istanza si comporta come un insipido programma Windows o Mac; invia solo un messaggio all'esistente, in esecuzione gnome-terminalper creare una nuova finestra. Se questo gnome-terminalprocesso si arresta in modo anomalo, perdi tutte le finestre del terminale!

(Naturalmente, ogni finestra ha la sua shell, che è un processo indipendente, ma l'emulatore di terminale effettivo e la sua GUI sono gestiti da una singola istanza dell'applicazione.)

Come possiamo creare istanze indipendenti di gnome-terminal, ciascuna in esecuzione nel proprio processo, in modo che uccidere quel processo distrugga solo le finestre associate a quel processo?


Si può avere successo con gnome-terminal --disable-factory, tuttavia il supporto per esso è apparentemente essendo witdrawn
steeldriver

@steeldriver Sembra funzionare; ti interessa trasformarlo in una risposta? Non mi interessa che il supporto venga ritirato. Perché è così difficile da trovare? Perché la documentazione per --disable-factorynon utilizza alcuna terminologia standard come "avvia in un nuovo processo (o spazio di indirizzi); non riutilizzare l'istanza esistente".
Kaz,


2
Non riesco a credere che le persone che gestiscono questi progetti continuino a prendere decisioni così scadenti. Non abbiamo imparato niente? Chi se ne frega di risparmiare alcuni kilobyte di RAM? Si potrebbe pensare che impedire ai terminali di bloccarsi a vicenda dovrebbe essere la priorità n. 1. Torna a rxvtsuppongo.
Tobia,

In effetti, posso consigliare rxvta chiunque desideri un vero terminale multi-processo. Ha il supporto per font TrueType, il re-wrapping di linee lunghe e la maggior parte delle altre funzionalità dei terminali moderni.
Tobia,

Risposte:


9

Secondo man gnome-terminal, l'opzione che stai cercando sembra essere il nome confuso

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

Tuttavia, l'opzione è apparentemente rimossa nelle versioni più recenti, quindi non dovrebbe essere invocata.


Funziona benissimo. Quando i pinhead rimuoveranno questa funzione, probabilmente non mi interesserò più. Ne ho bisogno in una configurazione di prova in cui sono aperte più di dieci finestre di terminale: alcune eseguono minicom su varie linee seriali che si collegano a dispositivi incorporati, altre si trovano nelle directory degli script di test e così via. gnome-terminal ha le migliori caratteristiche per ridimensionare con caratteri belli e leggibili di ogni dimensione. Sfortunatamente, perde la memoria come un matto, crescendo a 2 GB nel corso di una settimana. Processi separati aiuteranno a contenere questo problema, rendendolo più gestibile.
Kaz,

Ho provato rxvt, aterm, eterm, xterm, Terminator e alcuni altri. Ovviamente funzionano tutti come processi separati, ma succhiano in altri modi. I tasti di scelta rapida ridimensionati documentati di rxvt non funzionerebbero. Aterm e xterm fanno schifo in quel reparto. Terminator ha un ridimensionamento strano che modifica la dimensione del carattere senza la dimensione della finestra. ETerm ha un ridimensionamento completamente stravagante con quattro caratteri fissi; Ho giocato con le opzioni per circa 30 minuti, quindi l'ho disinstallato.
Kaz,

@Kaz xterm + xdotool --window "$WINDOWID"?
Gilles 'SO- smetti di essere malvagio'

@Kaz Sei probabilmente modo su di esso, ma mi raccomando urxvtsopra rxvt. E sì, gnome-terminalè ancora graficamente superiore ma in qualche modo ho imparato a non perderlo. Probabilmente ha molto a che fare con il nuovo gestore delle finestre (usando i3ora ma non è per tutti).
cprn

Esaminare una delle decine di altri terminali basati su libvte? Gnome-terminal è solo un'applicazione che finisce per interfacciarsi con quella libreria sul backend a differenza del resto sopra menzionato che usa le proprie implementazioni di terminale.
dragon788,

17

A causa della nuova architettura client / server (dettagli qui ) dovrai avviare istanze separate di gnome-terminal-server. Per fare ciò puoi usare l' --app-idinterruttore:

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

quindi utilizzare il client (con lo stesso ID app) per creare i terminali 1 all'interno del nuovo server:

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

Un'altra istanza:

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

e terminali:

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

Il percorso gnome-terminal-serverpotrebbe essere diverso sul tuo sistema.


1: Nota che "hai 10 secondi per usare il client per creare un terminale all'interno del nuovo server" .


Puoi fare un esempio funzionante o dare un'occhiata a questa domanda ?: unix.stackexchange.com/questions/304269/…
cprn,

@CyprianGuerra - in un terminale gnome apri due schede: nella prima scheda esegui il primo comando nel mio esempio (ovvero avviare il nuovo server) quindi, in meno di 10 secondi , passa alla seconda scheda ed esegui il secondo comando (per avviare un nuovo cliente) personalizzato per le tue esigenze ...
don_crissti

Schede ... Ci proverò. Per ora posso dire che non funziona all'interno screen.
cprn,

Le schede sono obbligatorie? Come in: il processo del terminale client deve essere figlio del server?
cprn,

@CyprianGuerra - era solo un esempio, non sono richiesti da quello che posso vedere ...
don_crissti

1

Ho avuto problemi con MC essendo nello stesso gruppo alt-tab di altre finestre terminali e ho trovato questa soluzione.

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

Il ragazzo (Chris Irwin) lo risolve per la sua routine di posta. Ho fatto lo stesso per mc con pieno successo a parte l'icona mc all'interno di alt-tab ma va bene.

Avrai bisogno di 3 file:

/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

Questa è la voce del desktop per il comandante di mezzanotte. Modificalo direttamente /usr/share/applications/...o spostalo da lì /usr/local/share/applications/mc.desktopper sottolineare che è la tua copia modificata. In ogni caso, la Execvoce dovrebbe essere modificata per averegnome-terminal --app-id org.gnome.Terminal-mc -e mc

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

Archivio con tutto quanto sopra

https://we.tl/t-6rH5jduMG7 Questo è .tar.gz da decomprimere nel tuo /. Creerà file dall'alto, più l'icona .svg per mc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.