У меня 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-адреса или по одному экземпляру на компьютер, но только по одному за раз.
Надеюсь, это понятнее.
ssh -X
правильным?--no-remote
. Не могли бы вы отредактировать свой вопрос и сообщить нам, когда вы получите сообщение «Firefox уже запущен»? Запускfirefox -no-remote
должен запустить новый экземпляр Firefox, работающий на удаленной машине, но отображаемый на вашем локальном X-сервере.-p -no-remote
. Это позволяет начать с нового профиля Fx. Смотрите Параметры командной строки . Чтобы подключиться к существующему процессу Fx, вы можете попробоватьfirefox https://www.mozilla.org
илиfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
Ответы:
Отдельные экземпляры Firefox (например, созданные с помощью
--no-remote
) должны иметь отдельные профили.Вариант 1. Создайте два (или более) профиля, по одному для каждой системы, в которой работает Firefox. пример
Теперь запустите Firefox и выберите профиль при запуске
или же
Вариант 2. Настройте динамическое решение для создания «одноразового» профиля при запуске, например, по кругу:
Возможно, вы захотите добавить шаги для удаления временного профиля после этого (Директорию, которую нужно удалить, можно найти, проанализировав выходные данные команды CreateProfile, сохраненной с помощью вышеуказанной команды в /tmp/.mozprofile.$TEMPPROFILE.
источник
-no-remote
...Хорошо ... не знаю, сработает ли это, но это первое, что я попробую:
Как насчет того, чтобы создать на каждом компьютере второй скрипт, который не пытается создать новую вкладку, а только новый экземпляр. Если у вас в данный момент не работает FF на этом компьютере, вы используете этот новый скрипт, но если он уже запущен, вы используете старый скрипт, который создает новую вкладку.
Если это работает, вы можете выполнить регулярный синтаксический анализ вывода ps в одном скрипте, чтобы увидеть, работает ли FF на компьютере, и либо использовать ключ -new-tab, либо -no-remote, в зависимости от того, что это находки; но вы, вероятно, хотите подождать, пока этот метод не будет протестирован, так как это достаточное количество кода для чего-то, что может не работать ....
источник
Глядя на XRemoteClient.cpp , я думаю, что вы должны сделать:
и:
Затем, когда вы хотите пойти куда-нибудь, сделать что-то вроде
или, ну, я думаю, вы можете догадаться, что делать на host2.
Очевидно, вы можете выбрать лучшие имена. Также не важно, как вы создаете профили. Важно указывать имя профиля в командной строке каждый раз, когда вы вызываете его, где каждый экземпляр имеет свое имя профиля.
Это может даже работать .
источник
У меня есть довольно элегантное решение здесь , если вам все еще нужно. На данный момент у меня есть 5 независимых экземпляров Firefox и столько, сколько я хочу.
источник