Firefox, дві машини Linux, один X-сервер


10

У мене є машина Linux, на яку я регулярно входжу через ssh (putty) з Windows. Я працюю на сервері VcXsrv X на своєму робочому столі Windows. Я в основному використовую це для запуску налагоджувача (ddd) і firefox для доступу до нашої веб-системи перегляду коду. Зручно використовувати Linux firefox, тому я можу запустити його зі сценарію. Я зазвичай запускаю це за допомогою "-new-tab", щоб не продовжувати створювати нові вікна.

Тепер у мене є нова оновлена ​​машина Linux, яку я зараз працюю поряд зі старою. Що я помітив, є деяка дивна поведінка: коли я запускаю новий сеанс Firefox, якщо такий вже працює на будь-якій машині, він використовує це.

Те, що я хотів би зробити, це все-таки запустити як нову вкладку, але тільки під екземпляром firefox з поточної машини, а не екземпляром з іншої машини, що, як правило, відображається на тому ж X-сервері.

Я граю з різними прапорами, включаючи -no-remote, -new-instance, а також визначаю та використовую конкретні профілі. Однак я не зміг отримати бажаний результат. Або я отримую поведінку, яку я описав вище, або я отримую помилку, сказавши щось на кшталт "Firefox вже працює, але не відповідає, будь ласка, закрийте його".

EDIT: Мене просили відредагувати, щоб навести кілька прикладів

В ПОРЯДКУ. У подальшому я посилаюся на M_OLD та M_NEW. Це окремі машини з різними версіями Linux з різними версіями Firefox (1.5 і 19). Я підключаюся до них як через ssh-клієнт під назвою Putty, так і пересилаю X на X-сервер на робочому столі Windows. Задіяний лише один X-сервер.

Приклад 1:

Отже, від мого сеансу шпаклівки до M_OLD я запускаю:

firefox www.google.com &

і з мого сеансу шпаклівки M_NEW я запускаю:

firefox www.imdb.com &

то я отримую одне вікно Firefox 1.5 з двома вкладками. Якщо я роблю те саме у зворотному напрямку, я отримую той самий результат, але з firefox 19. Іншими словами, як описано в коментарі нижче, перша команда запускає екземпляр firefox, а друга просто повідомляє існуючому екземпляру відкрити нову вкладку. Навіть якщо екземпляр знаходиться на іншій машині, поки це той самий X-сервер.

Однак я цього не хочу. Я хочу мати окремі екземпляри для окремих машин. Тому:

Приклад 2:

Отже, від мого сеансу шпаклівки до M_OLD я запускаю:

firefox -no-remote www.google.com &

і з мого сеансу шпаклівки M_NEW я запускаю:

firefox -no-remote www.imdb.com &

Зараз у мене є два окремих екземпляри firefox. Однак якщо я запускаю M_NEW:

firefox -no-remote www.google.com &

Я дістанусь

Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.

і навіть якщо я спробую

firefox -no-remote -new-instance www.google.com &

або просто

firefox -new-instance www.google.com &

тоді я все одно отримаю помилку.

Те, що я дуже хочу - а це може бути неможливо - це мати окремий екземпляр для кожної машини, але якщо з цієї машини буде запущена нова URL-адреса, вона відкриє нову вкладку. Схоже, я можу мати лише один екземпляр з новими вкладками для кожної URL-адреси, або один екземпляр на машині, але лише по одному.

Сподіваємось, це зрозуміліше.


Не могли б ви уточнити? Наскільки актуальна нова машина Linux? Ви пересилаєте X на свою машину Windows, правильно? Ви з'єднані з обома скриньками Linux одночасно? Будь ласка, дайте детальніше про те, як ви підключаєтесь до кожного вікна.
тердон

Гаразд, тож коли виникає проблема, ви підключені до обох машин ssh -Xправильно?
тердон

Так, я пересилаю X на свою машину Windows. Так, я пов'язаний з обома. Нова машина є актуальною, тому що я також запускаю Firefox з неї. Однак замість запуску нового екземпляра firefox він відкриває нову вкладку в існуючому екземплярі - ту, що була запущена зі старої машини. Це так, ніби новий процес firefox перевіряє, чи працює Firefox на цьому сервері X, і якщо так, він надсилає йому повідомлення про відкриття нової вкладки. Що дуже розумно, але не те, що я хочу. "Старий" і "новий" є актуальним лише в тій мірі, оскільки вони є дуже різними версіями firefox. Мати сенс?
PaulM

