Запустіть справжні кілька екземплярів процесу gnome-terminal


17

Якщо ви gnome-terminalпрацюєте і хочете новий екземпляр програми, ви можете подумати, що запуск gnome-terminal &з оболонки зробить свою справу.

Дивно, але цей новий екземпляр поводиться як якась невміла програма Windows або Mac; він лише надсилає повідомлення до існуючого, працює gnome-terminalдля створення нового вікна. Якщо цей gnome-terminalпроцес вийде з ладу, ви втратите всі вікна терміналу!

(Звичайно, у кожного вікна є своя оболонка, що є незалежним процесом, але власне емулятор термінала та його графічний інтерфейс управляються з одного примірника програми.)

Як ми можемо створити незалежні екземпляри gnome-terminal, кожен з яких працює у своєму власному процесі, так що вбивство цього процесу знищує лише вікна (и), пов'язані з цим процесом?


У вас може бути успіх gnome-terminal --disable-factory, однак підтримка цього, мабуть, відмовляється
steeldriver

@steeldriver Здається, це працює; хочете зробити це відповіддю? Мені все одно, що підтримка буде знята. Чому це так важко знайти? Оскільки в документації для --disable-factoryне використовується жодна стандартна термінологія, наприклад "запустити новий процес (або адресний простір); не використовуйте повторно існуючий екземпляр".
Каз


2
Я не можу повірити, що люди, які ведуть ці проекти, продовжують приймати такі хитрі рішення. Ми нічого не дізналися? Кому байдуже шкодувати кілька кілобайт оперативної пам’яті? Можна було б подумати, що утримання терміналів від збоїв один з одним має бути пріоритетом №1. Назад до rxvtздогадки
Тобія

Насправді я можу рекомендувати rxvtвсім, хто бажає справжнього багатопроцесорного терміналу. Він має підтримку шрифту Truetype, повторне загортання довгих ліній та більшість інших функцій сучасних терміналів.
Тобія

Відповіді:


9

Відповідно man gnome-terminal, опція, яку ви шукаєте, здається незрозумілою

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

Однак параметр, очевидно, видалено в останніх випусках, тому на нього не слід покладатися.


Це чудово працює. До того моменту, коли шпильки видалять цю функцію, я, швидше за все, більше не хвилююся. Мені це потрібно в тестовій установці, де відкрито більше десяти термінальних вікон: одні запущені minicom до різних послідовних ліній, що підключаються до вбудованих пристроїв, а інші сидять у каталогах тестових сценаріїв тощо. gnome-terminal має найкращі функції для зміни розміру з гарним виглядом, читабельним шрифтом будь-якого розміру. На жаль, вона просочується пам'яттю як божевільна, зростаючи до 2 Гб протягом тижня. Окремі процеси допоможуть утримати цю проблему, зробивши її більш керованою.
Каз

Я спробував rxvt, aterm, eterm, xterm, Terminator та кілька інших. Вони, звичайно, легко протікають як окремі процеси, але всмоктуються іншими способами. Задокументовані зміни розміру гарячих клавіш rxvt не працюватимуть. Aterm і xterm звичайний смоктати в цьому відділі. Термінатор має дивні розміри, що змінюють розмір шрифту без розміру вікна. ETerm якраз має абсолютно нерозумний розмір із чотирма фіксованими шрифтами; Я грав з параметрами близько 30 хвилин, потім видалив її.
Каз

@Kaz xterm + xdotool --window "$WINDOWID"?
Жил "ТАК - перестань бути злим"

@Kaz Ви , ймовірно , шлях над ним , але я настійно рекомендую urxvtбільше rxvt. І так, gnome-terminalвсе ще графічно перевершує, але я якось навчився цього не пропускати. Це, мабуть, має багато спільного з новим менеджером вікон (використовуючи i3зараз, але це не для всіх).
cprn

Загляньте в будь-який із десятків інших терміналів на основі libvte? Gnome-термінал - це лише одна програма, яка закінчує взаємодію з цією бібліотекою на бекенді, на відміну від решти згаданих вище, які використовують власні термінальні реалізації.
dragon788

17

Завдяки новій архітектурі клієнт / сервер (детальніше тут ) вам доведеться починати окремі екземпляри gnome-terminal-server. Для цього ви можете використовувати --app-idперемикач:

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

потім використовуйте клієнт (з тим же ідентифікатором програми), щоб створити термінали 1 всередині нового сервера:

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

Ще один приклад:

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

і термінали:

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

Шлях gnome-terminal-serverможе бути різним у вашій системі.


1: Зауважте, що "у вас є 10 секунд, щоб використовувати клієнт для створення терміналу всередині нового сервера" .


Чи можете ви навести робочий приклад або поглянути на це питання?: Unix.stackexchange.com/questions/304269/…
cprn

@CyprianGuerra - у терміналі gnome відкрийте дві вкладки: у першій вкладці запустіть 1-ю команду в моєму прикладі (тобто, щоб запустити новий сервер), потім, менше ніж за 10 секунд , перейдіть на другу вкладку і запустіть 2-ю команду (для запуску нового клієнта), налаштована під ваші потреби ...
don_crissti

Вкладки ... Я спробую. Поки що я можу сказати, що це все не працює screen.
cprn

Чи потрібні вкладки? Як у: чи повинен процес клієнтського терміналу бути дочірнім сервером?
cprn

@CyprianGuerra - це був лише приклад, вони не вимагаються від того, що я бачу ...
don_crissti

1

Я боровся з тим, що mc знаходиться в тій самій групі alt-tab як інші вікна терміналу і знайшов це рішення.

https://chrisirwin.ca/posts/multiple-in вещества-of-gnome-terminal/

Хлопець (Кріс Ірвін) вирішує це для своєї пошти. Я зробив те ж саме для mc з повним успіхом, окрім значка mc у Alt-tab, але це добре.

Вам знадобляться 3 файли:

/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

Це запис на робочому столі для опівночі командира. Або відредагуйте його безпосередньо /usr/share/applications/...або перемістіть звідти, /usr/local/share/applications/mc.desktopщоб підкреслити, що це ваша власна змінена копія. У будь-якому випадку, Execзапис має бути змінено, щоб мати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

Архів з усім вищезазначеним

https://we.tl/t-6rH5jduMG7 Це .tar.gz для розпакування у вашому /. Це створить файли зверху, плюс значок .svg для mc.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.