Извините за опоздание на 3 года, я заинтересовался этой темой только сейчас и нашел этот вопрос.
Я нигде не нашел документированного решения, поэтому я проверил исходный код, и вот очень важная часть:
http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537
Здесь nullptr в конце строки, к сожалению, означает, что аргумент профиля не передается в функцию SendCommandLine, поэтому невозможно выбрать правильное окно firefox для отправки сообщения openurl.
Однако мы видим, что имя пользователя передается и имя пользователя инициализируется из переменной среды LOGNAME. Исходя из этого, я пришел к следующему решению:
- Я обертываю Firefox этим скриптом, который называется firefox.sh:
FOX_PROFILE = facebook
export LOGNAME = errge. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
при первом запуске запускается новый экземпляр, и каталог ~ / .mozilla_profiles / facebook должен существовать,
когда запускается второй раз, если профиль facebook уже запущен, он правильно подключается к нему,
он может правильно отправлять команды нескольким различным рабочим профилям (конечно, вы должны изменить параметр FOX_PROFILE в первой строке в разных сценариях).
Я проверил это с Firefox 26 на Linux, и это работает.
В качестве альтернативы, вот мое полноценное решение, которое вы можете или не хотите использовать:
#! / Bin / Баш
установить -е
FOX = / Opt / светлячок / светлячок
MESSAGE = $ @
if [-z "$ FOX_PROFILE"]; тогда
if [-z "$ {MESSAGE}"]; тогда
FOX_PROFILE = по умолчанию
еще
FOX_PROFILE = $ (kdialog - по умолчанию по умолчанию --menu "- $ {MESSAGE} -" по умолчанию по умолчанию google google facebook facebook errge errge spam spam)
фи
фи
экспортировать FOX_PROFILE
# Этот взлом нужен, потому что Firefox удаленная отправка командной строки
# игнорирует параметр профиля. См. NsAppRunner.cpp: 1505.
export LOGNAME = errge. $ FOX_PROFILE
# Использование фонового выполнения вместо exec, поэтому поведение
# соответствует, когда профиль уже запущен и когда он просто
# запуск.
$ FOX -профиль ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"
# Огромный успех.
выход 0
Если вы запускаете скрипт без каких-либо параметров, он автоматически выбирает профиль по умолчанию, но вы можете переопределить его, установив FOX_PROFILE вручную в вашей оболочке. Если URL-адрес передается в командной строке, он всегда запрашивает профиль, в котором его можно открыть, это потому, что я в основном кликаю в своей программе чата и электронной почты, и в этом случае я хочу всегда выбирать профиль (Google для календаря спам, фейсбук на день рождения, спам и т.д.). Конечно, вы можете изменить логику в соответствии со своим стилем использования, это всего лишь пример, важным знанием является трюк с LOGNAME.
И, конечно же, вы должны убедиться, что этот скрипт-обертка - единственный способ запустить браузер на вашем компьютере. Потому что, если вы откроете профиль без правильного имени LOGNAME, вы больше не сможете общаться с этим профилем. Я поставил этот скрипт первым на моем пути через несколько имен с символическими ссылками, таких как x-www-browser, firefox, sensible-browser, и поместил его также в переменную окружения BROWSER. Как это сделать, зависит от вашего дистрибутива GNU / Linux.
Если у вас уже запущен экземпляр, Firefox будет использовать его повторно. Попробуй
firefox -no-remote
.источник
@miemik
«Но я хочу, чтобы он повторно использовал экземпляр! Только определенный, а не случайный, который ему нравится. Если я попытался добавить« -no-remote »к моей команде, я получаю:« Iceweasel уже запущен, но не отвечает. Чтобы открыть новое окно, вы должны сначала закрыть существующий процесс Iceweasel или перезапустить систему. "
У вас есть проблема с разрешением вашего профиля dir ... проверьте разрешение. Вы скопировали или переместили его из другого места (раздел .. диск ..)?
Решение:
Станьте пользователем root и запустите top, чтобы увидеть, работает ли он как root. Затем ls -ld в профиле dir (который должен находиться под вашим домашним каталогом с точкой (.) Перед ними ... означает, что вы должны использовать "ls -al", чтобы увидеть его).
Проверьте другое разрешение этого dir и измените соответственно.
Ура!
источник
Это не сработает. Единственный способ запустить 2 экземпляра приложения Mozilla - отключить удаленные подключения ко второму (обычно с MOZ_NO_REMOTE = 1). Это означает, что вы отключаете возможность взаимодействия с другими экземплярами (например, создание, открывающее новую страницу).
Таким образом, вы можете либо открыть новое приложение с
no remote
включенным, либо повторно использовать экземпляр, который разрешает удаленный доступ.источник
Вы должны иметь возможность добавить
-no-remote
вызов только к тестовому профилю (после того, как профиль программного обеспечения уже открыт) следующим образом:Это должно позволить всем другим ссылкам по-прежнему открываться в другом профиле удаленно.
Если это решение не работает, вы всегда можете запустить Firefox как отдельный пользователь для тестирования, используя
sudo -u
. Firefox действительно должен быть в состоянии справиться с этим правильно с помощью профилей, хотя.источник
-no-remote
флагом запускается новый экземпляр Firefox, и вопрос требует повторного использования существующих экземпляров Firefox, если они уже запущены.Если у вас уже открыт Mozilla Firefox с профилем по умолчанию или любым другим, попробуйте:
Протестировал и работал для меня с Mozilla Firefox с 2.x до 12.x
источник
При первом запуске экземпляра Firefox с данным профилем используйте команду:
Вы можете добавить URL в конце команды выше, чтобы открыть его. Позже, когда вы захотите открыть URL в этом экземпляре, вы можете использовать:
Если вы пишете сценарий и хотите узнать, есть ли уже экземпляр, выполняющий этот профиль, чтобы увидеть, какие из перечисленных выше команд должны быть вызваны, вы можете использовать:
Протестировано с Firefox 34 на Linux.
Обратите внимание, что в настоящее время в Firefox есть ошибка, которая выдает ошибку вместе с сообщением
если
-remote openurl()
команда сделана без управляющего tty (например, из скрипта, запущенного демоном).Я столкнулся с этой ошибкой при запуске скрипта из файла .desktop в KDE (например, из панели запуска на панели), поэтому мне пришлось отметить опцию «запустить в терминале», что немного раздражает.
источник
Для справки, одно из решений: в KDE мы настроили браузер по умолчанию для запуска следующей командой:
где «default» - наш профиль, который мы хотим использовать каждый раз.
Теперь мы запускаем наш экземпляр Firefox без аргументов (средство запуска KDE Firefox по умолчанию). Это открывает Firefox нормально, теперь мы хотим открыть другой профиль, для этого мы создаем еще один лаунчер в редакторе меню KDE:
Это открывает менеджер профилей, мы выбираем, какой профиль использовать.
Протестировано на нескольких одновременно работающих профилях, когда мы нажимаем на ссылку в любом приложении (например, в чате), и в выбранном нами профиле открывается новая вкладка.
Надеюсь, кто-то найдет это полезным :).
Не тестировался на Gnome, но я надеюсь, что он может быть воспроизведен.
источник