9

У меня есть несколько экземпляров Firefox с несколькими разными профилями. Среди них профили с названиями "программное обеспечение" и "тест".

Я пытаюсь открыть URL из скрипта bash, чтобы он открывался в профиле "test", например так:

firefox -P "test" http://www.example.org/

Однако это открывает его в профиле "программное обеспечение" в любом случае. Есть идеи?

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8) Gecko/20100308 Iceweasel/3.5.8 (например, Firefox/3.5.8)

Нет, это не проблема с разрешениями, все каталоги моего профиля находятся в полном разрешении:

root@przehyba:~/.mozilla# ls -ld firefox/
drwx------ 13 miernik miernik 4096 Mar 11 09:15 firefox/
root@przehyba:~/.mozilla# ls -ld firefox/*
drwxr-xr-x  9 miernik miernik 4096 Mar 12 11:29 firefox/info
-rw-r--r--  1 miernik miernik  560 Mar 11 09:15 firefox/profiles.ini
drwxr-xr-x 10 miernik miernik 4096 Mar 16 11:51 firefox/software
drwxr-xr-x  9 miernik miernik 4096 Mar 11 09:14 firefox/tech
drwxr-xr-x 11 miernik miernik 4096 Mar 15 22:48 firefox/test
root@przehyba:~/.mozilla# 

8 ответов8

7

Извините за опоздание на 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.

0

Если у вас уже открыт Mozilla Firefox с профилем по умолчанию или любым другим, попробуйте:

Path-To/firefox -remote openurl("http://www.example.org")

Протестировал и работал для меня с Mozilla Firefox с 2.x до 12.x

0

Это не сработает. Единственный способ запустить 2 экземпляра приложения Mozilla - отключить удаленные подключения ко второму (обычно с MOZ_NO_REMOTE = 1). Это означает, что вы отключаете возможность взаимодействия с другими экземплярами (например, создание, открывающее новую страницу).

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

0

Вы должны иметь возможность добавить -no-remote только к вызову тестового профиля (после того, как профиль программного обеспечения уже открыт) следующим образом:

firefox -P "test" -no-remote http://www.example.org/

Это должно позволить всем другим ссылкам по-прежнему открываться в другом профиле удаленно.

Если это решение не работает, вы всегда можете запустить Firefox как отдельный пользователь для тестирования, используя sudo -u . Firefox действительно должен быть в состоянии справиться с этим правильно с помощью профилей.

0

@miemik

«Но я хочу, чтобы он повторно использовал экземпляр! Только конкретный, а не случайный, который ему нравится. Если я попытался добавить «-no-remote» к моей команде, я получаю: «Iceweasel уже запущен, но не отвечает. Чтобы открыть новое окно, вы должны сначала закрыть существующий процесс Iceweasel или перезапустить систему. "

У вас есть проблема с разрешением вашего профиля dir... проверьте разрешение. Вы скопировали или переместили его из другого места (раздел .. диск ..)?

Решение:

Станьте пользователем root и запустите top, чтобы увидеть, работает ли он как root. Затем ls -ld в профиле dir(который должен находиться под вашим домашним каталогом с точкой (.) Перед ними ... означает, что вы должны использовать "ls -al", чтобы увидеть его).

Проверьте другое разрешение этого dir и измените соответственно.

Ура!

0

При первом запуске экземпляра Firefox с данным профилем используйте команду:

firefox -P foo -new-instance

Вы можете добавить URL в конце команды выше, чтобы открыть его. Позже, когда вы захотите открыть URL в этом экземпляре, вы можете использовать:

firefox -P foo -remote 'openurl(http://www.example.org)'

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

firefox -P foo -remote 'ping()'

Протестировано с Firefox 34 на Linux.

Обратите внимание, что в настоящее время в Firefox есть ошибка, которая выдает ошибку вместе с сообщением

Error: Failed to send command: 500 command not parseable

если команда -remote openurl() сделана без управляющего tty (например, из скрипта, запущенного демоном).

Я столкнулся с этой ошибкой при запуске скрипта из файла .desktop в KDE (например, из панели запуска на панели), поэтому мне пришлось отметить опцию "запустить в терминале", что немного раздражает.

0

Если у вас уже запущен экземпляр, Firefox будет использовать его повторно. Попробуй firefox -no-remote .

-1

Напомним, что одним из решений является то, что в KDE мы устанавливаем браузер по умолчанию для запуска следующей командой:

firefox -P "default"

где "default" - наш профиль, который мы хотим использовать каждый раз.

Теперь мы запускаем наш экземпляр Firefox без аргументов (средство запуска KDE Firefox по умолчанию). Это открывает Firefox нормально, теперь мы хотим открыть другой профиль, для этого мы создаем еще один лаунчер в редакторе меню KDE:

firefox -ProfileManager -no-remote %u

Это открывает менеджер профилей, мы выбираем, какой профиль использовать.

Протестировано на нескольких одновременно работающих профилях, когда мы нажимаем на ссылку в любом приложении (например, в чате), и в выбранном нами профиле открывается новая вкладка.

Надеюсь, кто-то найдет это полезным :).

Не тестировался на Gnome, но я надеюсь, что он может быть воспроизведен.

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