Как открывать внешние ссылки в разных профилях с помощью Firefox?

Как открывать внешние ссылки в разных профилях с помощью Firefox?

У меня два экземпляра Firefox запущены под разными профилями:

$ firefox -P default &
...
$ firefox -no-remote -P second &

Теперь я могу открыть новую вкладку из командной строки с помощью:

$ firefox -new-tab http://unix.stackexchange.com

Но как открыть новую вкладку во втором профиле?

Этот:

$ firefox -P second -new-tab http://unix.stackexchange.com

открывает вкладку в профиле по умолчанию, при этом:

$ firefox -no-remote -P second -new-tab http://unix.stackexchange.com

жалуется, что под этим профилем уже запущен экземпляр.

решение1

Теперь это работает с firefox29.0 на Linux:

Чтобы открыть второй firefoxэкземпляр с другим профилем:

firefox -P second -new-instance

Чтобы открыть новую вкладку во втором экземпляре ОС firefox, который уже запущен:

firefox -P second -remote "openurl(http://example.com,new-tab)"


ВидетьОшибка 716110 — отделение флага -new-instance от существующего флага -no-remoteдля дополнительных подсказок (например: пост Hayo).

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

Это можно сделать с помощью скрипта вроде этого ( firefox-profile-instance):

#!/bin/bash

PROFILE="$1"
URL="$2"

if firefox -P "$PROFILE" -remote "ping()" >/dev/null 2>&1 ; then
    firefox -P "$PROFILE" -remote "openurl($URL,new-tab)"
else
    firefox -P "$PROFILE" -new-instance "$URL" &
fi

Теперь, когда Firefox с профилем по умолчанию уже запущен,
первый запуск этой команды запускает новый браузер с профилем «second»:

firefox-profile-instance second "http://example.com"

и повторный запуск этого же кода открывает вторую вкладку в том же браузере:

firefox-profile-instance second "http://example.com"

решение2

Этот ответ во многом является продолжениемФолькер Зигельответ выше, и я рад, что эти два будут объединены. Я пишу это только для форматирования нового скрипта, учитывая, что Firefox больше не поддерживает -remote.

Новые версии Firefox (протестировано с версией 52) поддерживают -new-instanceопцию для создания нового экземпляра, поддерживающего удаленные вызовы. Последующие вызовы firefox, если задан -Pаргумент, будут выполнять действия в запущенном профиле firefox с указанным именем профиля.

Если вы хотите объединить создание и открытие ссылки в один скрипт, то это можно сделать, pgrepкак показано ниже:

#!/bin/bash
profile=profile-name
if pgrep --full "^firefox-esr\b.*$profile" > /dev/null; then
    firejail --profile=$HOME/.firejail/firefox.jail.profile firefox -P "$profile" "$@" > /dev/null
else
    firejail --profile=$HOME/.firejail/firefox.jail.profile firefox -new-instance -P "$profile" "$@"
    disown $!
fi

(Предупреждение: этот скрипт не тестировался, а является адаптацией того, который я использую)

решение3

На основании ответа от@Att RighЯ разработал следующее решение, которое автоматически выбирает нужный профиль на основе URL.

Этот скрипт-оболочка протестирован на Ubuntu Linux 20.04.6 с Mozilla Firefox 104.0.

#!/bin/bash

if [[ "$@" =~ .*"google."|"facebook.com"|"instagram.com".* ]] 
then
    profile=for_evil_sites
else
    profile=default
fi  

if pgrep --full "firefox\b.*$profile" > /dev/null; then
    /usr/bin/firefox -P "$profile" "$@" > /dev/null
else
    /usr/bin/firefox --new-instance -P "$profile" "$@" > /dev/null
    disown $!
fi

Сохраните скрипт под именем, firefoxнапример, в $HOME/bin/и убедитесь, что он будет загружен вместо вашего стандартного Firefox. (Каталог должен быть до исходного в переменной $PATH.)

Связанный контент