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-адреса или один экземпляр для каждого компьютера, но только по одному за раз.

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

4 ответа4

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

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 и столько, сколько я хочу.

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .