Uruchom prawdziwe wiele instancji procesu gnome-terminal

17

Jeśli masz gnome-terminaluruchomiony i potrzebujesz nowej instancji programu, możesz pomyśleć, że uruchomienie gnome-terminal &z powłoki by załatwiło sprawę.

O dziwo, ta nowa instancja zachowuje się jak jakiś nieporadny program Windows lub Mac; wysyła tylko wiadomość do istniejącej, uruchomioną, gnome-terminalaby utworzyć nowe okno. Jeśli ten gnome-terminalproces ulegnie awarii, stracisz wszystkie okna terminala!

(Oczywiście każde okno ma własną powłokę, która jest niezależnym procesem, ale rzeczywistym emulatorem terminala i jego GUI zarządza się z jednej instancji aplikacji).

Jak możemy stworzyć niezależne instancje, z gnome-terminalktórych każdy działa w swoim własnym procesie, tak że zabicie tego procesu niszczy jedynie okna związane z tym procesem?

Kaz
źródło
Być może odniesiesz sukces gnome-terminal --disable-factory, jednak wsparcie jest najwyraźniej wycofane
steeldriver
@steeldriver Wygląda na to, że działa; chcesz zrobić z tego odpowiedź? Nie obchodzi mnie wycofanie wsparcia. Dlaczego tak trudno go znaleźć? Ponieważ w dokumentacji dotyczącej --disable-factorynie stosuje się żadnej standardowej terminologii, takiej jak „uruchom w nowym procesie (lub przestrzeni adresowej); nie używaj ponownie istniejącej instancji”.
Kaz
2
Nie mogę uwierzyć, że ludzie prowadzący te projekty podejmują tak głupie decyzje. Czy niczego się nie nauczyliśmy? Kogo obchodzi oszczędzanie niektórych kilobajtów pamięci RAM? Można by pomyśleć, że zapobieganie awariom terminali powinno być priorytetem nr 1. Wracam do rxvt.
Tobia,
W rzeczywistości mogę polecić rxvtkażdemu, kto chce prawdziwego terminalu wieloprocesowego. Ma obsługę czcionek Truetype, owijanie długich linii i większość innych funkcji współczesnych terminali.
Tobia,

Odpowiedzi:

9

Zgodnie z man gnome-terminaltym opcja, której szukasz, wydaje się mieć mylącą nazwę

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

Jednak opcja ta została najwyraźniej usunięta w nowszych wersjach, więc nie należy na niej polegać.

steeldriver
źródło
To działa świetnie. Do czasu, gdy szpilki usuną tę funkcję, prawdopodobnie już mnie to nie obchodzi. Potrzebuję tego w konfiguracji testowej, w której otwartych jest więcej niż dziesięć okien terminali: niektóre z uruchomionymi minicom do różnych linii szeregowych łączących się z urządzeniami osadzonymi, a inne siedzą w katalogach skryptów testowych i tak dalej. gnome-terminal ma najlepsze funkcje do zmiany rozmiaru za pomocą dobrze wyglądających, czytelnych czcionek w każdym rozmiarze. Niestety, przecieka pamięć jak szalona, ​​w ciągu tygodnia rośnie do 2 GB. Oddzielne procesy pomogą rozwiązać ten problem, czyniąc go łatwiejszym do zarządzania.
Kaz
Próbowałem rxvt, aterm, eterm, xterm, Terminator i kilku innych. Oczywiście wszystkie z nich działają jako osobne procesy, ale są do niczego inne. Udokumentowane skróty zmiany rozmiaru rxvt nie działałyby. Aterm i Xterm są do bani w tym dziale. Terminator ma dziwną zmianę rozmiaru, która zmienia rozmiar czcionki bez rozmiaru okna. ETerm ma po prostu całkowicie zwariowany rozmiar z czterema stałymi czcionkami; Grałem z opcjami przez około 30 minut, a następnie odinstalowałem.
Kaz
@Kaz xterm + xdotool --window "$WINDOWID"?
Gilles „SO- przestań być zły”
@Kaz Najprawdopodobniej sposób nad nim, ale bardzo polecam urxvtciągu rxvt. I tak, gnome-terminalwciąż jest lepszy graficznie, ale jakoś nauczyłem się go nie przegapić. Prawdopodobnie ma to wiele wspólnego z nowym menedżerem okien (korzystającym i3teraz, ale nie dla wszystkich).
cprn
Zajrzyj do któregoś z kilkunastu innych terminali opartych na libvte? Gnome-terminal jest tylko jedną aplikacją, która ostatecznie łączy się z tą biblioteką w backendie, w przeciwieństwie do pozostałych wymienionych powyżej, które używają własnych implementacji terminali.
dragon788,
17

Ze względu na nową architekturę klient / serwer (szczegóły tutaj ) będziesz musiał uruchomić osobne instancje gnome-terminal-server. Aby to zrobić, możesz użyć --app-idprzełącznika:

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

następnie użyj klienta (z tym samym identyfikatorem aplikacji), aby utworzyć terminale 1 na nowym serwerze:

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

Kolejna instancja:

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

i terminale:

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

Ścieżka do gnome-terminal-servermoże być inna w twoim systemie.


1: Pamiętaj, że „masz 10 sekund na użycie klienta do utworzenia terminala w nowym serwerze” .

don_crissti
źródło
Czy możesz podać działający przykład lub spojrzeć na to pytanie ?: unix.stackexchange.com/questions/304269/…
cprn
@CyprianGuerra - w terminalu gnome otwórz dwie zakładki: w pierwszej zakładce uruchom pierwszą komendę w moim przykładzie (to znaczy, aby uruchomić nowy serwer), a następnie, w czasie krótszym niż 10 sekund , przejdź do drugiej zakładki i uruchom drugą komendę (aby założyć nowego klienta) dostosowane do twoich potrzeb ...
don_crissti
Tabs ... Spróbuję. Na razie mogę powiedzieć, że to nie działa w środku screen.
cprn
Czy są wymagane karty? Jak w: czy proces terminalu klienta musi być dzieckiem serwera?
cprn
@CyprianGuerra - to był tylko przykład, nie są wymagane z tego, co widzę ...
don_crissti
1

Walczyłem z tym, że mc znajdował się w tej samej grupie Alt-Tab co inne okna terminali i znalazłem to rozwiązanie.

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

Facet (Chris Irwin) rozwiązuje to ze względu na swoją procedurę poczty. Zrobiłem to samo z MC z pełnym sukcesem, oprócz ikony MC w Alt-Tab, ale to dobrze.

Potrzebujesz 3 plików:

/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

To jest pozycja na pulpicie dla dowódcy północy. Edytuj go bezpośrednio /usr/share/applications/...lub przenieś stamtąd, /usr/local/share/applications/mc.desktopaby podkreślić, że jest to Twoja własna zmodyfikowana kopia. W każdym razie Execwpis powinien zostać zmodyfikowany, aby miećgnome-terminal --app-id org.gnome.Terminal-mc -e mc

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

Archiwum ze wszystkimi powyższymi

https://we.tl/t-6rH5jduMG7 To jest plik .tar.gz do rozpakowania /. Będzie tworzyć pliki z góry, a także ikonę .svg dla mc.

Lauri
źródło