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

17

Если вы gnome-terminalзапустили и хотите создать новый экземпляр программы, вы можете подумать, что запуск gnome-terminal &из оболочки поможет.

Удивительно, но этот новый экземпляр ведет себя как какая-то безвкусная программа для Windows или Mac; он только отправляет сообщение существующему, запущенному gnome-terminalдля создания нового окна. Если gnome-terminalпроисходит сбой этого процесса, вы теряете все окна терминала!

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

Как мы можем создать независимые экземпляры gnome-terminal, каждый из которых работает в своем собственном процессе, так что уничтожение этого процесса разрушает только те окна, которые связаны с этим процессом?

Kaz
источник
Вы можете иметь успех gnome-terminal --disable-factory, однако поддержка для него, по- видимому будучи witdrawn
steeldriver
@steeldriver Кажется, это работает; хотите превратить это в ответ? Я не забочусь о прекращении поддержки. Почему это так трудно найти? Поскольку документация для --disable-factoryне использует никакой стандартной терминологии, такой как «запуск в новом процессе (или адресном пространстве); не используйте повторно существующий экземпляр».
Каз
2
Я не могу поверить, что люди, управляющие этими проектами, продолжают принимать такие дерьмовые решения. Мы ничему не научились? Кто заботится о том, чтобы сэкономить несколько килобайт оперативной памяти? Можно подумать, что предотвращение сбоя терминалов друг от друга должно быть приоритетом № 1. Вернуться к, rxvtя думаю.
Тобиа
На самом деле, я могу рекомендовать всем, rxvtкто хочет настоящий многопроцессорный терминал. Он имеет поддержку шрифтов Truetype, переназначение длинных строк и большинство других функций современных терминалов.
Tobia

Ответы:

9

В соответствии с man gnome-terminal, вариант, который вы ищете

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

Тем не менее, опция, по-видимому, удалена в более поздних выпусках, поэтому на нее не следует полагаться.

steeldriver
источник
Это прекрасно работает. К тому времени, когда булавочные головки уберут эту функцию, мне, вероятно, уже будет все равно. Мне это нужно в тестовой настройке, где открыто более десяти окон терминала: одни запускают minicom для различных последовательных линий, подключающихся к встроенным устройствам, а другие находятся в каталогах тестовых скриптов и тому подобное. gnome-терминал обладает лучшими возможностями для изменения размера с хорошо читаемыми шрифтами любого размера. К сожалению, он теряет память как сумасшедший, увеличиваясь до 2 ГБ в течение недели. Отдельные процессы помогут сдержать эту проблему, сделав ее более управляемой.
Каз
Я пробовал rxvt, aterm, eterm, xterm, Terminator и несколько других. Все они, конечно, легко работают как отдельные процессы, но сосут другими способами. Задокументированные изменения размера горячих клавиш rxvt не будут работать. Aterm и xterm plain сосут в этом отделе. Терминатор имеет странное изменение размера, которое изменяет размер шрифта без размера окна. ETerm имеет совершенно дурацкое изменение размера с четырьмя фиксированными шрифтами; Я играл с опциями около 30 минут, затем удалил его.
Каз
@ Каз 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 секунд, чтобы использовать клиент для создания терминала внутри нового сервера» .

don_crissti
источник
Можете ли вы привести рабочий пример или взглянуть на этот вопрос ?: 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-instances-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.

Лаури
источник