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

10

У меня Linux-машина, к которой я регулярно подключаюсь через ssh (putty) из Windows Я использую X-сервер VcXsrv на своем рабочем столе Windows. Я в основном использую это для запуска отладчика (DDD) и Firefox для доступа к нашей веб-системе обзора кода. Удобно использовать Firefox для Linux, чтобы я мог запустить его из скрипта. Я обычно запускаю это с "-new-tab", чтобы не создавать новые окна.

Теперь у меня есть новый обновленный Linux-компьютер, который я пока использую вместе со старым. Я заметил странное поведение: когда я запускаю новый сеанс Firefox, если он уже запущен на одном из компьютеров, он использует его.

Что я хотел бы сделать, так это запустить новую вкладку, но только под экземпляром firefox с текущего компьютера, а не с другого компьютера, который отображается на том же X-сервере.

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

РЕДАКТИРОВАТЬ: Меня попросили отредактировать это, чтобы привести несколько примеров.

ХОРОШО. В дальнейшем я буду ссылаться на 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-адреса или по одному экземпляру на компьютер, но только по одному за раз.

Надеюсь, это понятнее.

PaulM
источник
Не могли бы вы уточнить? Какое отношение имеет новая машина Linux? Вы перенаправляете X на свой Windows-компьютер? Вы подключены к обоим Linux-блокам одновременно? Пожалуйста, дайте более подробную информацию о том, как вы подключаетесь к каждой коробке.
Terdon
Итак, когда возникает проблема, вы подключены к обеим машинам с ssh -Xправильным?
Terdon
Да, я пересылаю X на мой компьютер с Windows. Да, я связан с обоими. Новая машина актуальна, потому что я также запускаю Firefox с нее. Однако вместо запуска нового экземпляра Firefox он открывает новую вкладку в существующем экземпляре - ту, которая была запущена со старой машины. Это как если бы новый процесс firefox проверял, запущен ли firefox на этом X-сервере, и если да, отправляет ему сообщение об открытии новой вкладки. Что очень умно, но не то, что я хочу. «Старый» и «новый» актуальны только в той мере, в какой они очень разные версии Firefox. Есть смысл?
PaulM
1
То, что вы описываете, нормально (как я обнаружил, к моему удивлению), я не понимаю, как это не исправлено при работе с --no-remote. Не могли бы вы отредактировать свой вопрос и сообщить нам, когда вы получите сообщение «Firefox уже запущен»? Запуск firefox -no-remote должен запустить новый экземпляр Firefox, работающий на удаленной машине, но отображаемый на вашем локальном X-сервере.
Terdon
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.

Johan
источник
это уже пробовал - см. "пример 2"
PaulM
Ах да, правда - разные экземпляры должны использовать разные профили.
Йохан
Первый предложенный вами «вариант» вообще не имел никакого смысла, поэтому я предложил исключить его из вашего ответа.
SamB
Хотя, на самом деле, это может работать без -no-remote...
SamB
0

Хорошо ... не знаю, сработает ли это, но это первое, что я попробую:

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

Если это работает, вы можете выполнить регулярный синтаксический анализ вывода ps в одном скрипте, чтобы увидеть, работает ли FF на компьютере, и либо использовать ключ -new-tab, либо -no-remote, в зависимости от того, что это находки; но вы, вероятно, хотите подождать, пока этот метод не будет протестирован, так как это достаточное количество кода для чего-то, что может не работать ....

CB Services
источник
Звучит так, как будто это может сработать, но я отказался от этого. M_OLD скоро выводится из эксплуатации.
PaulM
0

Глядя на XRemoteClient.cpp , я думаю, что вы должны сделать:

user@host1$ firefox -CreateProfile profile1

и:

user@host2$ firefox -CreateProfile profile2

Затем, когда вы хотите пойти куда-нибудь, сделать что-то вроде

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

или, ну, я думаю, вы можете догадаться, что делать на host2.

Очевидно, вы можете выбрать лучшие имена. Также не важно, как вы создаете профили. Важно указывать имя профиля в командной строке каждый раз, когда вы вызываете его, где каждый экземпляр имеет свое имя профиля.

Это может даже работать .

Самба
источник
0

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

tmh1999
источник