як віддалено відкрити URL-адресу в Firefox у певному профілі?


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# 

Відповіді:


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
експортувати LOGNAME = помилка. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
  • при першому запуску він запускає новий екземпляр і каталог ~ / .mozilla_profiles / facebook повинен існувати,

  • коли запустили другий раз, якщо профіль у фейсбуці вже працює, він правильно підключається до нього,

  • він може правильно відправляти команди на кілька різних запущених профілів (звичайно, ви повинні змінити параметр FOX_PROFILE в першому рядку в різних сценаріях).

Я протестував це з Firefox 26 на Linux, і він працює.

Крім того, ось моє повноцінне рішення, яке ви можете хотіти або не хочете використовувати:

#! / бін / баш

встановити -е

FOX = / opt / firefox / firefox

ПОВІДОМЛЕННЯ = $ @

якщо [-z "$ FOX_PROFILE"]; тоді
  if [-z "$ {MESSAGE}"]; тоді
    FOX_PROFILE = за замовчуванням
  ще
    FOX_PROFILE = $ (kdialog - дефолт за замовчуванням --меню "- $ {MESSAGE} -" за замовчуванням google google facebook facebook facebook сповістити про спам спам)
  фі
фі
експортувати FOX_PROFILE

# Цей злом необхідний, оскільки віддалений командний рядок Firefox надсилається
# ігнорує параметр профілю. Дивіться nsAppRunner.cpp: 1505.
експортувати LOGNAME = помилка. $ FOX_PROFILE

# Використання фонового виконання замість exec, тому поведінка така
# послідовно, коли профіль вже запущений і коли це просто
# запуск.
$ FOX -профіль ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"

# Величезний успіх.
вихід 0

Якщо ви запускаєте скрипт без жодного параметра, він автоматично вибирає профіль за замовчуванням, але ви можете його замінити, встановивши FOX_PROFILE вручну в оболонці. Якщо URL-адреса передається в командному рядку, вона завжди запитує профіль, в якому її відкрити, це тому, що я в основному натискаю через свою програму чату та електронної пошти, і в такому випадку я хочу завжди вибирати профіль (google для календаря спам, фейсбук для спаму на день народження тощо). Звичайно, ви можете змінити логіку відповідно до вашого стилю використання, це лише приклад, важливим знанням є трюк LOGNAME.

І звичайно, ви повинні переконатися, що цей скрипт обгортки - єдиний спосіб запустити браузер на вашій машині. Тому що якщо ви відкриєте профіль без правильного набору LOGNAME, ви більше не зможете спілкуватися з цим профілем. Я поставив цей скрипт як перший на своєму шляху через декілька посилань, пов'язаних між собою, наприклад, x-www-браузер, firefox, sensible-браузер, і також ставлю його до змінної середовища BROWSER. Як саме це зробити, залежить від вашого GNU / Linux дистрибутива.


Дуже дякую за це. Мені здається, що налаштовувати профіль не потрібно, і щоб встановити LOGNAME, достатньо, щоб зробити все правильно.
dset0x

0

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


Але я хочу, щоб він повторно використовував екземпляр! Лише конкретна, а не будь-яка випадкова, яка їй подобається. Якщо я спробував додати в команду "-no-remote", я отримую: "Iceweasel вже запущений, але не відповідає. Щоб відкрити нове вікно, спершу потрібно закрити існуючий процес Iceweasel або перезапустити систему."
miernik

А, це робить його цікавішим. Боюся, я не знаю, як ви могли це зробити. IIUC, -no-remote вимикає "розмову" між екземплярами. Це може бути далеко не цільовим, а загальним перевищенням, але ви можете створити розширення, яке опитує центральну чергу чи серверну URL-адресу сервера та відкриває його, коли воно призначене для поточного профілю. Потім ви встановите це розширення у всіх своїх примірниках.
janmoesen

0

@miemik

"Але я хочу, щоб він повторно використовував екземпляр! Тільки конкретний, а не будь-який випадковий, який він любить. Якщо я спробував додати до своєї команди команду" -no-remote ", я отримую:" Iceweasel вже працює, але не відповідає. Щоб відкрити нове вікно, потрібно спочатку закрити існуючий процес Iceweasel або перезапустити систему. "

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

Рішення:

Станьте root і запустіть верх, щоб побачити, чи працює він як root. Тоді ls -ld на профільному dir (що має бути під ур домашнім dir з періодом (.) Перед ними .. значить, ви повинні використовувати "ls -al", щоб побачити це).

Підтвердьте інший дозвіл цього режисура та внесіть відповідні зміни.

Ура!


Я перевірив дозволи та вставив результат у редагуванні свого запитання. Це не така проблема.
miernik

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 дійсно повинен вміти правильно впоратися з цим профілями.


Ця відповідь не може бути хорошою, оскільки із -no-remoteпрапором запускається новий екземпляр Firefox, і питання вимагає повторного використання існуючих екземплярів Firefox, якщо вони вже запущені.
пт

0

Якщо у вас Mozilla Firefox вже відкритий з профілем за замовчуванням або будь-яким іншим профілем, спробуйте:

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

Тестував і працював для мене з Mozilla Firefox від 2.x до 12.x


Ця відповідь не може бути хорошою, оскільки командний рядок не містить необхідного профілю для використання.
пт

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 (наприклад, із запуску на панелі), тому мені довелося поставити галочку "запустити в термінал", що трохи дратує.


-1

Для запису одне рішення: у KDE ми встановлюємо браузер за замовчуванням для запуску із такою командою:

firefox -P "default"

де "типовим" є наш профіль, який ми хочемо використовувати щоразу.

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

firefox -ProfileManager -no-remote %u

Це відкриває менеджер профілів, ми вибираємо, який профіль використовувати.

Перевірений на декількох профілях, що працюють одночасно, коли ми натискаємо на URL-адресу з будь-якого додатка (наприклад, клієнта чату), потім відкриється нова вкладка у вибраному вами профілі.

Сподіваюся, хтось вважає це корисним :).

Не перевірено на Gnome, але я сподіваюся, що його можна було б повторити.


1
Це не дає відповіді на питання, ОП хоче автоматично запустити Firefox з різними профілями зі сценарію.
тердон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.