1
Те, що ви описуєте, є нормальним (як я здивував), я не розумію, як це не виправлено під час бігу --no-remote. Чи можете ви відредагувати своє запитання та сказати нам, коли отримаєте повідомлення "Firefox вже працює"? Запуск firefox -no-remote повинен запустити новий екземпляр Firefox, який працює на віддаленій машині, але відображається на локальному сервері X.
тердон

1
Я думаю, вам може знадобитися додати -p напр -p -no-remote. Це дозволяє почати з нового профілю Fx. Див. Параметри командного рядка . Для підключення до існуючого процесу Fx ви можете спробувати firefox https://www.mozilla.orgабоfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Відповіді:


1

Виразні екземпляри Firefox (наприклад, створені за допомогою --no-remote) повинні мати окремі профілі.

Варіант 1: Створіть два (або більше) профілів, по одному для кожної системи, на якій працює Firefox. Приклад

firefox --no-remote -CreateProfile localuser
firefox --no-remote -CreateProfile host2

Тепер запустіть firefox і виберіть профіль при запуску

firefox --no-remote -P localuser

або

firefox --no-remote -P host1

Варіант 2: Налаштуйте динамічне рішення для створення "одноразового" профілю при запуску, наприклад, скорочення за лініями:

TEMPPROFILE=$(date +%Y%m%d%H%M%S)
firefox --no-remote -CreateProfile $TEMPPROFILE 2>/tmp/.mozprofile.$TEMPPROFILE
firefox --no-remote -P $TEMPPROFILE

Ви можете потім додати кроки для видалення тимчасового профілю (Директорію для видалення можна знайти, проаналізувавши вихід з команди CreateProfile, що зберігається за допомогою вищевказаної команди в /tmp/.mozprofile.$TEMPPROFILE


вже спробував це - дивіться "приклад 2"
PaulM

Так, правда - окремі екземпляри повинні використовувати різні профілі.
Йоган

Перший "запропонований вами варіант" взагалі не мав сенсу, тому я запропонував його зняти з вашої відповіді.
СамБ

Хоча насправді це може спрацювати і без -no-remote...
SamB

0

Гаразд ... не знаю, чи це спрацює, але я спершу спробую:

Як щодо того, якщо ви створюєте другий скрипт на кожній машині, який не намагається створити нову вкладку, а лише новий екземпляр. Якщо у вас на даний момент не працює FF, ви використовуєте цей новий сценарій, але якщо він вже запущений, ви використовуєте старий сценарій, який створює нову вкладку.

Якщо це працює, ви, можливо, зможете виконати повторний аналіз синтаксичного виводу ps в одному сценарії, щоб побачити, чи FF вже працює на машині, або використовувати перемикач -new-tab або -no-remote, залежно від того, що це знахідки; але ви, ймовірно, хочете почекати, поки цей метод не буде перевірений, оскільки це неабияка кількість кодування для чогось, що може не працювати ....


це здається, що це може спрацювати - але я відмовився від цього. M_OLD незабаром виводиться з експлуатації.
ПолМ

0

Дивлячись на XRemoteClient.cpp , я думаю, що вам слід зробити:

user@host1$ firefox -CreateProfile profile1

і:

user@host2$ firefox -CreateProfile profile2

Потім, коли ви хочете кудись поїхати, зробіть щось подібне

user@host1$ firefox -P profile1 -new-tab http://example.com

або, я думаю, ви можете здогадатися, що робити на хості2.

Очевидно, ви можете вибрати кращі імена. Це також не має великого значення, як ви створюєте профілі. Важливим є вказівка ​​імені профілю в командному рядку кожного разу, коли ви викликаєте його, де кожен екземпляр має своє ім'я профілю.

Це навіть може спрацювати .


0

У мене є досить елегантне рішення тут , якщо вам все ще потрібно. Наразі у мене є, начебто, 5 незалежних екземплярів запуску Firefox і стільки, скільки я хочу.

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