Извините за опоздание на 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/bash
set -e
FOX=/opt/firefox/firefox
MESSAGE=$@
if [ -z "$FOX_PROFILE" ]; then
if [ -z "${MESSAGE}" ]; then
FOX_PROFILE=default
else
FOX_PROFILE=$(kdialog --default default --menu "-- ${MESSAGE} --" default default google google facebook facebook errge errge spam spam)
fi
fi
export FOX_PROFILE
# This hack is needed, because firefox remote command line sending
# ignores the profile parameter. See nsAppRunner.cpp:1505.
export LOGNAME=errge.$FOX_PROFILE
# Using background execution instead of exec, so the behavior is
# consistent when the profile is already running and when it's just
# starting up.
$FOX -profile ~/.mozilla_profiles/$FOX_PROFILE "$@"
# Huge success.
exit 0
Если вы запускаете скрипт без каких-либо параметров, он автоматически выбирает профиль по умолчанию, но вы можете переопределить его, установив FOX_PROFILE вручную в вашей оболочке. Если в командной строке передается URL-адрес, он всегда запрашивает профиль, в котором его можно открыть, потому что я в основном кликаю из своей программы чата и электронной почты и в этом случае я всегда хочу выбрать профиль (Google для календаря спам, фейсбук на день рождения спам и тд). Конечно, вы можете изменить логику в соответствии со своим стилем использования, это всего лишь пример, важным знанием является трюк с LOGNAME.
И, конечно же, вы должны убедиться, что этот скрипт-обертка - единственный способ запустить браузер на вашем компьютере. Потому что, если вы откроете профиль без правильного имени LOGNAME, вы больше не сможете общаться с этим профилем. Я поставил этот скрипт первым на моем пути через несколько имен с символьными ссылками, таких как x-www-browser, firefox, sensible-browser, и поместил его также в переменную окружения BROWSER. Как это сделать, зависит от вашего дистрибутива GNU/Linux.